summaryrefslogtreecommitdiff
path: root/macros/plain
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/plain
Initial commit
Diffstat (limited to 'macros/plain')
-rw-r--r--macros/plain/base/README10
l---------macros/plain/base/hyphen.tex1
l---------macros/plain/base/manmac.tex1
l---------macros/plain/base/mftmac.tex1
l---------macros/plain/base/null.tex1
l---------macros/plain/base/plain.tex1
l---------macros/plain/base/story.tex1
l---------macros/plain/base/testfont.tex1
l---------macros/plain/base/webmac.tex1
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSp01.tex1
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSp02.tex1
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSp03.tex1
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSp04.tex1
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSp05.tex1
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSp06.tex1
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSp07.tex1
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSp08.tex1
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSp09.tex1
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSp10.tex1
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSpec.pdfbin0 -> 646412 bytes
-rw-r--r--macros/plain/contrib/TypeSpec/TypeSpec.tex1
l---------macros/plain/contrib/address1
-rw-r--r--macros/plain/contrib/badge/addresses.tex28
-rw-r--r--macros/plain/contrib/badge/badges.ps425
-rw-r--r--macros/plain/contrib/badge/badges.readme64
-rw-r--r--macros/plain/contrib/badge/badges.tex90
-rw-r--r--macros/plain/contrib/blanks/blanks-sample.tex45
-rw-r--r--macros/plain/contrib/blanks/blanks.tex34
-rw-r--r--macros/plain/contrib/bnf/bnf.tex72
-rw-r--r--macros/plain/contrib/bnf/bnfexample.tex106
-rw-r--r--macros/plain/contrib/bridge/README12
-rw-r--r--macros/plain/contrib/bridge/bid.tex58
-rw-r--r--macros/plain/contrib/bridge/dec.tex69
-rw-r--r--macros/plain/contrib/bridge/examples.tex81
-rw-r--r--macros/plain/contrib/bridge/play.tex83
-rw-r--r--macros/plain/contrib/btable/btable.tex128
-rw-r--r--macros/plain/contrib/calendar/a5.sty45
-rw-r--r--macros/plain/contrib/calendar/a6.sty66
-rw-r--r--macros/plain/contrib/calendar/block.sty59
-rw-r--r--macros/plain/contrib/calendar/calend0.tex156
-rw-r--r--macros/plain/contrib/calendar/calend1.tex85
-rw-r--r--macros/plain/contrib/calendar/feasts.tex32
-rw-r--r--macros/plain/contrib/calendar/moon.tex89
-rw-r--r--macros/plain/contrib/calendar/sun.tex15
-rw-r--r--macros/plain/contrib/calendar/wall.sty60
-rw-r--r--macros/plain/contrib/cascover/cascfont.tex26
-rw-r--r--macros/plain/contrib/cascover/cascover.tex59
-rw-r--r--macros/plain/contrib/cascover/ccmanmac.tex60
-rw-r--r--macros/plain/contrib/cascover/examples.pdfbin0 -> 27093 bytes
-rw-r--r--macros/plain/contrib/cascover/examples.tex85
-rw-r--r--macros/plain/contrib/cascover/manual.doc141
-rw-r--r--macros/plain/contrib/cascover/manual.pdfbin0 -> 36014 bytes
-rw-r--r--macros/plain/contrib/cascover/manual.tex153
-rw-r--r--macros/plain/contrib/cascover/normal.cas8
-rw-r--r--macros/plain/contrib/cascover/small.cas8
-rw-r--r--macros/plain/contrib/casslbl/cass-doc.txt64
-rw-r--r--macros/plain/contrib/casslbl/cass.tex53
-rw-r--r--macros/plain/contrib/casslbl/sample1.tex36
-rw-r--r--macros/plain/contrib/casslbl/sample2.tex37
l---------macros/plain/contrib/cellular/README1
-rw-r--r--macros/plain/contrib/cellular/cell1.tex148
-rw-r--r--macros/plain/contrib/cellular/cell2.tex216
-rw-r--r--macros/plain/contrib/cellular/cell3.tex132
-rw-r--r--macros/plain/contrib/cellular/cell4.tex355
-rw-r--r--macros/plain/contrib/cellular/cellular.doc114
-rw-r--r--macros/plain/contrib/cellular/cellular.tex29
l---------macros/plain/contrib/cellular/cellular.txt1
-rw-r--r--macros/plain/contrib/cellular/origin28
-rw-r--r--macros/plain/contrib/chbar/a4-9.doc304
-rw-r--r--macros/plain/contrib/chbar/a4-9.sty324
-rw-r--r--macros/plain/contrib/chbar/a4-marg.chf34
-rw-r--r--macros/plain/contrib/chbar/chbars.doc738
-rw-r--r--macros/plain/contrib/chbar/chbars.tex758
-rw-r--r--macros/plain/contrib/chbar/copying249
-rw-r--r--macros/plain/contrib/chbar/progltx.sty759
-rw-r--r--macros/plain/contrib/chbar/readme116
-rw-r--r--macros/plain/contrib/chbar/test1.tex60
-rw-r--r--macros/plain/contrib/chbar/test2.tex70
-rw-r--r--macros/plain/contrib/crw/README18
-rw-r--r--macros/plain/contrib/crw/crw.tex51
-rw-r--r--macros/plain/contrib/crw/crwdoc.tex283
l---------macros/plain/contrib/doc1
-rw-r--r--macros/plain/contrib/edmac/braonain.dvibin0 -> 4872 bytes
-rw-r--r--macros/plain/contrib/edmac/braonain.ps318
-rw-r--r--macros/plain/contrib/edmac/ed-nfss.txt64
-rw-r--r--macros/plain/contrib/edmac/edmacfss.sty53
-rw-r--r--macros/plain/contrib/edmac/tabmac-example.dvibin0 -> 29956 bytes
-rw-r--r--macros/plain/contrib/edmac/tabmac-example.ps1266
-rw-r--r--macros/plain/contrib/edmac/tabmac.tex641
-rw-r--r--macros/plain/contrib/epsf-dvipdfmx/README51
-rw-r--r--macros/plain/contrib/epsf-dvipdfmx/epsf-dvipdfmx.tex56
-rw-r--r--macros/plain/contrib/epsf-dvipdfmx/testepdpx.eps22
-rw-r--r--macros/plain/contrib/epsf-dvipdfmx/testepdpx.tex13
l---------macros/plain/contrib/figflow/README1
-rw-r--r--macros/plain/contrib/figflow/README.figflow15
-rw-r--r--macros/plain/contrib/figflow/figflow.tex96
-rw-r--r--macros/plain/contrib/font-change/README.txt23
-rw-r--r--macros/plain/contrib/font-change/doc/font-change.pdfbin0 -> 922898 bytes
-rw-r--r--macros/plain/contrib/font-change/doc/font-change.tex2209
-rw-r--r--macros/plain/contrib/font-change/doc/font-change_FRENCH.pdfbin0 -> 1015052 bytes
-rw-r--r--macros/plain/contrib/font-change/doc/font-change_FRENCH.tex2213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/default-amssymbols.tex15
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_antp_euler.tex226
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_antt-condensed-light.tex215
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_antt-condensed-medium.tex215
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_antt-condensed.tex215
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_antt-light.tex215
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_antt-medium.tex215
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_antt.tex215
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_arev.tex185
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_artemisia_euler.tex216
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_bera_concrete.tex214
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_bera_euler.tex206
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_bera_fnc.tex214
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_bookman.tex212
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_century.tex210
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_charter.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_cm.tex199
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_cmbright.tex190
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_concrete.tex166
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_epigrafica_euler.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_epigrafica_palatino.tex226
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_iwona-bold.tex215
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-bold.tex215
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-light.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-medium.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_iwona-condensed.tex215
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_iwona-light.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_iwona-medium.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_iwona.tex215
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_kp-light.tex217
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_kp.tex216
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_kurier-bold.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-bold.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-light.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-medium.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_kurier-condensed.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_kurier-light.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_kurier-medium.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_kurier.tex213
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_libertine_kp.tex239
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_libertine_palatino.tex239
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_libertine_times.tex238
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_mdutopia.tex215
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_pagella.tex216
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_palatino.tex216
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_times.tex216
-rw-r--r--macros/plain/contrib/font-change/tex/macros/font_utopia.tex215
l---------macros/plain/contrib/font_selection/README1
-rw-r--r--macros/plain/contrib/font_selection/fnts.doc227
-rw-r--r--macros/plain/contrib/font_selection/fnts.tex706
-rw-r--r--macros/plain/contrib/fontch/DSmac.tex8
-rw-r--r--macros/plain/contrib/fontch/README360
-rw-r--r--macros/plain/contrib/fontch/TS1mac.tex133
-rw-r--r--macros/plain/contrib/fontch/bsymbols.tex228
-rw-r--r--macros/plain/contrib/fontch/fontch.pdfbin0 -> 92059 bytes
-rw-r--r--macros/plain/contrib/fontch/fontch.tex1215
-rw-r--r--macros/plain/contrib/fontch/fontch_doc.tex577
-rw-r--r--macros/plain/contrib/getoptk/COPYING514
-rw-r--r--macros/plain/contrib/getoptk/COPYING-FR519
-rw-r--r--macros/plain/contrib/getoptk/README10
-rw-r--r--macros/plain/contrib/getoptk/getoptk.tex285
-rw-r--r--macros/plain/contrib/getoptk/guide.pdfbin0 -> 280771 bytes
-rw-r--r--macros/plain/contrib/getoptk/guide.tex192
-rw-r--r--macros/plain/contrib/gfnotation/COPYING674
-rw-r--r--macros/plain/contrib/gfnotation/GFnotation-doc.pdfbin0 -> 167160 bytes
-rw-r--r--macros/plain/contrib/gfnotation/GFnotation-doc.tex1186
-rw-r--r--macros/plain/contrib/gfnotation/GFnotation.tex2175
-rw-r--r--macros/plain/contrib/gfnotation/README33
-rw-r--r--macros/plain/contrib/hanoi/hanoi.tex43
-rw-r--r--macros/plain/contrib/happy4th/happy4th.pdfbin0 -> 88950 bytes
-rw-r--r--macros/plain/contrib/happy4th/happy4th.tex35
-rw-r--r--macros/plain/contrib/harvmac/README17
-rw-r--r--macros/plain/contrib/harvmac/harvmac.tex339
-rw-r--r--macros/plain/contrib/harvmac/harvsamp.tex288
-rw-r--r--macros/plain/contrib/histyle/histyle.tex381
-rw-r--r--macros/plain/contrib/histyle/hstest.tex137
-rw-r--r--macros/plain/contrib/hyplain/README11
-rw-r--r--macros/plain/contrib/hyplain/hydoc.pdfbin0 -> 51088 bytes
-rw-r--r--macros/plain/contrib/hyplain/hydoc.tex191
-rw-r--r--macros/plain/contrib/hyplain/hylang.tex57
-rw-r--r--macros/plain/contrib/hyplain/hypdfplain.ini9
-rw-r--r--macros/plain/contrib/hyplain/hyplain.tex39
-rw-r--r--macros/plain/contrib/hyplain/hyrules.tex112
-rw-r--r--macros/plain/contrib/jns/index59
-rw-r--r--macros/plain/contrib/jns/jns.amm540
-rw-r--r--macros/plain/contrib/jns/jns.cmm556
-rw-r--r--macros/plain/contrib/jns/jns.dem331
-rw-r--r--macros/plain/contrib/jns/jns.doc1188
-rw-r--r--macros/plain/contrib/jns/jns.sty801
-rw-r--r--macros/plain/contrib/jns/jnsl.dem354
-rw-r--r--macros/plain/contrib/jns/jnsl.doc1162
-rw-r--r--macros/plain/contrib/jns/jnsldoc.sty39
-rw-r--r--macros/plain/contrib/js-misc/History25
-rw-r--r--macros/plain/contrib/js-misc/INSTALL65
-rw-r--r--macros/plain/contrib/js-misc/Imakefile96
-rw-r--r--macros/plain/contrib/js-misc/License339
-rw-r--r--macros/plain/contrib/js-misc/Makefile288
-rw-r--r--macros/plain/contrib/js-misc/README45
-rw-r--r--macros/plain/contrib/js-misc/TODO2
-rw-r--r--macros/plain/contrib/js-misc/cassette.tex166
-rw-r--r--macros/plain/contrib/js-misc/deutsch.doc329
-rw-r--r--macros/plain/contrib/js-misc/deutsch.dvibin0 -> 11368 bytes
-rw-r--r--macros/plain/contrib/js-misc/deutsch.tex350
-rw-r--r--macros/plain/contrib/js-misc/idverb.doc194
-rw-r--r--macros/plain/contrib/js-misc/idverb.dvibin0 -> 6368 bytes
-rw-r--r--macros/plain/contrib/js-misc/idverb.tex215
-rw-r--r--macros/plain/contrib/js-misc/js-misc.dvibin0 -> 7212 bytes
-rw-r--r--macros/plain/contrib/js-misc/js-misc.tex244
-rw-r--r--macros/plain/contrib/js-misc/names.sty95
-rw-r--r--macros/plain/contrib/js-misc/schild.tex84
-rw-r--r--macros/plain/contrib/js-misc/sperr.tex116
-rw-r--r--macros/plain/contrib/js-misc/xfig.tex626
-rw-r--r--macros/plain/contrib/js-misc/xfig/text-2.1-doc.tex27
-rw-r--r--macros/plain/contrib/js-misc/xfig/text-2.1.fig3
-rw-r--r--macros/plain/contrib/js-misc/xfig/text-2.1.latex26
-rw-r--r--macros/plain/contrib/js-misc/xfig/text-3.1-doc.tex27
-rw-r--r--macros/plain/contrib/js-misc/xfig/text-3.1.latex11
l---------macros/plain/contrib/lambda1
-rw-r--r--macros/plain/contrib/letter1/README15
-rw-r--r--macros/plain/contrib/letter1/eebot.tex4
-rw-r--r--macros/plain/contrib/letter1/eetop.tex23
-rw-r--r--macros/plain/contrib/letter1/letter1.tex54
-rw-r--r--macros/plain/contrib/lextex/example1.tex215
-rw-r--r--macros/plain/contrib/lextex/lextex.tex4273
-rw-r--r--macros/plain/contrib/lextex/ltman.tex1656
-rw-r--r--macros/plain/contrib/lextex/read.me103
-rw-r--r--macros/plain/contrib/lextex/rhlocal.tex31
-rw-r--r--macros/plain/contrib/lextex/ruled.tex62
-rw-r--r--macros/plain/contrib/lextex/solicit.tex112
-rw-r--r--macros/plain/contrib/lextex/txs.doc569
-rw-r--r--macros/plain/contrib/lextex/txsruled.tex409
-rw-r--r--macros/plain/contrib/literate/makeprog.web1055
-rw-r--r--macros/plain/contrib/literate/origin41
-rw-r--r--macros/plain/contrib/literate/progdoc.doc496
-rw-r--r--macros/plain/contrib/literate/progdoc.tex197
-rw-r--r--macros/plain/contrib/literate/progdocu.pdf1022
-rw-r--r--macros/plain/contrib/literate/progdocu.tex280
-rw-r--r--macros/plain/contrib/make-env/make-env.tex117
-rw-r--r--macros/plain/contrib/make-env/test.adr10
-rw-r--r--macros/plain/contrib/mathtime/mathtime.tex978
-rw-r--r--macros/plain/contrib/mathtime/mttim10.tex36
-rw-r--r--macros/plain/contrib/metatex/README92
-rw-r--r--macros/plain/contrib/metatex/gpl.txt340
-rw-r--r--macros/plain/contrib/metatex/metatex.tex205
-rw-r--r--macros/plain/contrib/metatex/mtmp2pdf.tex369
-rw-r--r--macros/plain/contrib/metatex/mtpaper.pdfbin0 -> 133791 bytes
-rw-r--r--macros/plain/contrib/metatex/mtpaper/delay.mf301
-rw-r--r--macros/plain/contrib/metatex/mtpaper/diagram.tex83
-rw-r--r--macros/plain/contrib/metatex/mtpaper/frame.tex23
-rw-r--r--macros/plain/contrib/metatex/mtpaper/mtpaper.tex654
-rw-r--r--macros/plain/contrib/metatex/mtpaper/shadow.tex85
-rw-r--r--macros/plain/contrib/misc/2columns.mac35
-rw-r--r--macros/plain/contrib/misc/2side.tex43
-rw-r--r--macros/plain/contrib/misc/alexmisc.tex27
-rw-r--r--macros/plain/contrib/misc/appelt-chess.tex243
-rw-r--r--macros/plain/contrib/misc/automagic.tex105
-rw-r--r--macros/plain/contrib/misc/autotoc.tex53
-rw-r--r--macros/plain/contrib/misc/bellmac.tex235
-rw-r--r--macros/plain/contrib/misc/bfsymb.tex32
-rw-r--r--macros/plain/contrib/misc/bibplain.tex49
-rw-r--r--macros/plain/contrib/misc/border.tex96
-rw-r--r--macros/plain/contrib/misc/boxit.tex13
-rw-r--r--macros/plain/contrib/misc/btable.sty134
-rw-r--r--macros/plain/contrib/misc/capparmode.tex33
-rw-r--r--macros/plain/contrib/misc/cassette.tex200
-rw-r--r--macros/plain/contrib/misc/comment.tex42
-rw-r--r--macros/plain/contrib/misc/cropmrks.tex352
-rw-r--r--macros/plain/contrib/misc/declare.tex32
-rw-r--r--macros/plain/contrib/misc/defstring.tex34
-rw-r--r--macros/plain/contrib/misc/dmhgener.tex216
-rw-r--r--macros/plain/contrib/misc/doublecol.tex57
l---------macros/plain/contrib/misc/epsf.tex1
-rw-r--r--macros/plain/contrib/misc/figplace.tex197
-rw-r--r--macros/plain/contrib/misc/fixpdfmag.tex36
-rw-r--r--macros/plain/contrib/misc/fnote.tex20
-rw-r--r--macros/plain/contrib/misc/fnpara.tex116
-rw-r--r--macros/plain/contrib/misc/fontbl.tex173
-rw-r--r--macros/plain/contrib/misc/fontchart.tex108
-rw-r--r--macros/plain/contrib/misc/fortran.tex42
-rw-r--r--macros/plain/contrib/misc/gkpmac.tex859
-rw-r--r--macros/plain/contrib/misc/headlinerule.tex8
-rw-r--r--macros/plain/contrib/misc/label.tex137
l---------macros/plain/contrib/misc/labeldefs.tex1
-rw-r--r--macros/plain/contrib/misc/labelmac3.tex59
-rw-r--r--macros/plain/contrib/misc/letter.tex119
-rw-r--r--macros/plain/contrib/misc/lettermac.tex111
-rw-r--r--macros/plain/contrib/misc/list.tex47
-rw-r--r--macros/plain/contrib/misc/listing.mac63
-rw-r--r--macros/plain/contrib/misc/listmac.tex157
-rw-r--r--macros/plain/contrib/misc/llist.tex67
-rw-r--r--macros/plain/contrib/misc/longtocline.tex26
-rw-r--r--macros/plain/contrib/misc/lwebmac.tex135
-rw-r--r--macros/plain/contrib/misc/maybeload.tex13
-rw-r--r--macros/plain/contrib/misc/memo.tex40
-rw-r--r--macros/plain/contrib/misc/mhack.tex102
-rw-r--r--macros/plain/contrib/misc/model.tex98
-rw-r--r--macros/plain/contrib/misc/mrecog.tex365
-rw-r--r--macros/plain/contrib/misc/mssymb.tex279
-rw-r--r--macros/plain/contrib/misc/multihead.tex11
-rw-r--r--macros/plain/contrib/misc/newinsert.tex140
-rw-r--r--macros/plain/contrib/misc/nofill.tex53
l---------macros/plain/contrib/misc/oubraces.sty1
-rw-r--r--macros/plain/contrib/misc/outline.sty79
-rw-r--r--macros/plain/contrib/misc/paragraphs.tex91
-rw-r--r--macros/plain/contrib/misc/phoncard.tex342
-rw-r--r--macros/plain/contrib/misc/pi.tex385
-rw-r--r--macros/plain/contrib/misc/placeins.tex137
-rw-r--r--macros/plain/contrib/misc/plain-cm.tex371
-rw-r--r--macros/plain/contrib/misc/plotting.tex369
-rw-r--r--macros/plain/contrib/misc/rcs.tex47
-rw-r--r--macros/plain/contrib/misc/redefine.tex83
-rw-r--r--macros/plain/contrib/misc/reference.tex166
-rw-r--r--macros/plain/contrib/misc/resume.tex352
-rw-r--r--macros/plain/contrib/misc/rightfig.mac103
-rw-r--r--macros/plain/contrib/misc/rotate.tex43
-rw-r--r--macros/plain/contrib/misc/scmac.tex137
-rw-r--r--macros/plain/contrib/misc/scmac202.tex205
-rw-r--r--macros/plain/contrib/misc/scorecard.tex173
l---------macros/plain/contrib/misc/selectp.tex1
-rw-r--r--macros/plain/contrib/misc/setstrut.tex58
-rw-r--r--macros/plain/contrib/misc/settosize.tex103
-rw-r--r--macros/plain/contrib/misc/split.tex48
-rw-r--r--macros/plain/contrib/misc/tabledoc.tex678
-rw-r--r--macros/plain/contrib/misc/tables.tex316
-rw-r--r--macros/plain/contrib/misc/tb0tree.tex423
l---------macros/plain/contrib/misc/texinfo.tex1
-rw-r--r--macros/plain/contrib/misc/texpictex.tex244
-rw-r--r--macros/plain/contrib/misc/thirteen.tex202
-rw-r--r--macros/plain/contrib/misc/threecol.tex47
-rw-r--r--macros/plain/contrib/misc/toc.mac37
-rw-r--r--macros/plain/contrib/misc/toc.tex59
l---------macros/plain/contrib/misc/ulem.sty1
-rw-r--r--macros/plain/contrib/misc/unouter.tex36
-rw-r--r--macros/plain/contrib/misc/varindent.tex60
-rw-r--r--macros/plain/contrib/misc/verbatim.mac56
-rw-r--r--macros/plain/contrib/misc/verbatim.tex44
-rw-r--r--macros/plain/contrib/misc/verbtim2.tex36
-rw-r--r--macros/plain/contrib/misc/web9pt.tex5
-rw-r--r--macros/plain/contrib/misc/webmacss.tex15
-rw-r--r--macros/plain/contrib/misc/weirdtitle.tex11
-rw-r--r--macros/plain/contrib/misc/wochtag.tex54
l---------macros/plain/contrib/misc/xii.tex1
-rw-r--r--macros/plain/contrib/mnras/README15
-rw-r--r--macros/plain/contrib/mnras/fonttest.tex169
-rw-r--r--macros/plain/contrib/mnras/mn.tex3086
-rw-r--r--macros/plain/contrib/mnras/mnguide.tex1998
-rw-r--r--macros/plain/contrib/mnras/mnland.tex82
-rw-r--r--macros/plain/contrib/mnras/mnsample.tex705
-rw-r--r--macros/plain/contrib/mtbe/bookform.tex176
-rw-r--r--macros/plain/contrib/mtbe/eightpt.tex48
-rw-r--r--macros/plain/contrib/mtbe/eulconc.tex391
-rw-r--r--macros/plain/contrib/mtbe/outform.tex149
-rw-r--r--macros/plain/contrib/mtbe/readme.txt19
-rw-r--r--macros/plain/contrib/mtbe/stdpage.tex259
-rw-r--r--macros/plain/contrib/mtbe/utility.tex89
l---------macros/plain/contrib/newsletr/README1
-rw-r--r--macros/plain/contrib/newsletr/italic.tex37
-rw-r--r--macros/plain/contrib/newsletr/lodriver.tex56
-rw-r--r--macros/plain/contrib/newsletr/losample.tex379
-rw-r--r--macros/plain/contrib/newsletr/newsletr.tex1465
-rw-r--r--macros/plain/contrib/newsletr/newsletr.txt133
-rw-r--r--macros/plain/contrib/newsletr/newssamp.dvibin0 -> 12288 bytes
-rw-r--r--macros/plain/contrib/newsletr/newssamp.pdfbin0 -> 55591 bytes
-rw-r--r--macros/plain/contrib/newsletr/newssamp.tex266
-rw-r--r--macros/plain/contrib/newsletr/quote.tex118
-rw-r--r--macros/plain/contrib/newsletr/read.me85
-rw-r--r--macros/plain/contrib/newsletr/sample.dvibin0 -> 17920 bytes
-rw-r--r--macros/plain/contrib/newsletr/sample.pdfbin0 -> 95640 bytes
-rw-r--r--macros/plain/contrib/pdcmac/00readme.txt21
l---------macros/plain/contrib/pdcmac/README1
-rw-r--r--macros/plain/contrib/pdcmac/changes.txt239
-rw-r--r--macros/plain/contrib/pdcmac/configure302
-rw-r--r--macros/plain/contrib/pdcmac/contents.txt40
-rw-r--r--macros/plain/contrib/pdcmac/copying.tex373
-rw-r--r--macros/plain/contrib/pdcmac/copying.txt358
-rw-r--r--macros/plain/contrib/pdcmac/dtxtags67
-rw-r--r--macros/plain/contrib/pdcmac/dtxtags.1207
-rw-r--r--macros/plain/contrib/pdcmac/fig2epsf36
-rw-r--r--macros/plain/contrib/pdcmac/fig2epsf.146
-rw-r--r--macros/plain/contrib/pdcmac/install.txt91
-rw-r--r--macros/plain/contrib/pdcmac/maamac.dtx627
-rw-r--r--macros/plain/contrib/pdcmac/magrmac.dtx231
-rw-r--r--macros/plain/contrib/pdcmac/magrman.tex604
-rw-r--r--macros/plain/contrib/pdcmac/makefile.in160
-rw-r--r--macros/plain/contrib/pdcmac/news.txt14
-rw-r--r--macros/plain/contrib/pdcmac/oput01.eps423
-rw-r--r--macros/plain/contrib/pdcmac/oput01.fig323
-rw-r--r--macros/plain/contrib/pdcmac/oput02.eps404
-rw-r--r--macros/plain/contrib/pdcmac/oput02.fig273
-rw-r--r--macros/plain/contrib/pdcmac/pdcadobe.dtx609
-rw-r--r--macros/plain/contrib/pdcmac/pdccode.dtx881
-rw-r--r--macros/plain/contrib/pdcmac/pdccode.tex263
-rw-r--r--macros/plain/contrib/pdcmac/pdccode2.tex292
-rw-r--r--macros/plain/contrib/pdcmac/pdcfmt2.dtx1194
-rw-r--r--macros/plain/contrib/pdcmac/pdcfsel.dtx607
-rw-r--r--macros/plain/contrib/pdcmac/pdcfsel.pdfbin0 -> 84169 bytes
-rw-r--r--macros/plain/contrib/pdcmac/pdcguide.pdfbin0 -> 163536 bytes
-rw-r--r--macros/plain/contrib/pdcmac/pdcguide.tex942
-rw-r--r--macros/plain/contrib/pdcmac/pdcl1maa.dtx248
-rw-r--r--macros/plain/contrib/pdcmac/pdcmacvn.tex1
-rw-r--r--macros/plain/contrib/pdcmac/pdcmisc.dtx555
-rw-r--r--macros/plain/contrib/pdcmac/pdcmondo.tex189
-rw-r--r--macros/plain/contrib/pdcmac/pdcoput5.dtx986
-rw-r--r--macros/plain/contrib/pdcmac/pdcsty.dtx1153
-rw-r--r--macros/plain/contrib/pdcmac/pinstall86
-rw-r--r--macros/plain/contrib/pdcmac/pinstall.1108
-rw-r--r--macros/plain/contrib/pdcmac/pmkdir67
-rw-r--r--macros/plain/contrib/pdcmac/pmkdir.181
-rw-r--r--macros/plain/contrib/pdcmac/version.txt19
-rw-r--r--macros/plain/contrib/pitex/README38
-rw-r--r--macros/plain/contrib/pitex/base.ptxlua85
-rw-r--r--macros/plain/contrib/pitex/blocks.ptx40
-rw-r--r--macros/plain/contrib/pitex/files.ptx39
-rw-r--r--macros/plain/contrib/pitex/fonts.ptx308
-rw-r--r--macros/plain/contrib/pitex/fonts.ptxlua1211
-rw-r--r--macros/plain/contrib/pitex/foundry-settings.lua19
-rw-r--r--macros/plain/contrib/pitex/i-pitex.lua163
-rw-r--r--macros/plain/contrib/pitex/inserts.ptx113
-rw-r--r--macros/plain/contrib/pitex/lua.ptx26
-rw-r--r--macros/plain/contrib/pitex/output.ptx311
-rw-r--r--macros/plain/contrib/pitex/pitex-doc.pdfbin0 -> 96941 bytes
-rw-r--r--macros/plain/contrib/pitex/pitex-doc.tex106
-rw-r--r--macros/plain/contrib/pitex/pitex-doc.txt1057
-rw-r--r--macros/plain/contrib/pitex/pitex.tex236
-rw-r--r--macros/plain/contrib/pitex/references.ptx107
-rw-r--r--macros/plain/contrib/pitex/sections.ptx332
-rw-r--r--macros/plain/contrib/pitex/verbatim.ptx128
-rw-r--r--macros/plain/contrib/plipsum/README76
-rwxr-xr-xmacros/plain/contrib/plipsum/compile.sh64
-rw-r--r--macros/plain/contrib/plipsum/plipsum-doc.pdfbin0 -> 230007 bytes
-rw-r--r--macros/plain/contrib/plipsum/plipsum.nw1067
-rw-r--r--macros/plain/contrib/plipsum/plipsum.tex416
-rw-r--r--macros/plain/contrib/plipsum/pliptest.tex32
-rwxr-xr-xmacros/plain/contrib/plipsum/stripc13
-rw-r--r--macros/plain/contrib/plstmary/README50
-rw-r--r--macros/plain/contrib/plstmary/plstmary-doc.pdfbin0 -> 147866 bytes
-rw-r--r--macros/plain/contrib/plstmary/plstmary-doc.tex463
-rw-r--r--macros/plain/contrib/plstmary/stmary.tex260
-rw-r--r--macros/plain/contrib/prepr/prepr.tex130
-rw-r--r--macros/plain/contrib/prepr/preprint.pdfbin0 -> 80750 bytes
-rw-r--r--macros/plain/contrib/prepr/preprint.tex280
-rw-r--r--macros/plain/contrib/present/HowToTalkTeX.lp1
-rw-r--r--macros/plain/contrib/present/HowToTalkTeX.pdfbin0 -> 1347999 bytes
-rw-r--r--macros/plain/contrib/present/HowToTalkTeX.tex482
-rw-r--r--macros/plain/contrib/present/Pfeil1.pdfbin0 -> 686 bytes
-rw-r--r--macros/plain/contrib/present/Pfeil2.pdfbin0 -> 686 bytes
-rw-r--r--macros/plain/contrib/present/Pfeil3.pdfbin0 -> 738 bytes
-rw-r--r--macros/plain/contrib/present/Pfeil4.pdfbin0 -> 736 bytes
-rw-r--r--macros/plain/contrib/present/README69
-rw-r--r--macros/plain/contrib/present/Sagnac.pdfbin0 -> 5180 bytes
-rw-r--r--macros/plain/contrib/present/Stern.pngbin0 -> 81822 bytes
-rw-r--r--macros/plain/contrib/present/background.pngbin0 -> 201894 bytes
-rw-r--r--macros/plain/contrib/present/present-transitions.tex53
-rw-r--r--macros/plain/contrib/present/present.tex297
-rw-r--r--macros/plain/contrib/resumemac/README3
-rw-r--r--macros/plain/contrib/resumemac/resumemac.tex270
-rw-r--r--macros/plain/contrib/resumemac/sample_resume.tex56
-rw-r--r--macros/plain/contrib/reverxii/README20
-rw-r--r--macros/plain/contrib/reverxii/reverxii.pdfbin0 -> 200023 bytes
-rw-r--r--macros/plain/contrib/reverxii/reverxii.tex383
l---------macros/plain/contrib/ruled-tables/README1
-rw-r--r--macros/plain/contrib/ruled-tables/readme.ruled-tables10
-rw-r--r--macros/plain/contrib/ruled-tables/ruled.tex374
-rw-r--r--macros/plain/contrib/ruled-tables/ruleddoc.tex470
-rw-r--r--macros/plain/contrib/samples/000readme.txt19
l---------macros/plain/contrib/samples/README1
-rw-r--r--macros/plain/contrib/samples/address1.tex4
-rw-r--r--macros/plain/contrib/samples/alexmisc.tex27
-rw-r--r--macros/plain/contrib/samples/amstest.tex139
-rw-r--r--macros/plain/contrib/samples/apjstyle.tex249
-rw-r--r--macros/plain/contrib/samples/artic.tex128
-rw-r--r--macros/plain/contrib/samples/artic0.tex128
-rw-r--r--macros/plain/contrib/samples/autoletter.tex304
-rw-r--r--macros/plain/contrib/samples/automacro.tex104
-rw-r--r--macros/plain/contrib/samples/bobmacro.tex359
-rw-r--r--macros/plain/contrib/samples/boxit.tex13
-rw-r--r--macros/plain/contrib/samples/docautomacro.tex330
-rw-r--r--macros/plain/contrib/samples/double.tex687
-rw-r--r--macros/plain/contrib/samples/duefig.tex34
-rw-r--r--macros/plain/contrib/samples/edtpad.tex48
-rw-r--r--macros/plain/contrib/samples/extradefs.tex58
-rw-r--r--macros/plain/contrib/samples/firstline.tex73
-rw-r--r--macros/plain/contrib/samples/font.tex54
-rw-r--r--macros/plain/contrib/samples/form.tex49
-rw-r--r--macros/plain/contrib/samples/formatlett.tex53
-rw-r--r--macros/plain/contrib/samples/getdon.tex12
-rw-r--r--macros/plain/contrib/samples/grafix.tex21
-rw-r--r--macros/plain/contrib/samples/hptex.tex835
-rw-r--r--macros/plain/contrib/samples/hyphen.tex4466
-rw-r--r--macros/plain/contrib/samples/immig.tex339
-rw-r--r--macros/plain/contrib/samples/ithyphen.tex59
-rw-r--r--macros/plain/contrib/samples/letter.tex91
-rw-r--r--macros/plain/contrib/samples/mac.tex10
-rw-r--r--macros/plain/contrib/samples/manmac.tex670
-rw-r--r--macros/plain/contrib/samples/math.tex37
-rw-r--r--macros/plain/contrib/samples/mclean.tex50
-rw-r--r--macros/plain/contrib/samples/memo.tex40
-rw-r--r--macros/plain/contrib/samples/politic.tex511
-rw-r--r--macros/plain/contrib/samples/poster.tex34
-rw-r--r--macros/plain/contrib/samples/quicktex.tex101
-rw-r--r--macros/plain/contrib/samples/referencer.tex166
-rw-r--r--macros/plain/contrib/samples/reidel.tex53
-rw-r--r--macros/plain/contrib/samples/sample.tex48
-rw-r--r--macros/plain/contrib/samples/shutes.tex54
-rw-r--r--macros/plain/contrib/samples/sizes.tex34
-rw-r--r--macros/plain/contrib/samples/sum.tex54
-rw-r--r--macros/plain/contrib/samples/tables.tex311
-rw-r--r--macros/plain/contrib/samples/tb0cyr.tex578
l---------macros/plain/contrib/samples/tb0hyf.tex1
-rw-r--r--macros/plain/contrib/samples/testfont.tex203
-rw-r--r--macros/plain/contrib/samples/toc.tex37
-rw-r--r--macros/plain/contrib/samples/triple.tex27
-rw-r--r--macros/plain/contrib/samples/verbatim_1.tex56
-rw-r--r--macros/plain/contrib/samples/verbatim_2.tex36
l---------macros/plain/contrib/soul1
-rw-r--r--macros/plain/contrib/stables/stables.tex258
-rw-r--r--macros/plain/contrib/stables/stables_doc.pdfbin0 -> 57156 bytes
-rw-r--r--macros/plain/contrib/stables/stables_doc.tex392
-rw-r--r--macros/plain/contrib/tbe/tbemacros.tex286
-rw-r--r--macros/plain/contrib/tbe/tbesamples.tex548
l---------macros/plain/contrib/tengtex1
-rw-r--r--macros/plain/contrib/timetable/timetable.tex1156
-rw-r--r--macros/plain/contrib/timetable/timetable.tex.sign8
-rw-r--r--macros/plain/contrib/treedef/treedef-annot.tex308
-rw-r--r--macros/plain/contrib/treedef/treedef.tex120
-rw-r--r--macros/plain/contrib/treetex/classes.tex105
-rw-r--r--macros/plain/contrib/treetex/epodd.bbl107
-rw-r--r--macros/plain/contrib/treetex/epodd.tex1189
-rw-r--r--macros/plain/contrib/treetex/l_pic.tex839
-rw-r--r--macros/plain/contrib/treetex/readme19
-rw-r--r--macros/plain/contrib/treetex/tree_doc.bbl97
-rw-r--r--macros/plain/contrib/treetex/tree_doc.tex1331
-rw-r--r--macros/plain/contrib/treetex/treetex.tex1187
-rw-r--r--macros/plain/contrib/tugboat/README11
-rw-r--r--macros/plain/contrib/tugboat/tubguide.pdfbin0 -> 208748 bytes
-rw-r--r--macros/plain/contrib/tugboat/tubguide.tex823
-rw-r--r--macros/plain/contrib/tugboat/tugboat.cmn1128
-rw-r--r--macros/plain/contrib/tugboat/tugboat.sty2308
-rw-r--r--macros/plain/contrib/tugboat/tugproc.sty363
-rw-r--r--macros/plain/contrib/varisize/10point.tex36
-rw-r--r--macros/plain/contrib/varisize/10pointss.tex45
-rw-r--r--macros/plain/contrib/varisize/11point.tex52
-rw-r--r--macros/plain/contrib/varisize/12point.tex52
-rw-r--r--macros/plain/contrib/varisize/14point.tex48
-rw-r--r--macros/plain/contrib/varisize/17point.tex57
-rw-r--r--macros/plain/contrib/varisize/20point.tex52
-rw-r--r--macros/plain/contrib/varisize/7point.tex46
-rw-r--r--macros/plain/contrib/varisize/8point.tex40
-rw-r--r--macros/plain/contrib/varisize/9point.tex44
-rw-r--r--macros/plain/contrib/varisize/README7
-rw-r--r--macros/plain/contrib/vertex/READ.ME24
-rw-r--r--macros/plain/contrib/vertex/aer.sty155
-rw-r--r--macros/plain/contrib/vertex/ecnmet.sty151
-rw-r--r--macros/plain/contrib/vertex/files.lst20
-rw-r--r--macros/plain/contrib/vertex/fntest.tex93
-rw-r--r--macros/plain/contrib/vertex/jep.sty184
-rw-r--r--macros/plain/contrib/vertex/jepcont.tex94
-rw-r--r--macros/plain/contrib/vertex/jet.sty174
-rw-r--r--macros/plain/contrib/vertex/jpe.sty128
-rw-r--r--macros/plain/contrib/vertex/ppt.sty182
-rw-r--r--macros/plain/contrib/vertex/qje.sty158
-rw-r--r--macros/plain/contrib/vertex/restud.sty193
-rw-r--r--macros/plain/contrib/vertex/test.tex122
-rw-r--r--macros/plain/contrib/vertex/twocol.tex74
-rw-r--r--macros/plain/contrib/vertex/users.lst171
-rw-r--r--macros/plain/contrib/vertex/vertest.tex35
-rw-r--r--macros/plain/contrib/vertex/vertex.doc290
-rw-r--r--macros/plain/contrib/vertex/vertex.hst64
-rw-r--r--macros/plain/contrib/vertex/vertex.pdfbin0 -> 94008 bytes
-rw-r--r--macros/plain/contrib/vertex/vertex.tex492
-rw-r--r--macros/plain/contrib/wrtfile/wrtfdist.readme45
-rw-r--r--macros/plain/contrib/wrtfile/wrtfdist.tex606
-rw-r--r--macros/plain/contrib/xii-lat/README.txt19
-rw-r--r--macros/plain/contrib/xii-lat/xii-lat.tex17
-rw-r--r--macros/plain/contrib/xii/README.txt15
-rw-r--r--macros/plain/contrib/xii/xii.tex13
l---------macros/plain/contrib/youngtab1
-rw-r--r--macros/plain/graphics/README.txt107
-rw-r--r--macros/plain/graphics/autopict.sty360
-rw-r--r--macros/plain/graphics/color.tex9
-rw-r--r--macros/plain/graphics/exmplcol.tex6
-rw-r--r--macros/plain/graphics/exmplgrf.tex10
-rw-r--r--macros/plain/graphics/exmplpfg.tex17
-rw-r--r--macros/plain/graphics/exmplpic.tex15
-rw-r--r--macros/plain/graphics/graphicx.tex18
-rw-r--r--macros/plain/graphics/miniltx.tex511
-rw-r--r--macros/plain/graphics/picture.tex51
-rw-r--r--macros/plain/graphics/psfrag.tex49
-rw-r--r--macros/plain/plnfss/README90
-rw-r--r--macros/plain/plnfss/doc/plain/plnfss/LPPL.txt405
-rw-r--r--macros/plain/plnfss/doc/plain/plnfss/plnfss.txt132
-rw-r--r--macros/plain/plnfss/doc/plain/plnfss/test-plnfss.tex40
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/MIKmathf.tex82
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/ams.pfd21
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/il2cm.pfd49
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/il2cmr.pfd34
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/ly1lm.pfd51
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/ot1cm.pfd49
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/ot1cmr.pfd46
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/ot4cm.pfd49
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/plnfss.tex403
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/qxlm.pfd51
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/t1lm.pfd51
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/t5cm.pfd49
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/t5cmr.pfd49
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/t5lm.pfd51
-rw-r--r--macros/plain/plnfss/tex/plain/plnfss/ts1lm.pfd51
l---------macros/plain/pmat1
609 files changed, 132372 insertions, 0 deletions
diff --git a/macros/plain/base/README b/macros/plain/base/README
new file mode 100644
index 0000000000..71c71e57de
--- /dev/null
+++ b/macros/plain/base/README
@@ -0,0 +1,10 @@
+-------------------------------------------------------------------------
+The files in this directory are master files maintained personally by
+Donald E. Knuth. Nobody else is authorized to make any changes whatever
+to them! If you modify the files for any purpose, you must give your
+files a different name, so that installations of TeX throughout the world
+will be 100% compatible when they use the official source files.
+
+Please help preserve the integrity of TeX by reporting any violations of
+these rules to the TeX User Group.
+-------------------------------------------------------------------------
diff --git a/macros/plain/base/hyphen.tex b/macros/plain/base/hyphen.tex
new file mode 120000
index 0000000000..64f38acd1b
--- /dev/null
+++ b/macros/plain/base/hyphen.tex
@@ -0,0 +1 @@
+../../../systems/knuth/dist/lib/hyphen.tex \ No newline at end of file
diff --git a/macros/plain/base/manmac.tex b/macros/plain/base/manmac.tex
new file mode 120000
index 0000000000..68d9933983
--- /dev/null
+++ b/macros/plain/base/manmac.tex
@@ -0,0 +1 @@
+../../../systems/knuth/dist/lib/manmac.tex \ No newline at end of file
diff --git a/macros/plain/base/mftmac.tex b/macros/plain/base/mftmac.tex
new file mode 120000
index 0000000000..a004cea44d
--- /dev/null
+++ b/macros/plain/base/mftmac.tex
@@ -0,0 +1 @@
+../../../systems/knuth/dist/lib/mftmac.tex \ No newline at end of file
diff --git a/macros/plain/base/null.tex b/macros/plain/base/null.tex
new file mode 120000
index 0000000000..58cee783b0
--- /dev/null
+++ b/macros/plain/base/null.tex
@@ -0,0 +1 @@
+../../../systems/knuth/dist/lib/null.tex \ No newline at end of file
diff --git a/macros/plain/base/plain.tex b/macros/plain/base/plain.tex
new file mode 120000
index 0000000000..8eee00eb49
--- /dev/null
+++ b/macros/plain/base/plain.tex
@@ -0,0 +1 @@
+../../../systems/knuth/dist/lib/plain.tex \ No newline at end of file
diff --git a/macros/plain/base/story.tex b/macros/plain/base/story.tex
new file mode 120000
index 0000000000..82bdff3cdc
--- /dev/null
+++ b/macros/plain/base/story.tex
@@ -0,0 +1 @@
+../../../systems/knuth/dist/lib/story.tex \ No newline at end of file
diff --git a/macros/plain/base/testfont.tex b/macros/plain/base/testfont.tex
new file mode 120000
index 0000000000..0014fa0ffb
--- /dev/null
+++ b/macros/plain/base/testfont.tex
@@ -0,0 +1 @@
+../../../systems/knuth/dist/lib/testfont.tex \ No newline at end of file
diff --git a/macros/plain/base/webmac.tex b/macros/plain/base/webmac.tex
new file mode 120000
index 0000000000..84e231dc6f
--- /dev/null
+++ b/macros/plain/base/webmac.tex
@@ -0,0 +1 @@
+../../../systems/knuth/dist/lib/webmac.tex \ No newline at end of file
diff --git a/macros/plain/contrib/TypeSpec/TypeSp01.tex b/macros/plain/contrib/TypeSpec/TypeSp01.tex
new file mode 100644
index 0000000000..c0539262c8
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSp01.tex
@@ -0,0 +1 @@
+%%% Stephen Moye %%% Stephen_Moye@brown.edu %%% Brown University %%% Graphic Services % Much of the math in this example is simple modular arithmetic, % and gets around the fact that \TeX can only do integer math. % % This sort of typesetting project is probably better suited to % TrueType or PostScript typefaces. \newtoks\dspfont %%% Fill in the \TeX name of the font here: \dspfont={ACaslonI} %%% Fill in the name of the typeface as you want it at the top of the page \def\fontname{Adobe Caslon Italic} %%% The following is for notes in the comments at the bottom %%% of the page following the type stats. %%% Just leave it empty if you have nothing to say... \def\comment{Carol Twombly} %\hsize7.5in \hoffset-.5in \parindent0pt \nopagenumbers \voffset-.5in \advance\vsize by 1in \font\text=\the\dspfont\space at 10pt \font\tiny=\the\dspfont\space at 8pt \font\name=\the\dspfont\space at 24pt \newtoks\ntext \newtoks\pantext \newtoks\loremtext % \newbox\testbox % \newdimen\bigger \newdimen\dspsize \newdimen\dspsizeincr \newdimen\habcwd \newdimen\ctextsz \newdimen\leading \newdimen\xheight \newdimen\ascheight \newdimen\kernone \newdimen\kerntwo \newdimen\adjust \adjust0pt \newdimen\dist \newdimen\scratchdim % \newcount\dsplineno \newcount\picawd \newcount\pointwd \newcount\spconv \newcount\measure \newcount\divisor \newcount\scratch \newcount\sscratch \newcount\xascrnum \newcount\intgp \newcount\fracp \newcount\scppt \scppt=65536 \ntext={Typography may be defined as both an art and a craft. It is an art in that what it does, it does for its own sake, according to its own internal sense of what is beautiful and right. It is a craft in that what it does, it does for a purpose outside itself: it provides a means of storing, shaping and conveying information. Typography is, therefore, a selfless art -- a contradiction in terms, perhaps -- and is at its best when it is least perceived to be doing anything, indeed when there is no active awareness of perceiving it, directly, at all, but rather perceiving, through it, the knowledge which animates the type on the page. Quality in typography results from an effortless perfection of conception and execution in the creation of a balance between beauty \& utility: compromising neither, calling attention to neither, yet achieving both.\thinspace\nobreak\leaders\hrule\hfill\null\par} %%% The following pangrams were collected by David Lemon of Adobe Systems, Inc. %%% This is just a small sample from the entire collection. \pantext={Brick quiz whangs jumpy veldt fox. Nymphs vex, beg quick fjord waltz. Quick wafting zephyrs vex bold Jim. West quickly gave Bert handsome prizes for six juicy plums. Freight to me sixty dozen quart jars and twelve black pans. My help squeezed back in again and joined the weavers after six. Turgid saxophones blew over Mick's jazzy quiff. Five wine experts jokingly quizzed sample chablis. My grandfather picks up quartz and valuable onyx jewels. Mix Zapf with Veljovic and get quirky Beziers. All questions asked by five watch experts amazed the judge. Back in June we delivered oxygen equipment of the same size. We have just quoted on nine dozen boxes of grey lamp wicks. A large fawn jumped quickly over white zinc boxes. The exodus of jazzy pigeons is craved by squeamish walkers.\thinspace\nobreak\leaders\hrule\hfill\hbox{}\par} \loremtext={Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh eusi\-mod tincidunt ut laor\-eet dolore magna ali\-quam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit la\-bortis nisl ut ali\-quip exea commodo consequat. Quousque tandem abutere, Catilina, patientia nostra? Quamdiu nos etiam furor iste tuus eludet? quem ad finem sese effrenata jactibit audicia? nihilne te nocturnum pr\ae sidium palatii, nihil urbis vigil\ae . Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh eusi\-mod tincidunt ut laor\-eet dolore magna ali\-quam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit la\-bortis nisl ut ali\-quip exea commodo consequat. Quousque tandem abutere, Catilina, patientia nostra? Quamdiu nos etiam furor iste tuus eludet? quem ad finem sese effrenata jactibit audicia? \thinspace\nobreak\leaders\hrule\hfill\null\par} \def\abc{abcdefghijklmnopqrstuvwxyz} \def\habc{\abc\abc abcdefghijklm} \def\dabc{AGQMstaefgpy1234?!\&} \def\ucabc{ABCDEFGHIJKLMNOPQRSTUVWXYZ} \def\freqabc{\text zjqx% kkvv% bbbbppppyyyywwwwgggg% mmmmmmffffffccccccuuuuuu% lllllllldddddddd% hhhhhhhhhhhhrrrrrrrrrrrrssssssssssss% ooooooooooooooiiiiiiiiiiiiiinnnnnnnnnnnnnn% aaaaaaaaaaaaaaaatttttttttttttttttt% eeeeeeeeeeeeeeeeeeeeeeee}% 204 chars \def\ast{*} \def\per{.} %%% Convert from TeX's bulky 4-decimal point measurements to 1 \def\prettypt#1{\dist=#1 \multiply\dist10 \scratch=\number\dist \divide\scratch\scppt \intgp=\scratch \divide\intgp10 \sscratch=\intgp \multiply\sscratch10 \advance\scratch-\sscratch \fracp=\scratch \hbox{\the\intgp.\the\fracp}pt\ } %%% Converts points to inches. \def\cvptin#1{\dist=#1 \multiply\dist by 10 \scratch=\number\dist \divide\scratch\scppt \multiply\scratch100 \fracp=\scratch \divide\scratch72270 \intgp=\scratch \multiply\scratch72270 \advance\fracp-\scratch \multiply\fracp10 \divide\fracp7227 \hbox{\the\intgp.\ifnum\fracp<10 0\the\fracp \else\the\fracp\fi in}} %%% Type factor = ([Type size] * [# of characters in a sample])/(linear length of sample) %%% Based on {\it Brown's Index}, Bruce Brown, Greenwood Publishing, Great Britain 1983 \def\typefact{% \dist=10pt \spconv=\number\dist \multiply\spconv by 12 \multiply\spconv by 204 \setbox1=\hbox{\text\freqabc}% \divisor=\number\wd1 \divide\divisor by 100 \divide\spconv by \divisor \scratch=\spconv \divide\scratch100 \divisor=\scratch \multiply \scratch100 \advance\spconv-\scratch \hbox{\number\divisor.\ifnum\spconv<10 0\the\spconv \else \the\spconv\fi}} \setbox0=\hbox{\tiny 0} \kernone=.5\wd0 \kerntwo=\wd0 \def\k{\kern-\kernone} \def\kk{\kern-\kerntwo} \def\endline{\hbox to 0pt{\vrule width1pt height\baselineskip% depth.25\baselineskip\hss}} \def\iline{\hbox to 0pt{\vrule width.25pt height\baselineskip\hss}} \def\hline{\hbox to 0pt{\vrule width.25pt height.75\baselineskip\hss}} \def\qline{\hbox to 0pt{\vrule width.25pt height.55\baselineskip\hss}} \def\eline{\hbox to 0pt{\vrule width.25pt height.35\baselineskip\hss}} \def\sline{\hbox to 0pt{\vrule width.25pt height.15\baselineskip\hss}} \def\itick{\hbox to 1in{\iline\hfill}} \def\htick{\hbox to .5in{\hline\hfill}} \def\qtick{\hbox to .25in{\qline\hfill}} \def\etick{\hbox to .125in{\eline\hfill}} \def\stick{\hbox to .0625in{\sline\hfill}} \def\dhtick{\hbox to .5in{\hline\hfill}} \def\dttick{\hbox to .1in{\qline\hfill}} \def\dftick{\hbox to .05in{\eline\hfill}} \def\pctick{\hbox to 1pc{\iline\hss}} \def\hpctick{\hbox to .5pc{\qline\hss}} \def\druler#1 {\hbox to #1{\endline\hfill\endline} \kern-\baselineskip \bigger=#1 \advance\bigger by .5in \hbox to #1{\hrulefill}\kern-\baselineskip \hbox to \bigger{\leaders\itick\hfill}\kern-\baselineskip \hbox to #1{\leaders\dhtick\hfill}\kern-\baselineskip \hbox to #1{\leaders\dttick\hfill}\kern-\baselineskip \hbox to #1{\leaders\dftick\hfill}} \def\pcruler#1 {\hbox to #1{\endline\hfill\endline} \kern-\baselineskip \hbox to #1{\hrulefill}\kern-\baselineskip \hbox to #1{\leaders\pctick\hfill}\kern-\baselineskip \hbox to #1{\leaders\hpctick\hfill}} %%% Calculates the largest display typesize to fit \hsize %%% First typeset it very small (.5pt) then calculate a %%% scale factor to get it to fit to \hsize \font\dsp=\the\dspfont\space at .1pt \setbox0=\hbox{\dsp \dabc}% \dspsize=\hsize \scratch=\dspsize \multiply\scratch10 \divisor=\wd0 \divide\scratch by \divisor \dspsize=\scratch pt \divide\dspsize by 100 %%% Calculates the increment such that smallest display size is 12pt \dspsizeincr=\dspsize \advance\dspsizeincr by -12pt \divide\dspsizeincr by 5 \dsplineno6 \kern-1\baselineskip {\name \fontname\par} \hbox to \hsize{\hrulefill}\kern-.5\baselineskip %%% Display Type \bgroup \loop\font\dsp=\the\dspfont\space at \dspsize \dsp \baselineskip1em \hbox to\hsize{\dabc\hfill\hss\rlap{\tiny\enskip\prettypt{\the\dspsize}}}% \vskip.075in\relax \ifnum\dsplineno>1 \global\advance\dsplineno by-1\relax \advance\dspsize by -\dspsizeincr \font\dsp=\the\dspfont\space at \dspsize\repeat \egroup \setbox0=\hbox{\text x} \xheight=\ht0 %%% Leading calculations \setbox0=\hbox{\text Ilpgy} \ascheight=\ht0 \leading=\ht0 \adjust=\xheight \advance\adjust-.5\leading \advance\leading\dp0 \leading=1.175\leading \ifdim\dp0<.05\ht0 \advance\adjust.5\xheight\fi \advance\leading by \adjust \baselineskip\leading %%% Calculates ratio of x-height to ascender height \dimen0=\the\fontdimen5\text \xascrnum=\dimen0% \divisor=\number\ascheight \multiply\xascrnum by 100\relax \divide\xascrnum by\ascheight %%% Calculates width of 2.5 lc alphabets in picas and points \setbox0=\hbox{\text\habc} \habcwd=\wd0 \def\showhabcwd{% \scratchdim=\habcwd \scratchdim=\scratchdim \scratch=\number\scratchdim \divide\scratch\scppt \sscratch=\scratch \divide\scratch12 \picawd=\scratch \multiply\scratch by 12 \advance\sscratch-\scratch \pointwd=\sscratch \hbox{\the\picawd pc\the\pointwd}} %%% Calculates the largest typesize to fit 70 characters to 4.5in. %%% First typeset it very small (.5pt) then calculate a %%% scale factor to get it to fit to 4.5in. \font\calcfont=\the\dspfont\space at .5pt \setbox0=\hbox{\calcfont \habc}% \dspsize=4.5in \scratch=\dspsize \multiply\scratch10 \divisor=\wd0 \divide\scratch by \divisor \ctextsz=\scratch pt \divide\ctextsz by 20 \vskip.2in \text \vbox{\baselineskip1.2\baselineskip% \druler{6.51in} % {\hsize6in \settabs 6\columns\tiny \+Decimal Inches&\k 1&\k 2&\k 3&\k 4&\k 5&\k 6\cr} % \text 1234567890\$\%\&?(``\thinspace'')\par \habc\par \uppercase\expandafter{\abc}\vskip.5em % \pcruler{38pc} % {\hsize35pc \settabs 7\columns\tiny \+Picas&\k 5&\kk 10&\kk 15&\kk 20&\kk 25&\kk 30&\kk 35\cr}\vfill} \vskip.25in %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% %%% Change the text sample here. %%% The choices are \ntext, \pantext and \loremtext %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \vbox{% \hsize\habcwd \baselineskip\leading \the\ntext} \vfill \hbox to \hsize{\hrulefill} \smallskip \vbox{% \emergencystretch1em\tiny \hsize.8\habcwd \baselineskip.9\leading % \halign to \hsize{#\hfil\tabskip0pt plus 1fill&\hfil#\tabskip0pt\cr Type stats:\cr \noalign{\smallskip\hrule\smallskip} Text sample (10pt) leading&\prettypt{\the\leading}\unskip\cr \noalign{\smallskip\hrule\smallskip} Width of 2.5 lowercase 10pt alphabets&\showhabcwd\ or \cvptin{\the\habcwd}\unskip\cr \noalign{\smallskip\hrule\smallskip} Type size required for a 4.5in measure&\prettypt{\the\ctextsz}\unskip\cr \noalign{\smallskip\hrule\smallskip} Ratio of x-height to ascender height&\hbox{0.\the\xascrnum}\cr \noalign{\smallskip\hrule\smallskip} Typefactor&\typefact\cr \noalign{\smallskip\hrule}} \smallskip \comment}% \eject\end \ No newline at end of file
diff --git a/macros/plain/contrib/TypeSpec/TypeSp02.tex b/macros/plain/contrib/TypeSpec/TypeSp02.tex
new file mode 100644
index 0000000000..b35dfe0c76
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSp02.tex
@@ -0,0 +1 @@
+%%% Stephen Moye %%% Stephen_Moye@brown.edu %%% Brown University %%% Graphic Services % Much of the math in this example is simple modular arithmetic, % and gets around the fact that \TeX can only do integer math. % % This sort of typesetting project is probably better suited to % TrueType or PostScript typefaces. \newtoks\dspfont %%% Fill in the \TeX name of the font here: \dspfont={ACaslon} %%% Fill in the name of the typeface as you want it at the top of the page \def\fontname{Adobe Caslon} %%% The following is for notes in the comments at the bottom %%% of the page following the type stats. %%% Just leave it empty if you have nothing to say... \def\comment{Drawn by Carol Twombly.} %\hsize7.5in \hoffset-.5in \parindent0pt \nopagenumbers \voffset-.5in \advance\vsize by 1in \font\text=\the\dspfont\space at 10pt \font\tiny=\the\dspfont\space at 8pt \font\name=\the\dspfont\space at 24pt \newtoks\ntext \newtoks\pantext \newtoks\loremtext % \newbox\testbox % \newdimen\bigger \newdimen\dspsize \newdimen\dspsizeincr \newdimen\habcwd \newdimen\ctextsz \newdimen\leading \newdimen\xheight \newdimen\ascheight \newdimen\kernone \newdimen\kerntwo \newdimen\adjust \adjust0pt \newdimen\dist \newdimen\scratchdim % \newcount\dsplineno \newcount\picawd \newcount\pointwd \newcount\spconv \newcount\measure \newcount\divisor \newcount\scratch \newcount\sscratch \newcount\xascrnum \newcount\intgp \newcount\fracp \newcount\scppt \scppt=65536 \ntext={Typography may be defined as both an art and a craft. It is an art in that what it does, it does for its own sake, according to its own internal sense of what is beautiful and right. It is a craft in that what it does, it does for a purpose outside itself: it provides a means of storing, shaping and conveying information. Typography is, therefore, a selfless art -- a contradiction in terms, perhaps -- and is at its best when it is least perceived to be doing anything, indeed when there is no active awareness of perceiving it, directly, at all, but rather perceiving, through it, the knowledge which animates the type on the page. Quality in typography results from an effortless perfection of conception and execution in the creation of a balance between beauty \& utility: compromising neither, calling attention to neither, yet achieving both.\thinspace\nobreak\leaders\hrule\hfill\null\par} %%% The following pangrams were collected by David Lemon of Adobe Systems, Inc. %%% This is just a small sample from the entire collection. \pantext={Brick quiz whangs jumpy veldt fox. Nymphs vex, beg quick fjord waltz. Quick wafting zephyrs vex bold Jim. West quickly gave Bert handsome prizes for six juicy plums. Freight to me sixty dozen quart jars and twelve black pans. My help squeezed back in again and joined the weavers after six. Turgid saxophones blew over Mick's jazzy quiff. Five wine experts jokingly quizzed sample chablis. My grandfather picks up quartz and valuable onyx jewels. Mix Zapf with Veljovic and get quirky Beziers. All questions asked by five watch experts amazed the judge. Back in June we delivered oxygen equipment of the same size. We have just quoted on nine dozen boxes of grey lamp wicks. A large fawn jumped quickly over white zinc boxes. The exodus of jazzy pigeons is craved by squeamish walkers.\thinspace\nobreak\leaders\hrule\hfill\hbox{}\par} \loremtext={Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh eusi\-mod tincidunt ut laor\-eet dolore magna ali\-quam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit la\-bortis nisl ut ali\-quip exea commodo consequat. Quousque tandem abutere, Catilina, patientia nostra? Quamdiu nos etiam furor iste tuus eludet? quem ad finem sese effrenata jactibit audicia? nihilne te nocturnum pr\ae sidium palatii, nihil urbis vigil\ae . Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh eusi\-mod tincidunt ut laor\-eet dolore magna ali\-quam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit la\-bortis nisl ut ali\-quip exea commodo consequat. Quousque tandem abutere, Catilina, patientia nostra? Quamdiu nos etiam furor iste tuus eludet? quem ad finem sese effrenata jactibit audicia? nihilne te nocturnum pr\ae sidium palatii, nihil urbis vigil\ae .\thinspace\nobreak\leaders\hrule\hfill\null\par} \def\abc{abcdefghijklmnopqrstuvwxyz} \def\habc{\abc\abc abcdefghijklm} \def\dabc{AGQMstaefgpy1234?!\&} \def\ucabc{ABCDEFGHIJKLMNOPQRSTUVWXYZ} \def\buclcabc{AaBbCcDdEeFfGgHhIiJjKkLlMmNnOo} \def\euclcabc{PpQqRrSsTtUuVvWwXxYyZz?\&} \def\freqabc{\text zjqx% kkvv% bbbbppppyyyywwwwgggg% mmmmmmffffffccccccuuuuuu% lllllllldddddddd% hhhhhhhhhhhhrrrrrrrrrrrrssssssssssss% ooooooooooooooiiiiiiiiiiiiiinnnnnnnnnnnnnn% aaaaaaaaaaaaaaaatttttttttttttttttt% eeeeeeeeeeeeeeeeeeeeeeee}% 204 chars \def\ast{*} \def\per{.} %%% Convert from TeX's bulky 4-decimal point measurements to 1 \def\prettypt#1{\dist=#1 \multiply\dist10 \scratch=\number\dist \divide\scratch\scppt \intgp=\scratch \divide\intgp10 \sscratch=\intgp \multiply\sscratch10 \advance\scratch-\sscratch \fracp=\scratch \hbox{\the\intgp.\the\fracp}pt\ } \def\cvptin#1{\dist=#1 \multiply\dist by 10 \scratch=\number\dist \divide\scratch\scppt \multiply\scratch100 \fracp=\scratch \divide\scratch72270 \intgp=\scratch \multiply\scratch72270 \advance\fracp-\scratch \multiply\fracp10 \divide\fracp7227 \hbox{\the\intgp.\ifnum\fracp<10 0\the\fracp \else\the\fracp\fi in}} %%% Type factor = ([Type size] * [# of characters in a sample])/(linear length of sample) %%% Based on {\it Brown's Index}, Bruce Brown, Greenwood Publishing, Great Britain 1983 \def\typefact{% \dist=10pt \spconv=\number\dist \multiply\spconv by 12 \multiply\spconv by 204 \setbox1=\hbox{\text\freqabc}% \divisor=\number\wd1 \divide\divisor by 100 \divide\spconv by \divisor \scratch=\spconv \divide\scratch100 \divisor=\scratch \multiply \scratch100 \advance\spconv-\scratch \hbox{\number\divisor.\ifnum\spconv<10 0\the\spconv \else \the\spconv\fi}} \setbox0=\hbox{\tiny 0} \kernone=.5\wd0 \kerntwo=\wd0 \def\k{\kern-\kernone} \def\kk{\kern-\kerntwo} \def\endline{\hbox to 0pt{\vrule width1pt height\baselineskip% depth.25\baselineskip\hss}} \def\iline{\hbox to 0pt{\vrule width.25pt height\baselineskip\hss}} \def\hline{\hbox to 0pt{\vrule width.25pt height.75\baselineskip\hss}} \def\qline{\hbox to 0pt{\vrule width.25pt height.55\baselineskip\hss}} \def\eline{\hbox to 0pt{\vrule width.25pt height.35\baselineskip\hss}} \def\sline{\hbox to 0pt{\vrule width.25pt height.15\baselineskip\hss}} \def\itick{\hbox to 1in{\iline\hfill}} \def\htick{\hbox to .5in{\hline\hfill}} \def\qtick{\hbox to .25in{\qline\hfill}} \def\etick{\hbox to .125in{\eline\hfill}} \def\stick{\hbox to .0625in{\sline\hfill}} \def\dhtick{\hbox to .5in{\hline\hfill}} \def\dttick{\hbox to .1in{\qline\hfill}} \def\dftick{\hbox to .05in{\eline\hfill}} \def\pctick{\hbox to 1pc{\iline\hss}} \def\hpctick{\hbox to .5pc{\qline\hss}} \def\druler#1 {\hbox to #1{\endline\hfill\endline} \kern-\baselineskip \bigger=#1 \advance\bigger by .5in \hbox to #1{\hrulefill}\kern-\baselineskip \hbox to \bigger{\leaders\itick\hfill}\kern-\baselineskip \hbox to #1{\leaders\dhtick\hfill}\kern-\baselineskip \hbox to #1{\leaders\dttick\hfill}\kern-\baselineskip \hbox to #1{\leaders\dftick\hfill}} \def\pcruler#1 {\hbox to #1{\endline\hfill\endline} \kern-\baselineskip \hbox to #1{\hrulefill}\kern-\baselineskip \hbox to #1{\leaders\pctick\hfill}\kern-\baselineskip \hbox to #1{\leaders\hpctick\hfill}} %%% Calculates the largest display typesize to fit \hsize %%% First typeset it very small (.5pt) then calculate a %%% scale factor to get it to fit to \hsize \font\dsp=\the\dspfont\space at .1pt \setbox0=\hbox{\dsp \buclcabc}% \dspsize=\hsize \scratch=\dspsize \multiply\scratch10 \divisor=\wd0 \divide\scratch by \divisor \dspsize=\scratch pt \divide\dspsize by 100 %%% Calculates the increment such that smallest display size is 12pt \dspsizeincr=\dspsize \advance\dspsizeincr by -12pt \divide\dspsizeincr by 3 \dsplineno4 \kern-1\baselineskip {\name \fontname\par} \hbox to \hsize{\hrulefill}\kern-.5\baselineskip %%% Display Type \bgroup \loop\font\dsp=\the\dspfont\space at \dspsize \dsp \baselineskip1.1em \hbox to\hsize{\buclcabc\hfill\rlap{{\text\prettypt{\the\dspsize}}}}% \hbox{\euclcabc}\vskip.075in \ifnum\dsplineno>1 \global\advance\dsplineno by-1 \advance\dspsize by -\dspsizeincr \font\dsp=\the\dspfont\space at \dspsize\repeat \egroup \setbox0=\hbox{\text x} \xheight=\ht0 %%% Leading calculations \setbox0=\hbox{\text Ilpgy} \ascheight=\ht0 \leading=\ht0 \adjust=\xheight \advance\adjust-.5\leading \advance\leading\dp0 \leading=1.175\leading \ifdim\dp0<.05\ht0 \advance\adjust.5\xheight\fi \advance\leading by \adjust \baselineskip\leading %%% Calculates ratio of x-height to ascender height \dimen0=\the\fontdimen5\text \xascrnum=\dimen0% \divisor=\number\ascheight \multiply\xascrnum by 100\relax \divide\xascrnum by\ascheight %%% Calculates width of 2.5 lc alphabets in picas and points \setbox0=\hbox{\text\habc} \habcwd=\wd0 \def\showhabcwd{% \scratchdim=\habcwd \scratchdim=\scratchdim \scratch=\number\scratchdim \divide\scratch\scppt \sscratch=\scratch \divide\scratch12 \picawd=\scratch \multiply\scratch by 12 \advance\sscratch-\scratch \pointwd=\sscratch \hbox{\the\picawd pc\the\pointwd}} %%% Calculates the largest typesize to fit 70 characters to 4.5in. %%% First typeset it very small (.5pt) then calculate a %%% scale factor to get it to fit to 4.5in. \font\calcfont=\the\dspfont\space at .5pt \setbox0=\hbox{\calcfont \habc}% \dspsize=4.5in \scratch=\dspsize \multiply\scratch10 \divisor=\wd0 \divide\scratch by \divisor \ctextsz=\scratch pt \divide\ctextsz by 20 \vskip.2in \text \vbox{\baselineskip1.2\baselineskip% \druler{6.51in} % {\hsize6in \settabs 6\columns\tiny \+Decimal Inches&\k 1&\k 2&\k 3&\k 4&\k 5&\k 6\cr} % \text 1234567890\$\%\&?(``\thinspace'')\par \habc\par \uppercase\expandafter{\abc}\vskip.5em % \pcruler{38pc} % {\hsize35pc \settabs 7\columns\tiny \+Picas&\k 5&\kk 10&\kk 15&\kk 20&\kk 25&\kk 30&\kk 35\cr}\vfill} \vskip.25in %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% %%% Change the text sample here. %%% The choices are \ntext, \pantext and \loremtext %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \vbox{% \hsize\habcwd \baselineskip\leading \the\pantext} \vfill \hbox to \hsize{\hrulefill} \smallskip \vbox{% \emergencystretch1em\tiny \hsize.8\habcwd \baselineskip.9\leading % \halign to \hsize{#\hfil\tabskip0pt plus 1fill&\hfil#\tabskip0pt\cr Type stats:\cr \noalign{\smallskip\hrule\smallskip} Text sample (10pt) leading&\prettypt{\the\leading}\unskip\cr \noalign{\smallskip\hrule\smallskip} Width of 2.5 lowercase 10pt alphabets&\showhabcwd\ or \cvptin{\the\habcwd}\unskip\cr \noalign{\smallskip\hrule\smallskip} Type size required for a 4.5in measure&\prettypt{\the\ctextsz}\unskip\cr \noalign{\smallskip\hrule\smallskip} Ratio of x-height to ascender height&\hbox{0.\the\xascrnum}\cr \noalign{\smallskip\hrule\smallskip} Typefactor&\typefact\cr \noalign{\smallskip\hrule}} \smallskip \comment}% \eject\end \ No newline at end of file
diff --git a/macros/plain/contrib/TypeSpec/TypeSp03.tex b/macros/plain/contrib/TypeSpec/TypeSp03.tex
new file mode 100644
index 0000000000..5634c175de
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSp03.tex
@@ -0,0 +1 @@
+%%% Stephen Moye %%% Stephen_Moye@brown.edu %%% Brown University %%% Graphic Services % Much of the math in this example is simple modular arithmetic, % and gets around the fact that \TeX can only do integer math. % % This sort of typesetting project is probably better suited to % TrueType or PostScript typefaces. \newtoks\dspfont %%% Fill in the \TeX name of the font here: \dspfont={cmr12} %%% Fill in the name of the typeface as you want it at the top of the page \def\fontname{Computer Modern 12} %%% The following is for notes in the comments at the bottom %%% of the page following the type stats. %%% Just leave it empty if you have nothing to say... \def\comment{Drawn by Donald Knuth.} %\hsize7.5in \hoffset-.5in \parindent0pt \nopagenumbers \voffset-.5in \advance\vsize by 1in \font\text=\the\dspfont\space at 10pt \font\tiny=\the\dspfont\space at 8pt \font\name=\the\dspfont\space at 24pt \newtoks\ntext \newtoks\pantext \newtoks\loremtext % \newbox\testbox % \newdimen\bigger \newdimen\dspsize \newdimen\dspsizeincr \newdimen\habcwd \newdimen\ctextsz \newdimen\leading \newdimen\xheight \newdimen\ascheight \newdimen\kernone \newdimen\kerntwo \newdimen\adjust \adjust0pt \newdimen\dist \newdimen\scratchdim % \newcount\dsplineno \newcount\picawd \newcount\pointwd \newcount\spconv \newcount\measure \newcount\divisor \newcount\scratch \newcount\sscratch \newcount\xascrnum \newcount\intgp \newcount\fracp \newcount\scppt \scppt=65536 \ntext={Typography may be defined as both an art and a craft. It is an art in that what it does, it does for its own sake, according to its own internal sense of what is beautiful and right. It is a craft in that what it does, it does for a purpose outside itself: it provides a means of storing, shaping and conveying information. Typography is, therefore, a selfless art -- a contradiction in terms, perhaps -- and is at its best when it is least perceived to be doing anything, indeed when there is no active awareness of perceiving it, directly, at all, but rather perceiving, through it, the knowledge which animates the type on the page. Quality in typography results from an effortless perfection of conception and execution in the creation of a balance between beauty \& utility: compromising neither, calling attention to neither, yet achieving both.\thinspace\nobreak\leaders\hrule\hfill\null\par} %%% The following pangrams were collected by David Lemon of Adobe Systems, Inc. %%% This is just a small sample from the entire collection. \pantext={Brick quiz whangs jumpy veldt fox. Nymphs vex, beg quick fjord waltz. Quick wafting zephyrs vex bold Jim. West quickly gave Bert handsome prizes for six juicy plums. Freight to me sixty dozen quart jars and twelve black pans. My help squeezed back in again and joined the weavers after six. Turgid saxophones blew over Mick's jazzy quiff. Five wine experts jokingly quizzed sample chablis. My grandfather picks up quartz and valuable onyx jewels. Mix Zapf with Veljovic and get quirky Beziers. All questions asked by five watch experts amazed the judge. Back in June we delivered oxygen equipment of the same size. We have just quoted on nine dozen boxes of grey lamp wicks. A large fawn jumped quickly over white zinc boxes. The exodus of jazzy pigeons is craved by squeamish walkers.\thinspace\nobreak\leaders\hrule\hfill\hbox{}\par} \loremtext={Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh eusi\-mod tincidunt ut laor\-eet dolore magna ali\-quam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit la\-bortis nisl ut ali\-quip exea commodo consequat. Quousque tandem abutere, Catilina, patientia nostra? Quamdiu nos etiam furor iste tuus eludet? quem ad finem sese effrenata jactibit audicia? nihilne te nocturnum pr\ae sidium palatii, nihil urbis vigil\ae . Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh eusi\-mod tincidunt ut laor\-eet dolore magna ali\-quam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit la\-bortis nisl ut ali\-quip exea commodo consequat. Quousque tandem abutere, Catilina, patientia nostra? Quamdiu nos etiam furor iste tuus eludet? quem ad finem sese effrenata jactibit audicia? nihilne te nocturnum pr\ae sidium palatii, nihil urbis vigil\ae .\thinspace\nobreak\leaders\hrule\hfill\null\par} \def\abc{abcdefghijklmnopqrstuvwxyz} \def\habc{\abc\abc abcdefghijklm} \def\dabc{AGQMstaefgpy1234?!\&} \def\ucabc{ABCDEFGHIJKLMNOPQRSTUVWXYZ\&} \def\freqabc{\text zjqx% kkvv% bbbbppppyyyywwwwgggg% mmmmmmffffffccccccuuuuuu% lllllllldddddddd% hhhhhhhhhhhhrrrrrrrrrrrrssssssssssss% ooooooooooooooiiiiiiiiiiiiiinnnnnnnnnnnnnn% aaaaaaaaaaaaaaaatttttttttttttttttt% eeeeeeeeeeeeeeeeeeeeeeee}% 204 chars \def\ast{*} \def\per{.} %%% Convert from TeX's bulky 4-decimal point measurements to 1 \def\prettypt#1{\dist=#1 \multiply\dist10 \scratch=\number\dist \divide\scratch\scppt \intgp=\scratch \divide\intgp10 \sscratch=\intgp \multiply\sscratch10 \advance\scratch-\sscratch \fracp=\scratch \hbox{\the\intgp.\the\fracp}pt\ } \def\cvptin#1{\dist=#1 \multiply\dist by 10 \scratch=\number\dist \divide\scratch\scppt \multiply\scratch100 \fracp=\scratch \divide\scratch72270 \intgp=\scratch \multiply\scratch72270 \advance\fracp-\scratch \multiply\fracp10 \divide\fracp7227 \hbox{\the\intgp.\ifnum\fracp<10 0\the\fracp \else\the\fracp\fi in}} %%% Type factor = ([Type size] * [# of characters in a sample])/(linear length of sample) %%% Based on {\it Brown's Index}, Bruce Brown, Greenwood Publishing, Great Britain 1983 \def\typefact{% \dist=10pt \spconv=\number\dist \multiply\spconv by 12 \multiply\spconv by 204 \setbox1=\hbox{\text\freqabc}% \divisor=\number\wd1 \divide\divisor by 100 \divide\spconv by \divisor \scratch=\spconv \divide\scratch100 \divisor=\scratch \multiply \scratch100 \advance\spconv-\scratch \hbox{\number\divisor.\ifnum\spconv<10 0\the\spconv \else \the\spconv\fi}} \setbox0=\hbox{\tiny 0} \kernone=.5\wd0 \kerntwo=\wd0 \def\k{\kern-\kernone} \def\kk{\kern-\kerntwo} \def\endline{\hbox to 0pt{\vrule width1pt height\baselineskip% depth.25\baselineskip\hss}} \def\iline{\hbox to 0pt{\vrule width.25pt height\baselineskip\hss}} \def\hline{\hbox to 0pt{\vrule width.25pt height.75\baselineskip\hss}} \def\qline{\hbox to 0pt{\vrule width.25pt height.55\baselineskip\hss}} \def\eline{\hbox to 0pt{\vrule width.25pt height.35\baselineskip\hss}} \def\sline{\hbox to 0pt{\vrule width.25pt height.15\baselineskip\hss}} \def\itick{\hbox to 1in{\iline\hfill}} \def\htick{\hbox to .5in{\hline\hfill}} \def\qtick{\hbox to .25in{\qline\hfill}} \def\etick{\hbox to .125in{\eline\hfill}} \def\stick{\hbox to .0625in{\sline\hfill}} \def\dhtick{\hbox to .5in{\hline\hfill}} \def\dttick{\hbox to .1in{\qline\hfill}} \def\dftick{\hbox to .05in{\eline\hfill}} \def\pctick{\hbox to 1pc{\iline\hss}} \def\hpctick{\hbox to .5pc{\qline\hss}} \def\druler#1 {\hbox to #1{\endline\hfill\endline} \kern-\baselineskip \bigger=#1 \advance\bigger by .5in \hbox to #1{\hrulefill}\kern-\baselineskip \hbox to \bigger{\leaders\itick\hfill}\kern-\baselineskip \hbox to #1{\leaders\dhtick\hfill}\kern-\baselineskip \hbox to #1{\leaders\dttick\hfill}\kern-\baselineskip \hbox to #1{\leaders\dftick\hfill}} \def\pcruler#1 {\hbox to #1{\endline\hfill\endline} \kern-\baselineskip \hbox to #1{\hrulefill}\kern-\baselineskip \hbox to #1{\leaders\pctick\hfill}\kern-\baselineskip \hbox to #1{\leaders\hpctick\hfill}} %%% Calculates the largest display typesize to fit \hsize %%% First typeset it very small (.5pt) then calculate a %%% scale factor to get it to fit to \hsize \font\dsp=\the\dspfont\space at .1pt \setbox0=\hbox{\dsp \ucabc}% \dspsize=\hsize \scratch=\dspsize \multiply\scratch10 \divisor=\wd0 \divide\scratch by \divisor \dspsize=\scratch pt \divide\dspsize by 100 %%% Calculates the increment such that smallest display size is 12pt \dspsizeincr=\dspsize \advance\dspsizeincr by -12pt \divide\dspsizeincr by 3 \dsplineno4 \kern-1\baselineskip {\name \fontname\par} \hbox to \hsize{\hrulefill}\kern-.25\baselineskip %%% Display Type \bgroup \loop\font\dsp=\the\dspfont\space at \dspsize \dsp \baselineskip1em \hbox to\hsize{\ucabc\hfill\rlap{\text\prettypt{\the\dspsize}}} \hbox{\abc}\vskip.075in \ifnum\dsplineno>1 \global\advance\dsplineno by-1 \advance\dspsize by -\dspsizeincr \font\dsp=\the\dspfont\space at \dspsize\repeat \egroup \setbox0=\hbox{\text x} \xheight=\ht0 %%% Leading calculations \setbox0=\hbox{\text Ilpgy} \ascheight=\ht0 \leading=\ht0 \adjust=\xheight \advance\adjust-.5\leading \advance\leading\dp0 \leading=1.175\leading \ifdim\dp0<.05\ht0 \advance\adjust.5\xheight\fi \advance\leading by \adjust \baselineskip\leading %%% Calculates ratio of x-height to ascender height \dimen0=\the\fontdimen5\text \xascrnum=\dimen0% \divisor=\number\ascheight \multiply\xascrnum by 100\relax \divide\xascrnum by\ascheight %%% Calculates width of 2.5 lc alphabets in picas and points \setbox0=\hbox{\text\habc} \habcwd=\wd0 \def\showhabcwd{% \scratchdim=\habcwd \scratchdim=\scratchdim \scratch=\number\scratchdim \divide\scratch\scppt \sscratch=\scratch \divide\scratch12 \picawd=\scratch \multiply\scratch by 12 \advance\sscratch-\scratch \pointwd=\sscratch \hbox{\the\picawd pc\the\pointwd}} %%% Calculates the largest typesize to fit 70 characters to 4.5in. %%% First typeset it very small (.5pt) then calculate a %%% scale factor to get it to fit to 4.5in. \font\calcfont=\the\dspfont\space at .5pt \setbox0=\hbox{\calcfont \habc}% \dspsize=4.5in \scratch=\dspsize \multiply\scratch10 \divisor=\wd0 \divide\scratch by \divisor \ctextsz=\scratch pt \divide\ctextsz by 20 \vskip.2in \text \vbox{\baselineskip1.2\baselineskip% \druler{6.51in} % {\hsize6in \settabs 6\columns\tiny \+Decimal Inches&\k 1&\k 2&\k 3&\k 4&\k 5&\k 6\cr} % \text 1234567890\$\%\&?(``\thinspace'')\par \habc\par \uppercase\expandafter{\abc}\vskip.5em % \pcruler{38pc} % {\hsize35pc \settabs 7\columns\tiny \+Picas&\k 5&\kk 10&\kk 15&\kk 20&\kk 25&\kk 30&\kk 35\cr}\vfill} \vskip.25in %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% %%% Change the text sample here. %%% The choices are \ntext, \pantext and \loremtext %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \vbox{% \hsize\habcwd \baselineskip\leading \the\loremtext} \vfill \hbox to \hsize{\hrulefill} \smallskip \vbox{% \emergencystretch1em\tiny \hsize.8\habcwd \baselineskip.9\leading % \halign to \hsize{#\hfil\tabskip0pt plus 1fill&\hfil#\tabskip0pt\cr Type stats:\cr \noalign{\smallskip\hrule\smallskip} Text sample (10pt) leading&\prettypt{\the\leading}\unskip\cr \noalign{\smallskip\hrule\smallskip} Width of 2.5 lowercase 10pt alphabets&\showhabcwd\ or \cvptin{\the\habcwd}\unskip\cr \noalign{\smallskip\hrule\smallskip} Type size required for a 4.5in measure&\prettypt{\the\ctextsz}\unskip\cr \noalign{\smallskip\hrule\smallskip} Ratio of x-height to ascender height&\hbox{0.\the\xascrnum}\cr \noalign{\smallskip\hrule\smallskip} Typefactor&\typefact\cr \noalign{\smallskip\hrule}} \smallskip \comment}% \eject\end \ No newline at end of file
diff --git a/macros/plain/contrib/TypeSpec/TypeSp04.tex b/macros/plain/contrib/TypeSpec/TypeSp04.tex
new file mode 100644
index 0000000000..2f10f5bba8
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSp04.tex
@@ -0,0 +1 @@
+%%% Stephen Moye %%% Stephen_Moye@brown.edu %%% Brown University %%% Graphic Services %%%%% Registers \newtoks\dspfont \newdimen\dspsize \newdimen\letterboxwd \newcount\scratch \newcount\divisor %%%%% Layout options \parindent0pt \nopagenumbers \vsize10in \voffset-.5in \hsize7.5in \hoffset-.5in %%%%% Macros %%% This is the macro that does all the work. %%% #1 -> TeX's name for the desired font %%% #2 -> The name font name as you want it to print %%% #3 -> The name of the type's designer, or other salient %%% piece of information that lends itself to display %%% #4 -> The size of the type inside the box %%% #5 -> The overall desired width of the box \def\makefontbox#1#2#3#4#5{% \dspfont={#1}% \def\fontname{#2}% \font\test=\the\dspfont\space at #4 \test \baselineskip1.25em \setbox0=\vbox{\halign to #5{% ##\tabskip0pt plus 1fill&\hfil##\hfil&\hfil##\hfil&\hfil##\hfil&\hfil##\hfil& \hfil##\hfil&\hfil##\hfil& \hfil##\hfil&\hfil##\hfil&\hfil##\hfil&\hfil##\hfil&\hfil##\hfil\tabskip0pt\cr \noalign{\red\hrule\black\medskip} %%% Substitute any characters you like to suit your purposes A&B&C&D&E\enskip&1&2&\enskip a&b&c&d&e\cr F&G&H&I&J\enskip&3&4&\enskip f&g&h&i&j\cr K&L&M&N&O\enskip&5&6&\enskip k&l&m&n&o\cr P&Q&R&S&T\enskip&7&8&\enskip p&q&r&s&t\cr U&V&W&X&Y\enskip&9&0&\enskip u&v&w&x&y\cr (&&Z&&)&\&&\char166&[&&z&&]\cr \noalign{\medskip\red\hrule\black}}}% \letterboxwd=\wd0 \vtop{\hsize\letterboxwd \if\empty#2 \else\makefit{#2}\fi% \smallskip \box0% \smallskip \if\empty#3 \else \makefit{#3}\fi}} %%% Fit text to a given size by first setting the text %%% very tiny and then determining a scaling factor. \def\makefit#1{\font\dsp=\the\dspfont\space at .1pt% \setbox1=\hbox{\dsp #1}% \dspsize=\letterboxwd \scratch=\dspsize \multiply\scratch10 \divisor=\wd1 \divide\scratch by \divisor \dspsize=\scratch pt \divide\dspsize by 100 \hbox{\font\dsp=\the\dspfont\space at\dspsize \dsp #1}} %%% For Textures users, and anyone else who can use color %%% via the \special mechanism \def\red{% \special{color push} \special{color define red rgb 1.0 0 0} \special{color red}} \def\blue{% \special{color push} \special{color define blue rgb 0 0 1.0} \special{color blue}} \def\green{% \special{color push} \special{color define green rgb 0 1.0 0} \special{color green}} \def\black{\special{color pop}} %%%%% Example -- this is just a suggestion to get you started. %%% Make the `grid'. This is just for fun. For even more fun, %%% color the rules -- red, blue and green are very printerly. %%% The easy way, as here, is to make your pattern in a \vbox %%% set to \vsize, then all you have to do is \kern-\vsize %%% to start setting type over the grid. \vbox to \vsize{\blue \hrule \vss \noindent\llap{\vrule height\vsize\hskip0pt}% \hskip2in\kern2pt\vrule height\vsize\hskip1pt% \hskip3.5in\kern-6pt\vrule height\vsize\hskip1pt% \hfill\rlap{\hskip0pt\vrule height\vsize} \vss \hrule\black} \kern-\vsize %%% Now do the text bits \line{\hskip1pt\makefontbox{ACaslon}{Adobe Caslon Roman}{ }{11pt}{2in}\hfill \makefontbox{ACaslonI}{Adobe Caslon Italic}{ }{11pt}{2in}\hskip1pt} \vfill \red\hrule\black \bigskip %%% Notice that the narrow measure (3.5in) used for the quotation %%% required some \emergencystretch. \begingroup \font\rm=ACaslon at 10pt \rm \baselineskip1.35em \font\it=ACaslonI at 10pt \moveright 2.1in\vbox{\hsize3.3in \emergencystretch.5em% A lot of mathematics and technical knowledge are involved in our work today. I would not call us artists any more. I think `alphabet designer' is more accurate, and our comrade is no longer the punchcutter but the electronics engineer. If the technician learns that he doesn't have to work with a crazy artist, and the designer learns a little about electronics, they will make an ideal team. It is still teamwork as it was in the good old days of metal type. \bigskip \it Hermann Zapf\par} \bigskip \red\hrule\black \endgroup \vfill\vfill \line{\hskip1pt\makefontbox{ACaslonB}{Adobe Caslon Bold}{ }{11pt}{2in}\hfill \makefontbox{ACaslonBI}{Adobe Caslon BoldItalic}{Carol Twombly}{11pt}{2in}\hskip1pt} \line{\hss} \eject \ No newline at end of file
diff --git a/macros/plain/contrib/TypeSpec/TypeSp05.tex b/macros/plain/contrib/TypeSpec/TypeSp05.tex
new file mode 100644
index 0000000000..58b99fe112
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSp05.tex
@@ -0,0 +1 @@
+%%% Stephen Moye %%% Stephen_Moye@brown.edu %%% Brown University %%% Graphic Services \newtoks\texfont \newtoks\symbolfont \newdimen\boxwd \newdimen\boxht \newdimen\thicklineht \newdimen\linewd \newdimen\nummove \newdimen\charmove \newdimen\kernchar \newdimen\dividerht \newcount\charcount \charcount=0 \newcount\numcount \numcount=0 \newcount\loopcount \def\setfont#1{\texfont={#1} \font\text=\the\texfont\space at 10pt \font\note=\the\texfont\space at 8pt \font\name=\the\texfont\space at 18pt \font\numfont=Helvetica at 8pt} \def\setsymbolfont#1#2{\texfont={#2} \symbolfont={#1} \font\text=\the\symbolfont\space at 10pt \font\note=\the\texfont\space at 8pt \font\name=\the\texfont\space at 18pt \font\numfont=Helvetica at 8pt} \def\startnum#1{\charcount=#1 \numcount=#1} \def\nextchar{\text\char\charcount \global\advance\charcount1} \def\nextnum{\numfont\number\numcount \global\advance\numcount1} \def\charbox{% \vbox to\boxht{% \hsize\boxwd\kern\charmove\centerline{\kern\kernchar\strut\nextchar}\vss}} \def\numline{\centerline{\white\nextnum\black}} \def\numlinenc{\centerline{\nextnum}} \def\boxit{\vbox{\hsize\boxwd\hrule height\linewd\hbox{\vrule width\linewd% \charbox\vrule width\linewd}% \hrule height\dividerht}% \kern-\linewd} %%% For the numbers, uses color or gray \def\nboxit{\dimen0\boxwd \advance\dimen0\linewd \dimen1\thicklineht \advance\dimen1\linewd \vbox{\hsize\boxwd \gray\hrule width\dimen0 height\dimen1\black \kern-\thicklineht \kern-2\linewd \hrule height\linewd \hbox{\vrule width\linewd% \vbox to \thicklineht{\hsize\boxwd \kern\nummove\numline\vss}% \vrule width\linewd}\hrule height\linewd}\kern-\linewd} %%% For the numbers, no color \def\nboxitnc{% \dimen0\thicklineht \advance\dimen0 2\linewd \vbox to\dimen0{\hsize\boxwd \hrule height\linewd \hbox{\vrule height\thicklineht width\linewd% \vbox to\thicklineht{\kern\nummove\numlinenc}% \vrule width\linewd}\vss\hrule height\linewd}\kern-\linewd} \def\white{\special{color push}% \special{color define white cmyk 0 0 0 0}% \special{color white}} \def\gray{\special{color push}% \special{color gray .4}} \def\black{\special{color pop}} \def\lineofchars#1{\loopcount=#1% \noindent\loop \boxit \ifnum\loopcount>1\advance\loopcount-1 \repeat\par \loopcount=#1% \nointerlineskip \kern-\linewd \nointerlineskip \noindent\loop\nboxit \ifnum\loopcount>1\advance\loopcount-1 \repeat\par \kern-\linewd} %%% For no color or gray, use this \def\lineofcharsnc#1{\loopcount=#1% \noindent\loop \boxit \ifnum\loopcount>1\advance\loopcount-1 \repeat\par \loopcount=#1% \nointerlineskip \kern-\linewd \noindent\loop\nboxitnc \ifnum\loopcount>1\advance\loopcount-1 \repeat\par \kern-\linewd} %%% Setup \boxwd=.25in \boxht=.3in \thicklineht=13pt \linewd=.25pt \dividerht=.75pt \parindent=0pt \nummove3pt \charmove5pt \kernchar-1pt \startnum{0} \setfont{ACaslon} %%% Draw the boxes \leftskip1in \name Adobe Caslon\par \smallskip \lineofchars{16} \smallskip \lineofchars{16} \smallskip \lineofchars{16} \smallskip \lineofchars{16} \smallskip \lineofchars{16} \smallskip \lineofchars{16} \smallskip \lineofchars{16} \smallskip \lineofchars{16} \note Carol Twombly \vfill\eject \startnum{0} \setfont{cmr12} %%% Draw the boxes \leftskip1in \name Computer Modern\par \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \note Donald E. Knuth \vfill\eject \startnum{32} \setsymbolfont{Dingbats}{Helvetica} %%% Draw the boxes \leftskip1in \name Zapf Dingbats\par \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \smallskip \lineofcharsnc{16} \note Hermann Zapf \bye \ No newline at end of file
diff --git a/macros/plain/contrib/TypeSpec/TypeSp06.tex b/macros/plain/contrib/TypeSpec/TypeSp06.tex
new file mode 100644
index 0000000000..a50835fd86
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSp06.tex
@@ -0,0 +1 @@
+%%% Stephen Moye %%% Stephen_Moye@brown.edu %%% Brown University %%% Graphic Services \newdimen\basesize \newdimen\dist \newdimen\baseblsk \newdimen\xheight \newdimen\ascheight \newdimen\leading \newdimen\adjust \newcount\scratch \newcount\scppt \scppt=65536 \newcount\intgp \newcount\sscratch \newcount\fracp \hsize7.5in \hoffset-.5in \vsize10in \voffset-.5in \nopagenumbers \parindent0pt \def\setuptype#1#2#3#4{\font\bigtext=#3 at 18pt \basesize=#2 \font\tinynote=#4 at 8pt \font\bigdisp=#1 at \basesize \font\meddisp=#1 at .75\basesize \font\smalldisp=#1 at .5\basesize \font\tinydisp=#1 at .41666\basesize \setbox0=\vbox{\bigdisp ILyg} \baseblsk=\ht0 \advance\baseblsk\dp0 \baseblsk=1.2\baseblsk} %%% Leading calculations \def\setleading{\setbox0=\hbox{x} \xheight=\ht0 \setbox0=\hbox{Ilpgy} \ascheight=\ht0 \leading=\ht0 \adjust=\xheight \advance\adjust-.5\leading \advance\leading\dp0 \leading=1.175\leading \ifdim\dp0<.05\ht0 \advance\adjust.5\xheight\fi \advance\leading by \adjust \baselineskip\leading} \def\prettypt#1{\dist=#1 \multiply\dist10 \scratch=\number\dist \divide\scratch\scppt \intgp=\scratch \divide\intgp10 \sscratch=\intgp \multiply\sscratch10 \advance\scratch-\sscratch \fracp=\scratch \hbox{\the\intgp.\the\fracp}pt\ } %%% \setuptype{uaur}{24pt}{Helvetica}{HelveticaI} \leftline{\bigtext Audubon Script} \smallskip \hrule \smallskip \rightline{\tinynote Type used in James Audubon's ``Birds of America'', translated to PostScript by Richard Beatty} \bigskip \line{% \vtop to 9in{\bigdisp \baselineskip=.75\baseblsk plus 1fil \halign{&#\hfill\cr% Abound\cr Bridges\cr Canoe\cr Dismay\cr English\cr French\cr Genoa\cr Happy\cr Igloo\cr Jury\cr Kimono\cr Lyric\cr Musical\cr Narcissus\cr Opera\cr Precise\cr Quartz\cr Royal\cr Sable\cr Transience\cr Umbrage\cr Velvet\cr Waxen\cr Xanadu\cr Yucca\cr Zabaglione\cr}}\hfill \vtop to 9in{\bigdisp \baselineskip\baseblsk plus 1fil \halign{ &\hfil\thinspace#&\thinspace#\hfil& \enskip#\enskip& \hfil\thinspace#&\thinspace#\hfil\cr A&a&&B&b\cr C&c&&D&d\cr E&e&&F&f\cr G&g&&H&h\cr I&i&&J&j\cr K&k&&L&l\cr M&m&&N&n\cr O&o&&P&p\cr Q&q&&R&r\cr S&s&&T&t\cr U&u&&V&v\cr W&w&&X&x\cr Y&y&&Z&z\cr \span0&\span1\cr \span2&\span3\cr \span4&\span5&\cr \span6&\span7&\cr \span8&\&&9&\cr}}\hfill \vtop{\hsize3in \emergencystretch2em \bigdisp \setleading Brick quiz whangs jumpy veldt fox. Nymphs vex, beg quick fjord waltz. Quick wafting zephyrs vex bold Jim. \rightline{\tinynote \prettypt{\basesize}/\prettypt{\the\baselineskip}} \smallskip \hrule \bigskip\bigskip \meddisp \setleading West quickly gave Bert handsome prizes for six juicy plums. Freight to me sixty dozen quart jars and twelve black pans. My help squeezed back in again and joined the weavers after six. Turgid saxophones blew over Mick's jazzy quiff. \rightline{\tinynote \prettypt{.75\basesize}/\prettypt{\the\baselineskip}} \smallskip \hrule \bigskip\bigskip \smalldisp \setleading Five wine experts jokingly quizzed sample chablis. My grandfather picks up quartz and valuable onyx jewels. Mix Zapf with Veljovic and get quirky Beziers. All questions asked by five watch experts amazed the judge. Back in June we delivered oxygen equipment of the same size. We have just quoted on nine dozen boxes of grey lamp wicks. A large fawn jumped quickly over white zinc boxes. The exodus of jazzy pigeons is craved by squeamish walkers. \rightline{\tinynote \prettypt{.5\basesize}/\prettypt{\the\baselineskip}} \smallskip \hrule \bigskip\bigskip \tinydisp \setleading Murky haze enveloped a city as jarring quakes broke fourty-six windows. The brazen jackal querulously attacked a ferral vixen, maiming her paw. Karate experts bring down victims with just a few amazingly quick chops. The fabled quetzal roosted on a mulberry twig, vexing the peevish jockey. King Alexander was just partly overcome after quizzing Diogenes in his tub. The exiled queen justly moved, celebrated with a dazzling fireworks display. \rightline{\tinynote \prettypt{.41666666\basesize}/\prettypt{\the\baselineskip}} \smallskip \hrule}} \bye \ No newline at end of file
diff --git a/macros/plain/contrib/TypeSpec/TypeSp07.tex b/macros/plain/contrib/TypeSpec/TypeSp07.tex
new file mode 100644
index 0000000000..959f8b1714
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSp07.tex
@@ -0,0 +1 @@
+%%% Stephen Moye %%% Stephen_Moye@brown.edu %%% Brown University %%% Graphic Services \newdimen\dspsize \newdimen\leading \newdimen\ascheight \newdimen\xheight \newdimen\adjust \newdimen\sampletextwd \newdimen\abcdwd \newdimen\twocolwd \newcount\scratch \newcount\divisor \newtoks\texttoks %%% %%% %%% Set it very small, then find a %%% scaling factor to get it to fit % #1 - font; #2 - width to fit; #3 - the text \def\fitit#1#2#3{\font\dsp=#1 at .1pt \setbox0=\hbox{\dsp #3}% \dspsize=#2 \scratch=\dspsize \multiply\scratch10 \divisor=\wd0 \divide\scratch by \divisor \dspsize=\scratch pt \divide\dspsize by 100 \message{\the\dspsize}% \font\dsp=#1 at \dspsize \hbox{\dsp#3}} %%% Leading derived from the characteristics of the type \def\setleading{% \setbox0=\hbox{Ilpgy} \setbox1=\hbox{x} \xheight=\ht1 \ascheight=\ht0 \leading=\ht0 \adjust=\xheight \advance\adjust-.5\leading \advance\leading\dp0 \leading=1.175\leading \ifdim\dp0<.05\ht0 \advance\adjust.5\xheight\fi \advance\leading by \adjust \baselineskip\leading \message{the leading=\the\leading}} \def\setuptype#1{% \font\Diamond=#1 at 4pt \font\Pearl=#1 at 4.5pt \font\Ruby=#1 at 5pt \font\Nonpareil=#1 at 6pt \font\Emerald=#1 at 6.5pt \font\Minion=#1 at 7pt \font\Brevier=#1 at 7.5pt \font\Bourgeois=#1 at 8pt \font\LongPrimer=#1 at 9pt \font\SmallPica=#1 at 10pt \font\Pica=#1 at 12pt \font\English=#1 at 14pt \font\GreatPrimer=#1 at 16pt \font\Paragon=#1 at 18pt \font\Twolinesmallpica=#1 at 21pt \font\Twolinepica=#1 at 24pt} \def\isetuptype#1{% \font\iDiamond=#1 at 4pt \font\iPearl=#1 at 4.5pt \font\iRuby=#1 at 5pt \font\iNonpareil=#1 at 6pt \font\iEmerald=#1 at 6.5pt \font\iMinion=#1 at 7pt \font\iBrevier=#1 at 7.5pt \font\iBourgeois=#1 at 8pt \font\iLongPrimer=#1 at 9pt \font\iSmallPica=#1 at 10pt \font\iPica=#1 at 12pt \font\iEnglish=#1 at 14pt \font\iGreatPrimer=#1 at 16pt \font\iParagon=#1 at 18pt \font\iTwolinesmallpica=#1 at 21pt \font\iTwolinepica=#1 at 24pt} \def\bsetuptype#1{% \font\bDiamond=#1 at 4pt \font\bPearl=#1 at 4.5pt \font\bRuby=#1 at 5pt \font\bNonpareil=#1 at 6pt \font\bEmerald=#1 at 6.5pt \font\bMinion=#1 at 7pt \font\bBrevier=#1 at 7.5pt \font\bBourgeois=#1 at 8pt \font\bLongPrimer=#1 at 9pt \font\bSmallPica=#1 at 10pt \font\bPica=#1 at 12pt \font\bEnglish=#1 at 14pt \font\bGreatPrimer=#1 at 16pt \font\bParagon=#1 at 18pt \font\bTwolinesmallpica=#1 at 21pt \font\bTwolinepica=#1 at 24pt} \def\bisetuptype#1{% \font\biDiamond=#1 at 4pt \font\biPearl=#1 at 4.5pt \font\biRuby=#1 at 5pt \font\biNonpareil=#1 at 6pt \font\biEmerald=#1 at 6.5pt \font\biMinion=#1 at 7pt \font\biBrevier=#1 at 7.5pt \font\biBourgeois=#1 at 8pt \font\biLongPrimer=#1 at 9pt \font\biSmallPica=#1 at 10pt \font\biPica=#1 at 12pt \font\biEnglish=#1 at 14pt \font\biGreatPrimer=#1 at 16pt \font\biParagon=#1 at 18pt \font\biTwolinesmallpica=#1 at 21pt \font\biTwolinepica=#1 at 24pt} \def\bigtosmall#1{% \begingroup\obeylines\offinterlineskip \fitit{#1}{\abcdwd}{ABCD} \vfill \fitit{#1}{\abcdwd}{ABCDE} \vfill \fitit{#1}{\abcdwd}{ABCDEFG} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHI} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHIJK} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHIJKLMN} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHIJKLMNOPQ} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHIJKLMNOPQRST} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHIJKLMNOPQRSTUVW} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHIJKLMNOPQRSTUVWXYZ} \endgroup} \def\smalltobig#1{% \begingroup\obeylines\offinterlineskip \fitit{#1}{\abcdwd}{ABCDEFGHIJKLMNOPQRSTUVWXYZ} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHIJKLMNOPQRSTUVW} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHIJKLMNOPQRST} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHIJKLMNOPQ} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHIJKLMN} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHIJK} \vfill \fitit{#1}{\abcdwd}{ABCDEFGHI} \vfill \fitit{#1}{\abcdwd}{ABCDEFG} \vfill \fitit{#1}{\abcdwd}{ABCDE} \vfill \fitit{#1}{\abcdwd}{ABCD} \endgroup} \texttoks={Quousque tandem a\-bu\-te\-re, Ca\-ti\-li\-na, patientia nostra? Qua\-m\-diu nos etiam furor iste tuus eludet? quem ad finem sese effrenata jactibit audicia? nihilne te nocturnum pr\ae si\-di\-um palatii, nihil urbis vigil\ae. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh eusi\-mod tincidunt ut laor\-eet dolore magna ali\-quam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit la\-bortis nisl ut ali\-quip exea commodo consequat. Quousque tandem abutere, Catilina, patientia nostra? Quamdiu nos etiam furor iste tuus eludet? quem ad finem sese effrenata jactibit audicia? nihilne te nocturnum pr\ae sidium palatii, nihil urbis vigil\ae.} %%% 1-Roman TeX name, 2-Italic TeX name, 3-name of size, %%% 4-number of lines in sample \def\textsamps#1#2#3#4{% \begingroup#1\setleading %% Uniform leading \setbox0=\vbox{% \hbadness10000\emergencystretch1em\hsize\sampletextwd\the\texttoks}% \setbox1=\vsplit0 to #4\baselineskip \setbox2=\vbox{#2% \hbadness10000\emergencystretch1em\hsize\sampletextwd\the\texttoks}% \setbox3=\vsplit2 to #4\baselineskip \line{% \vbox{\hsize\sampletextwd\centerline{\strut#1[#3]}\unvbox1}% \hfill \vbox{\hsize\sampletextwd\centerline{\strut#2[#3]}\unvbox3}\hskip.05in}% \endgroup} %%% #1 - Font TeX name; #2 - number of lines in sample %%% #3 - Printed name of font \def\textbox#1#2#3{% \begingroup#1% \setbox0=\vbox{% \hbadness10000\emergencystretch1em\hsize\sampletextwd\the\texttoks}% \setbox1=\vsplit0 to #2\baselineskip \vbox{\hsize\sampletextwd\centerline{\strut#1[#3]}\unvbox1}% \endgroup} %%% %%% Example %%% %%% Setup %%% We don't need indents, complaints about \vboxes and page numbers \parindent0pt \vbadness10000 \nopagenumbers %%% Set up all the ype \isetuptype{ACaslonI} \setuptype{ACaslon} \bsetuptype{ACaslonB} \bisetuptype{ACaslonBI} %%% Shape the page \vsize10in \voffset-.5in \hsize7.5in \hoffset-.5in %%% The width of the text sample columns: \sampletextwd2.7in %%% The width of the ABCD example \abcdwd1.4in %%% Now the overall width of the text column examples \twocolwd=\hsize \advance\twocolwd-\abcdwd \advance\twocolwd2\sampletextwd \divide\twocolwd2 %%% %%% Experiments %%% \centerline{\fitit{ACaslon}{4.1in}{A SAMPLE}} \smallskip \hrule \smallskip \line{\vbox to 8in{\hsize\twocolwd% \textsamps{\Ruby}{\iRuby}{Ruby}{6}% \vfill \textsamps{\Nonpareil}{\iNonpareil}{Nonpareil}{6}% \vfill \textsamps{\Minion}{\iMinion}{Minion}{5}% \vfill \textsamps{\Bourgeois}{\iBourgeois}{Bourgeois}{5}% \vfill \textsamps{\LongPrimer}{\iLongPrimer}{Long Primer}{4}% \vfill \textsamps{\SmallPica}{\iSmallPica}{Small Pica}{4}% \vfill \textsamps{\Pica}{\iPica}{Pica}{4}% \vfill \textsamps{\English}{\iEnglish}{English}{4}}% \hfill \vrule \hfill \vbox to 8in{\hsize1in \bigtosmall{ACaslon} \vfill \smalltobig{ACaslonI} \vfill \bigtosmall{ACaslonB} \vfill \smalltobig{ACaslonBI}}} \smallskip \hrule \smallskip \hrule \smallskip \Minion \setleading \sampletextwd=\hsize \divide\sampletextwd4 \advance\sampletextwd-1pc \line{% \textbox{\Minion}{4}{Roman} \hfill \textbox{\iMinion}{4}{Italick} \hfill \textbox{\bMinion}{4}{Bold} \hfill \textbox{\biMinion}{4}{Bold-Italick}} \smallskip \hrule \smallskip \hrule \smallskip \centerline{\iPica Adobe Caslon --- \Pica Carol Twombly} %%% The End \bye \ No newline at end of file
diff --git a/macros/plain/contrib/TypeSpec/TypeSp08.tex b/macros/plain/contrib/TypeSpec/TypeSp08.tex
new file mode 100644
index 0000000000..6b9ab4b966
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSp08.tex
@@ -0,0 +1 @@
+%%% Stephen Moye %%% Stephen_Moye@brown.edu %%% Brown University %%% Graphic Services \newdimen\leading \newdimen\ascheight \newdimen\xheight \newdimen\adjust \newdimen\sampletextwd \newdimen\gutter \newdimen\dist \newdimen\mainleading \newcount\scratch \newcount\divisor \newcount\spconv \newcount\divisor \newcount\scratch \newcount\sscratch \newcount\intgp \newcount\fracp \newtoks\texttoks %%% \vbadness10000 %%% \def\setleading{% \setbox0=\hbox{Ilpgy}% \setbox1=\hbox{x}% \xheight=\ht1 \ascheight=\ht0 \leading=\ht0 \adjust=\xheight \advance\adjust-.5\leading \advance\leading\dp0 \leading=1.2\leading \ifdim\dp0<.05\ht0 \advance\adjust.5\xheight\fi \advance\leading by \adjust \baselineskip=\leading} %%% Type factor = ([Type size] * [# of characters in a sample])/(linear length of sample) %%% Based on {\it Brown's Index}, Bruce Brown, Greenwood Publishing, Great Britain 1983 \def\typefact#1{% \dist=10pt \font\facttext=#1 at\dist \spconv=\number\dist \multiply\spconv by 12 \multiply\spconv by 204 \setbox1=\hbox{\facttext\freqabc}% \divisor=\number\wd1 \divide\divisor by 100 \divide\spconv by \divisor \scratch=\spconv \divide\scratch100 \divisor=\scratch \multiply \scratch100 \advance\spconv-\scratch \hbox{\number\divisor.\ifnum\spconv<10 0\the\spconv \else \the\spconv\fi}} %%% Convert from TeX's bulky 4-decimal point measurements to 1 \def\prettypt#1{\dist=#1% \multiply\dist10% \scratch=\number\dist \divide\scratch65536% \intgp=\scratch \divide\intgp10% \sscratch=\intgp \multiply\sscratch10 \advance\scratch-\sscratch \fracp=\scratch \hbox{\the\intgp.\the\fracp}pt} \def\displaytype#1{% \font\bigtype=#1 at 24pt \font\medtype=#1 at 18pt \font\normtype=#1 at 14pt \font\smalltype=#1 at 12pt \font\tinytype=#1 at 10pt \font\tinytinytype=#1 at 8pt} \texttoks={\emergencystretch1em Brick quiz whangs jumpy veldt fox. Nymphs vex, beg quick fjord waltz. Quick wafting zephyrs vex bold Jim. West quickly gave Bert handsome prizes for six juicy plums. Freight to me sixty dozen quart jars and twelve black pans. My help squeezed back in again and joined the weavers after six. Turgid saxophones blew over Mick's jazzy quiff. Five wine experts jokingly quizzed sample chablis. My grandfather picks up quartz and valuable onyx jewels. Mix Zapf with Veljovic and get quirky Beziers. All questions asked by five watch experts amazed the judge. Back in June we delivered oxygen equipment of the same size. We have just quoted on nine dozen boxes of grey lamp wicks. A large fawn jumped quickly over white zinc boxes. The exodus of jazzy pigeons is craved by squeamish walkers.} \def\freqabc{\text zjqx% kkvv% bbbbppppyyyywwwwgggg% mmmmmmffffffccccccuuuuuu% lllllllldddddddd% hhhhhhhhhhhhrrrrrrrrrrrrssssssssssss% ooooooooooooooiiiiiiiiiiiiiinnnnnnnnnnnnnn% aaaaaaaaaaaaaaaatttttttttttttttttt% eeeeeeeeeeeeeeeeeeeeeeee}% 204 chars %%% #1 - Font TeX name; #2 - number of lines in sample %%% #3 - Printed name of font \def\textbox#1#2#3{%% \setbox0=\vtop{#1% \hbadness10000\emergencystretch1em\hsize\sampletextwd\the\texttoks}% \setbox1=\vsplit0 to #2\baselineskip \vtop{\hsize\sampletextwd\centerline{\strut#1[#3]}\smallskip\unvbox1\relax% %%% Comment-out the following line if you don't want/need numbers in the sample text 1\hfill2\hfill3\hfill4\hfill5\hfill6\hfill7\hfill8\hfill9\hfill0\hfill\&\null\par% }} \def\setupmargnote{% \tinytinytype \setleading \baselineskip=\leading \vskip\baselineskip} %%% 1-type size; 2-Number of lines; %%% 3-TeX type name 1; 4-Printed type name 1; %%% 5-TeX type name 2; 6-Printed type name 2 \def\lineoftwo#1#2#3#4#5#6{% \begingroup \font\typeone=#3 at #1% %% Set up baselineskip for the two samples %% and the info for the margin notes for the %% sample on the left: \typeone\setleading \calcxaratio{\typeone} \baselineskip=\leading \mainleading=\leading \font\typetwo=#5 at #1% \line{% \llap{\vtop{\setupmargnote% \halign{\hfill##\cr#1\cr \prettypt{\the\mainleading}\cr \typefact{#3}\cr 0.\the\xascrnum\cr}}\enskip}\hss% \textbox{\typeone}{#2}{#4}% \hskip\gutter %% Setup the info for the margin note describing %% the sample on the right \typetwo \setleading \calcxaratio{\typetwo} \textbox{\typetwo}{#2}{#6}% \hss \rlap{\enskip\vtop{\setupmargnote% \halign{##\hfil\cr#1\cr \prettypt{\the\mainleading}\cr \typefact{#5}\cr 0.\the\xascrnum\cr}}}% }\endgroup} \def\lineofone#1#2#3#4{% \begingroup \font\typeone=#3 at #1 \typeone \setleading \calcxaratio{\typeone} \baselineskip=\leading \line{\hss%% \hbox{\textbox{\typeone}{#2}{#4}% \hss \rlap{\enskip\vtop{\setupmargnote% \halign{##\hfil\cr #1\cr \prettypt{\the\mainleading}\cr \typefact{#3}\cr 0.\the\xascrnum\cr}}}}% \hss}\endgroup} \def\comment#1{% \bigskip \hrule \smallskip \line{\hfill\vbox{\hyphenpenalty10000 \emergencystretch1em% \leftskip0pt plus 4em \rightskip0pt \parfillskip0pt \tinytinytype\setleading\hsize.75\sampletextwd\noindent#1}}} %%% %%% Example %%% %%% Setup \parindent0pt \nopagenumbers \hsize6in \hoffset.25in \gutter1pc \sampletextwd2.85in \displaytype{Helvetica} %%% %%% The Page %%% \leftline{\medtype Centaur} \smallskip \hrule \bigskip \lineoftwo{12pt}{10}{Centaur}{Centaur}{CentaurI}{Centaur Italic} \bigskip \lineoftwo{12pt}{10}{CentaurB}{Centaur Bold}{CentaurBI}{Centaur Bold-Italic} \comment{Centaur, drawn by Bruce Rogers and Frederick Warde} %%% %%% The End %%% \bye \ No newline at end of file
diff --git a/macros/plain/contrib/TypeSpec/TypeSp09.tex b/macros/plain/contrib/TypeSpec/TypeSp09.tex
new file mode 100644
index 0000000000..dadab51935
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSp09.tex
@@ -0,0 +1 @@
+%%% Stephen Moye %%% Stephen_Moye@brown.edu %%% Brown University %%% Graphic Services \newdimen\leading \newdimen\ascheight \newdimen\xheight \newdimen\adjust \newdimen\sampletextwd \newdimen\gutter \newdimen\dist \newdimen\dspsize \newdimen\dspsizeincr \newdimen\depth \newdimen\mainleading \newcount\scratch \newcount\divisor \newcount\spconv \newcount\divisor \newcount\scratch \newcount\sscratch \newcount\intgp \newcount\fracp \newcount\dsplineno \newcount\xascrnum \newtoks\texttoks \newtoks\dspfont %%% \vbadness10000 %%% \def\setleading{% \setbox0=\hbox{Ilpgy}% \setbox1=\hbox{x}% \xheight=\ht1 \ascheight=\ht0 \depth=\dp0 \leading=\ht0 \advance\leading \depth \leading=1.25\leading \dimen0=\ascheight \divide\dimen0 by 2\relax \advance\dimen0-\xheight %%% Account for large x-height \ifdim\dimen0<0pt \else \advance\leading-\dimen0\fi %%% Account for missing descenders -- smallcaps for instance \ifdim\depth<.1\ascheight \advance \leading .4\ascheight\fi} %%% Calculates ratio of x-height to ascender height \def\calcxaratio#1{% \dimen0=\the\fontdimen5#1 \xascrnum=\dimen0% \divisor=\number\ascheight \multiply\xascrnum by 100\relax \divide\xascrnum by\ascheight} %%% Type factor = ([Type size] * [# of characters in a sample])/(linear length of sample) %%% Based on {\it Brown's Index}, Bruce Brown, Greenwood Publishing, Great Britain 1983 \def\typefact#1{% \dist=10pt \font\facttext=#1 at\dist \spconv=\number\dist \multiply\spconv by 12 \multiply\spconv by 204 \setbox1=\hbox{\facttext\freqabc}% \divisor=\number\wd1 \divide\divisor by 100 \divide\spconv by \divisor \scratch=\spconv \divide\scratch100 \divisor=\scratch \multiply \scratch100 \advance\spconv-\scratch \hbox{\number\divisor.\ifnum\spconv<10 0\the\spconv \else \the\spconv\fi}} %%% Convert from TeX's bulky 4-decimal point measurements to 1 \def\prettypt#1{\dist=#1% \multiply\dist10% \scratch=\number\dist \divide\scratch65536% \intgp=\scratch \divide\intgp10% \sscratch=\intgp \multiply\sscratch10 \advance\scratch-\sscratch \fracp=\scratch \hbox{\the\intgp.\the\fracp}pt} \def\displaytype#1{% \font\bigtype=#1 at 24pt \font\medtype=#1 at 18pt \font\normtype=#1 at 14pt \font\smalltype=#1 at 12pt \font\tinytype=#1 at 10pt \font\tinytinytype=#1 at 8pt} \texttoks={\emergencystretch2em Brick quiz whangs jumpy veldt fox. Nymphs vex, beg quick fjord waltz. Quick wafting zephyrs vex bold Jim. West quickly gave Bert handsome prizes for six juicy plums. Freight to me sixty dozen quart jars and twelve black pans. My help squeezed back in again and joined the weavers after six. Turgid saxophones blew over Mick's jazzy quiff. Five wine experts jokingly quizzed sample chablis. My grandfather picks up quartz and valuable onyx jewels. Mix Zapf with Veljovic and get quirky Beziers. All questions asked by five watch experts amazed the judge. Back in June we delivered oxygen equipment of the same size. We have just quoted on nine dozen boxes of grey lamp wicks. A large fawn jumped quickly over white zinc boxes. The exodus of jazzy pigeons is craved by squeamish walkers.} \def\freqabc{zjqx% kkvv% bbbbppppyyyywwwwgggg% mmmmmmffffffccccccuuuuuu% lllllllldddddddd% hhhhhhhhhhhhrrrrrrrrrrrrssssssssssss% ooooooooooooooiiiiiiiiiiiiiinnnnnnnnnnnnnn% aaaaaaaaaaaaaaaatttttttttttttttttt% eeeeeeeeeeeeeeeeeeeeeeee}% 204 chars %%% #1 - Font TeX name; #2 - number of lines in sample %%% #3 - Printed name of font \def\textbox#1#2#3{#1%\setleading%% \setbox0=\vtop{% \hbadness10000\hsize\sampletextwd\the\texttoks}% \setbox1=\vsplit0 to #2\baselineskip \vtop{\hsize\sampletextwd\centerline{\strut#1[#3]}\smallskip\unvbox1\relax% %%% Comment-out the following line if you don't want/need numbers in the sample text 1\hfill2\hfill3\hfill4\hfill5\hfill6\hfill7\hfill8\hfill9\hfill0\hfill\&\null\par% }} \def\setupmargnote{% \tinytinytype \setleading \baselineskip=\leading \vskip\baselineskip} %%% 1-type size; 2-Number of lines; %%% 3-TeX type name 1; 4-Printed type name 1; %%% 5-TeX type name 2; 6-Printed type name 2 \def\lineoftwo#1#2#3#4#5#6{% \begingroup \font\typeone=#3 at #1% %% Set up baselineskip for the two samples %% and the info for the margin notes for the %% sample on the left: \typeone\setleading \calcxaratio{\typeone} \baselineskip=\leading \mainleading=\leading \font\typetwo=#5 at #1% \line{% \llap{\vtop{\setupmargnote% \halign{\hfill##\cr#1\cr \prettypt{\the\mainleading}\cr \typefact{#3}\cr 0.\the\xascrnum\cr}}\enskip}\hss% \textbox{\typeone}{#2}{#4}% \hskip\gutter %% Setup the info for the margin note describing %% the sample on the right \typetwo \setleading \calcxaratio{\typetwo} \textbox{\typetwo}{#2}{#6}% \hss \rlap{\enskip\vtop{\setupmargnote% \halign{##\hfil\cr#1\cr \prettypt{\the\mainleading}\cr \typefact{#5}\cr 0.\the\xascrnum\cr}}}% }\endgroup} \def\lineofone#1#2#3#4{% \begingroup \font\typeone=#3 at #1 \typeone \setleading \calcxaratio{\typeone} \baselineskip=\leading \line{\hss%% \hbox{\textbox{\typeone}{#2}{#4}% \hss \rlap{\enskip\vtop{\setupmargnote% \halign{##\hfil\cr #1\cr \prettypt{\the\mainleading}\cr \typefact{#3}\cr 0.\the\xascrnum\cr}}}}% \hss}\endgroup} \def\comment#1{% \bigskip \hrule \smallskip \line{\hfill\vbox{\hyphenpenalty10000 \emergencystretch1em% \leftskip0pt plus 4em \rightskip0pt \parfillskip0pt \tinytinytype\setleading\hsize.75\sampletextwd\noindent#1}}} %%% Calculates the largest display typesize to fit \hsize %%% First typeset it very small (.1pt) and measure its width %%% then scale it to get it to fit to \hsize \def\dabc{AGQMstaefgpy1234?!\&} \def\makedisplay#1{% \dspfont={#1} \font\dsp=\the\dspfont\space at .1pt \setbox0=\hbox{\dsp \dabc}% \dspsize=\hsize \scratch=\dspsize \multiply\scratch10 \divisor=\wd0 \divide\scratch by \divisor \dspsize=\scratch pt \divide\dspsize by 100 %%% Calculates the increment such that smallest display size is 12pt \dspsizeincr=\dspsize \advance\dspsizeincr by -12pt \divide\dspsizeincr by 6 \dsplineno7 %%% Make the display \bgroup \loop\font\dsp=\the\dspfont\space at \dspsize \dsp \baselineskip1em \hbox to\hsize{\dabc\hfill\hss\rlap{\tinytinytype\enskip\prettypt{\the\dspsize}}}% \vskip.075in\relax \ifnum\dsplineno>1 \global\advance\dsplineno by-1\relax \advance\dspsize by -\dspsizeincr \font\dsp=\the\dspfont\space at \dspsize\repeat \egroup} %%% %%% Example %%% %%% Setup \parindent0pt \nopagenumbers \hsize6in \hoffset.25in \gutter1pc \sampletextwd2.85in \displaytype{Helvetica} %%% %%% The Page %%% \leftline{\medtype BodoniClassic} \smallskip \hrule \bigskip %%% Display Type \makedisplay{BodoniClassic-Roman} \bigskip \hrule \bigskip \lineoftwo{10pt}{9}{BodoniClassic-Roman}{Bodoni Classic}{BodoniClassic-Italic}{Bodoni Classic Italic} \bigskip \lineoftwo{10pt}{9}{BodoniClassic-Bold}{BodoniClassic bold}{BodoniClassic-BoldItalic}{BodoniClassic BoldItalic} \comment{BodoniClassic, drawn by Bruce Rogers; italic by Frederick Warde} %%% %%% The End %%% \bye \ No newline at end of file
diff --git a/macros/plain/contrib/TypeSpec/TypeSp10.tex b/macros/plain/contrib/TypeSpec/TypeSp10.tex
new file mode 100644
index 0000000000..37f91b9884
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSp10.tex
@@ -0,0 +1 @@
+%%% Stephen Moye %%% Stephen_Moye@brown.edu %%% Brown University %%% Graphic Services \newdimen\leading \newdimen\ascheight \newdimen\xheight \newdimen\adjust \newdimen\sampletextwd \newdimen\gutter \newdimen\dist \newdimen\dspsize \newdimen\dspsizeincr \newdimen\depth \newdimen\mainleading \newcount\scratch \newcount\divisor \newcount\spconv \newcount\divisor \newcount\scratch \newcount\sscratch \newcount\intgp \newcount\fracp \newcount\dsplineno \newcount\xascrnum \newtoks\texttoks \newtoks\dspfont %%% \vbadness10000 %%% \def\setleading{% \setbox0=\hbox{Ilpgy}% \setbox1=\hbox{x}% \xheight=\ht1 \ascheight=\ht0 \depth=\dp0 \leading=\ht0 \advance\leading \depth \leading=1.25\leading \dimen0=\ascheight \divide\dimen0 by 2\relax \advance\dimen0-\xheight %%% Account for large x-height \ifdim\dimen0<0pt \else \advance\leading-\dimen0\fi %%% Account for missing descenders -- smallcaps for instance \ifdim\depth<.1\ascheight \advance \leading .4\ascheight\fi} %%% Calculates ratio of x-height to ascender height \def\calcxaratio#1{% \dimen0=\the\fontdimen5#1 \xascrnum=\dimen0% \divisor=\number\ascheight \multiply\xascrnum by 100\relax \divide\xascrnum by\ascheight} %%% Type factor = ([Type size] * [# of characters in a sample])/(linear length of sample) %%% Based on {\it Brown's Index}, Bruce Brown, Greenwood Publishing, Great Britain 1983 \def\typefact#1{% \dist=10pt \font\facttext=#1 at\dist \spconv=\number\dist \multiply\spconv by 12 \multiply\spconv by 204 \setbox1=\hbox{\facttext\freqabc}% \divisor=\number\wd1 \divide\divisor by 100 \divide\spconv by \divisor \scratch=\spconv \divide\scratch100 \divisor=\scratch \multiply \scratch100 \advance\spconv-\scratch \hbox{\number\divisor.\ifnum\spconv<10 0\the\spconv \else \the\spconv\fi}} %%% Convert from TeX's bulky 4-decimal point measurements to 1 \def\prettypt#1{\dist=#1% \multiply\dist10% \scratch=\number\dist \divide\scratch65536% \intgp=\scratch \divide\intgp10% \sscratch=\intgp \multiply\sscratch10 \advance\scratch-\sscratch \fracp=\scratch \hbox{\the\intgp.\the\fracp}pt} \def\displaytype#1{% \font\bigtype=#1 at 24pt \font\medtype=#1 at 18pt \font\normtype=#1 at 14pt \font\smalltype=#1 at 12pt \font\tinytype=#1 at 10pt \font\tinytinytype=#1 at 8pt} \texttoks={\emergencystretch2em Brick quiz whangs jumpy veldt fox. Nymphs vex, beg quick fjord waltz. Quick wafting zephyrs vex bold Jim. West quickly gave Bert handsome prizes for six juicy plums. Freight to me sixty dozen quart jars and twelve black pans. My help squeezed back in again and joined the weavers after six. Turgid saxophones blew over Mick's jazzy quiff. Five wine experts jokingly quizzed sample chablis. My grandfather picks up quartz and valuable onyx jewels and objects. Mix Zapf with Veljovic and get quirky Beziers. All questions asked by five watch experts amazed the judge. Back in June we delivered oxygen equipment of the same size. We have just quoted on nine dozen boxes of grey lamp wicks. A large fawn jumped quickly over white zinc boxes. The exodus of jazzy pigeons is craved by squeamish walkers.} \def\freqabc{zjqx% kkvv% bbbbppppyyyywwwwgggg% mmmmmmffffffccccccuuuuuu% lllllllldddddddd% hhhhhhhhhhhhrrrrrrrrrrrrssssssssssss% ooooooooooooooiiiiiiiiiiiiiinnnnnnnnnnnnnn% aaaaaaaaaaaaaaaatttttttttttttttttt% eeeeeeeeeeeeeeeeeeeeeeee}% 204 chars %%% #1 - Font TeX name; #2 - number of lines in sample %%% #3 - Printed name of font \def\textbox#1#2#3{#1%\setleading%% \setbox0=\vtop{% \hbadness10000\hsize\sampletextwd\the\texttoks}% \setbox1=\vsplit0 to #2\baselineskip \vtop{\hsize\sampletextwd\centerline{\strut#1[#3]}\smallskip\unvbox1\relax% %%% Comment-out the following line if you don't want/need numbers in the sample text 1\hfill2\hfill3\hfill4\hfill5\hfill6\hfill7\hfill8\hfill9\hfill0\hfill\&\null\par% }} \def\setupmargnote{% \tinytinytype \setleading \baselineskip=\leading \vskip\baselineskip} %%% 1-type size; 2-Number of lines; %%% 3-TeX type name 1; 4-Printed type name 1; %%% 5-TeX type name 2; 6-Printed type name 2 \def\lineoftwo#1#2#3#4#5#6{% \begingroup \font\typeone=#3 at #1% %% Set up baselineskip for the two samples %% and the info for the margin notes for the %% sample on the left: \typeone\setleading \calcxaratio{\typeone} \baselineskip=\leading \mainleading=\leading \font\typetwo=#5 at #1% \line{% \llap{\vtop{\setupmargnote% \halign{\hfill##\cr#1\cr \prettypt{\the\mainleading}\cr \typefact{#3}\cr 0.\the\xascrnum\cr}}\enskip}\hss% \textbox{\typeone}{#2}{#4}% \hskip\gutter %% Setup the info for the margin note describing %% the sample on the right \typetwo \setleading \calcxaratio{\typetwo} \textbox{\typetwo}{#2}{#6}% \hss \rlap{\enskip\vtop{\setupmargnote% \halign{##\hfil\cr#1\cr \prettypt{\the\mainleading}\cr \typefact{#5}\cr 0.\the\xascrnum\cr}}}% }\endgroup} %% #1 Type size; #2 number of lines %% #3 TeX name of type; #4 Printed type name \def\lineofone#1#2#3#4{% \begingroup \font\typeone=#3 at #1 \typeone \setleading \calcxaratio{\typeone} \baselineskip=\leading \mainleading=\leading \line{\hss%% \hbox{\textbox{\typeone}{#2}{#4}% \rlap{\enskip\vtop{\setupmargnote% \halign{##\hfil\cr #1\cr \prettypt{\the\mainleading}\cr \typefact{#3}\cr 0.\the\xascrnum\cr}}}}% \hss}\endgroup} \def\comment#1{% \bigskip \hrule \smallskip \line{\hfill\vbox{\hyphenpenalty10000 \emergencystretch1em% \leftskip0pt plus 4em \rightskip0pt \parfillskip0pt \tinytinytype\setleading\hsize.75\sampletextwd\noindent#1}}} %%% Calculates the largest display typesize to fit \hsize %%% First typeset it very small (.1pt) and measure its width %%% then scale it to get it to fit to \hsize \def\dabc{AGQMstaefgpy1234?!\&} \def\makedisplay#1{% \dspfont={#1} \font\dsp=\the\dspfont\space at .1pt \setbox0=\hbox{\dsp \dabc}% \dspsize=\hsize \scratch=\dspsize \multiply\scratch10 \divisor=\wd0 \divide\scratch by \divisor \dspsize=\scratch pt \divide\dspsize by 100 %%% Calculates the increment such that smallest display size is 12pt \dspsizeincr=\dspsize \advance\dspsizeincr by -12pt \divide\dspsizeincr by 6 \dsplineno7 %%% Make the display \bgroup \loop\font\dsp=\the\dspfont\space at \dspsize \dsp \baselineskip1em \hbox to\hsize{\dabc\hfill\hss\rlap{\tinytinytype\enskip\prettypt{\the\dspsize}}}% \vskip.075in\relax \ifnum\dsplineno>1 \global\advance\dsplineno by-1\relax \advance\dspsize by -\dspsizeincr \font\dsp=\the\dspfont\space at \dspsize\repeat \egroup} %%% %%% Example %%% %%% Setup \parindent0pt \nopagenumbers \hsize6in \hoffset.25in \gutter1pc \sampletextwd2.85in \displaytype{Helvetica} %%% %%% The Page %%% \leftline{\medtype Romus} \smallskip \hrule \bigskip %%% Display Type \makedisplay{Romus} \bigskip \hrule \bigskip \lineofone{10pt}{9}{Romus}{Romus} \bigskip \lineofone{10pt}{9}{RomusI}{Romus Italic} \comment{Romulus and Cancelleresca Bastarda drawn by Jan van Krimpen, digitized by Richard Beatty.} %%% %%% The End %%% \bye \ No newline at end of file
diff --git a/macros/plain/contrib/TypeSpec/TypeSpec.pdf b/macros/plain/contrib/TypeSpec/TypeSpec.pdf
new file mode 100644
index 0000000000..5a63b687b7
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSpec.pdf
Binary files differ
diff --git a/macros/plain/contrib/TypeSpec/TypeSpec.tex b/macros/plain/contrib/TypeSpec/TypeSpec.tex
new file mode 100644
index 0000000000..5cfb6c056d
--- /dev/null
+++ b/macros/plain/contrib/TypeSpec/TypeSpec.tex
@@ -0,0 +1 @@
+\hsize4.5in \hoffset6.5in \advance\hoffset-\hsize \divide\hoffset2 \def\ob{\tt\string{} \def\cb{\tt\string}} \footline={\ifnum\pageno=1 \else \hss\folio\hss\fi} \chardef\other=12 \def\deactivate{% \catcode`\\=\other \catcode`\{=\other \catcode`\}=\other \catcode`\$=\other \catcode`\&=\other \catcode`\#=\other \catcode`\%=\other \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other} \def\makeactive#1{\catcode`#1=\active \ignorespaces} \def\LaTeX{L\kern-.26em \raise.6ex\hbox{\fivei A}% \kern-.15em TeX}% {\makeactive\^^M % \gdef\obeywhitespace{\makeactive\^^M % \let^^M=\newline % \aftergroup\removebox % \obeyspaces}} \def\newline{\par\indent} \def\removebox{\setbox0=\lastbox} {\catcode`\|=\active \gdef\verbatim{% \par\begingroup\deactivate\obeywhitespace\tt \catcode`\|=\active \def|{\endgroup\par}}} \clubpenalty10000 \widowpenalty10000 \raggedbottom \interlinepenalty10000 \def\section#1\par{% \medskip \noindent\llap{\raise1.25pt\hbox{$\diamond$\enskip}}{\bf#1}\par\nobreak\noindent} \section Introduction I use a lot of type. I also use \TeX~--~what better medium can there be for showing off type?~--~in its Macintosh incarnation as Textures. I need samples that I can show clients, and that I can refer to for the technical details of the typeface. The results are the type specimens you see here. The code itself has some annotations that you might want to read. The macros are not complex~--~I don't have time to decode clever macros, and I may need to alter them for unusual situations as they arise. You are encouraged to do the same. The current distribution of these specimens includes: This introduction; eight type specimens; an Acrobat PDF file with typeset examples of the specimens and this introduction. Some of the fonts in these examples (particularly {\it Centaur} in {\tt TypeSpc8.tex}) were made \TeX-ready by using Alan Jeffrey's {\tt fontinst}. The {\tt fontinst} package is discussed in considerable detail in Alan Hoenig's new book {\it\TeX\ Unbound:\ \LaTeX\ and \TeX\ Strategies for Fonts, Graphics \& More} (Oxford 1998), which discusses {\tt fontinst} over the course of several chapters and works through numerous examples. If you deal at all with fonts and \TeX\ you will need this book. Clearly, these specimens will be most easily produced on systems that use outline fonts as opposed to bitmaps. I have used these specimens on a Mac with Textures using both PostScript and TrueType, and on a PC with PC\TeX using TrueType. Textures (now at version 2.0) is interesting in that it can create font metrics ``on the fly'' from the Mac's bitmap files. For more demanding work, you will, however, want to stick with {\tt fontinst}. \section A word about color Blue Sky Research {\it Textures} is a wonderful implementation of \TeX\ that has a very convenient way to use color through the {\tt\string\special} mechanism. I'm going to describe it so that if you use a different implementation that can take advantage of color, you will understand the macros here. Color is invoked by: \verbatim\special{color rgb 1.0 0.0 0.0}| \noindent This tells \TeX\ to trun everything red from this point on. This specification could also have been given by: \verbatim\special{color cmyk 0.0 1.0 0.1 0.0}| \noindent as red in the CMYK model is 100\% of magenta and yellow. To jump back and forth between colors, Textures has a color stack and you can push colors onto the stack and pop them off. So, a typical use of color might be something like this: \verbatim\special{color push}% Puts current color (black) on stack| \verbatim%%% Calls red and puts it on stack:| \verbatim\special{color rgb 1.0 0.0 0.0}| \verbatim Some text in red.| \verbatim\special{color pop}% Pops red off stack, restores black| \verbatim More text in black.| \noindent Simple. You can also define a color for later use: \verbatim\special{color define red rgb 1.0 0.0 0.0}| \noindent and summon it by calling: \verbatim\special{color red}| \noindent The advantage of this is that you can call colors that downstream processors (separation software, or a printer) can use to identify color use. You can even screen the color for tints: \verbatim\special{color red .5}| \noindent which would give a 50\% tint of red, or pink. \section TypeSpc1.tex, TypeSpc2.tex, TypeSpc3.tex These are essentially variations on a theme, differing only in the display type at the top of the page. TypeSpc1 has a selection of telltale characters. The top of the {\it A\/} often has a distinctive treatment; the lower half of the {\it G\/} and the tail of the {\it Q\/} also tend to be distinctive; the shape and size of the enclosed areas of the lowercase {\it a\/} and {\it e\/} are also telltale, and important in that very small such spaces are likely to close up under less than ideal printing conditions; the ampersand frequently has a good deal of creativity lavished upon it. TypeSpc2 sets the uppercase and lowercase of each letter next to each other. TypeSpc3 has a line of uppercase characters (not good design, but some people like or expect it) followed by a line of lowercase characters. \section Selecting the type At the beginning you can insert three items of information: the \TeX\ name of the font; the name of the font that will appear as the `title' of the specimen; and any comments that you wish to have at the end of the chart. I like this specimen because the chosen typeface is used for the whole specimen, including annotations. Clearly, these specimens and macros are more suited to PostScript and TrueType fonts than bitmaps -- proceed accordingly. \section Column width Under normal circumstances, a column of type should be about 70 lowercase characters (about 2.5 lowercase alphabets) in width, or about 4.5 inches in width, which ever comes first. Much longer, and the eye tires, and loses its place when moving to the next line; much shorter and you increase the level of visual noise such as hyphenation and highly variable word spacing. This sample shows 10pt type at the width of 2.5 lowercase alphabets, and calculates the size of type necessay to set 70 characters to a measure of 4.5 inches. Interestingly, 10pt type usually comes very close to fitting 4.5 inches with 70 characters. One of the most common signs of uninformed typography is column width that pays no attention to the realities of type and reading. \section Leading The calculation of leading~--~{\tt\string\baselineskip} in \TeX~--~is based purely on the physical realities of the type being set. The maximum height and depth of the typeface's characters is found, and then a percentage of that amount is added to itself to arrive at the leading. The x-height of the font is also given some influence over the leading. \section Choice of text I have provided three sample texts in token registers. The first is a simple piece of English prose. The second is a collection of {\it pangrams}~--~sentences using all twenty-six letters of the alphabet~--~from the large collection of David Lemon of Adobe Systems, Inc.; so you get to see all of the letters of the alphabet in use. The third is an amalgam of Latin and semi-Latin texts. In the first place, Latin~--~as Beatrice Warde pointed out~--~has fewer descenders so the text sits more cleanly on the baseline; second, as W.\ A.\ Dwiggins pointed out to Beatrice Warde, it is good to have a sample of text in a language the reader does not read~--~in this way the reader looks at the type itself, and not through the type to the information it conveys. \section Type factor The type factor is basically an extension of the the characters per pica concept, but scaled to the size of the typeface. It is based on a sample of type in which $f=(c\,t)/m$ where $f$ is the typefactor, $c$ is the number of characters in the sample, $t$ is the type size in points, and $m$ is the total horizontal width of the sample. The formula can be put to some good use. For instance, characters per pica, $p$, can be obtained from $p=h/f$ where $h$ is the size of the type in points; the size of the type, $h$, necessary to place $n$ characters on a column width of $w$ (in picas) is: $h=(fw)/n$. I have used a sample based on the relative frequency of letters in English. This gives excellent agreement with published figures, particularly those in {\it Brown's Index}. It is best not to take figures like characters-per-pica or type factors too seriously. They are very useful for judging the relative characteristics of typefaces. Before computer typesetting they were far more useful when the actual typesetting of material was costly and time-consuming. Computers allow us to be able to change typesetting parameters interactively and quickly, relieving us from having to know precisely ahead of time how the material is going to layout. \section The ratio of the x-height to the ascender height This is an important characheristic of type. As x-height increases, type tends to look darker, or more crowded on the page. The antidote to this is to increase the leading slightly. {\it See above.} \section TypeSpc4.tex -- a mini-specimen The principal attraction of TypeSpc4 is the {\tt\string\makefontbox} macro which gives a kind miniature specimen that can be as little or as large as you like. In the examples I give, the grid is certainly optional as is the use of color: They are merely suggestions to get you started. The five arguments to {\tt\string\makefontbox} are as follows: \medskip \vbox{\raggedright\parskip3pt \itemitem{\#1}\TeX's name for the desired font \itemitem{\#2}The name font name as you want it to print \itemitem{\#3}The name of the type's designer, or other salient piece of information that lends itself to display \itemitem{\#4}The size of the type inside the box \itemitem{\#5}The overall desired width of the box} \section TypeSpc5.tex -- by the numbers It is very often useful to know where the characters of a typeface are, and to gain an overall impression of all of the characters of a font. This specimen is simply an enumeration of the characters with respect to their character numbers. The macro to notice is {\tt\string\lineofchars}. You can specify how may characters are to be in the line, and what the numerical starting point will be. Numerous other design variables can be specified, and they are discussed in TypeSpc5.tex. \section TypeSpc6.tex -- for florid fonts There are times when you simply have to see a font in all its splendor. You don't need it at every imaginable size. And in the case of ornate calligraphic fonts, it does not make any sense at all to shove uppercase letters together for any reason, not even for display. \section TypeSpc7.tex -- homage \`a Caslon This ornate example is meant to be both fun and useful. It was inspired by the specimen sheets of William Caslon. The names of the type sizes~--~Ruby, Minion, Brevier, etc.~--~are traditional and could be replaced with sizes in points. This is a useful sample for PostScript typefaces which are often packaged as a family of four fonts: roman, italic, bold and bold-italic. The principle fonts are the roman and italic, however, and these are the fonts primarily featured in this specimen. The sample text is in a token list and can be changed at will~--~just make sure that there is enough of it. \section TypeSpc8.tex This specimen uses techniques that we have established in earlier samples. Again, this is suitable for typefaces that exist in pairs (or pairs of pairs) of fonts: roman and italic, bold and bold-italic. There is also a macro for a single, centered paragraph that could be used, say, for small caps. The type size, leading and type factor are given for each font. \section TypeSpc9.tex I combined two formats here to show off the principal characteristics of the roman along with the fonts of the family as used for text. \section TypeSp10.tex Another variation using one sample per line. Also notice the very beautiful typeface. \bigskip \hrule \section Stephen Moye, 23 IV 1998 Stephen\hbox to .5em{\hrulefill}Moye@brown.edu\hfill\break Brown University Graphic Services \bye \ No newline at end of file
diff --git a/macros/plain/contrib/address b/macros/plain/contrib/address
new file mode 120000
index 0000000000..3e76dc793e
--- /dev/null
+++ b/macros/plain/contrib/address
@@ -0,0 +1 @@
+../../../macros/latex209/contrib/address \ No newline at end of file
diff --git a/macros/plain/contrib/badge/addresses.tex b/macros/plain/contrib/badge/addresses.tex
new file mode 100644
index 0000000000..f835713847
--- /dev/null
+++ b/macros/plain/contrib/badge/addresses.tex
@@ -0,0 +1,28 @@
+Nelson Beebe
+Univ. of Utah USA
+Victor Eijkhout
+Univ. of Illinois USA
+Frank Mittelbach
+Electronic Data Sytems BRD
+Donald E. Knuth
+Stanford University USA
+Yannis Haralambous
+Universit\'e de Lille FRANCE
+Doug Henderson
+Blue Sky Research USA
+Gustav Neumann
+Vienna University AUSTRIA
+Michael J. Ferguson
+Universit\'e de Qu\'ebec CANADA
+Pierre MacKay
+University of Washington USA
+Helmut J\"urgensen
+Un. of Western Ontario CANADA
+Joachim Lamarsch
+Universit\"at Heidelberg BRD
+Ron Whitney
+\TeX\ Users Group USA
+Amy Hendrickson
+\TeX nology Inc. USA
+Andrew Trevorrow
+\TeX freelancer AUSTRALIA
diff --git a/macros/plain/contrib/badge/badges.ps b/macros/plain/contrib/badge/badges.ps
new file mode 100644
index 0000000000..4772612432
--- /dev/null
+++ b/macros/plain/contrib/badge/badges.ps
@@ -0,0 +1,425 @@
+%!PS-Adobe-2.0
+%%Creator: dvips, version 5.4 (C) 1986-90 Radical Eye Software
+%%Title: badges.dvi
+%%Pages: 1 1
+%%BoundingBox: 0 0 596 843
+%%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}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]{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}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 44 128 df<03C007800F000E001E003C00780070
+00E0000A0976A219>19 D<F0F0F0F004047B830E>46 D<000F0000001F8000001F8000001B8000
+003BC0000039C0000079E0000071E0000070E00000F0F00000F0F00000E0F00001E0780001E078
+0001C0780003C03C0003C03C0003803C0007801E0007801E0007001E000F000F000FFFFF001FFF
+FF801FFFFF801E0007803C0003C03C0003C0380003C0780001E0780001E0700001E0F00000F0F0
+0000F0E00000F01C237EA221>65 D<FFFE00FFFFC0FFFFE0F003F8F000F8F0003CF0001EF0001E
+F0000EF0000EF0001EF0001CF0003CF00078F001F0FFFFE0FFFF80FFFFE0F007F0F000F8F0003C
+F0001EF0000EF0000FF0000FF0000FF0000FF0000FF0001EF0003EF0007CF001F8FFFFF0FFFFE0
+FFFF0018237BA221>I<000FF000007FFC0000FFFF0003F01F0007C007000F8000000F0000001E
+0000003E0000003C0000007C000000780000007800000078000000F0000000F0000000F0000000
+F0000000F0000000F0000000F0000000F0000000F00000007800000078000000780000007C0000
+003C0000003E0000001E0000000F0000000F80008007C0038003F00F8000FFFF00007FFC00000F
+F00019257CA320>I<FFFF0000FFFFC000FFFFF000F001F800F0007C00F0003E00F0001F00F000
+0F00F0000780F0000780F00003C0F00003C0F00003C0F00001E0F00001E0F00001E0F00001E0F0
+0001E0F00001E0F00001E0F00001E0F00001E0F00001C0F00003C0F00003C0F00007C0F0000780
+F0000F80F0001F00F0003E00F0007C00F001F800FFFFF000FFFFE000FFFF00001B237BA224>I<
+FFFFF8FFFFF8FFFFF8F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000
+F00000F00000FFFFF0FFFFF0FFFFF0F00000F00000F00000F00000F00000F00000F00000F00000
+F00000F00000F00000F00000F00000F00000FFFFFCFFFFFCFFFFFC16237BA21E>I<FFFFF0FFFF
+F0FFFFF0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
+00F00000FFFFC0FFFFC0FFFFC0F00000F00000F00000F00000F00000F00000F00000F00000F000
+00F00000F00000F00000F00000F00000F00000F0000014237BA21C>I<001FE000007FFC0000FF
+FF0003F01F0007C007000F8000000F0000001E0000003C0000003C000000780000007800000078
+00000078000000F0000000F0000000F0000000F0000000F0000000F0000000F001FF80F001FF80
+F001FF80780007807800078078000780780007803C0007803C0007801E0007800F0007800F8007
+8007C0078003F00F8000FFFF80007FFE00001FF00019257CA321>I<F0000FF0000FF0000FF000
+0FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFF
+FFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF000
+0FF0000FF0000FF0000FF0000FF0000F18237BA223>I<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004237BA20E>I<F00000F00000F00000F00000F0
+0000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0
+0000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0
+0000F00000FFFFE0FFFFE0FFFFE013237BA21B>76 D<FC000FFE000FFE000FF7000FF7000FF780
+0FF3800FF3800FF3C00FF1C00FF1E00FF0E00FF0F00FF0F00FF0780FF0780FF0380FF03C0FF01C
+0FF01E0FF01E0FF00F0FF00F0FF0070FF0078FF0038FF003CFF001CFF001CFF001EFF000EFF000
+EFF0007FF0007FF0003F18237BA223>78 D<000FC000007FF80000FFFC0003F03F0007C00F800F
+8007C00F0003C01E0001E03C0000F03C0000F078000078780000787800007870000038F000003C
+F000003CF000003CF000003CF000003CF000003CF000003CF000003CF000003C78000078780000
+78780000787C0000F83C0000F03E0001F01E0001E00F0003C00F8007C007C00F8003F03F0001FF
+FE00007FF800000FC0001E257DA325>I<000FC000007FF80000FFFC0003F03F0007C00F800F80
+07C00F0003C01E0001E03E0001F03C0000F07C0000F8780000787800007878000078F000003CF0
+00003CF000003CF000003CF000003CF000003CF000003CF000003CF000003C7800007878000078
+78000078780780783C03C0F03C01E0F01E01F1E00F00F3C00F807FC007C07F8003F03F0001FFFE
+00007FFF00000FCF80000007C0000003C0000003E0000001F0000000F81E2A7DA325>81
+D<FFFE0000FFFFC000FFFFE000F003F000F0007800F0003C00F0001C00F0001E00F0001E00F000
+1E00F0001E00F0001E00F0001C00F0003C00F0007800F003F000FFFFE000FFFFC000FFFE0000F0
+0F0000F0070000F0078000F003C000F003C000F001E000F000E000F000F000F0007800F0007800
+F0003C00F0003C00F0001E00F0000F00F0000F00F000078019237BA220>I<00FF0003FFE007FF
+F00F81F01E00703C00003C00007800007800007800007800007800007C00003E00003F00001FE0
+000FFC0007FF8001FFC0003FE00003F00000F800007800007C00003C00003C00003C00003C0000
+3C00003CC00078E00078F800F07F03E01FFFC00FFF8001FE0016257EA31C>I<FFFFFFF8FFFFFF
+F8FFFFFFF800078000000780000007800000078000000780000007800000078000000780000007
+800000078000000780000007800000078000000780000007800000078000000780000007800000
+078000000780000007800000078000000780000007800000078000000780000007800000078000
+000780000007800000078000000780001D237EA222>I<F0001EF0001EF0001EF0001EF0001EF0
+001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0
+001EF0001EF0001EF0001EF0001EF0001EF0001EF0001EF0001E78003C78003C7C007C3C00781E
+00F00F83E007FFC003FF8000FE0017247BA222>I<F000003CF000003C78000078780000787800
+00783C0000F03C0000F03E0000F01E0001E01E0001E00F0003C00F0003C00F0003C00780078007
+8007800780078003C00F0003C00F0001E00E0001E01E0001E01E0000F01C0000F03C0000F03C00
+007838000078780000387000003C7000003CF000001CE000001CE000001EE000000FC000000FC0
+00000FC0001E237FA221>I<F0000F0000F0F0001F8000F0F0001F8000F078001B8001E078003B
+8001E0780039C001E0780039C001E03C0039C003C03C0079C003C03C0071E003C01E0070E00380
+1E0070E007801E00F0F007801E00E0F007800F00E07007000F00E0700F000F01E0780F000701C0
+780E000781C0381E000781C0381E000783C03C1E000383803C1C0003C3801C3C0003C3801C3C00
+03C7001E3C0001C7001E380001C7000E380001E7000E780000E6000E700000EE0007700000EE00
+07700000EE00077000007C0007E000007C0003E000007C0003E0002C237FA22F>I<780001F07C
+0001E03E0003C01F0007C00F0007800F800F0007C01F0003C01E0001E03C0001F07C0000F87800
+0078F000003DE000003FE000001FC000000F800000078000000F8000001FC000001FE000003DF0
+000078F00000F8780000F03C0001E03E0003E01E0003C00F0007800F800F8007C00F0003C01E00
+01E03E0001F07C0000F078000078F800007C1E237FA221>I<03F0001FFC003FFE00381F00200F
+00000780000780000780000780000F8003FF801FFF803F0780780780F00780F00780F00780F007
+807C1F807FFF803FF7801F878011167E9518>97 D<F00000F00000F00000F00000F00000F00000
+F00000F00000F00000F00000F00000F00000F00000F0F800F3FE00FFFF00FE1F80F80780F003C0
+F003C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F003E0F003C0F007C0F80780FC1F00
+FFFE00F7FC00F1F00013237CA21A>I<01FC0007FF000FFF801F03803C01807800007800007800
+00F00000F00000F00000F00000F00000F000007800007800007800003C00401F03C00FFFC007FF
+8001FC0012167E9516>I<0001E00001E00001E00001E00001E00001E00001E00001E00001E000
+01E00001E00001E00001E003F1E007FDE00FFFE01F07E03C03E07C01E07801E0F801E0F001E0F0
+01E0F001E0F001E0F001E0F001E0F001E07801E07803E03C03E03F0FE01FFDE00FF9E003E1E013
+237EA21A>I<03F00007FC001FFE003E0F003C0780780380780380F001C0FFFFC0FFFFC0FFFFC0
+F00000F00000F000007000007800007800003C00801F07800FFF8007FF0001F80012167E9516>
+I<003F00FF01FF03C0038007800780078007800780078007800780FFF8FFF8FFF8078007800780
+0780078007800780078007800780078007800780078007800780078007800780102380A20F>I<
+01F07C07FFFC0FFFFC1F1F001E0F003C07803C07803C07803C07803C07801E0F001F1F000FFE00
+1FFC0019F0003800003800003C00001FFF001FFFE01FFFF03FFFF87C01F878007CF0003CF0003C
+F0003CF8007C7C00F83F03F01FFFE00FFFC001FE0016217F9519>I<F00000F00000F00000F000
+00F00000F00000F00000F00000F00000F00000F00000F00000F00000F0F800F3FE00F7FF00FE1F
+00FC0F80F80780F80780F00780F00780F00780F00780F00780F00780F00780F00780F00780F007
+80F00780F00780F00780F00780F0078011237CA21A>I<F0F0F0F0000000000000000000F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004237DA20B>I<F00000F00000F00000F00000F0
+0000F00000F00000F00000F00000F00000F00000F00000F00000F00780F00F00F01E00F03C00F0
+7800F0F000F1E000F3C000F7C000FFC000FFE000FFE000FDF000F8F800F07800F07C00F03E00F0
+1E00F01F00F00F00F00F80F007C012237CA218>107 D<F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F004237DA20B>I<F0FC03F0F3FF0FFCF7FF9FFEFE
+0FB83EFC07F01FF803E00FF803E00FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00F
+F003C00FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00FF003C00F20167C
+9529>I<F0F800F3FE00F7FF00FE1F00FC0F80F80780F80780F00780F00780F00780F00780F007
+80F00780F00780F00780F00780F00780F00780F00780F00780F00780F0078011167C951A>I<00
+FC0007FF800FFFC01F03E03E01F03C00F0780078700038F0003CF0003CF0003CF0003CF0003CF0
+003C7800787800787C00F83E01F01F03E00FFFC007FF8000FC0016167F9519>I<F0F800F3FE00
+FFFF00FE1F80F80780F007C0F003C0F003E0F001E0F001E0F001E0F001E0F001E0F001E0F003E0
+F003C0F007C0F80F80FC1F00FFFE00F7FC00F1F000F00000F00000F00000F00000F00000F00000
+F00000F00000F00000F0000013207C951A>I<F0E0F3E0F7E0FF00FE00FC00F800F800F000F000
+F000F000F000F000F000F000F000F000F000F000F000F0000B167C9511>114
+D<07F01FFC3FFE3C0E7806780078007C003F003FF01FF80FFC01FE001F000F000F000FC00FF81E
+FFFE3FFC0FF010167F9513>I<0F000F000F000F000F000F00FFF8FFF8FFF80F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F080F1C07FC07F803E00E1C7F9B12>I<F007
+80F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F00780F007
+80F00780F00780F00780F00F80F83F807FFF807FE7801F878011167C951A>I<F000F0F000F078
+01E07801E07801E03C03C03C03C03C03C01E07801E07800E07000F0F000F0F00070E00079E0007
+9E00039C00039C0003DC0001F80001F80001F80014167F9517>I<F000F0F800F07801E07801E0
+3C01E03C03C03E03C01E03801E07800F07800F0700070F00078F00078E00038E00039C0001DC00
+01DC0001D80000F80000F80000700000700000E00000E00000E00001C00001C0000380007F8000
+7F00007E000014207F9517>121 D<F0F0F0F0F0F0F0F00C047AA219>127
+D E /Fb 2 83 df<00003FFFF000000007FFFE00000001FFFF00001FE07FFFC0007FFC3FFFE001
+FFFE1FFFF003FFFC0FFFF807FFF807FFFC0FFFF003FFFC0FFFE003FFFE1FFFE001FFFE1FFFC001
+FFFF3FFF8000FFFF3FFF800000007FFF000000007FFF000000007FFF00000000FFFF00000000FF
+FE00000000FFFE00000000FFFE00000000FFFE00000000FFFE00000000FFFE00000000FFFE0000
+0000FFFE00000000FFFE00000000FFFF000000007FFF000000007FFF000000007FFF000000003F
+FF800000003FFF8000FFFF1FFFC001FFFF1FFFE001FFFE0FFFE003FFFE0FFFF003FFFC07FFF807
+FFFC03FFFC0FFFF801FFFE1FFFF0007FFC3FFFE0001FE07FFFC0000001FFFF00000007FFFE0000
+003FFFF000302D80AC30>67 D<00007FF8000000007FFF8000000007FFF000FFFE01FFFC00FFFE
+00FFFE00FFFE007FFF00FFFE007FFF00FFFE003FFF80FFFE003FFF80FFFE001FFFC0FFFE001FFF
+C0FFFE001FFFC0FFFE001FFFC0FFFE001FFFC0FFFE001FFFC0FFFE003FFF80FFFE003FFF80FFFE
+007FFF00FFFE007FFF00FFFE00FFFE00FFFE01FFFC00000003FFF80000000FFFE000FFF8FFFF00
+00FFF8FFFE0000FFFC7FFF0000FFFC7FFF0000FFFE3FFF8000FFFE3FFF8000FFFE1FFFC000FFFE
+1FFFC000FFFE0FFFE000FFFE0FFFE000FFFE07FFF000FFFE03FFF800FFFE03FFF800FFFE01FFFC
+00FFFE01FFFC00FFFE00FFFE00FFFE00FFFE00FFFE007FFF00FFFE007FFF00FFFE003FFF80FFFE
+003FFF80FFFE001FFFC0FFFE000FFFE02B2E80AD28>82 D E /Fc 3 118
+df<0000000FFF00000000000001FFFFF0000000000007FFFFFE00000000003FFFFFFFC0000000
+00FFFFFFFFF000000001FFF801FFF800000007FF00000FFE0000000FFC000003FF0000003FF000
+0000FFC000007FC00000003FE00000FF000000000FF00001FE0000000007F80003F80000000001
+FC0007F00000000000FE000FE000000000007F000FC000000000003F001F8000000000001F803F
+0000000000000FC03F0000000000000FC07E00000000000007E0FC00000000000003F000000000
+00000003F00000000000000001F80000000000000001F80000000000000000F800000000000000
+00FC00000000000000007C00000000000000007C00000000000000003E00000000000000003E00
+000000000000003E00000000000000003E00000000000000003F00000000000000001F00000000
+000000001F0000000001FFFFFFFF0000000001FFFFFFFF0000000001FFFFFFFF0000000001FFFF
+FFFF0000000001FFFFFFFF0000000001FFFFFFFF00000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000003E00000000
+000000003E00000000000000007E00000000000000007C0000000000000000FC00000000000000
+00F80000000000000001F80000000000000001F80000000000000003F00000000000000003F000
+00000000000007E0000000000000000FC0000000000000000FC0000000000000001F8000000000
+0000003F00000000000000007F0000000000000000FE0000000000000001FC0000000000000007
+F8000000000000000FF0000000000000003FE000000000000000FFC000000000000003FF000000
+000000000FFE0000000000F801FFF80000000000FFFFFFF00000000000FFFFFFC00000000000FF
+FFFE000000000000FFFFF80000000000000FFF00000000484C7CC14E>101
+D<07FF0007FF0007FF0007FF0007FF0007FF0007FF0007FF0007FF0007FF0007FF0007FF00FFFF
+FCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFC07FF0007FF0007FF0007FF0007FF0007FF
+0007FF0007FF0007FF0007FF0007FF0007FF0007FF0007FF0007FF0007FF0007FF0007FF0007FF
+0007FF0007FF0007FF0007FF0007FF8007FFFC07FFFC03FFFC03FFFC03FFFC01FFFC01FFFC00FF
+FC007FFC16357DB41C>116 D<FFE001FFC0FFE001FFC0FFE001FFC0FFE001FFC0FFE001FFC0FF
+E001FFC0FFE001FFC0FFE001FFC0FFE001FFC0FFE001FFC0FFE001FFC0FFE001FFC0FFE001FFC0
+FFE001FFC0FFE001FFC0FFE001FFC0FFE001FFC0FFE001FFC0FFE001FFC0FFE001FFC0FFE001FF
+C0FFE001FFC0FFE001FFC0FFE001FFC0FFE001FFC0FFE003FFC0FFE003FFC0FFE003FFC0FFF007
+FFC07FF80FFFC07FFC1FFFC07FFFFFFFC07FFFFFFFC03FFFFFFFC03FFFFFFFC01FFFFFFFC01FFF
+FDFFC00FFFF9FFC007FFF1FFC003FFC1FFC0007E00000022297DA728>I
+E /Fd 41 128 df<FFFFFFFFFFFFFFFF08087B8712>46 D<0001FF00000003FF80000007FFC000
+0007FFC0000007FFC000000FFFE000000FFFE000000FDFE000001FDFF000001FCFF000003FCFF8
+00003FCFF800003F8FF800007F87FC00007F87FC00007F07FC0000FF07FE0000FF03FE0000FE03
+FE0001FE03FF0001FE01FF0001FE01FF0003FC01FF8003FC00FF8003FC00FF8007F800FFC007F8
+007FC007F8007FC00FFFFFFFE00FFFFFFFE00FFFFFFFE01FFFFFFFF01FFFFFFFF01FE0001FF03F
+C0001FF83FC0000FF83FC0000FF87F80000FFC7F800007FC7F800007FCFF000007FE7E000003FC
+272A7EA92C>65 D<7FFFFE0000FFFFFFE000FFFFFFF800FFFFFFFC00FFFFFFFE00FF800FFF00FF
+8003FF00FF8001FF00FF8000FF80FF8000FF80FF80007F80FF80007F80FF80007F80FF8000FF80
+FF8000FF00FF8001FF00FF8003FE00FF800FFC00FFFFFFF800FFFFFFE000FFFFFFE000FFFFFFF8
+00FF801FFE00FF8003FF00FF8001FF00FF8000FF80FF80007F80FF80007FC0FF80007FC0FF8000
+7FC0FF80007FC0FF80007FC0FF80007FC0FF80007FC0FF8000FF80FF8001FF80FF8007FF00FFFF
+FFFF00FFFFFFFE00FFFFFFF800FFFFFFF0007FFFFF0000222A7BA92C>I<7FFFFE0000FFFFFFE0
+00FFFFFFF800FFFFFFFC00FFFFFFFE00FF800FFF00FF8001FF80FF8000FFC0FF80007FC0FF8000
+3FE0FF80003FE0FF80001FF0FF80001FF0FF80000FF0FF80000FF0FF80000FF8FF80000FF8FF80
+000FF8FF80000FF8FF80000FF8FF80000FF8FF80000FF8FF80000FF8FF80000FF8FF80000FF8FF
+80000FF8FF80000FF8FF80000FF8FF80000FF0FF80001FF0FF80001FF0FF80001FE0FF80003FE0
+FF80007FE0FF8000FFC0FF8001FF80FF800FFF80FFFFFFFF00FFFFFFFC00FFFFFFF800FFFFFFE0
+007FFFFE0000252A7BA92F>68 D<7FFFFFE0FFFFFFF0FFFFFFF0FFFFFFF0FFFFFFF0FFFFFFE0FF
+800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000
+FF800000FFFFFFC0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFC0FF800000FF800000FF8000
+00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FFBF
+FFF0FFFFFFF8FFFFFFF8FFFFFFF8FFFFFFF8FFFFFFF87FFFFFF01D2A7BA926>I<7FFFFFE0FFFF
+FFF0FFFFFFF0FFFFFFF0FFFFFFF0FFFFFFE0FF800000FF800000FF800000FF800000FF800000FF
+800000FF800000FF800000FF800000FF800000FF800000FF800000FFFFFF80FFFFFFC0FFFFFFC0
+FFFFFFC0FFFFFFC0FFFFFF80FF800000FF800000FF800000FF800000FF800000FF800000FF8000
+00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF80
+00007F0000001C2A7BA925>I<0001FFE000000FFFFC00007FFFFF0000FFFFFFC001FFFFFFC003
+FFFFFFC007FF807F800FFE000F801FF80007801FF00001803FF00001803FE00000007FE0000000
+7FC00000007FC00000007FC0000000FF80000000FF80000000FF80000000FF80000000FF800000
+00FF80000000FF80000000FF8007FFE0FF8007FFE0FF8007FFE0FF8007FFE0FF8007FFE07FC007
+FFE07FC0001FE07FC0001FE07FE0001FE03FE0001FE03FF0001FE01FF0001FE01FF8001FE00FFE
+001FE007FF803FE003FFFFFFE001FFFFFFE000FFFFFFE0007FFFFF80000FFFFE000001FFE00023
+2C7CAA2C>I<7F00000FE0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF8000
+1FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80
+001FF0FF80001FF0FF80001FF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FF
+FFFFFFF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0
+FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001F
+F0FF80001FF0FF80001FF0FF80001FF07F00000FE0242A7BA92F>I<0003F80007FC0007FC0007
+FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007
+FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007FC0007
+FC0007FC0007FC0007FC4007FC6007FC700FFC7C3FF8FFFFF8FFFFF0FFFFF07FFFE01FFF8001FE
+00162B7DA91F>74 D<7E00000FF0FF00001FF0FF00003FE0FF00007FC0FF0000FF80FF0001FF00
+FF0003FE00FF0007FC00FF000FF800FF001FF000FF003FE000FF007FC000FF00FF8000FF01FF00
+00FF03FE0000FF07F80000FF0FF00000FF1FF00000FF3FF80000FFFFF80000FFFFFC0000FFFFFE
+0000FFFFFF0000FFF9FF0000FFF0FF8000FFE07FC000FFC07FC000FF803FE000FF001FF000FF00
+0FF800FF000FF800FF0007FC00FF0003FE00FF0001FF00FF0001FF00FF0000FF80FF00007FC0FF
+00007FE0FF00003FE0FF00001FF0FF00000FF87E000007F0252A7BA92E>I<7F000000FF800000
+FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000
+00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF80
+0000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF
+800000FF800000FF800000FF800000FF800000FFFFFF80FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0
+7FFFFF801A2A7BA923>I<7FC000000FFCFFE000001FFEFFE000001FFEFFF000003FFEFFF00000
+3FFEFFF800007FFEFFF800007FFEFEF800007DFEFEFC0000FDFEFEFC0000FDFEFE7E0001F9FEFE
+7E0001F9FEFE7E0001F9FEFE7F0003F9FEFE3F0003F1FEFE3F0003F1FEFE3F8007F1FEFE1F8007
+E1FEFE1FC00FE1FEFE1FC00FE1FEFE0FC00FC1FEFE0FE01FC1FEFE0FE01FC1FEFE07E01F81FEFE
+07F03F81FEFE03F03F01FEFE03F87F01FEFE03F87F01FEFE01F87E01FEFE01FCFE01FEFE01FCFE
+01FEFE00FCFC01FEFE00FCFC01FEFE007CF801FEFE007FF801FEFE007FF801FEFE003FF001FEFE
+003FF001FEFE001FE001FEFE001FE001FEFE000FC001FE7C00000000FC2F2A7BA93A>I<7FE000
+03E0FFF00007F0FFF80007F0FFF80007F0FFFC0007F0FFFC0007F0FFFE0007F0FFFE0007F0FEFF
+0007F0FEFF0007F0FE7F8007F0FE7F8007F0FE3FC007F0FE3FC007F0FE1FE007F0FE1FE007F0FE
+0FF007F0FE0FF007F0FE07F807F0FE07F807F0FE03FC07F0FE03FC07F0FE01FE07F0FE01FE07F0
+FE00FF07F0FE00FF07F0FE007F87F0FE007F87F0FE003FC7F0FE003FC7F0FE001FE7F0FE001FE7
+F0FE000FF7F0FE000FF7F0FE0007FFF0FE0007FFF0FE0003FFF0FE0003FFF0FE0001FFF0FE0001
+FFF0FE0000FFF07C00007FE0242A7BA92F>I<7FFFFE00FFFFFFC0FFFFFFE0FFFFFFF8FFFFFFF8
+FF801FFCFF8007FEFF8003FEFF8001FEFF8001FFFF8001FFFF8001FFFF8001FFFF8001FFFF8001
+FFFF8001FFFF8001FFFF8001FEFF8003FEFF8007FEFF801FFCFFFFFFF8FFFFFFF0FFFFFFE0FFFF
+FF00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF
+800000FF800000FF800000FF800000FF800000FF800000FF8000007F000000202A7BA92A>80
+D<7FFFFC0000FFFFFFC000FFFFFFE000FFFFFFF800FFFFFFFC00FF800FFC00FF8003FE00FF8001
+FE00FF8001FF00FF8001FF00FF8001FF00FF8001FF00FF8001FF00FF8001FF00FF8001FF00FF80
+01FE00FF8001FE00FF8003FE00FF800FFC00FFFFFFF800FFFFFFF000FFFFFFC000FFFFFE0000FF
+81FF0000FF80FF0000FF80FF8000FF807FC000FF807FC000FF803FE000FF803FE000FF801FF000
+FF801FF000FF800FF800FF800FF800FF8007FC00FF8003FC00FF8003FE00FF8001FF00FF8001FF
+00FF8000FF80FF8000FF807F00007F80212A7BA92A>82 D<7FFFFFFFFCFFFFFFFFFEFFFFFFFFFE
+FFFFFFFFFEFFFFFFFFFE7FFFFFFFFC0001FF00000001FF00000001FF00000001FF00000001FF00
+000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF
+00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001
+FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF000000
+01FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000000FE0000
+272A7EA92C>84 D<FF000000FEFF800001FEFF800001FEFFC00001FE7FC00003FC7FC00003FC7F
+E00003FC3FE00007F83FE00007F83FF00007F81FF0000FF01FF0000FF01FF8001FF00FF8001FE0
+0FF8001FE00FFC003FE007FC003FC007FC003FC003FE007F8003FE007F8003FF007F8001FF00FF
+0001FF00FF0001FF80FF0000FF81FE0000FF81FE0000FF81FE00007FC3FC00007FC3FC00007FC3
+FC00003FE3F800003FE7F800001FE7F000001FE7F000001FF7F000000FFFE000000FFFE000000F
+FFE0000007FFC0000007FFC0000007FFC0000003FF8000272A7EA92C>86
+D<7F00007FC00007C0FF00007FE0000FE07F8000FFF0000FC07F8000FFF0001FC07F8000FFF000
+1FC07F8001FFF0001FC03FC001FFF8003F803FC001FBF8003F803FC001FBF8003F803FC003FBF8
+003F801FE003F3FC007F001FE003F1FC007F001FE003F1FC007F001FF007F1FC007F000FF007E1
+FE00FE000FF007E1FE00FE000FF007E0FE00FE000FF80FE0FE00FE0007F80FE0FF01FC0007F80F
+C0FF01FC0007F80FC07F01FC0003F81FC07F01F80003FC1FC07F83F80003FC1F807F83F80003FC
+1F803F83F80001FC1F803F83F00001FE3F003FC3F00001FE3F003FC7F00001FE3F001FC7F00000
+FE3F001FC7E00000FE7E001FC7E00000FF7E001FEFE00000FF7E000FEFE000007F7E000FEFC000
+007F7C000FEFC000007FFC000FFFC000007FFC0007FFC000003FFC0007FF8000003FF80007FF80
+00003FF80003FF8000001FF80003FF0000001FF00001FF00003B2A7FA93E>I<7F8000007F00FF
+E00000FF807FE00001FF003FF00003FE003FF80003FE001FF80007FC000FFC000FF8000FFE000F
+F80007FE001FF00003FF003FE00003FF803FE00001FF807FC00000FFC0FF800000FFE0FF800000
+7FE1FF0000003FF1FE0000003FF3FE0000001FFBFC0000000FFFF80000000FFFF800000007FFF0
+00000003FFE000000003FFE000000001FFC000000000FF8000000000FF8000000000FF80000000
+00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80
+00000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000
+00FF80000000007F000000292A7FA92C>89 D<00FFC007FFF01FFFFC1FFFFE1F01FE1C00FF1800
+FF1000FF0000FF0000FF0000FF00FFFF07FFFF1FF0FF3FC0FF7F80FF7F00FFFF00FFFF00FFFF00
+FFFF00FFFF81FF7F87FF7FFEFF3FFCFF1FF8FF07C07E181B7E9A1F>97 D<7E000000FF000000FF
+000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+FF000000FF000000FF000000FF07F000FF1FFC00FF7FFE00FFFFFF00FFC0FF80FF007FC0FF003F
+C0FF003FC0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF00
+1FE0FF001FE0FF001FC0FF003FC0FF003FC0FF007F80FFC1FF80FFFFFF00FF7FFE00FF3FF8007E
+0FE0001B2A7CA922>I<007FE003FFFC07FFFF0FFFFF1FE03F3FC00E7F80067F80007F0000FF00
+00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00007F00007F80017F80033FC00F1FE0
+3F0FFFFF07FFFF03FFFC007FE0181B7E9A1D>I<00000FC000001FE000001FE000001FE000001F
+E000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE00000
+1FE000FE1FE007FF9FE00FFFDFE01FFFFFE03FF07FE03FC01FE07F801FE07F801FE0FF001FE0FF
+001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0
+7F801FE07F801FE03FC03FE03FE07FE01FFFFFE00FFFDFE007FF1FE000FC0FC01B2A7EA922>I<
+007FE00003FFF80007FFFC000FFFFE001FE0FF003FC03F807F801F807F001FC07F001FC0FF001F
+C0FF001FC0FFFFFFC0FFFFFFC0FFFFFF80FF000000FF000000FF000000FF0000007F0000007F80
+00003F8000403FC001C01FF01FC00FFFFFC007FFFFC001FFFF00007FF0001A1B7E9A1F>I<01FF
+80F007FFE3F81FFFFFF83FFFFC387F81FE007F00FE00FF00FF00FF00FF00FF00FF00FF00FF00FF
+00FF00FF00FF00FF00FF007F00FE007F81FE003FFFFC001FFFF80017FFE00031FF800030000000
+380000003C0000003FFFF8003FFFFF003FFFFF801FFFFFC01FFFFFE03FFFFFE07E000FF0FC0007
+F0FC0003F0FC0003F0FC0003F0FC0003F07E0007E07F801FE03FFFFFC01FFFFF8007FFFE0000FF
+F0001D287E9A21>103 D<7E000000FF000000FF000000FF000000FF000000FF000000FF000000
+FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF03F800FF0FFE
+00FF1FFF00FF3FFF00FF60FF80FFC07F80FF807F80FF807F80FF007F80FF007F80FF007F80FF00
+7F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF
+007F80FF007F80FF007F80FF007F80FF007F807E003F00192A7CA922>I<7F00FF80FF80FF80FF
+80FF80FF80FF807F0000000000000000000000000000003F007F807F807F807F807F807F807F80
+7F807F807F807F807F807F807F807F807F807F807F807F807F807F807F807F807F807F803F0009
+2B7EAA0F>I<007F0000FF8000FF8000FF8000FF8000FF8000FF8000FF80007F00000000000000
+000000000000000000000000000000003F00007F80007F80007F80007F80007F80007F80007F80
+007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80
+007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8040FF00
+FFFF00FFFE00FFFE003FFC000FF000113784AA11>I<7C0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00FEFE01FEFE03FCFE07
+F8FE0FF0FE1FE0FE3FC0FE7F80FEFF00FFFE00FFFC00FFFC00FFFE00FFFE00FFFF00FFFF80FF7F
+C0FE3FC0FE1FE0FE1FF0FE0FF0FE07F8FE07FCFE03FCFE01FEFE01FF7C00FE182A7BA920>I<7E
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FF7E082A7DA90F>I<7E03FC00FF00FF0FFE03FF80FF1FFF07FFC0FF3FFF8FFFE0FF707FDC1FF0
+FFC03FF00FF0FF803FE00FF0FF803FE00FF0FF003FC00FF0FF003FC00FF0FF003FC00FF0FF003F
+C00FF0FF003FC00FF0FF003FC00FF0FF003FC00FF0FF003FC00FF0FF003FC00FF0FF003FC00FF0
+FF003FC00FF0FF003FC00FF0FF003FC00FF0FF003FC00FF0FF003FC00FF0FF003FC00FF0FF003F
+C00FF0FF003FC00FF07E001F8007E02C1B7C9A35>I<7E03F800FF0FFE00FF1FFF00FF3FFF00FF
+60FF80FFC07F80FF807F80FF807F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80
+FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F
+80FF007F80FF007F807E003F00191B7C9A22>I<007FE00003FFFC0007FFFE001FFFFF801FE07F
+803FC03FC07F801FE07F801FE07F000FE0FF000FF0FF000FF0FF000FF0FF000FF0FF000FF0FF00
+0FF0FF000FF0FF000FF0FF000FF07F000FE07F801FE07F801FE03FC03FC03FE07FC01FFFFF800F
+FFFF0003FFFC00007FE0001C1B7E9A21>I<7E07FF1FFF3FFF7FFF7FFFFFFFF8FFE0FF80FF80FF
+00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF007E00101B7C9A16>
+114 D<03FE001FFFC03FFFF07FFFF07E03F0FC00E0FC0060FC0000FE0000FFC000FFFC007FFF80
+3FFFC01FFFE00FFFF007FFF0007FF84007F84001F86001F87001F8F801F8FE03F0FFFFF07FFFE0
+1FFF8003FE00151B7E9A19>I<07E0000FF0000FF0000FF0000FF0000FF0000FF0000FF0007FFF
+C0FFFFE0FFFFE07FFFC00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0
+000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0200FF8E007FFF007FFF003FFC001FE
+0014237FA218>I<7E003F00FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F
+80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF007F80FF00
+7F80FF007F80FF007F80FF00FF80FF00FF80FF01FF807F837F803FFE7F801FFC7F8007F03F0019
+1B7C9A22>I<7E0007C0FF000FE07F001FC07F001FC07F801FC03F803F803F803F803F803F801F
+C07F001FC07F001FC07F000FE0FE000FE0FE000FE0FE0007F1FC0007F1FC0007F1FC0007F9FC00
+03FBF80003FBF80003FFF80001FFF00001FFF00001FFF00000FFE00000FFE000007FC0001B1B7F
+9A1E>I<7E003E000F80FE003F001FC07F007F003F807F007F803F807F007F803F807F80FF803F
+803F80FFC07F003F80FFC07F003F80EFC07F001FC1EFC07E001FC1E7E0FE001FC1E7E0FE001FC3
+E7E0FE000FE3C7E1FC000FE3C7F1FC000FE3C3F1FC000FF7C3F1FC0007F783FBF80007F783FBF8
+0007FF81FBF80003FF81FFF00003FF01FFF00003FF01FFF00003FF00FFF00001FF00FFE00001FE
+00FFE00000FC007FC0002A1B7F9A2D>I<FC000F80FE001F80FF003F80FF003F807F003F807F80
+7F003F807F003FC07F001FC0FE001FE0FE000FE0FE000FE1FC0007F1FC0007F1FC0007F1F80003
+F9F80003FBF80001FBF00001FBF00000FFF00000FFE000007FE000007FE000007FC000003FC000
+003F8000001F8000001F8000003F0000003F0000003F0000007E0000007E000060FE00007FFC00
+007FF800007FF000007FE000007F80000019277E9A1E>121 D<7F0FE0FF9FF0FF9FF0FF9FF0FF
+9FF0FF9FF0FF9FF0FF9FF07F0FE014097AAA21>127 D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300
+TeXDict begin @a4 /a4 where {pop a4} if
+%%EndSetup
+%%Page: 1 1
+bop 243 -40 a Fd(Nelson)22 b(Beeb)r(e)59 127 y Fc(tu)-40 b(e)570
+b Fb(R)s(C)234 273 y Fa(Univ.)23 b(of)17 b(Utah)f(USA)p 0 -140
+886 2 v 0 333 V -1 333 2 475 v 885 333 V 0 333 886 2 v 1111
+-40 a Fd(Victo)n(r)22 b(Eijkhout)945 133 y Fc(tu)-40 b(e)570
+b Fb(R)s(C)1105 273 y Fa(Univ.)23 b(of)17 b(Illinois)j(USA)p
+886 -140 V 886 333 V 885 333 2 475 v 1771 333 V 886 333 886
+2 v 196 433 a Fd(F)n(rank)i(Mittelbach)59 595 y Fc(tu)-40 b(e)570
+b Fb(R)s(C)131 736 y Fa(Electronic)18 b(Data)e(Sytems)f(BRD)p
+0 333 V 0 805 V -1 805 2 475 v 885 805 V 0 805 886 2 v 1085
+433 a Fd(Donald)22 b(E.)h(Knuth)945 595 y Fc(tu)-40 b(e)570
+b Fb(R)s(C)1066 736 y Fa(Stanfo)o(rd)15 b(Universit)o(y)j(USA)p
+886 333 V 886 805 V 885 805 2 475 v 1771 805 V 886 805 886
+2 v 154 905 a Fd(Y)-5 b(annis)21 b(Ha)n(ralamb)r(ous)59 1072
+y Fc(tu)-40 b(e)570 b Fb(R)s(C)145 1218 y Fa(Universit)o(\023)-24
+b(e)19 b(de)e(Lille)i(FRANCE)p 0 805 V 0 1278 V -1 1278 2 475
+v 885 1278 V 0 1278 886 2 v 1089 905 a Fd(Doug)i(Henderson)945
+1073 y Fc(tu)-40 b(e)570 b Fb(R)s(C)1072 1208 y Fa(Blue)18
+b(Sky)f(Resea)o(rch)f(USA)p 886 805 V 886 1278 V 885 1278 2
+475 v 1771 1278 V 886 1278 886 2 v 196 1378 a Fd(Gustav)22
+b(Neumann)59 1540 y Fc(tu)-40 b(e)570 b Fb(R)s(C)141 1681 y
+Fa(Vienna)17 b(Universit)o(y)h(A)o(USTRIA)p 0 1278 V 0 1750
+V -1 1750 2 475 v 885 1750 V 0 1750 886 2 v 1042 1378 a Fd(Michael)k(J.)g(F)n
+(erguson)945 1547 y Fc(tu)-40 b(e)570 b Fb(R)s(C)990 1684 y
+Fa(Universit)o(\023)-24 b(e)19 b(de)e(Qu)o(\023)-24 b(eb)q(ec)16
+b(CANAD)o(A)p 886 1278 V 886 1750 V 885 1750 2 475 v 1771 1750
+V 886 1750 886 2 v 227 1850 a Fd(Pierre)22 b(MacKa)n(y)59 2018
+y Fc(tu)-40 b(e)570 b Fb(R)s(C)117 2153 y Fa(Universit)o(y)18
+b(of)f(W)o(ashington)f(USA)p 0 1750 V 0 2223 V -1 2223 2 475
+v 885 2223 V 0 2223 886 2 v 1069 1850 a Fd(Helmut)21 b(J\177)-33
+b(urgensen)945 2023 y Fc(tu)-40 b(e)570 b Fb(R)s(C)964 2163
+y Fa(Un.)22 b(of)16 b(W)o(estern)h(Onta)o(rio)f(CANAD)o(A)p
+886 1750 V 886 2223 V 885 2223 2 475 v 1771 2223 V 886 2223
+886 2 v 180 2322 a Fd(Joachim)21 b(Lama)n(rsch)59 2485 y Fc(tu)-40
+b(e)570 b Fb(R)s(C)145 2626 y Fa(Universit\177)-24 b(at)17
+b(Heidelb)q(erg)i(BRD)p 0 2223 V 0 2695 V -1 2695 2 475 v 885
+2695 V 0 2695 886 2 v 1138 2322 a Fd(Ron)i(Whitney)945 2490
+y Fc(tu)-40 b(e)570 b Fb(R)s(C)1088 2624 y Fa(T)1114 2635 y(E)1137
+2624 y(X)17 b(Users)g(Group)f(USA)p 886 2223 V 886 2695 V 885
+2695 2 475 v 1771 2695 V 886 2695 886 2 v 191 2795 a Fd(Amy)k(Hendrickson)59
+2962 y Fc(tu)-40 b(e)570 b Fb(R)s(C)221 3097 y Fa(T)247 3108
+y(E)270 3097 y(Xnology)17 b(Inc.)22 b(USA)p 0 2695 V 0 3168
+V -1 3168 2 475 v 885 3168 V 0 3168 886 2 v 1067 2795 a Fd(Andrew)e(T)-5
+b(revo)n(rro)n(w)945 2956 y Fc(tu)-40 b(e)570 b Fb(R)s(C)1038
+3097 y Fa(T)1064 3108 y(E)1087 3097 y(Xfreelancer)18 b(A)o(USTRALIA)p
+886 2695 V 886 3168 V 885 3168 2 475 v 1771 3168 V 886 3168
+886 2 v eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/plain/contrib/badge/badges.readme b/macros/plain/contrib/badge/badges.readme
new file mode 100644
index 0000000000..67e6b6b085
--- /dev/null
+++ b/macros/plain/contrib/badge/badges.readme
@@ -0,0 +1,64 @@
+
+For the next symposium about supercomputing on our computing center I
+was asked to make badges with TeX for the participants. Although TeX is
+perhaps not the most suitable tool for such a `visual design' problem my
+visitcards (with our in house logos in METAFONT) made with TeX looked
+very similar to this problem.
+
+It would be nice if the badges can be made by secretaries having no
+experience with TeX at all. So I have made a `badges.tex' file which
+reads all participants names and their institution name from the file
+`addresses.tex'. Both are put on two consecutive lines. (The only thing I
+have to learn them is how to make diacritical symbols.)
+
+I have written a TeX macro \put(x,y,box) which places the badge `box' on
+position x,y of the paper (x number of centimeters from the left margin
+and y the number of centimeters above (negative!) the upper margin) by
+using some dirty tricks from the TeXbook. The essential part of the
+`badge.tex' program now consists of the following loop:
+ \newread\addressfile
+ \newif\ifGoOn \GoOntrue
+
+ \openin\addressfile=addresses
+ \ifeof\addressfile\message{Cannot open addresses}\end\fi
+
+ \read\addressfile to \text \let\name=\text
+ \loop
+ \read\addressfile to \text \let\inst=\text
+ \immediate\write16{Badge: \name \inst}
+ \badge{\name}{\inst}
+ \read\addressfile to \text \let\name=\text
+ \ifeof\addressfile\GoOnfalse\fi
+ \ifGoOn
+ \repeat
+
+Here is how \badge puts the new badge on place and ejects the page:
+ \newcount\cnt \cnt=0
+ \newdimen\X \newdimen\Y \X=0cm \Y=0cm
+
+ \def\badge#1#2{
+ \advance\cnt by1
+ \ifodd\cnt\X=0cm\advance\Y by-\height
+ \ifnum\Y<-\vsize\eject\cnt=1\X=0cm\Y=-\height\fi
+ \else\advance\X by\width
+ \fi
+ \put(\X,\Y,% don't leave this percent sign!
+ \vbox to \height{
+ \kern.5cm
+ {\namefont\hbox to\width{\hfill#1\hfill}}
+ \vfil % next line is site dependant !!!!!!
+ \hbox to \width{\kern.5cm{\tue tue}\hfill{\RC RC}\kern.5cm}
+ \vfil % above line is site dependant !!!!!!
+ {\addressfont\hbox to\width{\hfill#2\hfill}}
+ \kern.5cm%
+ })
+ }
+
+For those of you who also want to make there badges with TeX I have included
+a shar file containing: badges.tex, a sample addresses.tex file and the
+PostScript result badge.ps (with our logos). (You should change the lines in
+which I use our logos with suitable substitutes for your company!)
+
+Happy Badge-ing!
+
+--Piet
diff --git a/macros/plain/contrib/badge/badges.tex b/macros/plain/contrib/badge/badges.tex
new file mode 100644
index 0000000000..8c3bc25546
--- /dev/null
+++ b/macros/plain/contrib/badge/badges.tex
@@ -0,0 +1,90 @@
+%
+% BEGIN PARAMETERS
+%
+%===========================================================
+\hsize=16cm%\hoffset=-2.54cm
+\vsize=24cm\voffset=-1.54cm
+
+\def\height{4cm} % heigth of a badge
+\def\width{7.5cm} % width of a badge
+%===========================================================
+%
+% END PARAMETERS
+%
+
+\parskip=0pt
+\baselineskip=0pt
+\lineskip=0pt
+\nopagenumbers
+
+\font\RC=RC scaled 483 % take your own logo here
+\font\tue=tue scaled 403 % take your own logo here
+\font\namefont=cmssbx10 scaled\magstep2
+\font\addressfont=cmss10 scaled\magstep1
+
+\def\hidehrule#1#2{\kern-#1%
+ \hrule height#1 depth #2 \kern-#2 }
+\def\hidevrule#1#2{\kern-#1{\dimen0=#1
+ \advance\dimen0 by#2\vrule width\dimen0}\kern-#2 }
+\def\makeblankbox#1#2{\hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}%
+ \kern\ht0\hidehrule{#1}{#2}\kern-\ht0%
+ \kern-#1 % overlap the rules at the corners
+ \hbox to \wd0{\hidevrule{#1}{#2}%
+ \raise\ht0\vbox to #1{}% set the vrule heigth
+ \lower\dp0\vtop to #1{}% set the vrule depth
+ \hfil\hidevrule{#2}{#1}}%
+ \kern-#1\hidehrule{#2}{#1}
+ }}}
+
+\def\makelightbox{\makeblankbox{.2pt}{.2pt}}
+
+\def\nullbox#1#2#3{\setbox0=\null
+ \ht0=#1 \dp0=#2 \wd0=#3 \copy0\kern-\wd0\makelightbox}
+
+\newdimen\x \newdimen\y
+\def\put(#1,#2,#3){\setbox0=\hbox{#3}%
+ \x=#1\y=#2 \advance\y by\ht0 % put reference point of box at (x,y)
+ \vbox to 0pt{\kern-\y
+ \hbox{\kern\x\copy0\kern-\wd0\makelightbox}\vss}
+ \nointerlineskip}
+
+
+\newcount\cnt \cnt=0
+\newdimen\X \newdimen\Y \X=0cm \Y=0cm
+
+\def\badge#1#2{
+ \advance\cnt by1
+ \ifodd\cnt\X=0cm\advance\Y by-\height
+ \ifnum\Y<-\vsize\eject\cnt=1\X=0cm\Y=-\height\fi
+ \else\advance\X by\width
+ \fi
+ \put(\X,\Y,% don't leave this percent sign!
+ \vbox to \height{
+ \kern.5cm
+ {\namefont\hbox to\width{\hfill#1\hfill}}
+ \vfil % next line is site dependant !!!!!!
+ \hbox to \width{\kern.5cm{\tue tue}\hfill{\RC RC}\kern.5cm}
+ \vfil % above line is site dependant !!!!!!
+ {\addressfont\hbox to\width{\hfill#2\hfill}}
+ \kern.5cm%
+ })
+}
+
+\newread\addressfile
+\newif\ifGoOn \GoOntrue
+
+\openin\addressfile=addresses
+\ifeof\addressfile\message{Cannot open addresses}\end\fi
+
+\read\addressfile to \text \let\name=\text
+\loop
+ \read\addressfile to \text \let\inst=\text
+ \immediate\write16{Badge: \name \inst}
+ \badge{\name}{\inst}
+ \read\addressfile to \text \let\name=\text
+ \ifeof\addressfile\GoOnfalse\fi
+ \ifGoOn
+\repeat
+
+\closein\addressfile
+\bye
diff --git a/macros/plain/contrib/blanks/blanks-sample.tex b/macros/plain/contrib/blanks/blanks-sample.tex
new file mode 100644
index 0000000000..a0c2c6c740
--- /dev/null
+++ b/macros/plain/contrib/blanks/blanks-sample.tex
@@ -0,0 +1,45 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Example of use of macros
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\magnification=\magstephalf
+\font\AnsFont=cmtt10 at 14pt
+\parskip=1pc
+\parindent=15pt
+
+\newcount\QuestionNumber
+\QuestionNumber=1
+
+\def\Question{\hangindent\parindent\ignorespaces\noindent\number
+ \QuestionNumber.\space
+ \advance\QuestionNumber by 1}
+
+\DoAnswerstrue
+
+\noindent{\bf With Answers:}
+\medskip
+
+\Question If all men are mortal, and Socrates is a man then
+\Ans{Socrates is mortal man, as well as a Greek man}.
+
+\Question Five time four equals \Ans{20.}
+
+\Question Mares eat \Ans{oats}, and does eat \Ans{oats}, and little
+lambs eat \Ans{ivy}. I would eat ivy too, \Ans{wouldn't you}?
+
+\DoAnswersfalse
+
+\QuestionNumber=1
+\bigskip
+\noindent{\bf Without Answers:}
+\medskip
+
+\Question If all men are mortal, and Socrates is a man then
+\Ans{Socrates is mortal man, as well as a Greek man}.
+
+\Question Five time four equals \Ans{20.}
+
+\Question Mares eat \Ans{oats}, and does eat \Ans{oats}, and little lambs
+eat \Ans{ivy}. A kid'll eat ivy too, \Ans{would you}?
+
+\bye
diff --git a/macros/plain/contrib/blanks/blanks.tex b/macros/plain/contrib/blanks/blanks.tex
new file mode 100644
index 0000000000..f15cd37404
--- /dev/null
+++ b/macros/plain/contrib/blanks/blanks.tex
@@ -0,0 +1,34 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Fill-in-the-blank macros
+% Hal Varian
+% August 19, 1987
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%list processing routines taken from TeXbook, p. 310-11
+
+\def\dolist{\afterassignment\dodolist\let\next= }
+\def\dodolist{\ifx\next\endlist \let\next\relax
+ \else \\\let\next\dolist \fi
+ \next}
+\def\endlist{\endlist}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%print out answers or not?
+\newif\ifDoAnswers\DoAnswerstrue
+
+%See if next token is a space. If it is, set a low penalty for
+%line breaking. Set box 0 to be the next token. If we should
+%do answers, underscore box 0, back up and print box 0. Otherwise
+%just underscore box 0.
+\def\\{\expandafter\if\space\next\penalty0\fi\setbox0=\hbox{\next}\ifDoAnswers
+ \underscore\llap{\raise2pt\box0}\else\underscore\fi}
+
+%Underscore -- put in strut so there is enough space for handwriting.
+\def\underscore{\bigstrut\vrule height 0pt depth.5pt width\wd0}
+\def\bigstrut{\hbox{\vrule height 16pt width 0pt}}
+
+\def\Ans#1{\space{\AnsFont {\dolist#1\endlist}\underscore}}
+
+%%% ----cutting here would not be a bad idea-----------------------
diff --git a/macros/plain/contrib/bnf/bnf.tex b/macros/plain/contrib/bnf/bnf.tex
new file mode 100644
index 0000000000..06a4314de1
--- /dev/null
+++ b/macros/plain/contrib/bnf/bnf.tex
@@ -0,0 +1,72 @@
+%-----cut here with a sharp machete or an 19.95 ginsu knife
+%************************************************************************
+%* BNF.tex *
+%* *
+%* plain tex macros for formatting grammars *
+%* *
+%* Erik Quanstrom *
+%* 10. November 1990 *
+%************************************************************************
+
+%things to fix:
+% make configurable
+% work with texinfo
+
+\gdef\actifygrammarchars{%
+ \catcode`\>\active%
+ \catcode`\<\active%
+ \catcode`\:\active%
+ \catcode`\"\active%
+ \catcode`\;\active%
+ \catcode`\.\active%
+ \catcode`\|\active%
+ \catcode`\,\active}
+
+\gdef\deactifygrammarchars{%
+ \catcode`\>12%
+ \catcode`\<12%
+ \catcode`\:12%
+ \catcode`\;12%
+ \catcode`\.12%
+ \catcode`\|12%
+ \catcode`\,12}
+
+\newif\ifquote
+\quotefalse
+
+\begingroup
+ \actifygrammarchars
+ \gdef>{\/\endgroup$\rangle$\relax}
+ \gdef<{$\langle$\begingroup\sl}
+ \gdef:{$\rightarrow$}
+
+ \begingroup
+ \catcode`\"\active
+ \gdef"{\ifquote%
+ '\endgroup\quotefalse%
+ \else%
+ \quotetrue\begingroup\deactifygrammarchars\bf`%
+ \fi}%
+ \endgroup
+
+ \gdef;{\hfill\break}
+ \gdef.{\relax}
+ \gdef|{$\vert$}
+ \gdef,{;\hbox to 1cm{\hfill}}
+\endgroup
+
+\def\begingrammar{%
+ \begingroup
+ \advance\leftskip by 1cm%
+ \parindent=-1cm%
+ \actifygrammarchars%
+ \def\endgrammar{\endgroup}
+ \parskip 1ex%
+ \relax
+}
+
+%
+%
+%
+\def\ul{\lower .2ex\hbox to 1ex{\hrulefill}\relax}%
+
diff --git a/macros/plain/contrib/bnf/bnfexample.tex b/macros/plain/contrib/bnf/bnfexample.tex
new file mode 100644
index 0000000000..45d7f3b146
--- /dev/null
+++ b/macros/plain/contrib/bnf/bnfexample.tex
@@ -0,0 +1,106 @@
+% here's the example
+\input generic.tex
+\input bnf.tex
+
+\begingrammar
+%
+<input>: {$\phi$};
+ <statement>.\par
+
+<statement>: "$\{$" <compound> "$\}$" [";"] ;
+ <single> [";"] ;
+ ";".
+
+<compound>: <single> ";" <compound> ;
+ <single>.
+
+<single>: "if" "(" <expression> ")" <statement> ["else" <statement>];
+ "case" "$\{$" <case-body> "$\}$";
+ "for" "(" <expression> ";" <expression> ";" <expression> ")",
+ <statement>;
+ "while" "(" <expression> ")" <statement>;
+ "do" <expression> "while" "(" <expression> ")";
+ "sum" "(" <expression> ";" <expression> ")" <statment>;
+ "product" "(" <expression> ";" <expression> ")" <statment>;
+ "break";
+ "continue";
+ "return" <expression>;
+ "clear";
+ "load" <expression>;
+ "save" <expression>;
+ "release" <expression>;
+ "show" ["variables" | "functions" | "set" | "all" | <expression>];
+ "set" ["prompt" | "precision"] [<expression>];
+ <equation>.
+
+<case-body>: "case" <expression> ":" <compound> <case-body>;
+ "default:" <compound>
+
+<equation>: <var> "=" <expression>;
+ <var>"[" <selector> "]" = <expression>;
+ <function> = <input>;
+ <expression>.
+
+<selector>: <factor> "," <factor>;
+ <factor> ",";
+ "," <factor>.
+
+<expression>: <term> "+" <expression>;
+ <term> "--" <expression>.
+
+<term>: <factor> <operator> <term>.
+
+<factor> <pre-op> <factor$'$> <post-op>.
+
+<factor$'$>: <number>;
+ "+" <number>;
+ "--" <number>;
+ "(" <number> ")";
+ <variable>;
+ <variable>"[" <selector> "]";
+ <string>;
+ <matrix>;
+ <function>.
+
+<pre-op>: "++" | "--{\kern 1pt}--" | "$\sim$" | "!".
+
+<post-op>: "$\uparrow$" <factor>
+ | "**" <factor>;
+ "++" | "--{\kern 1pt}--" | "!".
+
+<matrix>: "[" <row-list> "]".
+
+<row-list>: "[" <value-list> "]" [","] <row-list>;
+ "[" <value-list> "]" [","] <row-list>;
+ <value-list>.
+
+<value-list>: [ <string> ] <expression> "," <value-list>;
+ [ <string> ] <expression>.
+
+<function>: <variable> "(" <arg-list> ")".
+
+<arg-list>: $\phi$;
+ <variable> "," <arglist>;
+ "\dots".
+
+<string>: " `` " <anything> " '' ".
+
+<number>: <real-number>;
+ "$\{$" <real-number> "," <real-number> "$\}$";
+ {$\backslash$}b[01][01]+;
+ {$\backslash$}o[07][07]+;
+ \$[0-9A-Fa-f][0-9A-Fa-f]+.
+
+%<real-number>: [\+--]?[0-9][0-9]+[\.[0-9]+]?[[eE][0-9][0-9]+].
+
+<operator>: "*" | "/" | "$\backslash$" | "\%";
+ "==" | "!=" | "$>$" | "$<$"
+ | "$<$=" | "$>$=";
+ "\ul =" | "\ul !=" | "\ul $<$" | "\ul $>$"
+ | "\ul$<$=" | "\ul$>$=";
+ "\&" | "$\vert$" | "$\uparrow\uparrow$";
+ "\&\&" | "$\Vert$" | "\ul$\uparrow$".
+
+\endgrammar
+\bye
+
diff --git a/macros/plain/contrib/bridge/README b/macros/plain/contrib/bridge/README
new file mode 100644
index 0000000000..a207fd22eb
--- /dev/null
+++ b/macros/plain/contrib/bridge/README
@@ -0,0 +1,12 @@
+%Macros for typesetting bridge publications via (plain) TeX. Version May 92.
+%The macros can als be used within LaTeX.
+%Version: 1.1 March 1994 (basically unmodified since publication in 1990)
+%Author: Kees van der Laan, Hunzeweg 57, 9893PB, Garnwerd (Gr),
+% The Netherlands. 05941-1525, cgl@risc1.rug.nl
+%Examples of use have been published in TUGboat, 11, 2, 265--276, and MAPS 91.2.
+%(A few are appended at the end of this file.This file can just be TeXed.)
+%The file consists of 3 independent parts:
+%- dec.tex ((language) declarations; used register and control sequences)
+%- bid.tex (macros for bidding and layout of games)
+%- play.tex (macros for discussing the course of a play)
+%
diff --git a/macros/plain/contrib/bridge/bid.tex b/macros/plain/contrib/bridge/bid.tex
new file mode 100644
index 0000000000..af4fce7b2e
--- /dev/null
+++ b/macros/plain/contrib/bridge/bid.tex
@@ -0,0 +1,58 @@
+%%%%%%%bid.tex%%%%%%% %Modified central figure
+\def\hand#1#2#3#4{%
+%Example: \hand{AKJ765}{AK9}{--}{T983}
+\vtop{\hbox{\strut\s\enspace#1}
+\hbox{\strut\h\enspace#2}
+\hbox{\strut\d\enspace#3}
+\hbox{\strut\c\enspace#4}}%end \vtop
+}%end \hand
+%
+\def\crdima#1#2#3#4#5#6{%
+%purpose: layout bridge hand
+%#1 left upper text
+%#2 right upper text
+%#3, #4, #5, #6: N, E, S, W hands
+\vbox{\halign{ &##\quad\cr
+ #1& #3& #2\cr
+ $\vcenter{#6}$&$\vcenter{\copy\NESW}$&
+ $\vcenter{#4}$\cr
+ & #5& \cr
+ }%end \halign
+ }%end \vbox
+}%end \crdima
+%
+\def\NESWfig{%
+\hbox{\vrule
+\vbox{\offinterlineskip\tabskip0pt
+\hrule\kern.25ex\halign{\hskip.5ex
+##\tabskip.5ex&\hfil##\hfil&
+##\hskip.5ex \tabskip0pt\cr
+\noalign{\vskip.5ex}
+ &\hbox to 2ex{\hss\N\hss}& \cr
+\kern.25ex\W& &\E\kern.25ex
+\cr
+ &\hbox to 2ex{\hss\S\hss}& \cr
+\noalign{\vskip.5ex}
+ }%end \halign
+\kern.25ex\hrule}%end \vbox
+\vrule}%end \hbox
+}% end \NESWfig
+\setbox\NESW\hbox{\NESWfig}
+%
+\def\ebid{\errormessage{%
+ bbid command is missing}}
+%
+\def\bbid{\bgroup%
+ \def\ebid{\egroup\egroup\egroup}
+ \def\alert{$^A$}
+ \def\think{$\ldots$\thinspace}
+ % etc.
+ \vtop\bgroup
+ \halign to\bidwidth\bgroup \tabskip2ex
+ plus 1ex minus 1ex& ##\hfil\cr
+ \FIH\hfil& \SEH\hfil&
+ \THH\hfil&\FOH\hfil\cr
+ \noalign{\vskip.5ex}
+}%end \bbid
+%end input bid.tex%
+%
diff --git a/macros/plain/contrib/bridge/dec.tex b/macros/plain/contrib/bridge/dec.tex
new file mode 100644
index 0000000000..c1eca95692
--- /dev/null
+++ b/macros/plain/contrib/bridge/dec.tex
@@ -0,0 +1,69 @@
+%%%%%%%dec.tex%%%%%%%
+%Card definitions
+\def\s{$\spadesuit$}
+\def\h{$\heartsuit$}
+\def\d{$\diamondsuit$}
+\def\c{$\clubsuit$} %cedille is not used
+%(Toks register) control sequences
+%for hands used by play macros:
+%showgame, pc, strip
+\let\NT\newtoks
+\NT\hnd%Dynamically one of:
+\NT\Ns\NT\Es\NT\Ss\NT\Ws
+\NT\Nh\NT\Eh\NT\Sh\NT\Wh
+\NT\Nd\NT\Ed\NT\Sd
+ \NT\Wd %Beware! Already
+%in TUGboat.sty in lower case
+\NT\Nc\NT\Ec\NT\Sc\NT\Wc
+%
+\def\english{
+%In central figure NESW
+\def\N{N}\def\E{E}\def\S{S}\def\W{W}
+%In heading bplay
+\def\NS{NS}\def\EW{EW}
+\def\TRICK{Trick}
+%Definition of hands
+%used by bbid
+\def\FIH{North}\def\SEH{East}
+\def\THH{South}\def\FOH{West}
+}% end \english
+\english%default
+%
+\def\LEADN{\gdef\FIP{N}\gdef\SEP{E}%
+ \gdef\THP{S}\gdef\FOP{W}}
+\def\LEADE{\gdef\FIP{E}\gdef\SEP{S}%
+ \gdef\THP{W}\gdef\FOP{N}}
+\def\LEADS{\gdef\FIP{S}\gdef\SEP{W}%
+ \gdef\THP{N}\gdef\FOP{E}}
+\def\LEADW{\gdef\FIP{W}\gdef\SEP{N}%
+ \gdef\THP{E}\gdef\FOP{S}}
+%Definition of counters
+%used by bplay
+\newcount\trno%trick number
+%Definition of dimensions
+%used in bbid
+\newdimen\wr %width column
+\wr=7ex \relax
+\def\bidwidth{4\wr}
+%used in crdima
+\newbox\NESW
+%
+\def\dutch{
+\def\FIH{Noord}\def\SEH{Oost}
+\def\THH{Zuid}\def\FOH{West}
+\def\N{N}\def\E{O}\def\S{Z}
+\def\W{W}\def\EW{OW}\def\NS{NZ}
+\def\TRICK{Slag}
+\setbox\NESW\hbox{\NESWfig}
+}%end \dutch
+%
+\def\french{
+\def\FIH{Nord}\def\SEH{Est}
+\def\THH{Sud}\def\FOH{Ouest}
+\def\N{N}\def\E{E}\def\S{S}
+\def\W{O}\def\EW{EO}\def\NS{NS}
+\def\TRICK{Lev\'ee}
+\setbox\NESW\hbox{\NESWfig}
+}%end \french
+%end input dec.tex
+%
diff --git a/macros/plain/contrib/bridge/examples.tex b/macros/plain/contrib/bridge/examples.tex
new file mode 100644
index 0000000000..a53c3f2135
--- /dev/null
+++ b/macros/plain/contrib/bridge/examples.tex
@@ -0,0 +1,81 @@
+%Examples: diagram, bidding, course of play.
+%
+\hsize=.5\hsize
+%1. Diagram
+$$\crdima{N/None}{\vtop{\hbox{Deal:}
+ \hbox{demo}}}%
+ {\hand{J74}{AJ}{QJT2}{Q874}}%N
+ {\hand{K86}{T9542}{874}{T3}}%E
+ {\hand{QT952}{Q83}{AK5}{A6}}%S
+ {\hand{A3}{K76}{963}{KJ952}}%W
+$$
+%2. Bidding
+$$\bbid
+1\c\alert& ? no& 1\s&\think no\cr
+ 2\s& no& 4\s& a.p.\cr
+\noalign{\vskip.5ex}
+\alert\ means Alert,
+ conventional bid\hidewidth\cr
+? means explanation
+ asked\hidewidth\cr
+\think means think
+ pause\hidewidth\cr
+\ebid $$
+%3. Course of play
+\def\LFTINF{Puzzle}
+\def\RGTINF{\vtop{\hbox{6NT,}
+ \hbox{by East}}}
+%
+\Ns={KQ76}\Es={T9}\Ss={8542}\Ws={AJ3}
+\Nh={J98} \Eh={A2}\Sh={QT74}\Wh={K653}
+\Nd={J942}\Ed={T5}\Sd={Q876}\Wd={AK3}
+\Nc={65}\Ec={KJ9xxxx}\Sc={2}\Wc={AQT}
+%
+\showgame
+
+*Problem* How must NS defend in order to
+guarantee 1 trick?
+
+*Solution* Start with a \h\
+lead in order to break communication.
+N must discard \h s
+and S must discard \s s.
+\smallskip\noindent
+\LEADS
+\bplay
+%\noalign{\LEADS}
+h4! & hK & h8 & h2 & -- & 1\LEADW\cr
+%\noalign{\LEADW}
+cA & c5 & cx & c2 & -- & 2\cr
+cQ & c6 & cx & s2 & -- & 3\cr
+cT & h9 & cK & s4 & -- & 4\LEADE\cr
+%\noalign{\LEADE}
+cJ & s5 & s3 & s6 & -- & 5\cr
+c9 & s8 & h5 & s7 & -- & 6\cr
+cx & d6 & sJ & d2 & -- & 7\cr
+\bintermezzo
+On lead of the next \c\
+neither South nor North can be
+squeezed as can be seen from%
+\def\RGTINF{\vtop{\hbox{NS squeezed on}
+ \hbox{\c\ continuation?}}}
+\showgame
+with continuation
+\eintermezzo
+cx & h7 & h6 & hJ & -- & 8\cr
+dT & d7 & dA & d4 & -- & 9\LEADW\cr
+%\noalign{\LEADW}
+dK & d9 & d5 & d8 & -- & 10\cr
+h3 & dJ & hA & hT & -- & 11\LEADE\cr
+%\noalign{\LEADE}
+sT & hQ & sA & sQ & -- & 12\LEADW\cr
+%\noalign{\LEADW}
+d3 & sK & s9 & dQ & 1 & 12\cr
+\eplay
+\bye
+%History of changes
+%March 1994 Prepared for NTG's CD-ROM
+% Examples of use added
+% NESW figure adapted
+%Jan 1994 Submitted to CTAN.
+
diff --git a/macros/plain/contrib/bridge/play.tex b/macros/plain/contrib/bridge/play.tex
new file mode 100644
index 0000000000..7f8af9f1a8
--- /dev/null
+++ b/macros/plain/contrib/bridge/play.tex
@@ -0,0 +1,83 @@
+%%%%%%%play.tex%%%%%%%
+%\input{play.tex} %Modified 11/11/91 Central table \bplay etc
+% bplay, showgame, pc, strip
+\def\eplay{\errormessage{%
+ bplay command is missing}}
+%
+\def\bplay{\bgroup\global\trno=0
+\def\eplay{\egroup\egroup}
+\def\bintermezzo{\noalign\bgroup
+ \smallskip\noindent}
+\def\eintermezzo{\smallskip\egroup}
+\tabskip1ex plus 1fill
+\halign to\hsize\bgroup
+ \tabskip1ex plus 1ex minus 1ex
+ \global\advance\trno by 1 %
+ \hbox to.5\wr{\hss\the\trno\hss}%<=!
+ \hbox to\wr{\pc\FIP##\hss}\hfil&
+ \hbox to\wr{\pc\SEP##\hss}\hfil&
+ \hbox to\wr{\pc\THP##\hss}\hfil&
+ \hbox to\wr{\pc\FOP##\hss}\hfil
+ \tabskip4ex plus2ex minus1ex&
+ \hbox to.5\wr{\hss##\hss}
+ \tabskip1ex plus 1ex minus 1ex&
+ \hbox to.5\wr{\hss##\hss}
+ \tabskip1ex plus 1fill\cr
+ %End template line, next is headline
+ \omit\hbox to1\wr{\TRICK\hss}\hfil&
+ \omit\hfil&\omit\hfil&\omit\hfil&
+ %Note only 3 \omits
+ \NS&\EW\cr%Headline
+}% end \bplay
+%
+\def\pc#1#2#3{% Version 3/3/90
+%Function: prints card #2#3 and
+% deletes it from player #1
+%#1 the hand N, E, S, W(uppercase)
+%#2 colour s, h, d, or c
+%#3 card value A K Q ... 2, or x
+%(or your (consistent/language) choice)
+%%%% 1. Update hand \#1#2; e.g. \Ns %%%
+\xdef\hnd{\csname #1#2\endcsname}
+\strip{#3}{\hnd}%
+%%%% 2. print card in table %%%
+\xdef\colour{\csname #2\endcsname}
+\colour\thinspace #3%
+% %Needed for immediate postfix mark(s)
+}% end \pc
+%
+\def\strip#1#2{% Version 3/3/90
+%Function: deletes card value #1
+% from #2, i.e., \Ns, or ...
+ \def\wis##1#1##2\wis{%
+ %Function: #1 is deleted from argument
+ % in \wis ... \wis and result
+ % is assigned to \hnd;
+ % (last card is replaced by --)
+ \global\hnd={##1##2}
+ \xdef\pa{##1} \xdef\pb{##2}
+ \ifx\pa\empty {\ifx\pb\empty
+ \global\hnd={--}% void colour
+ \fi}\fi
+ }% end \wis
+ \expandafter\wis\the #2\wis
+}% end \strip
+%
+\def\showgame{
+%Purpose: Shows all cards still active
+% in the play, via \Ns, ..., \Wc,
+% (note use of upper case for players)
+%Used: \crdima, \hand, \LFTINF, \RGTINF
+% \Ns, ..., \Wc
+$$\crdima{\LFTINF}{\RGTINF}%
+ {\hand{\the\Ns}{\the\Nh}{\the\Nd}%
+ {\the\Nc}}%
+ {\hand{\the\Es}{\the\Eh}{\the\Ed}%
+ {\the\Ec}}%
+ {\hand{\the\Ss}{\the\Sh}{\the\Sd}%
+ {\the\Sc}}%
+ {\hand{\the\Ws}{\the\Wh}{\the\Wd}%
+ {\the\Wc}}%
+$$}% end \showgame
+%end input play.tex % In total: 215 lines
+%
diff --git a/macros/plain/contrib/btable/btable.tex b/macros/plain/contrib/btable/btable.tex
new file mode 100644
index 0000000000..457998d3f9
--- /dev/null
+++ b/macros/plain/contrib/btable/btable.tex
@@ -0,0 +1,128 @@
+%Contents:Bordered table macro as introduced at EuroTeX '92 with some mods.
+%Version: December 1993.
+%Purpose: Typeset bordered tables, abstracting from separators,
+% and separation data proper from first row and column.
+%Example of use
+%\def\capbtbl{AT\&T Common Stock}
+%\def\header{Year\cs Price\cs Dividend}
+%\def\footer{* (first quarter only}
+%\def\data{1971\cs 41--54\cs\llap{\$}2.60\rs
+% 2\cs 41--54\cs 2.70}%et cetera
+%$$\flr\btable\data\qquad\framed\ruled\btable\data$$
+%Documentation: Proceedings EuroTeX '92, Prague, and MAPS 92.2.
+%Macro:
+%C.G. van der Laan, Hunzeweg 57, 9893PB, Garnwerd. Holland. 05941-1525.
+%btable.tex version 1, 17/7/92 author: cgl@risc1.rug.nl
+\newbox\tbl\let\ea=\expandafter
+%Cell vertical size, row height and depth (separation implicit),
+\newdimen\cvsize\newdimen\tsht\newdimen\tsdp\newdimen\tvsize\newdimen\thsize
+%Parameter setting macros: Rules
+\def\hruled{\def\lineglue{\hrulefill}\def\colsep{} \def\rowsep{\hrule}
+ \let\rowstbsep=\colsep\let\headersep=\rowsep}
+\def\vruled{\def\lineglue{\hfil} \def\colsep{\vrule}\def\rowsep{}
+ \let\rowstbsep=\colsep\let\headersep=\hrule}
+\def\ruled {\def\lineglue{\hrulefill}\def\colsep{\vrule}\def\rowsep{\hrule}
+ \let\rowstbsep=\colsep\let\headersep=\rowsep}
+\def\nonruled{\def\lineglue{\hfil} \def\colsep{} \def\rowsep{}
+ \def\rowstbsep{\vrule}\def\headersep{\hrule}}
+\def\dotruled{\def\lineglue{\dotfill}\def\rowsep{\hbox to\thsize{\dotfill}}
+\def\colsep{\lower1.5\tsdp\vbox to\cvsize{%
+\leaders\hbox to0pt{\vrule height2pt depth2pt width0pt\hss.\hss}\vfil}}
+\let\rowstbsep=\colsep\let\headersep=\rowsep}
+%Parameter setting macros: Controling positioning
+\def\ctr{\def\lft{\hfil}\def\rgt{\hfil}}%Centered
+\def\fll{\def\lft{} \def\rgt{\hfil}}%Flushed left
+\def\flr{\def\lft{\hfil}\def\rgt{}} %Flushed right
+%Parameter setting macros: Framing
+\def\framed{\let\frameit=\boxit}
+\def\nonframed{\def\frameit##1{##1}}
+\def\dotframed{\let\frameit=\dotboxit}
+%
+\def\btable#1{\vbox{\let\rsl=\rowstblst%Copy
+\ifx\empty\template\ifx\empty\rowstblst
+ \def\template{\colsepsurround\lft####\rgt&&\lft####\rgt\cr}
+ \else\def\template{\colsepsurround####\hfil&&\lft####\rgt\cr}\fi
+ \fi
+\tsht=.775\cvsize\tsdp=.225\cvsize
+\def\tstrut{\vrule height\tsht depth\tsdp width0pt}
+%Logical mark up of column and row separators, via use of
+\def\cs{&\colsepsurround\colsep\colsepsurround&}
+\def\prs{&\colsepsurround\lineglue&} \def\srp{&\lineglue\colsepsurround&}
+\def\rs{\colsepsurround\tstrut\cr
+ \ifx\empty\rowsep\else\noalign{\rowsep}\fi
+ \ifx\empty\rowstblst\else\ea\nxtrs\fi}
+\def\grs{\colsepsurround\tstrut\cr\ghostrow}
+\def\rss{&\colsepsurround\rowstbsep\colsepsurround&}
+\def\hs{\colsepsurround\tstrut\cr
+ \ifx\empty\headersep\else\noalign{\headersep}\fi
+ \ifx\empty\rowstblst\else\ea\nxtrs\fi}
+\preinsert
+\setbox\tbl=\vbox{\tabskip=0pt\relax\offinterlineskip
+\halign{\span\template\ifx\empty\first\ifx\empty\rowstblst\else
+\ifx\empty\header\else\ea\rss\fi\fi\else\first\ea\rss\fi
+\ifx\empty\header\ifx\empty\first\if\empty\rsl\else\ea\nxtrs\fi
+ \else\ea\hs\fi
+\else\header\ea\hs\fi
+#1\colsepsurround\tstrut\crcr} } %end \setbox
+\postinsert
+\ifx\capbtbl\empty\else\hbox to\thsize{\strut\hfil\capbtbl\hss}\captionsep\fi
+\frameit{\copy\tbl}
+\ifx\footer\empty\else\footersep\hbox{\vtop{\noindent\hsize=\thsize%
+\footer}}\fi }} %end \btable
+%Defaults
+\cvsize=4ex\tsht=.775\cvsize\tsdp=.225\cvsize\def\colsepsurround{\kern.5em}
+\def\capbtbl{}\def\first{}\def\header{}\def\rowstblst{}\def\footer{}\def\data{}
+\def\captionsep{\medskip} \def\headersep{\hrule}
+\def\footersep{\smallskip} \def\rowstbsep{\vrule}
+\def\preinsert{}
+\def\postinsert{\global\thsize=\wd\tbl
+ \global\tvsize=\ht\tbl\global\advance\tvsize by\dp\tbl}
+\ctr\nonruled\nonframed\def\template{}\def\ghostrow{} %end Defaults
+%Auxiliaries
+\def\boxit#1{\vbox{\hrule\hbox{\vrule\vbox{#1}\vrule}\hrule}}
+\def\dotboxit#1{\vbox{\offinterlineskip\hbox to\thsize{\dotfill}%
+\hbox{\lower\tsdp\vbox to\tvsize{%
+\leaders\hbox to0pt{\hss\vrule height2pt depth2pt width0pt.\hss}\vfil}%
+\vbox{#1}\lower\tsdp\vbox to\tvsize{%
+\leaders\hbox to0pt{\hss\vrule height2pt depth2pt width0pt.\hss}\vfil}}%
+\hbox to\thsize{\dotfill}}}
+%And to account for logical columns with \logmultispan
+%\def\spicspan{\span\omit}
+\def\logmultispan#1{\omit\mscount=#1\multiply\mscount by2 \advance\mscount by-1
+\loop\ifnum\mscount>1 \spicspan\advance\mscount by-1 \repeat}
+%To process FIFO, Mod 1993
+%\def\fifo#1{\ifx\ofif#1\ofif\else\process#1\fi\fifo}
+%\def\ofif#1\fifo{\fi}
+%\def\process#1{\hbox to0pt{\hss#1\hss}\kern.5ex}
+%To handle the row stub list: \rsl
+\def\nxtrs{\ifx\empty\rsl%\let\nxtel=\relax
+\else\def\nxtel{\ea\nrs\rsl\srn}\ea\nxtel\fi}%next Row Stub
+\def\nrs#1#2\srn{\gdef\rsl{#2}#1\rss}
+%History of changes
+%Dec 93: \multispan name changed into \logmultispan (logical multispan)
+% name \caption changed into \capbtbl (no conflicts within LaTeX)
+%%%%btable end%%%% %end btable.tex, cgl@risc1.rug.nl
+%
+\bgroup
+\def\capbtbl{AT\&T Common Stock}
+\def\header{Year\cs Price\cs Dividend}
+\def\footer{* (first quarter only}
+\def\data{1971\cs 41--54\cs\llap{\$}2.60\rs
+ 2\cs 41--54\cs 2.70}%et cetera
+$$\flr\btable\data\qquad\framed\ruled\btable\data$$
+\egroup
+%
+\def\data{PD \cs licensed via UNIX\rs
+all platforms \cs under UNIX \rs
+\TeX book (also on-line) \cs On-line manual \rs
+METAfont's CM, virtual fonts \cs ? \rs
+open system \cs kernel undocumented}
+%
+\def\header{(All)\TeX\cs T/Di-roff}
+\def\rowstblst{{Costs}{Availability}{Documentation}{Fonts}{{Design}}}
+ %Weird these extra {} ^ ^
+\def\capbtbl{Troff versus \TeX/METAfont}
+$$\fll\btable\data$$
+\bye
+
+
diff --git a/macros/plain/contrib/calendar/a5.sty b/macros/plain/contrib/calendar/a5.sty
new file mode 100644
index 0000000000..6c09b53428
--- /dev/null
+++ b/macros/plain/contrib/calendar/a5.sty
@@ -0,0 +1,45 @@
+%%
+%% FILE a5.sty
+%%
+\newcount\daysinpage
+\newdimen\cellheight
+\vsize=17.5cm\voffset=-0.5in
+\hsize=11cm\hoffset=-0.6in
+\cellheight=\vsize
+\divide\cellheight by7
+\advance\cellheight by-0.4pt
+\parindent=0pt
+\font\Rm=cmr10 at 14pt
+\font\Bf=cmbx10 at 14pt
+\font\rm=cmr10
+\footline={\Bf\ifodd\pageno\hfill\botmark
+ \else\botmark\hfill\fi}
+\def\newpage{\vfill\penalty-10000}
+\def\beginday{\ifnum\daysinpage>0\hrule\fi
+ \mark{\themonth} % Outside any box
+ \setbox2=\vbox\bgroup
+ \ifodd\pageno
+ \rightskip=3cm plus 1fill
+ \else
+ \leftskip=3cm plus 1fill\fi\rm}
+\def\endday{\egroup
+ \vbox to\cellheight{\vglue2pt
+ \setbox0=\hbox to\hsize{%
+ \ifodd\pageno
+ \hfill{\Rm\theweekday\ \ifholy\Bf\fi\the\Day}
+ \else
+ {\Rm{\ifholy\Bf\fi\the\Day}\ \theweekday}%
+ \hfill\fi}
+ \copy0\kern-\ht0\box2\vfill}
+ \advance\daysinpage by1
+ \ifnum\daysinpage=7 \daysinpage=0
+ \newpage\fi}
+%
+% Local: from monday ...
+\Day=1 \Month=9\dayno\nextday1\currentdate=\date
+% Local: ... to sunday.
+{\nextyear\Day=31 \Month=5\dayno\nextday0
+ \global\lastdate=\date}
+\leftskip=0pt\rightskip=0pt
+\daysinpage=0
+\def\epilog{}
diff --git a/macros/plain/contrib/calendar/a6.sty b/macros/plain/contrib/calendar/a6.sty
new file mode 100644
index 0000000000..d6fa4e274b
--- /dev/null
+++ b/macros/plain/contrib/calendar/a6.sty
@@ -0,0 +1,66 @@
+%%
+%% FILE a6.sty
+%%
+\baselineskip=10pt
+\newcount\daysinpage
+\newdimen\cellwidth
+\newdimen\cellheight
+\vsize=5in\voffset=-0.2in
+\hsize=3.5in\hoffset=-0.25in
+\newdimen\sphsize
+\sphsize=\hsize
+\divide\sphsize by2\advance\sphsize by-0.4pt
+\cellheight=\vsize
+\divide\cellheight by3
+\advance\cellheight by-0.4pt\parindent=0pt
+\font\bf=cmbx12
+\font\rm=cmr12
+\font\small=cmr9
+\headline={\hfill
+ \ifodd\pageno
+ \rm\xdef\ftmk{\firstmark}%
+ \divide\pageno by2\advance\pageno by1
+ Week \#\the\pageno
+ \else
+ \bf\edef\btmk{\botmark}%
+ \ifx\ftmk\btmk\else\ftmk/\fi\btmk
+ \fi\hfill}
+\footline={}
+\def\newpage{\vfill\penalty-10000}
+\def\beginday{
+ \ifcase\daysinpage\or\hrule\or\hrule\or\or
+ \hrule\or\hrule\fi
+ \mark{\themonth} % Outside any box
+ \setbox1=\vbox to\cellheight\bgroup\vglue4pt
+ \ifnum\daysinpage>4\hsize=\sphsize\fi
+ \setbox3=\vbox\bgroup
+ \ifnum\daysinpage>2
+ \rightskip=1.45cm plus 1fill
+ \else
+ \leftskip=1.45cm plus 1fill\fi
+ \noindent\small}
+\def\endday{\egroup
+ \setbox0=\hbox to\hsize{\rm\ifholy\bf\fi
+ \ifnum\daysinpage=6\bf\fi
+ \ifnum\daysinpage>2
+ \hfill{{\rm\theshortweekday}
+ \ \the\Day\hskip0.5em}
+ \else
+ {\hskip0.5em\the\Day
+ \ {\rm\theshortweekday}}\hfill\fi}
+ \copy0\kern-\ht0\vskip0pt\box3
+ \vfill\egroup
+ \advance\daysinpage by1
+ \ifcase\daysinpage\or\box1\or\box1\or
+ \box1\newpage\or\box1\or\box1\or
+ \setbox2=\box1\or
+ \hbox{\box2\vrule\box1}\newpage
+ \daysinpage=0\fi}
+%
+% Local: from monday ...
+\Day=1\Month=1\dayno\prevday1\currentdate=\date
+% Local: ... to sunday.
+\Day=31\Month=12\dayno\nextday0\lastdate=\date
+\leftskip=3pt\rightskip=3pt
+\daysinpage=0
+\def\epilog{}
diff --git a/macros/plain/contrib/calendar/block.sty b/macros/plain/contrib/calendar/block.sty
new file mode 100644
index 0000000000..72433136f1
--- /dev/null
+++ b/macros/plain/contrib/calendar/block.sty
@@ -0,0 +1,59 @@
+%%
+%% FILE block.sty
+%%
+\newcount\daysinrow
+\newcount\saveMonth
+\font\bf=cmbx12 at 16pt
+\font\Rm=cmr12 at 48pt
+\font\Bf=cmbx12 at 48pt
+\font\rm=cmr12
+\font\small=cmr10
+\footline={}
+\def\card{{\mute
+ \saveMonth=\Month
+ \def\beginday{
+ \ifnum\daysinrow=0\setbox1=\hbox{}\fi
+ \setbox0=\hbox to1.3em{\hss
+ \ifnum\Month=\saveMonth\the\Day\fi}}
+ \def\endday{\setbox1=\hbox{\unhbox1\box0}
+ \advance\daysinrow by1
+ \ifnum\daysinrow=7\box1\daysinrow=0\fi}
+% Local: from sunday ...
+ \Day=1\dayno
+ \prevday0\currentdate=\date
+ \Day=1\advancemonth \dayno
+% Local: ... to saturday.
+ \advance\date by-1 \nextday6 \lastdate=\date
+ \daysinrow=0
+ \baselineskip=9pt\small
+ \global\setbox3=\vbox to0.55in{\makeempty\vss}}}
+%
+\def\cstrut{\vrule width0pt depth0.3in}
+\baselineskip=14pt
+\parindent=0pt
+\vsize=5in \voffset=-0.2in
+\hsize=4in \hoffset=-0.25in
+\def\advancemonth{\ifnum\Month=12
+ \nextyear\Month=1\else
+ \advance\Month by1\fi}
+\def\beginday{\ifnum\Day=1
+ \setbox2=\box3{\advancemonth\card}\fi
+ \date=\currentdate\caldate
+ \centerline{\bf\uppercase
+ \expandafter{\themonth}}
+ \setbox0=\vbox\bgroup\noindent\rm}
+\def\endday{\egroup\vskip10pt
+ \centerline{\cstrut\copy2\quad
+ \hbox to1in{\Rm\weekday
+% Local: sundays in bf.
+ \ifnum\weekd=0\Bf\fi\ifholy\Bf\fi
+ \hss\the\Day\hss}\quad\copy3}
+ \centerline{\rm\theweekday}
+ \vskip20pt\box0\newpage}
+\def\newpage{\vfill\penalty-10000}
+%
+\Day=31\Month=12\dayno\lastdate=\date
+\Day=1\Month=1\dayno\currentdate=\date
+\card
+\leftskip=1em plus1fill\rightskip=1em plus1fill
+\def\epilog{}
diff --git a/macros/plain/contrib/calendar/calend0.tex b/macros/plain/contrib/calendar/calend0.tex
new file mode 100644
index 0000000000..854adc3cab
--- /dev/null
+++ b/macros/plain/contrib/calendar/calend0.tex
@@ -0,0 +1,156 @@
+%%
+%% FILE calend0.tex
+%% Modificat 9/12/92
+\catcode`\@=11
+\newif\ifleapyear
+\def\loadadvanced{%
+ \input calend1.tex\relax}
+\newcount\date
+\newcount\weekd
+\newcount\Year
+\newcount\yearbase
+\newcount\Month
+\newcount\Day
+\newcount\@catch
+\newcount\timezone\timezone=0
+\def\setyear#1{\Year=#1
+ \advance\Year by-1900\calculateyearbase}
+\def\nextyear{\advance\Year by1
+ \calculateyearbase}
+\def\settimezone#1{\timezone=#1
+ \multiply\timezone by 1000
+ \divide\timezone by24}
+% \ifleapyear is set;
+% \yearbase is the number of
+% days passed from 1900, Jan 0
+% to New year's date;
+\def\calculateyearbase{%
+ \yearbase=-1
+ {\count0=\Year\divide\count0 by4
+ \multiply\count0 by4
+ \ifnum\Year=\count0
+ \global\@catch=0\else\global\@catch=1\fi}%
+ \ifcase\@catch \leapyeartrue\or
+ \leapyearfalse\fi
+ {\count0=\Year\multiply\count0
+ by1461\advance\count0 by3
+ \divide\count0 by4
+ \global\@catch=\count0}%
+ \advance\yearbase by\@catch
+ \ifnum\Year=0\yearbase=0\leapyearfalse\fi}
+% Gives the number of days passed
+% at the end of each month.
+% Value returned in \Day
+\def\monthdays{\global
+ \@catch=\ifcase\Month 0\or31\or
+ 59\or90\or120\or151\or181\or212\or
+ 243\or273\or304\or334\or365\fi
+ {\ifleapyear\ifnum\Month>1
+ \global\advance\@catch by1\fi\fi}%
+ \Day=\@catch}
+% Long date of \Month, \Day
+% in the year \Year.
+% Value returned in \date
+\def\dayno{\date=\Day{\advance
+ \Month by-1\monthdays
+ \advance\date by\Day
+ \global\advance\date by\yearbase}}
+% Long date MOD 7 gives the week day.
+% Sunday is 0 and Saturday is 6.
+\def\weekday{{\count0=\date\relax
+ \count1=\count0\divide\count0 by 7
+ \multiply\count0 by 7
+\advance\count1 by -\count0
+ \global\weekd=\count1}}
+% Name of week day (Local).
+\def\theweekday{\weekday
+ \ifcase\weekd
+ Sunday\or Monday\or Tuesday\or
+ Wednesday\or Thursday\or Friday\or
+ Saturday\fi}
+% (Local)
+\def\theshortweekday{\weekday
+ \ifcase\weekd Sun\or Mon\or Tue\or
+ Wed\or Thu\or Fri\or Sat\fi}
+% Gives the usual calendar date for
+% a long date in counter \date.
+% Returned in \Day, \Month and \Year
+\def\caldate{\Year=\date
+ \multiply\Year by4\divide\Year by1461
+ \calculateyearbase
+ {\advance\date by-\yearbase\Month=0
+ \loop\monthdays\ifnum\Day<\date
+ \global\advance\Month by1\repeat
+ {\advance\Month by-1\monthdays
+ \advance\date by-\Day
+ \global\Day=\date}}}
+% Name of month \Month. (Local)
+\def\themonth{\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}
+% Find the next (previous) day after
+% (before) \date with \weekday=#1.
+\def\nextday#1{{\count0=#1\weekday
+ \advance\count0 by-\weekd
+ \ifnum\count0<0\advance\count0 by7\fi
+ \global\advance\date by\count0}}
+\def\prevday#1{\snextday#1
+ \advance\date by-7}
+\def\snextday#1{\advance\date by1
+ \nextday#1}
+\def\sprevday#1{\advance\date by-1
+ \prevday#1}
+% \beginevents...\endevents
+% contains control sequences like
+% \event or \evday or sequences
+% generating these commands.
+\newwrite\evefile
+\def\beginevents{%
+ \immediate\openout
+ \evefile=\jobname.eve\relax}
+\def\endevents{\immediate\closeout
+ \evefile\end}
+\newtoks\evetext
+\def\event#1/#2[#3]{\evetext={#3}%
+ \Day=#1\Month=#2\dayno
+ \evday[\the\evetext]}
+\def\evday[#1]{\immediate\write\evefile{%
+ \string\evententry{\the\date}{#1}}}
+\def\thecaldate{\the\Day/\the\Month}
+\def\mute{\def\thecaldate{}}
+%
+% 2nd run commands
+%
+\newcount\currentdate
+\newcount\lastdate
+\newcount\nextdate
+\newif\ifdoing@day
+\newif\ifholy
+\def\holy{\global\holytrue}
+\def\upto#1{\nextdate=#1
+ \loop\advance\currentdate by1\relax
+ \ifnum\currentdate<\nextdate
+ \begin@day\end@day\repeat}
+\def\evententry#1#2{\unskip
+ \ifnum#1>\lastdate\else
+ \ifnum\currentdate<#1
+ \ifdoing@day\end@day\fi
+ \upto{#1}\fi
+ \ifnum\currentdate=#1
+ \ifdoing@day\else\begin@day\fi
+ #2\par\fi\fi}
+\def\begin@day{\doing@daytrue
+ \date=\currentdate\caldate
+ \message{<\thecaldate}\beginday}
+\def\end@day{\endday\doing@dayfalse
+ \global\holyfalse\message{>}}
+\def\makeagenda#1{\input #1.sty\relax
+ \begin@day\input\jobname.eve\relax
+ \evententry{\the\lastdate}{}\end@day
+ \epilog\end}
+% Do not read events
+\def\makeempty{\begin@day
+ \evententry{\the\lastdate}{}\end@day}
+\catcode`\@=12
diff --git a/macros/plain/contrib/calendar/calend1.tex b/macros/plain/contrib/calendar/calend1.tex
new file mode 100644
index 0000000000..7ce7460646
--- /dev/null
+++ b/macros/plain/contrib/calendar/calend1.tex
@@ -0,0 +1,85 @@
+%%
+%% FILE calend1.tex
+%%
+\def\loadadvanced{\relax}
+% Convert from Julian date and time in
+% \date to long date (in local time)
+\def\JDTtoL{\advance\date by500
+ \advance\date by\timezone\divide\date by1000}
+%% Trigonometric functions
+\def\sintable#1{\ifcase #1 0\or100\or199
+ \or296\or389\or479\or565\or644\or717
+ \or783\or841\or891\or932\or964\or985
+ \or997\or1000\or992\or974\or946\or909
+ \or863\or808\or746\or675\or598\or516
+ \or427\or335\or239\or141\or42\or-58
+ \or-158\fi}
+% Reduces modulo 2\pi (requires positive
+% argument theta):
+% theta := theta MOD 2\pi, where
+% theta = count1*10^(-3)
+\def\twopimod{\count2 =\count1
+ \divide\count2 by6284 \count3 =1853
+ \count4 =6283\multiply\count3 by\count2
+ \multiply\count4 by\count2
+ \divide\count3 by10000
+ \advance\count3 by\count4
+ \advance\count1 by-\count3}
+\newif\ifsign
+% v := sin(theta), where
+% v = count4*10^(-3);
+% theta = count1*10^(-3)
+% theta is reduced MOD 2\pi to be
+% 0<=theta<2\pi by \TWOPIMOD,
+% then linear interpolation is performed
+% using \SINTABLE.
+\def\Sin{
+ \ifnum\count1<0 \signtrue
+ \count1=-\count1\else \signfalse\fi
+ \loop\ifnum\count1>6284\twopimod\repeat
+ \ifnum\count1>3142
+ \advance\count1 by-3142
+ \ifsign\signfalse\else\signtrue\fi\fi
+ \multiply\count1 by10 \count3 =\count1
+ \divide\count3 by1000 \count2 =\count3
+ \multiply\count3 by1000
+ \advance\count3 by-\count1
+ \count5 =\sintable{\count2 }
+ \count4 =\count5\advance\count2 by1
+ \advance\count4 by -\sintable{\count2 }
+ \multiply\count4 by\count3
+ \divide\count4 by1000
+ \advance\count4 by\count5
+ \ifsign\count4 =-\count4 \fi}
+% v := cos(theta), where
+% v = count4*10^(-3);
+% theta = count1*10^(-3).
+% \SIN is evaluated on pi/2-theta.
+\def\Cos{\advance\count1 by-1571
+ \multiply\count1 by-1\Sin}
+% Linear transformation of T giving
+% theta := a*T+b, where
+% T = count0*10^(-6);
+% theta = count1*10^(-3);
+% a = #1*10^3+#2+#3*10^(-3);
+% b = #4*10^(-3)
+\def\lin#1.#2.#3+#4.{\count1 =#3
+ \count2 =#2 \count3 =#1
+ \multiply\count1 by\count0
+ \multiply\count2 by\count0
+ \multiply\count3 by\count0
+ \divide\count1 by1000
+ \advance\count1 by\count2
+ \divide\count1 by1000
+ \advance\count1 by\count3
+ \advance\count1 by #4}
+% Accumulate value returned by a
+% trigonometric function, scaled by
+% factor f, into count6:
+% ac := ac+f*v, where
+% ac = count6*10^(-7)
+% v = value of SIN or COS =count4*10^(-3)
+% f = #1*10^(-4)
+\def\fac#1{\multiply\count4 by #1
+ \advance\count6 by\count4}
+\def\id{\count4=\count1} % Identity
diff --git a/macros/plain/contrib/calendar/feasts.tex b/macros/plain/contrib/calendar/feasts.tex
new file mode 100644
index 0000000000..ab5d48976b
--- /dev/null
+++ b/macros/plain/contrib/calendar/feasts.tex
@@ -0,0 +1,32 @@
+%%
+%% FILE feasts.tex
+%%
+% Date of Easter for year \Year.
+% Value returned in \date
+\def\easter{{\count0=\Year\count1=\count0
+ \divide\count0 by19\multiply\count0 by19
+ \advance\count1 by-\count0
+ \advance\count1 by 1 % Golden number
+ \count2=\count1\multiply\count2 by11
+ \advance\count2 by18\count0=\count2
+ \divide\count0 by30\multiply\count0 by30
+ \advance\count2 by-\count0 % Epact
+ \ifnum\count2=25\ifnum\count1>11
+ \count2=26 \fi\fi
+ \ifnum\count2=24 \count2=25\fi
+ \advance\count2 by-44
+ \multiply\count2 by-1
+ \ifnum\count2<21 \advance\count2 by30\fi
+ \Month=3\Day=0\dayno\global\advance\date
+ by\count2}\snextday0}
+% (local)
+\def\includefeasts{%
+ \message{Including feasts}
+ \easter\evday[Easter Sunday]
+ {\advance\date by49\evday[Whitsun]}
+ {\advance\date by-7\evday[Palm Sunday]}
+ {\advance\date by-46\evday[Ash Wendsday]
+ \advance\date by-3\evday[Carnival]}
+ \Month=1\Day=1\dayno\snextday0
+ \evday[Epiphany]
+ \event 25/12[\holy Christmas]}
diff --git a/macros/plain/contrib/calendar/moon.tex b/macros/plain/contrib/calendar/moon.tex
new file mode 100644
index 0000000000..f64c1f10b7
--- /dev/null
+++ b/macros/plain/contrib/calendar/moon.tex
@@ -0,0 +1,89 @@
+%%
+%% FILE moon.tex
+%%
+\loadadvanced
+\newcount\moonno
+\def\firstmoon{\moonno=\Year
+ \multiply\moonno by123685
+ \divide\moonno by10000
+ \multiply\moonno by4\advance\moonno by-1
+ \loop\moondate\ifnum\date<\yearbase
+ \advance\moonno by1\repeat}
+% Compute date for cycle quarter MOONNO
+\def\moondate{{\count0=\moonno
+ \lin 202.126.369+0.\count0=\count1
+ \count6=0
+ \lin 0.2.319+2907.\Sin\fac{3}
+ \divide\count6 by1000
+ \lin 365.249.86+7593.\id\fac{1}
+ \divide\count6 by10\count7 =\count6
+ \ifodd\moonno\quarters
+ \else\fullornew\fi\global\date=\count7}
+ \JDTtoL\message{\the\date}}
+% Correction for full and new moon
+\def\fullornew{\count6=0
+ \lin -393.0.0+0.
+ \divide\count1 by100000000
+ \advance\count6 by\count1
+ \lin 0.628.300+6269.\Sin
+ \multiply\count6 by\count4
+ \lin -7.-700.-369+ 928.\Sin\fac{ -74}
+ \lin 0. 628. 300+ 6269.\Sin\fac{ 1734}
+ \lin 1. 256. 600+12539.\Sin\fac{ 21}
+ \lin 8. 328. 670+ 5341.\Sin\fac{-4068}
+ \lin 8. 538. 220+-4597.\Sin\fac{ 10}
+ \lin 8. 956. 970+11610.\Sin\fac{ -51}
+ \lin 16. 238. 589+-5526.\Sin\fac{ -4}
+ \lin 16. 657. 340+10682.\Sin\fac{ 161}
+ \lin 16. 866. 890+ 743.\Sin\fac{ 104}
+ \lin 17. 285. 640+16951.\Sin\fac{ 50}
+ \lin 17. 495. 190+ 7013.\Sin\fac{ 4}
+ \lin 24. 986. 10+16023.\Sin\fac{ -4}
+ \lin 25. 195. 560+ 6084.\Sin\fac{ -6}
+ \divide\count6 by10000
+ \advance\count7 by\count6 }
+% Correction for quarters
+\def\quarters{\lin -393.0.0+0.
+ \divide\count1 by100000000
+ \count6 =\count1 \lin 0.628.300+6269.
+ \Sin\multiply\count6 by\count4
+ \lin -16. -29. -40+-4413.\Sin\fac{ 40}
+ \lin -7.-700.-369+ 928.\Sin\fac{ -47}
+ \lin -7. -72. -69+ 7198.\Sin\fac{ -30}
+ \lin 0. 628. 300+ 6270.\Sin\fac{ 1721}
+ \lin 1. 256. 600+12539.\Sin\fac{ 21}
+ \lin 8. 328. 670+ 5341.\Sin\fac{-6280}
+ \lin 8. 538. 220+-4598.\Sin\fac{ 21}
+ \lin 8. 956. 970+11611.\Sin\fac{ -119}
+ \lin 16. 238. 589+-5526.\Sin\fac{ -4}
+ \lin 16. 657. 340+10682.\Sin\fac{ 89}
+ \lin 16. 866. 890+ 743.\Sin\fac{ 79}
+ \lin 17. 285. 640+16952.\Sin\fac{ 3}
+ \lin 17. 495. 190+ 7013.\Sin\fac{ 3}
+ \lin 24. 986. 10+16023.\Sin\fac{ -4}
+ \lin 25. 195. 560+ 6085.\Sin\fac{ -6}
+ \count8=\count6\count6=28000
+ \lin 628. 300. 373+ 6270.\Cos\fac{ -4}
+ \lin 8. 328. 670+ 5341.\Cos\fac{ 3}
+ \count2=\moonno
+ \advance\count2 by-1\divide\count2 by2
+ \ifodd\count2\multiply\count6 by-1 \fi
+ \advance\count6 by\count8
+ \divide\count6 by10000
+ \advance\count7 by\count6 }
+% Events for phases.
+% Uses PHASE (local).
+\def\includemoons{\message{Including moons}
+ {\firstmoon
+\Month=12\Day=31\dayno\advance\date by1
+ \count1=\date
+ \loop\moondate\phase\ifnum\date<\count1
+ \evday[\themoon]\advance\moonno by1
+ \repeat}}
+\def\phase{{\count0=\moonno
+ \count1=\moonno
+ \divide\count0 by4\multiply\count0 by4
+ \advance\count1 by-\count0\relax
+ \global\edef\themoon{\ifcase\count1
+ New moon\or First quarter\or
+ Full Moon\or Last quarter\fi}}}
diff --git a/macros/plain/contrib/calendar/sun.tex b/macros/plain/contrib/calendar/sun.tex
new file mode 100644
index 0000000000..9ec246b1f9
--- /dev/null
+++ b/macros/plain/contrib/calendar/sun.tex
@@ -0,0 +1,15 @@
+%%
+%% FILE sun.tex
+%%
+\loadadvanced
+\def\linY#1.#2.#3+#4.{{\count0=\Year
+ \multiply\count0 by1000\count1=0
+ \lin #1.#2.#3+#4.
+ \global\date=\count1}\JDTtoL}
+% (local)
+\def\includeseasons{%
+ \message{Including seasons}
+ \linY 365.242.365+ 79573.\evday[Spring]
+ \linY 365.241.628+172405.\evday[Summer]
+ \linY 365.242.045+266014.\evday[Fall]
+ \linY 365.242.756+355784.\evday[Winter]}
diff --git a/macros/plain/contrib/calendar/wall.sty b/macros/plain/contrib/calendar/wall.sty
new file mode 100644
index 0000000000..076eb579ba
--- /dev/null
+++ b/macros/plain/contrib/calendar/wall.sty
@@ -0,0 +1,60 @@
+%%
+%% FILE wall.sty
+%%
+\hsize=9.5in
+\vsize=7.5in\voffset=-0.65in
+\baselineskip=12pt
+\newcount\daysinrow
+\newdimen\cellwidth
+\newdimen\cellheight
+\cellheight=1.13in
+\parindent=0pt
+\cellwidth=\hsize
+\divide\cellwidth by7
+\advance\cellwidth by-0.4pt
+\font\BBf=cmbx12 at 24pt
+\font\Bf=cmbx10 at 20pt
+\font\Rm=cmr10 at 20pt
+\font\rm=cmr12 at 14pt
+\font\small=cmr9
+\footline={}
+\def\hstrut{\hrule height0pt depth0pt
+ width\cellwidth}
+\def\beginday{
+ \ifnum\daysinrow=0\setbox1=\hbox{\vrule}\fi
+ \setbox0=\vbox to\cellheight\bgroup
+ \hstrut\hsize=\cellwidth\vskip5pt
+ \setbox2=\vbox\bgroup\small}
+\def\endday{\egroup
+ \hbox{\hskip0.5em\Rm\ifholy\Bf\fi\the\Day}
+ \vskip2pt\box2\vfill\egroup
+ \setbox1=\hbox{\unhbox1\box0\vrule}
+ \advance\daysinrow by1
+ \ifnum\daysinrow=7\box1\hrule\daysinrow=0\fi}
+%
+\def\advancemonth{\ifnum\Month=12
+ \nextyear\Month=1\else\advance\Month by1\fi}
+% If no Month is given, take today's date.
+\ifnum\Month=0 \Month=\month
+ \ifnum\day>15 \advancemonth\fi\fi
+\Day=1\dayno
+\topskip=0pt\hbox{}
+\vfill
+\centerline{\BBf\themonth}
+\penalty10000
+\vskip40pt minus32pt
+% Local: from sunday ...
+\prevday0\currentdate=\date
+\hbox{\rm\loop
+ \hbox to\cellwidth{\hss\theweekday\hss}
+ \unskip\ifnum\weekd<6\advance\date by1\repeat}
+\penalty10000
+\vskip3pt
+% Local: ... to saturday.
+\Day=1 \advance\Month by1\dayno
+\advance\date by-1\nextday6\lastdate=\date
+\leftskip=3pt
+\raggedright
+\daysinrow=0
+\vbox\bgroup\hrule
+\def\epilog{\vfill\egroup\supereject}
diff --git a/macros/plain/contrib/cascover/cascfont.tex b/macros/plain/contrib/cascover/cascfont.tex
new file mode 100644
index 0000000000..dc416e85d7
--- /dev/null
+++ b/macros/plain/contrib/cascover/cascfont.tex
@@ -0,0 +1,26 @@
+%----------------------------------------------------------------------------%
+% Cassette-cover macros for TeX: CASCFONT.TEX (font selection) %
+% Files supplied: CASCOVER.TEX, CASCFONT.TEX, NORMAL.CAS, SMALL.CAS, %
+% CCMANMAC.TEX, MANUAL.TEX, MANUAL.DVI, MANUAL.DOC, %
+% EXAMPLES.TEX, EXAMPLES.DVI %
+% Author: Stijn Raaijmakers %
+% Date: 10/2/94 %
+% Package is freeware. %
+%----------------------------------------------------------------------------%
+
+\newcount\fontsize \newcount\fonttype
+\font\twelverm=cmr12 \font\sevencond=cmrcd7
+\font\twelveit=cmti12 \font\sevenit=cmti7
+\let\twelvecond=\relax \let\tencond=\relax
+\def\small{\fontsize=0 \updatefont} \def\rm{\fonttype=0 \updatefont}
+\def\normalsize{\fontsize=1 \updatefont}
+\def\large{\fontsize=2 \updatefont} \def\it{\fonttype=1 \updatefont}
+\def\cond{\fonttype=2 \updatefont}
+\def\updatefont{\ifcase\fonttype
+ \ifcase\fontsize \sevenrm \or\tenrm \or\twelverm \fi \or
+ \ifcase\fontsize \sevenit \or\tenit \or\twelveit \fi \or
+ \ifcase\fontsize \sevencond \or\tencond \or\twelvecond \fi \fi
+ \baselineskip=\ifcase\fontsize 9pt \or12pt \or14pt \fi}
+\let\em=\it
+\rm\normalsize
+ \ No newline at end of file
diff --git a/macros/plain/contrib/cascover/cascover.tex b/macros/plain/contrib/cascover/cascover.tex
new file mode 100644
index 0000000000..f158bb650e
--- /dev/null
+++ b/macros/plain/contrib/cascover/cascover.tex
@@ -0,0 +1,59 @@
+%----------------------------------------------------------------------------%
+% Cassette-cover macros for TeX: CASCOVER.TEX (main macrofile) %
+% Files supplied: CASCOVER.TEX, CASCFONT.TEX, NORMAL.CAS, SMALL.CAS, %
+% CCMANMAC.TEX, MANUAL.TEX, MANUAL.DVI, MANUAL.DOC, %
+% EXAMPLES.TEX, EXAMPLES.DVI %
+% Author: Stijn Raaijmakers %
+% Date: 10/2/94 %
+% Package is freeware. %
+%----------------------------------------------------------------------------%
+
+\catcode`\@=11
+
+\newdimen\rulethickness \rulethickness=0.4pt
+\newdimen\frontwidth \frontwidth=\coverwidth \advance\frontwidth by
+ -2\covermargin \advance\frontwidth by -\rulethickness
+\newdimen\sidewidth \sidewidth=\frontwidth \advance\sidewidth by -.5\coverwidth
+
+\def\vmargin{\vskip\covermargin \relax}
+\def\hmargin{\hskip\covermargin \relax}
+
+\input cascfont
+
+\def\parbox#1#2#3{\vtop to #2{\hsize=#1 #3}}
+\def\lead{\thinspace\xleaders\hbox to.5em{\hss$\scriptscriptstyle\cdot$\hss}%
+ \hfill\thinspace}
+\def\ifempty#1#2#3\fi{{\def\a{#1}\def\b{}\ifx\a\b #2\else#3\fi}}
+
+\newcount\@entrycount \def\@clearentry{\global\@entrycount=0 \relax}
+\def\@nextentry{\global\advance\@entrycount by 1 \number\@entrycount}
+
+\def\@beginside{\leavevmode\vrule\hmargin\parbox\sidewidth\coverheight
+ \bgroup\vmargin\@clearentry}
+\def\@title#1#2#3#4{{\it\@entry{#1}{#2}{#3}{#4}}\smallskip}
+\def\@entry#1#2#3#4{\hbox to\sidewidth{\phantom{\resetfont00 }\llap{#1 }%
+ #2\lead#3\ifempty{#4}{}\phantom{\resetfont\ 00:00}\llap{#4}\fi}}
+
+\def\begintape{\bigbreak \hrule width \coverwidth\nobreak \begingroup
+ \parskip=0pt \parindent=0pt \small \relax}
+\def\endtape{\endgroup \goodbreak \vfil}
+
+\def\beginside#1: #2 - #3 (#4) {\@beginside\@title{#1:}{#2}{#3}{#4}}
+\def\endside{\vskip\covermargin plus1fil \egroup\hmargin}
+\def\title#1 - #2 {\smallskip\@title{}{#1}{#2}{}}
+\def\\#1 - #2, #3 {\@entry\@nextentry{{#1}}{{#2}}{#3}} % extra groups are
+ % needed to prevent user from having to use double groups with \cond.
+\let\begincontents=\relax
+\def\endcontents{\vrule\nobreak\par\hrule width\coverwidth\nobreak}
+\let\empty=\leavevmode
+
+\def\fronttitle#1 - #2 {{\large\hbox to \frontwidth{{\it #1}\hfil#2}}\vfil}
+\def\beginfront{\vrule\hmargin\parbox\frontwidth\frontheight\bgroup\vfil}
+\def\endfront{\egroup\hmargin\vrule\nobreak\par\hrule width\coverwidth\nobreak}
+
+\def\beginflap{\vrule\hmargin\parbox\frontwidth\flapheight\bgroup\vmargin}
+\def\endflap{\vskip\covermargin plus1fil \egroup\hmargin\vrule\nobreak\par
+ \hrule width\coverwidth\nobreak}
+
+\catcode`\@=12
+ \ No newline at end of file
diff --git a/macros/plain/contrib/cascover/ccmanmac.tex b/macros/plain/contrib/cascover/ccmanmac.tex
new file mode 100644
index 0000000000..2583dd936a
--- /dev/null
+++ b/macros/plain/contrib/cascover/ccmanmac.tex
@@ -0,0 +1,60 @@
+%----------------------------------------------------------------------------%
+% Cassette-cover macros for TeX: CCMANMAC.TEX (manual macrofile) %
+% Files supplied: CASCOVER.TEX, CASCFONT.TEX, NORMAL.CAS, SMALL.CAS, %
+% CCMANMAC.TEX, MANUAL.TEX, MANUAL.DVI, MANUAL.DOC, %
+% EXAMPLES.TEX, EXAMPLES.DVI %
+% Author: Stijn Raaijmakers %
+% Date: 10/2/94 %
+% Package is freeware. %
+%----------------------------------------------------------------------------%
+
+\input normal.cas
+\input cascover
+
+\normalsize\rm
+%---------------------- Small pictures of covers ---------------------
+\newdimen\wtest
+
+\def\testbtape#1{\vbox\bgroup\parindent=0pt \parskip=0pt \wtest=#1
+ \sevenrm \hrule}
+\let\testetape=\egroup
+\def\testsides#1#2#3{\hbox{%
+ \vrule \parbox{.5\wtest}{#1}{\vfil\hfil#2\hfil\vfil}%
+ \vrule \parbox{.5\wtest}{#1}{\vfil\hfil#3\hfil\vfil}%
+ \vrule}\hrule}
+\def\testfront#1#2{\hbox{%
+ \vrule \parbox{\wtest}{#1}{\vfil\hfil#2\hfil\vfil}%
+ \phantom\vrule\vrule}\hrule}
+\def\tapepicture#1#2#3#4{\testbtape{#1}\testsides{#2}{}{}\testfront{#3}{}%
+ \testfront{#4}{}\testetape}
+\def\intextbox#1{\hbox{\vbox to7.5pt{\hbox{#1}\vss}}}
+
+%---------------------------- Verbatim -------------------------------
+% As in the TeXbook, page 421 (manmac)
+\newskip\ttglue
+\tt \ttglue=.5em plus.25em minus.15em \rm
+\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}
+{\obeyspaces\gdef {\ }} % \obeyspaces now gives \ , not \space
+\outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=0pt
+ \catcode`\|=0 \rightskip=-5pc \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}}
+
+%------------------------- Other textstyles --------------------------
+\font\tensc=cmcsc10 \let\sc=\tensc \let\book=\it
+\def\<#1>{$\langle$#1$\rangle$}
+\def\LaTeX{L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15emT\kern-.1667em%
+ \lower.7ex\hbox{E}\kern-.125emX}
+
+%-------------------------- Section titles ---------------------------
+\def\section#1\par{\bigbreak\centerline{\twelverm#1}\nobreak\bigskip\noindent}
+\def\subsection#1\par{\smallbreak\centerline{#1}\nobreak\smallskip\noindent}
+ \ No newline at end of file
diff --git a/macros/plain/contrib/cascover/examples.pdf b/macros/plain/contrib/cascover/examples.pdf
new file mode 100644
index 0000000000..5e8c032181
--- /dev/null
+++ b/macros/plain/contrib/cascover/examples.pdf
Binary files differ
diff --git a/macros/plain/contrib/cascover/examples.tex b/macros/plain/contrib/cascover/examples.tex
new file mode 100644
index 0000000000..499d4a3606
--- /dev/null
+++ b/macros/plain/contrib/cascover/examples.tex
@@ -0,0 +1,85 @@
+%----------------------------------------------------------------------------%
+% Cassette-cover macros for TeX: EXAMPLES.TEX (2 examples) %
+% Files supplied: CASCOVER.TEX, CASCFONT.TEX, NORMAL.CAS, SMALL.CAS, %
+% CCMANMAC.TEX, MANUAL.TEX, MANUAL.DVI, EXAMPLES.TEX, %
+% EXAMPLES.DVI %
+% Author: Stijn Raaijmakers %
+% Release date: 9/2/94 %
+% Package is freeware. %
+%----------------------------------------------------------------------------%
+
+\input normal.cas
+\input cascover
+
+% If you use another format of paper (a4, for example), set it here.
+% If you want to change the \headline, do it here.
+% You could set the language here, if the comment on the flap is not in your
+% default language (English) and needs to be hyphenated.
+
+\begintape
+ \begincontents
+ \beginside A: Album1 title - Author () % dolby off
+ \\Song title - Author, time
+ \\Song title - Author, {}
+ \\Song title - , time
+ \\Song title - , {}
+ \\ - Author, time
+ \\ - Author, {}
+ \\ - , time
+ \\ - , {}
+ \\Very long title - Very long name, 10.15
+ \\{\cond Very long title} - {\cond Very long name}, 10.15
+ \title Other album title - Author
+ \\Song title - , :47
+ \title Yet another - {Two words}
+ \\Song title* - , 5'67
+ * comment
+ \endside
+ \beginside B: Album2 title - Two words (C) % dolby C on
+ \empty % exept for the title
+ \endside
+ \endcontents
+ \beginfront
+ \fronttitle Album1 title - Author
+ \fronttitle Album2 title - {Two words}
+ \endfront
+ \beginflap
+ This is some comment about the tape. It can be several lines long and
+ things can be set in normal and {\large large}. You can use
+ {\em emphasation\/} too. Emphasizing and enlarging can be done
+ independantly.
+ \endflap
+\endtape
+
+Some text between two tapecovers\dots
+
+\begintape
+ \begincontents % Several covers can be in one file.
+ \beginside A: Title - Author ()
+ \\Song - , 0:00
+ \endside
+ \beginside C: Title - Author ()
+ \\Song - , 0:00
+ \endside
+ \endcontents
+ \begincontents % This tape has a folded cover.
+ \beginside {}: {} - {} () % all parameters omitted
+ \\ - , {} % all parameters omitted
+ \title {} - {} % all parameters omitted
+ \endside
+ \beginside D: Title - Author ()
+ It's possible to just put some text here. I wouldn't ever use it
+ myself, probably, but some people might. It {\em looks\/} great,
+ though. You can type all the way upto \vfill \hfill here.
+ \endside
+ \endcontents
+ \beginfront
+ \fronttitle Title - Author % The front has one title on it.
+ \endfront
+ \beginflap
+ \empty % This is needed
+ \endflap
+\endtape
+
+\bye
+ \ No newline at end of file
diff --git a/macros/plain/contrib/cascover/manual.doc b/macros/plain/contrib/cascover/manual.doc
new file mode 100644
index 0000000000..e5e8f4e9b4
--- /dev/null
+++ b/macros/plain/contrib/cascover/manual.doc
@@ -0,0 +1,141 @@
+
+ Introduction
+
+This is the manual of a macropackage I wrote for printing the covers for
+cassettes. It's quite flexible and quite easy to learn. I tried to keep
+this manual short, so it won't cost you that much to print it. -- Stijn
+Raaijmakers.
+
+
+ General form of a tape-file
+
+--------------------------------------------------------------------------
+
+\input <size-file>.cas
+\input cascover
+\language <language>*
+
+\begintape
+ \begincontents
+ \beginside <Side>: <Title> - <Author> (<Dolby>)
+ \\<Title> - <Author>, <Time>*
+ ...
+ \title <Title> - <Author>*
+ \\<Title> - <Author>, <Time>*
+ ...
+ \endside
+ \beginside <Side>: <Title> - <Author> (<Dolby>)
+ ...
+ \endside
+ \endcontents
+ \beginfront
+ \fronttitle <Title> - <Author>*
+ ...
+ \endfront
+ \beginflap
+ ...
+ \endflap
+\endtape
+
+\begintape
+ ...
+\endtape
+
+\bye
+
+--------------------------------------------------------------------------
+
+The lines marked * can be omitted. All <words> can be omitted, but
+sometimes have to be replaced by {}, see below.
+
+ Comment and empty frames
+
+The frames are: \beginside...\endside, \beginfront...\endfront and
+\beginflap...\endflap. In each of these frames you can put normal comment,
+because each frame is like a miniscule page. If you put a \title or \\
+after comment, you have to put a \par (empty line) between them. If you
+want a frame to be empty, you have to put \empty between \begin and \end.
+
+ About formatted input macros
+
+In the figure above you see a lot of things like
+
+ `\title <Title> - <Author>'.
+
+This means you have to type `\title', <space>, some words, ` - ', another
+word (one) and a <space> (which is usually a return). You could type, for
+instance:
+
+ \title Pork soda - Primus
+
+If the last part of a line like this contains a space (i.e., if `Primus'
+were `Mucky Pup'), you'd have to put it between braces, so it would look
+like this:
+
+ \title Pork soda - {Mucky Pup}
+
+If the first part (Pork soda) happens to contain the exact text it should
+be followed by (` - ' in this example), you have to put it between braces
+too (so TeX won't see the first ` - '):
+
+ \title {Pork - soda} - {Mucky Pup}
+
+If something goes wrong here, you'll get some error message like `missing
+argument,' `use of ... doesn't match it's definition' or `runaway argument.'
+
+If some part is enclosed by <space>s, you have to replace it by an empty
+group ({}), because two <space>s in a row is just the same as one <space>.
+Have a look at page 202 of *the TeXbook* and the example files to find out
+more about this.
+
+
+ Size and dimension of the cover
+
+the margins and the size of it. You can create a library of .cas files, in
+which you define different sizes for tape covers. They define the heights of
+the contents, front and flap. You can also change the margins, but you need
+pretty small margins to fit everything on the cover. Have a look at
+normal.cas and small.cas.
+
+
+ Changing the font
+
+
+You can change the current fontsize with the commands \small, \normalsize
+and \large, which work as in LaTeX. You can change the fontstyle with the
+commands \rm, \it and \em. You can switch to condensed form using \cond.
+This only works for the normal-sized roman font, as this is the only one
+which sometimes needs to be condensed. Condensed text looks ugly, but will
+make sure long titles and author-names can be used. The macros don't
+switch to condensed text automaticly, because some people might rather
+abbrieviate long titles and names.
+
+If you want to change the definition of the fonts, you only need to change
+the file cascfont.tex. To get the font called cmrcd7, just copy the file
+cmr7.mf to cmrcd7.mf, edit cmrcd7.mf and change the lines
+
+ font_identifier:="CMR"; font_size 7pt#;
+ u#:=15.5/36pt#; % unit width
+
+to
+
+ font_identifier:="CMRCD"; font_size 7pt#;
+ u#:=.75 * 15.5/36pt#; % unit width
+
+
+ Suggestions and extensions
+
+Use an \empty front so you can draw a logo. Use the flap to enter
+information like the type of tape used. I made a macro, so I can type
+\SA90 to get {\large TDK SA90\qquad}.
+
+
+ More about the macro's
+
+
+All the frames mentioned above create a \parbox as in LaTeX. You can type
+normal text in them, as demonstrated in example 2. The commands
+\begintape, \endcontents, \endfront and \endflap create a horizontal line.
+This means you don't have to put them in the order used above. You could
+make a tapecover with a double frame to put the songs on, by simply
+repeating the contents part. \ No newline at end of file
diff --git a/macros/plain/contrib/cascover/manual.pdf b/macros/plain/contrib/cascover/manual.pdf
new file mode 100644
index 0000000000..911cd43bd6
--- /dev/null
+++ b/macros/plain/contrib/cascover/manual.pdf
Binary files differ
diff --git a/macros/plain/contrib/cascover/manual.tex b/macros/plain/contrib/cascover/manual.tex
new file mode 100644
index 0000000000..f4fe65d11d
--- /dev/null
+++ b/macros/plain/contrib/cascover/manual.tex
@@ -0,0 +1,153 @@
+%----------------------------------------------------------------------------%
+% Cassette-cover macros for TeX: MANUAL.TEX (manual) %
+% Files supplied: CASCOVER.TEX, CASCFONT.TEX, NORMAL.CAS, SMALL.CAS, %
+% CCMANMAC.TEX, MANUAL.TEX, MANUAL.DVI, MANUAL.DOC, %
+% EXAMPLES.TEX, EXAMPLES.DVI %
+% Author: Stijn Raaijmakers %
+% Date: 10/2/94 %
+% Package is freeware. %
+%----------------------------------------------------------------------------%
+
+\input ccmanmac
+
+ \section Introduction
+
+This is the manual of a macropackage I wrote for printing the covers for
+cassettes. It's quite flexible and quite easy to learn. I tried to keep
+this manual short, so it won't cost you that much to print it. -- Stijn
+Raaijmakers.
+
+
+ \section General form of a tape-file
+
+\hrule \smallskip %----------------------------------------------------
+
+{\obeylines %
+|\input |\<size-file>|.cas|
+|\input cascover|
+|\language|\<language>*
+|\begintape|
+| \begincontents|
+| \beginside |\<Side>|: |\<Title>| - |\<Author>| (|\<Dolby>|)|
+| \\|\<Title>| - |\<Author>|, |\<Time>*
+| |$\vdots$
+| \title |\<Title>| - |\<Author>*
+| \\|\<Title>| - |\<Author>|, |\<Time>*
+| |$\vdots$
+| \endside|
+| \beginside |\<Side>|: |\<Title>| - |\<Author>| (|\<Dolby>|)|
+| |$\vdots$
+| \endside|
+| \endcontents|
+| \beginfront|
+| \fronttitle |\<Title>| - |\<Author>*
+| |$\vdots$
+| \endfront|
+| \beginflap|
+| |$\vdots$
+| \endflap|
+|\endtape|
+|\begintape|
+| |$\vdots$
+|\endtape|
+|\bye|}
+
+\smallskip \hrule \smallskip %----------------------------------------
+The lines marked * can be omitted. All \<words> can be omitted, but sometimes
+have to be replaced by |{}|, see below.
+
+\subsection Comment and empty frames
+
+The frames are: |\beginside|\dots|\endside|, |\beginfront|\dots|\endfront| and
+|\beginflap|\dots|\endflap|. In each of these frames you can put normal
+comment, because each frame is like a miniscule page. If you put a |\title|
+or |\\| after comment, you have to put a |\par| (empty line) between them. If
+you want a frame to be empty, you have to put |\empty| between |\begin| and
+|\end|.
+
+\subsection About formatted input macros
+
+In the figure above you see a lot of things like
+`|\title |\<Title>| - |\<Author>.' This means you have to type `|\title|,'
+\<space>, some words, `| - |,' another word (one) and a \<space> (which is
+usually a {\sc return}). You could type, for instance:
+\begintt
+\title Pork soda - Primus
+\endtt
+If the last part of a line like this contains a space (i.e., if |Primus| were
+|Mucky Pup|), you'd have to put it between braces, so it would look like this:
+\begintt
+\title Pork soda - {Mucky Pup}
+\endtt
+If the first part (|Pork soda|) happens to contain the exact text it should
+be followed by (`| - |' in this example), you have to put it between braces
+too (so \TeX\ won't see the first `| - |'):
+\begintt
+\title {Pork - soda} - {Mucky Pup}
+\endtt
+If something goes wrong here, you'll get some error message like `missing
+argument,' `use of \dots\ doesn't match it's definition' or `runaway
+argument.'
+
+If some part is enclosed by \<space>s, you have to replace it by an empty
+group (|{}|), because two \<space>s in a row is just the same as one \<space>.
+Have a look at page~202 of {\book the \TeX book\/} and the example files to
+find out more about this.
+
+
+ \section Size and dimensions of a cover
+
+You can't have any influence on the appearance of your covers, except for
+the margins and the size of it. You can create a library of |.cas| files, in
+which you define different sizes for tape covers. They define the heights of
+the contents, front and flap. You can also change the margins, but you need
+pretty small margins to fit everything on the cover. Have a look at
+|normal.cas|, which produces \intextbox{\tapepicture{10.1pt}{6.5pt}{1.3pt}%
+{1.7pt}} and |small.cas|, which produces \intextbox{\tapepicture{10.1pt}%
+{4.5pt}{1pt}{1.5pt}}.
+
+
+ \section Changing the font
+
+You can change the current fontsize with the commands |\small|,
+|\normalsize| and |\large|, which work as in \LaTeX. You can change the
+fontstyle with the commands |\rm|, |\it| and |\em|. You can switch to
+condensed form using |\cond|. This only works for the normal-sized roman
+font, as this is the only one which sometimes needs to be condensed.
+Condensed text looks ugly, but will make sure long titles and author-names
+can be used. The macros don't switch to condensed text automaticly,
+because some people might rather abbrieviate long titles and names.
+
+If you want to change the definition of the fonts, you only need to change
+the file |cascfont.tex|. To get the font called |cmrcd7|, just copy the file
+|cmr7.mf| to |cmrcd7.mf|, edit |cmrcd7.mf| and change the lines
+\begintt
+font_identifier:="CMR"; font_size 7pt#;
+u#:=15.5/36pt#; % unit width
+\endtt
+to
+\begintt
+font_identifier:="CMRCD"; font_size 7pt#;
+u#:=.75 * 15.5/36pt#; % unit width
+\endtt
+
+
+ \section Suggestions and extensions
+
+Use an |\empty| front so you can draw a logo. Use the flap to enter
+information like the type of tape used. I made a macro, so I can type
+|\SA90| to get |{\large TDK SA90\qquad}|.
+
+
+ \section More about the macro's
+
+All the frames mentioned above create a |\parbox| as in \LaTeX. You can type
+normal text in them, as demonstrated in example~2. The commands |\begintape|,
+|\endcontents|, |\endfront| and |\endflap| create a horizontal line. This
+means you don't have to put them in the order used above. You could make
+a tapecover with a double frame to put the songs on, by simply repeating the
+contents part: \intextbox{\testbtape{10.1pt}\testsides{6.5pt}{}{}%
+\testsides{6.5pt}{}{}\testfront{1pt}{}\testfront{1.3pt}{}\testetape}.
+
+\bye
+ \ No newline at end of file
diff --git a/macros/plain/contrib/cascover/normal.cas b/macros/plain/contrib/cascover/normal.cas
new file mode 100644
index 0000000000..16027dcdbd
--- /dev/null
+++ b/macros/plain/contrib/cascover/normal.cas
@@ -0,0 +1,8 @@
+% NORMAL.CAS: These are the dimensions of most cassette-covers in Europe.
+
+\newdimen\coverwidth \coverwidth=101mm
+\newdimen\coverheight \coverheight=65mm
+\newdimen\covermargin \covermargin=1mm
+\newdimen\frontheight \frontheight=13mm
+\newdimen\flapheight \flapheight=17mm
+ \ No newline at end of file
diff --git a/macros/plain/contrib/cascover/small.cas b/macros/plain/contrib/cascover/small.cas
new file mode 100644
index 0000000000..1102e52772
--- /dev/null
+++ b/macros/plain/contrib/cascover/small.cas
@@ -0,0 +1,8 @@
+% SMALL.CAS: These are the dimensions of small cassette-covers in Europe.
+
+\newdimen\coverwidth \coverwidth=101mm
+\newdimen\coverheight \coverheight=45mm
+\newdimen\covermargin \covermargin=1mm
+\newdimen\frontheight \frontheight=10mm
+\newdimen\flapheight \flapheight=15mm
+ \ No newline at end of file
diff --git a/macros/plain/contrib/casslbl/cass-doc.txt b/macros/plain/contrib/casslbl/cass-doc.txt
new file mode 100644
index 0000000000..d94220ee43
--- /dev/null
+++ b/macros/plain/contrib/casslbl/cass-doc.txt
@@ -0,0 +1,64 @@
+Here is a file of macros, CASS.TEX, for producing nicely formatted labels
+for audio cassette boxes. The input consists of lines of text for the
+cassette title, side A, and side B. The four macros to accomplish this are
+\title, \sideA, \sideB, and \finish. The input file has the following form:
+
+----------------------------------------------------------------------
+\input cass
+
+\title
+ 0-3 lines
+
+\sideA
+ lines (songs)
+
+\sideB
+ lines (songs)
+
+\finish
+\end
+----------------------------------------------------------------------
+
+All four macro references should be in the file, even if some of the text is
+blank.
+
+The macros use \obeylines, so carriage returns start new lines. Also, there
+are two internal macros:
+
+1. The symbol > is basically \hfill. Use this to push the remainder of the
+line flush right (use for song times, for example.)
+
+2. The symbol | is basically \hfill\break and then indent the next line.
+Use this to break lines manually, which is the preferred method here. I
+think that for long song titles manual breaks are more logical. This also
+avoids attempts to hyphenate, and additionally it indents the next line to
+show it is part of the line above.
+
+The defined fonts are \rm,\bf,\it, and \sl. These are cm__9. The default
+font for the title is \bf and for the songs is \rm.
+
+The output has four small vrules near the four corners of the label to aid
+in cutting it out of the paper with a paper cutter:
+
+1. Make a horizontal cut through the top pair, and a cut through the bottom
+pair.
+
+2. Turn the paper 90 degrees, and line up the two left vrules (what's left
+of them after the first cut) on the cutting edge and cut. Do the same for
+the two right vrules.
+
+3. Turn the paper 90 degrees, and line up the top hrule with the cutting
+edge and cut, likewise for the bottom hrule. Actually, I cut just behind
+these hrules so they remain on the label. It looks nice.
+
+4. Finally, fold along each of the two remaining hrules. Place it in the
+cassette box and use the cardboard label that came with the cassette to keep
+it in place.
+
+Included are CASS.TEX and two sample files, SAMPLE1.TEX and SAMPLE2.TEX.
+
+Regards,
+Morgan Besson
+Villanova University
+Villanova, Pennsylvania USA
+besson@ucis.vill.edu
diff --git a/macros/plain/contrib/casslbl/cass.tex b/macros/plain/contrib/casslbl/cass.tex
new file mode 100644
index 0000000000..4e07207f9d
--- /dev/null
+++ b/macros/plain/contrib/casslbl/cass.tex
@@ -0,0 +1,53 @@
+% Macros to make cassette box labels
+% - Morgan Besson 7/92 (besson@ucis.vill.edu)
+
+\hsize=286pt
+\font\rm=cmr9
+\font\bf=cmbx9
+\font\it=cmti9
+\font\sl=cmsl9
+
+\nopagenumbers
+\parskip=0pt
+\parindent=0pt
+\baselineskip=9.5pt
+\let\fullhsize=\hsize
+
+\catcode`|=\active
+\def|{\par\indent\kern12pt}
+\catcode`>=\active
+\def>{\hfill}
+
+\newbox\titlebox
+\newbox\leftbox
+\newbox\rightbox
+
+\def\title{\begingroup\obeylines
+ \global\setbox\titlebox=\vbox\bgroup
+ \hsize=.97\fullhsize \bf}
+
+\def\sideA{\egroup\endgroup
+ \begingroup\obeylines
+ \global\setbox\leftbox=\vtop\bgroup
+ \hsize=.47\fullhsize
+ \centerline{\bf Side A}\smallskip}
+
+\def\sideB{\egroup\endgroup\begingroup\obeylines
+ \global\setbox\rightbox=\vtop\bgroup
+ \hsize=.47\fullhsize
+ \centerline{\bf Side B}\smallskip}
+
+\def\finish{\egroup\endgroup
+\line{\vrule\strut\hfill\vrule}
+\bigskip
+\hrule\vbox to48pt{\vfill\line{\hfil\copy\titlebox\hfil}\vfill}
+\hrule\vbox to36pt{\vfill\line{\hfil\box\titlebox\hfil}\vfill}\hrule
+\smallskip
+\vbox to184truept{
+ \line{\hfil\box\leftbox\hfil\vrule\hfil\box\rightbox\hfil}
+ \vfill\hrule}
+\bigskip
+\line{\vrule\strut\hfill\vrule}
+\vfill\eject}
+
+\rm
diff --git a/macros/plain/contrib/casslbl/sample1.tex b/macros/plain/contrib/casslbl/sample1.tex
new file mode 100644
index 0000000000..42a6ec140d
--- /dev/null
+++ b/macros/plain/contrib/casslbl/sample1.tex
@@ -0,0 +1,36 @@
+\input cass
+
+\title
+A: Mighty Like a Rose - Elvis Costello
+B: Ing\'enue - k. d. lang
+
+\sideA
+The Other Side of Summer > 3:56
+Hurry Down Doomsday (The | Bugs Are Taking Over) > 4:05
+How To Be Dumb > 5:12
+All Grown Up > 4:17
+Invasion Hit Parade > 5:33
+Harpies Bizarre > 3:44
+After the Fall > 4:38
+Georgie and Her Rival > 3:38
+So Like Candy > 4:36
+Interlude: Couldn't Call It | Unexpected No.~2 > 0:22
+Playboy To a Man > 3:17
+Sweet Pear > 3:36
+Broken > 3:36
+Couldn't Call It | Unexpected No.~4 > 3:49
+
+\sideB
+Save Me > 4:33
+The Mind of Love > 3:48
+Miss Chatelaine > 3:48
+Wash Me Clean > 3:17
+So It Shall Be > 4:29
+Still Thrives This Love > 3:33
+Season of Hollow Soul > 4:56
+Outside Myself > 4:57
+Tears of Love's Recall > 3:48
+Constant Craving > 4:38
+
+\finish
+\end
diff --git a/macros/plain/contrib/casslbl/sample2.tex b/macros/plain/contrib/casslbl/sample2.tex
new file mode 100644
index 0000000000..a91682427b
--- /dev/null
+++ b/macros/plain/contrib/casslbl/sample2.tex
@@ -0,0 +1,37 @@
+\input cass
+
+\title
+J. S. Bach, Cello Suites Nos.~2, 3, \&5 - Maurice Gendron
+
+\sideA
+{\it No.~2 in D Minor, BWV 1008}
+\smallskip
+Pr\'elude > 3:33
+Allemande > 3:36
+Courante > 2:00
+Sarabande > 4:37
+Menuets I--II > 2:58
+Gigue > 2:47
+
+\bigskip
+{\it No.~3 in C Major, BWV 1009}
+\smallskip
+Pr\'elude > 3:36
+Allemande > 3:33
+Courante > 3:12
+Sarabande > 4:21
+Bourr\'ees I--II > 3:09
+Gigue > 3:24
+
+\sideB
+{\it No.~5 in C Minor, BWV 1011}
+\smallskip
+Pr\'elude > 5:45
+Allemande > 5:22
+Courante > 2:27
+Sarabande > 3:25
+Gavottes I--II > 4:46
+Gigue > 2:37
+
+\finish
+\end
diff --git a/macros/plain/contrib/cellular/README b/macros/plain/contrib/cellular/README
new file mode 120000
index 0000000000..6fa78783bf
--- /dev/null
+++ b/macros/plain/contrib/cellular/README
@@ -0,0 +1 @@
+origin \ No newline at end of file
diff --git a/macros/plain/contrib/cellular/cell1.tex b/macros/plain/contrib/cellular/cell1.tex
new file mode 100644
index 0000000000..89b98a354e
--- /dev/null
+++ b/macros/plain/contrib/cellular/cell1.tex
@@ -0,0 +1,148 @@
+% File: TeX Inputs Cell1.tex
+% Author: J E Pittman
+% Bitnet: JEPTeX@TAMVenus
+% Internet: JEPTeX@Venus.TAMU.EDU
+% Date: October 11, 1988
+%
+% Set up the cellular environment
+%
+\catcode`_=11 % Protect local macros.
+%
+\ifx\forcount\undefined \input loopy \fi
+\ifx\declarecount\undefined \input declare \fi
+%
+% Handy abbreviations
+%
+\def\half{0.5}%
+\def\by{by}%
+\def\height{height}%
+\def\depth{depth}%
+\def\width{width}%
+\def\to{to}%
+\def\zeropt{0pt}%
+\let\x_after=\expandafter
+%
+% When using the Xerox 9700s or 4050, use \setverticaladjustment for
+% portrait output and \sethorizontaladjustment for landscape output
+% due to the differences in the way that vertical and horizontal lines
+% of the same weight are printed.
+%
+\declaredimen\pixelwidth
+\pixelwidth=1in
+\divide\pixelwidth by 300 % assume 300dpi
+%
+\declaredimen\horizontal_rule_adjust
+\horizontal_rule_adjust=\zeropt
+\def\sethorizontaladjustment{\horizontal_rule_adjust=\pixelwidth}%
+%
+\declaredimen\vertical_rule_adjust
+\vertical_rule_adjust=\zeropt
+\def\setverticaladjustment{\vertical_rule_adjust=\pixelwidth}%
+%
+% The left, right, bottom, and top rule widths are used to determine
+% the widths of the box around each cell.
+%
+\declaredimen\leftrulewidth
+\declaredimen\rightrulewidth
+\declaredimen\bottomrulewidth
+\declaredimen\toprulewidth
+%
+% The left, right, bottom, and top border skips are used to position
+% the text of a cell within it, relative to the centers of the rulers.
+%
+\declareskip\leftborderskip
+\declareskip\rightborderskip
+\declareskip\bottomborderskip
+\declareskip\topborderskip
+%
+\declarecount\last_column
+\declaredimen\columnwidth
+\declarecount\merge_columns
+\declaredimen\merge_width
+%
+\declarecount\last_row
+\declaredimen\rowheight
+\declarecount\merge_rows
+\declaredimen\merge_height
+\declarecount\rowpenalty
+%
+% The row info and column info token registers contain a list of
+% tokens of the form /number/info, where number is the number of a
+% row or column of interest and info is information, usually register
+% assignments, that pertains to the row or column.
+%
+\declaretoks\column_info
+\column_info={/}%
+%
+\declaretoks\row_info
+\row_info={/}%
+%
+\def\everycolumn{\leftrulewidth=0.4pt\relax
+ \rightrulewidth=\leftrulewidth
+ \leftborderskip=6pt plus 1fil\relax
+ \rightborderskip=\leftborderskip
+ \columnwidth=\zeropt\relax
+ \merge_rows=0\relax
+ \merge_height=\zeropt\relax
+ \columnwidth=\zeropt\relax
+ }%
+%
+\def\everyrow{\toprulewidth=0.4pt\relax
+ \bottomrulewidth=\toprulewidth
+ \topborderskip=3pt plus 1fil\relax
+ \bottomborderskip=\topborderskip
+ \rowheight=\zeropt\relax
+ \merge_columns=0\relax
+ \merge_width=\zeropt\relax
+ }%
+%
+\def\get_data#1<#2{\relax
+ \def\temp##1/#1/##2/##3***{\relax
+ \def\temp{##2}%
+ \ifnum1=0\temp
+ #2={##1/#1//}%
+ \else
+% \message{extracted ##2}% debug
+ ##2%
+ \fi
+ }%
+ \x_after\temp\the#2#1/1/***%
+ }%
+%
+\def\add_data#1>#2#3{\relax
+ \def\temp##1/#1/##2/##3***{\relax
+ #2={##1/#1/##2#3/##3}%
+% \message{\string#2=\the#2}% debug
+ }%
+ \x_after\temp\the#2***%
+ }%
+%
+\def\add_column_number_data{\relax
+ \x_after \add_data \the\column_number>\column_info
+ }%
+%
+\def\get_column_number_data{\relax
+ \x_after \get_data \the\column_number<\column_info
+ }%
+%
+\def\add_row_number_data{\relax
+ \x_after \add_data \the\row_number>\row_info
+ }%
+%
+\def\get_row_number_data{\relax
+ \x_after \get_data \the\row_number<\row_info
+ }%
+%
+\declarebox\temp_box
+\declarebox\scratch_box
+\declaredimen\temp_dimen
+\declaredimen\scratch_dimen
+\declareskip\temp_skip
+\declarecount\temp_count
+%
+\declarecount\tracingexpansions
+\tracingexpansions=0
+%
+\catcode`_=8 % Return to normal.
+%
+\endinput
diff --git a/macros/plain/contrib/cellular/cell2.tex b/macros/plain/contrib/cellular/cell2.tex
new file mode 100644
index 0000000000..4b025aabb8
--- /dev/null
+++ b/macros/plain/contrib/cellular/cell2.tex
@@ -0,0 +1,216 @@
+% File: TeX Inputs Cell2.tex
+% Author: J E Pittman
+% Bitnet: JEPTeX@TAMVenus
+% Internet: JEPTeX@Venus.TAMU.EDU
+% Date: November 8, 1988
+%
+% Prepare to scan the data, taking notes as to span sizes, row and
+% column dimensions, et cetera.
+%
+\catcode`_=11 % Used to protect local control sequence names.
+%
+% The span info tokens contain sets of entries of the form \process
+% {position}{number}{dimension}, where position is the terminal column
+% or row, number is the number of columns or rows leading into the
+% column or row, and dimension is the size of the information.
+%
+\declaretoks\column_span_info
+\column_span_info={}%
+\declaretoks\row_span_info
+\row_span_info={}%
+%
+\let\process=\relax
+%
+\declarecount\column_number
+\column_number=0
+%
+% Create a column information entry and put the user's specifications
+% into it.
+%
+\def\column#1{\relax
+ \advance\column_number \by 1
+ \last_column=\column_number
+ \get_column_number_data
+ \add_column_number_data {#1}%
+ \ignorespaces
+ }%
+%
+\declarecount\row_number
+\row_number=0
+%
+% Same as \column.
+%
+\def\row#1{\relax
+ \advance\row_number \by 1
+ \message{Scanning row \the\row_number.}%
+ \last_row=\row_number
+ \everyrow
+ \get_row_number_data
+ \add_row_number_data {#1}%
+ \column_number=0
+ \ignorespaces
+ }%
+%
+% \blank is used to generate a cell without a border or data. In this
+% context, all it does is absorb merges.
+%
+\def\blank{\relax
+ \advance\column_number \by 1
+ \if\column_number>\last_column
+ \advance\column_number \by -1
+ \column{}%
+ \fi
+ \everycolumn
+ \get_column_number_data
+ \ifnum\merge_rows>1
+ \add_column_number_data {\merge_rows=0\relax}%
+ \fi
+ \merge_columns=0
+ }%
+%
+% \cell is used to generate a normal, ruled cell. In this context, it
+% merely measures the cell and makes the appropriate notes.
+%
+\def\cell#1{\relax
+ \advance\column_number \by 1
+ \if\column_number>\last_column
+ \advance\column_number \by -1
+ \column{}%
+ \fi
+ \everycolumn
+ \get_column_number_data
+%
+% Typeset the information into temp box.
+%
+ \setbox\temp_box=\vbox \bgroup
+ \begingroup
+ \ifnum\merge_rows>0
+ \advance\row_number \by -\merge_rows
+ \get_row_number_data
+ \fi
+ \vskip \topborderskip
+ \endgroup
+ \hbox \bgroup
+ \begingroup
+ \ifnum\merge_columns>0
+ \advance\column_number \by -\merge_columns
+ \get_column_number_data
+ \fi
+ \hskip \leftborderskip
+ \endgroup
+ #1\vphantom{)}%
+ \hskip \rightborderskip
+ \egroup
+ \vskip \bottomborderskip
+ \egroup
+%
+% If it is a row merger, record it for later processing.
+%
+ \ifnum \merge_rows>0
+ \edef\temp{\process
+ {\the\merge_rows}{\the\ht\temp_box}{\the\row_number}%
+ \the\row_span_info
+ }%
+ \x_after\row_span_info\x_after=\x_after{\temp}%
+% \message{\string\row_span_info=\the\row_span_info}% debug
+ \add_column_number_data {\merge_rows=0\relax}%
+ \else
+%
+% Not a merger, record the height if max.
+%
+ \ifdim\ht\temp_box>\rowheight
+ \let\info=\relax
+ \edef\temp{\the\row_number>\info
+ {\rowheight=\the\ht\temp_box\relax}}%
+ \let\info=\row_info
+ \x_after \add_data \temp
+% \message{\string\row_info=\the\row_info}% debug
+ \rowheight=\ht\temp_box
+ \fi
+ \fi
+%
+% Same as above for column merger and width.
+%
+ \ifnum \merge_columns>0
+ \edef\temp{\process
+ {\the\merge_columns}{\the\wd\temp_box}{\the\column_number}%
+ \the\column_span_info
+ }%
+ \x_after\column_span_info\x_after=\x_after{\temp}%
+% \message{\string\column_span_info=\the\column_span_info}% debug
+ \merge_columns=0
+ \else
+ \ifdim\wd\temp_box>\columnwidth
+ \let\info=\relax
+ \edef\temp{\the\column_number>\info
+ {\columnwidth=\the\wd\temp_box\relax}}%
+ \let\info=\column_info
+ \x_after \add_data \temp
+% \message{\string\column_info=\the\column_info}% debug
+ \fi
+ \fi
+ }%
+%
+% \mergeright specifies that the corresponding position is to be
+% merged with the cell to its right.
+%
+\def\mergeright{\relax
+ \advance\column_number \by 1
+ \if\column_number>\last_column
+ \advance\column_number \by -1
+ \column{}%
+ \fi
+ \everycolumn
+ \get_column_number_data
+ \advance\merge_columns \by 1
+%
+% Cancel a row merge, if present.
+%
+ \ifnum\merge_rows>1
+ \add_column_number_data {\merge_rows=0\relax}%
+ \fi
+ }%
+%
+% Same as \mergeright, except down.
+%
+\def\mergedown{\relax
+ \advance\column_number \by 1
+ \if\column_number>\last_column
+ \advance\column_number \by -1
+ \column{}%
+ \fi
+ \everycolumn
+ \get_column_number_data
+ \add_column_number_data {\advance\merge_rows \by 1\relax}%
+ \merge_columns=0
+ }%
+%
+% The horizontal and vertical stretch macros allow the user to specify
+% an explicit stretch that will subsequently be processed like a span.
+% User-specified stretches are processed after span caused ones. The
+% parameters are the starting column/row, the ending column/row, and
+% the size of the stretch.
+%
+\def\horizontalstretch#1#2#3{\relax
+ \temp_count=#2\relax
+ \advance\temp_count \by -#1\relax
+ \edef\temp{\the\column_span_info\process{\the\temp_count}{#3}{#2}}%
+ \x_after \column_span_info\x_after=\x_after{\temp}%
+% \message{\string\column_span_info=\the\column_span_info}% debug
+ \ignorespaces
+ }%
+%
+\def\verticalstretch#1#2#3{\relax
+ \temp_count=#2\relax
+ \advance\temp_count \by -#1\relax
+ \edef\temp{\the\row_span_info\process{\the\temp_count}{#3}{#2}}%
+ \x_after \row_span_info\x_after=\x_after{\temp}%
+% \message{\string\row_span_info=\the\row_span_info}% debug
+ \ignorespaces
+ }%
+%
+\def\noalign#1{\ignorespaces}% don't do anything for the first pass
+%
+\catcode`_=8 % Return to normal.
+%
+\endinput
diff --git a/macros/plain/contrib/cellular/cell3.tex b/macros/plain/contrib/cellular/cell3.tex
new file mode 100644
index 0000000000..1daa3b1746
--- /dev/null
+++ b/macros/plain/contrib/cellular/cell3.tex
@@ -0,0 +1,132 @@
+% File: TeX Inputs Cell3.tex
+% Author: J E Pittman
+% Bitnet: JEPTeX@TAMVenus
+% Internet: JEPTeX@Venus.TAMU.EDU
+% Date: October 11, 1988
+%
+% Process the column and row span info.
+%
+\declaredimen\expansion
+%
+\edef\everycolumn{\everycolumn\expansion=\zeropt\relax}%
+\edef\everyrow{\everyrow\expansion=\zeropt\relax}%
+%
+\catcode`_=11 % used to protect local control sequence names.
+%
+%\message{\string\row_span_info=\the\row_span_info}% debug
+%\message{\string\column_span_info=\the\column_span_info}% debug
+%
+\def\process#1#2#3{\relax
+ \last_cell=#3\relax
+ \first_cell=\last_cell
+ \advance \first_cell \by -#1\relax
+ \span_size=#2\relax
+%
+% Compute the gap between the size of the span and the total size of
+% the cells spanned.
+%
+ \gap=\span_size
+ \forcount \cell_number=\first_cell to \last_cell by 1 do
+ \everycell
+ \get_cell_number_data
+ \advance \gap \by -\cell_size
+ \advance \gap \by -\expansion
+ \endfor \cell_number
+% \message{\string\first_cell=\the\first_cell}% debug
+% \message{\string\last_cell=\the\last_cell}% debug
+% \message{\string\span_size=\the\span_size}% debug
+% \message{\string\gap=\the\gap}% debug
+%
+% If the gap is 0pt or less, nothing needs to be done, else search for
+% the minimum expansion that can be applied to every cell with a
+% current expansion less than the expansion found such that the span
+% is properly accomadated.
+%
+ \ifdim \gap>\zeropt
+ \expandable_cells=#1\relax
+ \advance \expandable_cells \by 1
+ \trial_expansion=\zeropt
+ \whilenot\search \ifdim\gap=\zeropt do
+% \message{\string\gap=\the\gap}% debug
+ \ifnum \expandable_cells=0
+ \advance \trial_expansion \by \expansion
+ \else
+ \multiply \trial_expansion \by \expandable_cells
+ \advance \trial_expansion \by \gap
+ \divide \trial_expansion \by \expandable_cells
+ \expandable_cells=0
+ \fi
+ \gap=\span_size
+% \message{\string\trial_expansion=\the\trial_expansion}% debug
+ \forcount \cell_number=\first_cell to \last_cell by 1 do
+ \everycell
+ \get_cell_number_data
+ \advance \gap \by -\cell_size
+ \ifdim \expansion>\trial_expansion
+ \advance \gap \by -\expansion
+ \else
+ \advance \gap \by -\trial_expansion
+ \advance \expandable_cells \by 1
+ \fi
+ \endfor \cell_number
+ \temp_dimen=1sp
+ \multiply \temp_dimen \by \expandable_cells
+ \ifdim \gap>-\temp_dimen
+ \ifdim \gap<\temp_dimen
+ \gap=\zeropt
+ \fi
+ \fi
+ \endwhilenot \search
+ \forcount \cell_number=\first_cell to \last_cell by 1 do
+ \everycell
+ \get_cell_number_data
+ \ifdim \expansion<\trial_expansion
+ \let\info=\relax
+ \edef\temp{\the\cell_number>\info
+ {\expansion=\the\trial_expansion\relax}}%
+ \let\info=\cell_info
+ \x_after \add_data \temp
+ \ifnum\tracingexpansions>0
+ \message{Expanded \the\cell_number}%
+ \message{by \the\trial_expansion}%
+ \message{from \the\cell_size}%
+ \advance \cell_size \by \trial_expansion
+ \message{to \the\cell_size.}%
+ \fi
+ \fi
+ \endfor \cell_number
+ \fi
+ }%
+%
+\declarecount\first_cell
+\declarecount\last_cell
+\declaredimen\span_size
+\let\expandable_cells=\temp_count
+\declaredimen\trial_expansion
+\let\gap=\scratch_dimen
+%
+\let\cell_number=\row_number
+\let\everycell=\everyrow
+\let\get_cell_number_data=\get_row_number_data
+\let\cell_info=\row_info
+\let\cell_size=\rowheight
+\ifnum\tracingexpansions>0
+ \message{Checking row expansions.}%
+\fi
+\the\row_span_info
+%
+\let\cell_number=\column_number
+\let\everycell=\everycolumn
+\let\get_cell_number_data=\get_column_number_data
+\let\cell_info=\column_info
+\let\cell_size=\columnwidth
+\ifnum\tracingexpansions>0
+ \message{Checking column expansions.}%
+\fi
+\the\column_span_info
+%
+\let\process=\relax
+%
+\catcode`_=8 % back to normal
+%
+\endinput
diff --git a/macros/plain/contrib/cellular/cell4.tex b/macros/plain/contrib/cellular/cell4.tex
new file mode 100644
index 0000000000..498fd6f004
--- /dev/null
+++ b/macros/plain/contrib/cellular/cell4.tex
@@ -0,0 +1,355 @@
+% File: TeX Inputs Cell4.tex
+% Author: J E Pittman
+% Bitnet: JEPTeX@TAMVenus
+% Internet: JEPTeX@Venus.TAMU.EDU
+% Date: November 8, 1988
+%
+% Set up to output the data.
+%
+\catcode`_=11 % Protect local control sequence names.
+%
+% The user supplied information about the column has already been
+% processed.
+%
+\def\column #1{\relax\ignorespaces}%
+%
+\row_number=0
+\rowpenalty=0
+%
+% This routine is used for horizontal kerning when there might be a
+% kern to the left of the current position.
+%
+\def\move_right_via_lastkern #1{\relax
+ \temp_dimen=#1\relax
+ \ifdim \lastkern>\zeropt
+ \advance \temp_dimen \by \lastkern
+ \unkern
+ \else
+ \fi
+ \kern \temp_dimen
+ }%
+%
+% \row begins a row by getting its specifications, terminating the
+% previous row (if any) and going into horizontal mode.
+%
+\def\row #1{\relax
+ \advance \row_number \by 1
+ \everyrow
+ \get_row_number_data
+ \advance \rowheight \by \expansion
+ \ifdim \bottomrulewidth>\zeropt
+ \advance \bottomrulewidth \by \horizontal_rule_adjust
+ \fi
+ \column_number=0
+ \par
+ \ifnum \rowpenalty=0
+ \else
+ \penalty \rowpenalty
+ \rowpenalty=0
+ \fi
+ \noindent
+ \ignorespaces
+ \message{Outputting row \the\row_number.}%
+ }%
+%
+% \blank creates a blank cell by kerning the appropriate amount.
+%
+\def\blank {\relax
+ \advance \column_number \by 1
+ \everycolumn
+ \get_column_number_data
+ \advance \columnwidth \by \expansion
+ \advance \merge_width \by \expansion
+ \move_right_via_lastkern \merge_width
+%
+% Terminate merger(s).
+%
+ \merge_width=\zeropt
+ \merge_columns=0
+ \ifnum \merge_rows>0
+ \add_column_number_data
+ {\merge_rows=0\relax\merge_height=\zeropt\relax}%
+ \fi
+ }%
+%
+% \cell outputs a cell. The components of the cell are (in the order
+% output) the entry, the top ruler, the bottom ruler, and the left and
+% right rulers.
+%
+\def\cell #1{\relax
+ \advance \column_number \by 1
+ \everycolumn
+ \get_column_number_data
+ \advance \columnwidth \by \expansion
+ \advance \merge_height \by \rowheight
+ \advance \merge_width \by \columnwidth
+ \ifdim \leftrulewidth>\zeropt
+ \advance \leftrulewidth \by \vertical_rule_adjust
+ \fi
+ \ifdim \rightrulewidth>\zeropt
+ \advance \rightrulewidth \by \vertical_rule_adjust
+ \fi
+%
+% Get the correct top border skip and rule width. Note that it is
+% necessary to extract this informaion even if a row merger is not
+% present because a previous row merger might have left the wrong
+% values.
+%
+ \begingroup
+ \advance \row_number \by -\merge_rows
+ \everyrow
+ \get_row_number_data
+ \xdef\globaltemp{\topborderskip=\the\topborderskip\relax
+ \toprulewidth=\the\toprulewidth\relax
+ }%
+ \aftergroup \globaltemp
+ \endgroup
+ \ifdim \toprulewidth>\zeropt
+ \advance \toprulewidth \by \horizontal_rule_adjust
+ \fi
+%
+% Same procedure for the left border skip and rule width except that
+% extraction is necessary only in the presense of a column merger due
+% to the execution of an every column and a get at the start of \cell.
+%
+ \ifnum \merge_columns>0
+ \begingroup
+ \advance \column_number \by -\merge_columns
+ \everycolumn
+ \get_column_number_data
+ \xdef\globaltemp{\leftrulewidth=\the\leftrulewidth\relax
+ \leftborderskip=\the\leftborderskip\relax
+ }%
+ \aftergroup \globaltemp
+ \endgroup
+ \ifdim \leftrulewidth>\zeropt
+ \advance \leftrulewidth \by \vertical_rule_adjust
+ \fi
+ \fi
+%
+% Typeset the entry into temp box horizontally first, trying kerns
+% before glue in case the cell does not require horizontal stretching
+% and taking advantage of an empty cell by doing nothing, if such is
+% the case.
+%
+ \setbox\temp_box=\hbox{#1}%
+ \ifdim\wd\temp_box>\zeropt
+ \setbox\temp_box=\hbox \bgroup
+ \kern \leftborderskip
+ \box\temp_box
+ \egroup
+ \temp_dimen=\wd\temp_box
+ \advance\temp_dimen \by \rightborderskip
+ \wd\temp_box=\temp_dimen
+%
+ \ifdim\wd\temp_box=\merge_width
+%
+% then the kerns can be used instead of skips.
+%
+ \else
+ \setbox\temp_box=\hbox \to \merge_width \bgroup
+ \hskip \leftborderskip
+ #1%
+ \hskip \rightborderskip
+ \egroup
+ \fi
+%
+% Hide the width of temp box and put a phantom into it the hard way.
+%
+ \wd\temp_box=\zeropt
+ \setbox\scratch_box=\hbox{#1)}%
+ \ifdim \dp\scratch_box>\dp\temp_box
+ \dp\temp_box=\dp\scratch_box
+ \fi
+ \ifdim \ht\scratch_box>\ht\temp_box
+ \ht\temp_box=\ht\scratch_box
+ \fi
+%
+ \temp_dimen=\ht\temp_box
+ \advance \temp_dimen \by \dp\temp_box
+ \advance \temp_dimen \by \bottomborderskip
+ \advance \temp_dimen \by \topborderskip
+ \ifdim \temp_dimen=\merge_height
+%
+% then the entry can be positioned vertically via a raise statement.
+% The total height of the material output should be equal to the row
+% height, thus acting as a strut.
+%
+ \temp_dimen=\bottomborderskip
+ \advance \temp_dimen \by \dp\temp_box
+ \scratch_dimen=\rowheight
+ \advance\scratch_dimen by -\temp_dimen
+ \ht\temp_box=\scratch_dimen
+ \raise \temp_dimen \box\temp_box
+ \else % have to do it via a box
+ \setbox\temp_box=\vbox \to \rowheight \bgroup
+%
+% Subtracting merge height - row height from top border skip allows
+% the cell to stick up into the next row by an appropriate amount.
+%
+ \advance \topborderskip \by \rowheight
+ \advance \topborderskip \by -\merge_height
+ \vskip \topborderskip
+ \box\temp_box
+ \vskip \bottomborderskip
+ \egroup
+ \box\temp_box
+ \fi
+ \fi
+%
+% All of the rules are typeset with an overlap of at least pixel width
+% which insures that there will be no gaps.
+%
+% Typeset the top rule into an hbox and use a raise statement to put
+% it into position.
+%
+ \ifdim \toprulewidth>\zeropt
+ \setbox\temp_box=\hbox \bgroup
+ \temp_dimen=\merge_width
+ \ifdim \half\leftrulewidth<\pixelwidth
+ \kern -\pixelwidth
+ \else
+ \kern -\half\leftrulewidth
+ \fi
+ \advance \temp_dimen \by -\lastkern
+ \vrule \height \half\toprulewidth
+ \depth \half\toprulewidth
+ \width \temp_dimen
+ \ifdim \half\rightrulewidth<\pixelwidth
+ \temp_dimen=\pixelwidth
+ \else
+ \temp_dimen=\half\rightrulewidth
+ \fi
+ \kern -\temp_dimen
+ \vrule \height \half\toprulewidth
+ \depth \half\toprulewidth
+ \width 2\temp_dimen
+ \egroup
+ \wd\temp_box=\zeropt
+ \temp_dimen=\rowheight
+ \advance\temp_dimen \by -\merge_height
+ \ht\temp_box=\temp_dimen
+ \dp\temp_box=\merge_height
+ \raise \merge_height \box\temp_box
+ \fi
+%
+% Output the bottom rule using the same methods.
+%
+ \ifdim \bottomrulewidth>\zeropt
+ \setbox\temp_box=\hbox \bgroup
+ \temp_dimen=\merge_width
+ \ifdim \half\leftrulewidth<\pixelwidth
+ \kern -\pixelwidth
+ \else
+ \kern -\half\leftrulewidth
+ \fi
+ \advance \temp_dimen \by -\lastkern
+ \vrule \height \half\bottomrulewidth
+ \depth \half\bottomrulewidth
+ \width \temp_dimen
+ \ifdim \half\rightrulewidth<\pixelwidth
+ \temp_dimen=\pixelwidth
+ \else
+ \temp_dimen=\half\rightrulewidth
+ \fi
+ \kern -\temp_dimen
+ \vrule \height \half\bottomrulewidth
+ \depth \half\bottomrulewidth
+ \width 2\temp_dimen
+ \egroup
+ \wd\temp_box=\zeropt
+ \dp\temp_box=\zeropt
+ \ht\temp_box=\rowheight
+ \box\temp_box
+ \fi
+%
+% Test to see if the left inclusive-or right rule width is non-zero.
+%
+ \ifdim \leftrulewidth=\zeropt
+ \temp_dimen=\rightrulewidth
+ \else
+ \temp_dimen=\leftrulewidth
+ \fi
+ \ifdim \temp_dimen>\zeropt
+ \setbox\temp_box=\hbox \bgroup
+ \temp_dimen=\merge_height
+ \advance \merge_height \by \pixelwidth
+ \ifdim \leftrulewidth>\zeropt
+ \kern -\half\leftrulewidth
+ \vrule \height \temp_dimen
+ \depth \pixelwidth
+ \width \leftrulewidth
+ \fi
+ \ifdim \rightrulewidth>\zeropt
+ \scratch_dimen=\merge_width
+ \advance \scratch_dimen \by -\half\leftrulewidth
+ \advance \scratch_dimen \by -\half\rightrulewidth
+ \kern \scratch_dimen
+ \vrule \height \temp_dimen
+ \depth \pixelwidth
+ \width \rightrulewidth
+ \fi
+ \egroup
+ \wd\temp_box=\merge_width
+ \ht\temp_box=\rowheight
+ \dp\temp_box=\zeropt
+ \box\temp_box
+ \else
+ \move_right_via_lastkern \merge_width
+ \fi
+%
+% Cancel the mergers.
+%
+ \merge_width=\zeropt
+ \merge_columns=0
+ \ifnum \merge_rows>0
+ \add_column_number_data
+ {\merge_rows=0\relax\merge_height=\zeropt\relax}%
+ \fi
+ \ignorespaces
+ }%
+%
+% No surprises here.
+%
+\def\mergeright {\relax
+ \advance \column_number \by 1
+ \everycolumn
+ \get_column_number_data
+ \advance \columnwidth \by \expansion
+ \advance \merge_width \by \columnwidth
+ \advance \merge_columns \by 1
+ \ifnum \merge_rows>0
+ \add_column_number_data
+ {\merge_rows=0\relax\merge_height=\zeropt\relax}%
+ \fi
+ }%
+%
+% No surprises here.
+%
+\def\mergedown {\relax
+ \advance \column_number \by 1
+ \everycolumn
+ \get_column_number_data
+ \advance \columnwidth \by \expansion
+ \advance \merge_width \by \columnwidth
+ \move_right_via_lastkern \merge_width
+ \merge_width=\zeropt
+ \merge_columns=0
+ \advance \merge_height \by \rowheight
+ \let\info=\relax
+ \edef\temp{\the\column_number>\info
+ {\merge_height=\the\merge_height\relax
+ \advance\merge_rows \by 1\relax}}%
+ \let\info=\column_info
+ \x_after \add_data \temp
+ \rowpenalty=10000 % do not allow a break over a row merge.
+ }%
+%
+\catcode`_=8 % Back to normal.
+%
+\def\noalign#1{\relax
+ \vadjust{#1}%
+ \ignorespaces
+ }%
+%
+\endinput
diff --git a/macros/plain/contrib/cellular/cellular.doc b/macros/plain/contrib/cellular/cellular.doc
new file mode 100644
index 0000000000..0a46d60438
--- /dev/null
+++ b/macros/plain/contrib/cellular/cellular.doc
@@ -0,0 +1,114 @@
+% File: TeX Inputs cellular.doc
+% Author: J E Pittman
+% Bitnet: JEPTeX@TAMVenus
+% Internet: JEPTeX@Venus.TAMU.EDU
+% Date: November 8, 1988
+
+A cellular table is specified by:
+
+ \begincellular{specifications that change defaults}
+ appropriate macro definitions
+ column header specifications
+ row specifications (header and data)
+ \endcellular
+
+The following are examples of specifications that change defaults:
+
+ \pixelwidth=1in
+ \divide\pixelwidth by 300
+
+ The pixel width dimension register should be set to the resolution
+ of the device used. The default is 1/300th of an inch.
+
+ \setverticaladjustment -or- \sethorizontaladjustment
+
+ Some printers (such as the Xerox 9700s and 4050s) produce vertical
+ and horizontal rules that have a different visual thickness for the
+ same specified thickness. The macros set vertical and set
+ horizontal adjustment specified that vertical or horizontal rules
+ are to be thickened by pixel width, which may correct this problem.
+
+ \edef\everycolumn{\everycolumn
+ \leftrulewidth=0.4pt\relax
+ \rightrulewidth=\leftrulewidth
+ \leftborderskip=6pt plus 1fil\relax
+ \rightborderskip=\leftborderskip
+ \columnwidth=\zeropt\relax
+ \columnwidth=\zeropt\relax
+ }%
+
+ An \edef can be used to add material (usually default overrides) to
+ the every column macro. The information shown above reflect the
+ defaults. Care must be exercised to avoid introducing spurous
+ spaces, which will be very visible when output.
+
+ \edef\everyrow{\everyrow
+ \toprulewidth=0.4pt\relax
+ \bottomrulewidth=\toprulewidth
+ \topborderskip=3pt plus 1fil\relax
+ \bottomborderskip=\topborderskip
+ \rowheight=\zeropt\relax
+ }%
+
+ Same as every column.
+
+ \tracingexpansions=1
+
+ This specification will request notes on how column and rows are
+ expanded to accommedate spans.
+
+Any sort of macros can be defined within a cellular table. An obvious
+example is abbrevations for commonly used control sequence names.
+
+A column header is specified as:
+
+ \column{specifications}
+
+ The specifications are the same as for every column. Note: There
+ is a considerable amount of processing required for these
+ specifications, wise selection of defaults can decrease execution
+ time significantly.
+
+ Column headers are optional.
+
+Rows are specified as a row header (similiar to a column header) and a
+series of entry specifications.
+
+An entry specification can be any of the following:
+
+ \blank
+
+ A blank entry specification creates a completely blank spot in the
+ table (no rules or text).
+
+ \mergeright
+
+ A merge right specification merges the width of the entry into the
+ width of the entry to the right. It is used to create column
+ spans.
+
+ \mergedown
+
+ Similar to merge right. Note: The overhead for a merge down
+ specification is considerably higher than a merge right.
+ Therefore, when specifing an entry that spans both rows and
+ columns, merge rights should be used as much as possible. For
+ example:
+
+ > > > V V V V V
+ > > > V rather V V V V
+ > > > V than V V V V
+ > > > * > > > *
+
+ \entry{horizontal mode material}
+
+ An entry macro takes the specified material and formats it as
+ appropriate.
+
+It is not necessary to complete every row.
+
+Vertical mode material can be added after a row by specifying:
+
+ \noalign{vertical mode material}
+
+at any point in the row. Multiple no aligns are permitted.
diff --git a/macros/plain/contrib/cellular/cellular.tex b/macros/plain/contrib/cellular/cellular.tex
new file mode 100644
index 0000000000..62f2c7c02f
--- /dev/null
+++ b/macros/plain/contrib/cellular/cellular.tex
@@ -0,0 +1,29 @@
+% File: TeX Inputs cellular.tex
+% Author: J E Pittman
+% Bitnet: JEPTeX@TAMVenus
+% Internet: JEPTeX@Venus.TAMU.EDU
+% Date: November 8, 1988
+%
+% This file defines the main macro for cellular table construction.
+% For commentary, please see the file cellular.doc.
+%
+\message{Cellular.TeX version 0.}%
+%
+\def\begincellular#1#2\endcellular{\relax
+ \begingroup
+ \input Cell1 % set up enviroment
+ #1\relax
+ \input Cell2 % set up for scan
+ \ignorespaces
+ #2\relax % scan the cells
+ \input Cell3 % compute spans
+ \input Cell4 % set up for output
+ \offinterlineskip
+ \parskip=\zeropt
+ \ignorespaces
+ #2\relax % output cells
+ \par
+ \endgroup
+ }%
+%
+\endinput
diff --git a/macros/plain/contrib/cellular/cellular.txt b/macros/plain/contrib/cellular/cellular.txt
new file mode 120000
index 0000000000..a0c87f7cae
--- /dev/null
+++ b/macros/plain/contrib/cellular/cellular.txt
@@ -0,0 +1 @@
+cellular.doc \ No newline at end of file
diff --git a/macros/plain/contrib/cellular/origin b/macros/plain/contrib/cellular/origin
new file mode 100644
index 0000000000..89d309c957
--- /dev/null
+++ b/macros/plain/contrib/cellular/origin
@@ -0,0 +1,28 @@
+Date: Wed, 9 Nov 88 13:33:46 CST
+From: J E PITTMAN <JEPTEX@venus.tamu.edu>
+Subject: TeX Inputs cellular.tex (table-generating macros)
+Keywords: macros
+
+Several months ago, someone sent in a request for macros that allow vertical
+and horizontal spans within a ruled table. There have also been questions
+about `nubs' and `gaps' within ruled tables.
+
+After thinking about the problem for a while, I realized that a solution was to
+abandon the \halign primitive and start from scratch.
+
+I have finished my first attempt at a set of table generating macros, which I
+have chosen to call Cellular.TeX. These macros allow for both vertical and
+horizontal spans and take steps to prevent `nubs' and `gaps' when rules are
+used.
+
+They are, unfortunately, very slow and I have not been able to increase their
+speed without sacrificing memory conservation and generality.
+
+I am sending the macros under separate cover since there are nearly 1,000 lines
+of code involved, divided into five files. Detailed comments are available in
+the file TeX Inputs cellular.doc.
+
+J E Pittman Bitnet: JEPTeX@TAMVenus
+User Services Group Internet: JEPTeX@Venus.TAMU.Edu
+Computing Services Center
+Texas A&M University
diff --git a/macros/plain/contrib/chbar/a4-9.doc b/macros/plain/contrib/chbar/a4-9.doc
new file mode 100644
index 0000000000..d15ce6113d
--- /dev/null
+++ b/macros/plain/contrib/chbar/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/plain/contrib/chbar/a4-9.sty b/macros/plain/contrib/chbar/a4-9.sty
new file mode 100644
index 0000000000..2614968909
--- /dev/null
+++ b/macros/plain/contrib/chbar/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/plain/contrib/chbar/a4-marg.chf b/macros/plain/contrib/chbar/a4-marg.chf
new file mode 100644
index 0000000000..c5aba1d7a4
--- /dev/null
+++ b/macros/plain/contrib/chbar/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/plain/contrib/chbar/chbars.doc b/macros/plain/contrib/chbar/chbars.doc
new file mode 100644
index 0000000000..77610d2db3
--- /dev/null
+++ b/macros/plain/contrib/chbar/chbars.doc
@@ -0,0 +1,738 @@
+% 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...
+\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/plain/contrib/chbar/chbars.tex b/macros/plain/contrib/chbar/chbars.tex
new file mode 100644
index 0000000000..83801dd7a3
--- /dev/null
+++ b/macros/plain/contrib/chbar/chbars.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/plain/contrib/chbar/copying b/macros/plain/contrib/chbar/copying
new file mode 100644
index 0000000000..9a17037581
--- /dev/null
+++ b/macros/plain/contrib/chbar/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/plain/contrib/chbar/progltx.sty b/macros/plain/contrib/chbar/progltx.sty
new file mode 100644
index 0000000000..c59f986fc4
--- /dev/null
+++ b/macros/plain/contrib/chbar/progltx.sty
@@ -0,0 +1,759 @@
+% 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
+% 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{\newpage}%
+ \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 We are finished and just have to restore the category code.
+
+%%% \beginprog
+\catcode`\_=\uscode
+
+\endinput
+%%% \endprog
+
+
+
+
+
+%%% \end{document}
diff --git a/macros/plain/contrib/chbar/readme b/macros/plain/contrib/chbar/readme
new file mode 100644
index 0000000000..9053be7938
--- /dev/null
+++ b/macros/plain/contrib/chbar/readme
@@ -0,0 +1,116 @@
+% README for changebar macros 09 Apr 91
+%------------------------------------------------------------
+
+
+GENERAL NOTES
+
+These are my macros for producing changebars with Plain TeX. 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. I will not do
+the LaTeX adaption because I neither use LaTeX in my own documents
+nor do I need changebars... 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, or if you adapt them to 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 two test files (test1.tex and test2.tex) for
+the usage of change bars in vertical and horizontal mode are
+included, too.
+
+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.tex the macro version of chbars.doc
+test1.tex Test files for chbars.tex
+test2.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
+
+
+--
diff --git a/macros/plain/contrib/chbar/test1.tex b/macros/plain/contrib/chbar/test1.tex
new file mode 100644
index 0000000000..92d2839ef8
--- /dev/null
+++ b/macros/plain/contrib/chbar/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/plain/contrib/chbar/test2.tex b/macros/plain/contrib/chbar/test2.tex
new file mode 100644
index 0000000000..5dbdd4a17a
--- /dev/null
+++ b/macros/plain/contrib/chbar/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/plain/contrib/crw/README b/macros/plain/contrib/crw/README
new file mode 100644
index 0000000000..c6340ef548
--- /dev/null
+++ b/macros/plain/contrib/crw/README
@@ -0,0 +1,18 @@
+
+%
+%Contents:Typesetting Crosswords via plain TeX.
+% Introduced at EuroTeX '92. Here with some mods.
+%Version: December 1993.
+%Purpose: Typesetting crosswords via near natural input.
+% Clues have to be set separately.
+%Example of use (after \input crw.tex %the macro)
+%\bdata%
+%P*On
+%DEk*
+%*n*S
+%Edit
+%\edata
+%$$\crw\qquad\def\usersize{\fiverm\csize=3ex}
+% \sol$$
+%Documentation: Proceedings EuroTeX '92, Prague, and MAPS 92.2 (see later 2p.)
+%Macro: crw.tex file
diff --git a/macros/plain/contrib/crw/crw.tex b/macros/plain/contrib/crw/crw.tex
new file mode 100644
index 0000000000..44e80f9102
--- /dev/null
+++ b/macros/plain/contrib/crw/crw.tex
@@ -0,0 +1,51 @@
+%C.G. van der Laan, Hunzeweg 57, 9893PB, Garnwerd. Holland. 05941-1525.
+% cgl@risc1.rug.nl
+\let\ea=\expandafter \newif\ifpuzzle
+\newcount\cnt \puzzletrue \cnt=0
+\newdimen\csize\csize=3ex
+%
+\def\bdata{\bgroup\obeylines\obeyspaces%
+\store}
+\def\store#1\edata{\egroup\def\data{#1}}
+{\obeyspaces\global\let =\relax}
+\def\usersize{}
+%
+{\catcode`\^^M=13 %local scope
+\gdef\crw{\boxit{\usersize\setbox0=%
+ \hbox to\csize{\vrule\hss\vrule%
+ height.8\csize depth.2\csize width%
+ \csize\hss\vrule}%
+\hrule\ea\fifol\data\lofif^^M}}
+\gdef\sol{\boxit{\def\num{}\puzzlefalse%
+\usersize\setbox0=\hbox to\csize{\vrule%
+ \hss\vrule height.8\csize depth%
+ .2\csize width\csize\hss\vrule}%
+\hrule\ea\fifol\data\lofif^^M}}
+\gdef\fifol#1^^M{\ifx\lofif#1\lofif\fi%
+\processl{#1}\fifol}}%end local scope
+%
+\def\lofif#1\fifol{\fi}
+\def\processl#1{\hbox{\fifo#1\ofif}\hrule}
+\def\fifo#1{\ifx\ofif#1\ofif\fi%
+\process#1\fifo} \def\ofif#1\fifo{\fi}
+%
+\def\process#1{\if*#1\copy0\relax\else%
+\ifx\relax#1\copy0\relax\else\ifnum`#1=
+ \uccode`#1\cap#1\else\low#1\fi%
+\fi\fi}
+\def\low#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\ifpuzzle\null\else\hss\uppercase{#1}\fi%
+\hss\vrule}}
+\def\cap#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\num\ifpuzzle\null\else\hss#1\fi%
+\hss\vrule}}
+%
+\def\num{\global\advance\cnt1\relax%
+\vbox to.8\csize{\rlap{\kern1pt%
+\fiverm\the\cnt\hss}\vfil}}
+%
+\def\boxit#1{\vbox{\hrule\hbox{\vrule%
+\vbox{#1}\vrule}\hrule}}%
+%\endinput %end macros %cgl@risc1.rug.nl
diff --git a/macros/plain/contrib/crw/crwdoc.tex b/macros/plain/contrib/crw/crwdoc.tex
new file mode 100644
index 0000000000..fc6d48474f
--- /dev/null
+++ b/macros/plain/contrib/crw/crwdoc.tex
@@ -0,0 +1,283 @@
+%History of changes
+%dec 1993: The Prague proceedings version as been adapted.
+% This version submitted to CTAN.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Revised/Alternative Crosswords via (plain) TeX
+%Version: Oct 92
+\input tugboat.sty
+\def\rtitle{\hbox to \pagewd{\tenrm MAPS92.2\hfil
+ {\it Typesetting Crosswords via \TeX, revisited}
+}}
+\def\rfoot{\hbox to\pagewd{\sevenrm \rlap{Draft: \today}\hfil-\the\pageno-
+\hfil\llap{\copyright cgl}}
+}
+\pageno=1
+\overfullrule=0pt
+
+\title*Typesetting Crosswords via \TeX, revisited*
+\author*Kees van der Laan*
+\address*Hunzeweg 57, 9893PB\\
+ Garnwerd (Gr), The Netherlands*
+\netaddress*cgl@risc1.rug.nl*
+\article
+%Footnote counter and footnote indexer
+\newcount\fcnt
+\def\ftn{\global\advance\fcnt1 \footnote{${}^{\the\fcnt}$}}
+\def\DeK{D\kern-.11em\lower.5ex\hbox{E}\kern-.1em K}
+
+\head*Abstract*
+An alternative macro, to van der Laan (1992b),
+is provided for typesetting crosswords via (plain) \TeX.
+
+\subhead*Keywords* Crosswords, games, plain \TeX. %, typography.
+%
+\head*Introduction*
+The previous version has been published
+in the proceedings of Euro\-\TeX\ '92, and in MAPS92.1.
+A TUGboat referee suggested not to use |\halign|, et voil\`a.
+The differences of this version with the previous version are:
+|\halign| is not used, and therefore there is no mark-up phase,
+and |\data| is hidden.
+The nested FIFO paradigm is directly applied to |\data|,
+van der Laan (1992a). The control sequence |\data| is created in
+|\store| with as replacement text the data provided between |\bdata...\edata|.
+Alternative sizes of the crossword
+can be obtained via appropriate (re)definition of
+|\usersize|.
+
+\head*Example of use* %\input crwrev.tex
+%
+\let\ea=\expandafter \newif\ifpuzzle
+\newcount\cnt \puzzletrue
+\newdimen\csize\csize=3ex
+%
+\def\bdata{\bgroup\obeylines\obeyspaces%
+\store}
+\def\store#1\edata{\egroup\def\data{#1}}
+{\obeyspaces\global\let =\relax}
+\def\usersize{}
+%
+{\catcode`\^^M=13 %local scope
+\gdef\crw{\cnt=0\relax\boxit{\usersize%
+\hrule\ea\fifol\data\lofif^^M}}
+\gdef\sol{\boxit{\def\num{}\puzzlefalse%
+\usersize\hrule\ea\fifol\data\lofif^^M}}
+\gdef\fifol#1^^M{\ifx\lofif#1\lofif\fi%
+\processl{#1}\fifol}}%end local scope
+%
+\def\lofif#1\fifol{\fi}
+\def\processl#1{\hbox{\fifo#1\ofif}\hrule}
+\def\fifo#1{\ifx\ofif#1\ofif\fi%
+\process#1\fifo} \def\ofif#1\fifo{\fi}
+%
+\def\process#1{\if*#1\cc\else%
+\ifx\relax#1\cc\else%
+\ifnum`#1=\uccode`#1\cap#1\else%
+\low#1\fi\fi\fi}
+\def\low#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\ifpuzzle\null\else\hss\uppercase{#1}%
+\fi\hss\vrule}}
+\def\cap#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\num\ifpuzzle\null\else\hss#1\fi%
+\hss\vrule}}
+\def\cc{\vrule height.8\csize depth%
+.2\csize width\csize}
+%
+\def\num{\global\advance\cnt1\relax%
+\vbox to.8\csize{\rlap{\kern1pt%
+\fiverm\the\cnt\hss}\vfil}}
+%
+\def\boxit#1{\vbox{\hrule\hbox{\vrule%
+\vbox{#1}\vrule}\hrule}}% cgl, oct92
+%
+\bdata%
+P*On
+DEk*
+*n*S
+Edit
+\edata$$\crw\qquad
+\def\usersize{\fiverm\csize=3ex}\sol$$
+\medskip\noindent
+is obtained via\ftn{The sides seem to wiggle. Is this optical illusion,
+a driver bug, or caused by the properties of ink-blocks on paper?
+Electronic previewing did not suffer from this.
+The framing was added via {\tt\char92 boxit} to enhance a straight frame.}
+\verbatim
+\input crwrev.tex
+\bdata%
+P*On
+DEk*
+*n*S
+Edit
+\edata$$\crw\qquad
+\def\usersize{\fiverm\csize=3ex}\sol$$
+\endverbatim
+\noindent Conventions for |\bdata| $\langle\,data\,\rangle$ |\edata|\ftn{A
+`white lie,' spaces are also allowed for crossed out cells, see the Appendix.}
+\item{--} cell descriptions have to be given line by line
+\item{--} * denotes crossed out cell
+\item{--} capitals denote marked open cells (with reference numbers
+ to the clues), and letters of the solution
+\item{--} lower case letters, denote empty cells,
+ and letters of the solution.
+\par\noindent The explicit number of cells is not needed to specify,
+nor used.
+
+\head*Programming*
+Crossword diagrams consist of
+(marked) empty cells, crossed out cells, and
+for the solution cells with (capital) letters.
+I parameterized each cell into the
+size |\csize| by |\csize|, with height |.8\csize|.
+Cells are typeset per row in a |\hbox| and these boxes are
+stacked in a |\vbox|. All is framed via |\boxit|.
+The carriage return, |^^M|, and space are active characters
+between |\bdata| and |\edata|, allowing WYSIWYG input.
+The numbering of the marked cells is done automatically, row-wise and hidden.
+I adopted the convention to use reversed words for end-parameter separators,
+except for the |\edata| separator.
+
+Furthermore,
+I assumed that no diacritical marks are used in crosswords, and restricted
+myself to the roman alphabet.
+
+\subhead*The file {\tt crwrev.tex}*
+%\verbfile{crwrev.tex}
+\verbatim
+\let\ea=\expandafter \newif\ifpuzzle
+\newcount\cnt \puzzletrue
+\newdimen\csize\csize=3ex
+%
+\def\bdata{\bgroup\obeylines\obeyspaces%
+\store}
+\def\store#1\edata{\egroup\def\data{#1}}
+{\obeyspaces\global\let =\relax}
+\def\usersize{}
+%
+{\catcode`\^^M=13 %local scope
+\gdef\crw{\cnt=0\relax\boxit{\usersize%
+\hrule\ea\fifol\data\lofif^^M}}
+\gdef\sol{\boxit{\def\num{}\puzzlefalse%
+\usersize\hrule\ea\fifol\data\lofif^^M}}
+\gdef\fifol#1^^M{\ifx\lofif#1\lofif\fi%
+\processl{#1}\fifol}}%end local scope
+%
+\def\lofif#1\fifol{\fi}
+\def\processl#1{\hbox{\fifo#1\ofif}\hrule}
+\def\fifo#1{\ifx\ofif#1\ofif\fi%
+\process#1\fifo} \def\ofif#1\fifo{\fi}
+%
+\def\process#1{\if*#1\cc\else%
+\ifx\relax#1\cc\else%
+\ifnum`#1=\uccode`#1\cap#1\else%
+\low#1\fi\fi\fi}
+\def\low#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\ifpuzzle\null\else\hss\uppercase{#1}%
+\fi\hss\vrule}}
+\def\cap#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\num\ifpuzzle\null\else\hss#1\fi%
+\hss\vrule}}
+\def\cc{\vrule height.8\csize depth%
+.2\csize width\csize}
+%
+\def\num{\global\advance\cnt1\relax%
+\vbox to.8\csize{\rlap{\kern1pt%
+\fiverm\the\cnt\hss}\vfil}}
+%
+\def\boxit#1{\vbox{\hrule\hbox{\vrule%
+\vbox{#1}\vrule}\hrule}}% cgl, oct92
+\endverbatim
+%
+\subhead*{\tt\char92crw}, {\tt\char92sol}*
+The crossword, respectively the solution are typeset
+(as |\vbox|-es) by these macros. |\data| is used.
+%
+\subhead*{\tt\char92process}*
+This macro typesets each cell contents according to the |\data|. %
+|\if*#1| etc.\ tests whether a crossed-out cell has to be typeset, and if so
+a copy is inserted. For the other situation according to
+the case of the letter |\low|(er case letter) or
+|\cap|(ital letter), is invoked.
+How the cell contents will be typeset depends upon |\ifpuzzle|.
+The letters are typeset in upper case and centered.
+%
+\subhead*{\tt\char92num}*
+Generates and typesets the reference numbers.
+The numbers are set in the left upper corners of the cells marked
+by capitals in the puzzle representation.
+%
+\subhead*{\tt\char92bdata, \char92store}*
+These store the user provided information between |\bdata| and |\edata|
+in |\data|, with the carriage return and space as active characters.
+(The |\bgroup| after |\gdef| must be an
+{\it explicit\/} brace, because |\bgroup| can be equally well a
+parameter separator.)
+%
+\head*References*
+%
+\frenchspacing
+\newcount\bcnt
+\def\bib{\global\advance\bcnt1 [\the\bcnt]}
+\item{\bib} Hamilton Kelley, B (1990): Some macros to draw crosswords.
+ \tubissue{11}(1), 103\dash119.
+\item{\bib} Knuth, D.E (1986): The \TeX Book. Addison-Wesley.
+\item{\bib} Laan, C.G van der (1992a):
+ FIFO and LIFO sing the BLUes. MAPS92.2.
+\item{\bib} Laan, C.G van der Laan (1992b): Typesetting Crosswords via \TeX.
+ Euro\TeX\ '92. 217\dash224. Also in MAPS92.1.
+\par\noindent
+%%%The above blank line (or \par) is needed to terminate \item%%%
+\head*Appendix: {\rm Hamilton Kelley's puzzle}*
+\tolerance=5000
+\bdata%BHK's example, TB11#1
+ S I C T D S P*
+Swam Oho Icecap
+ o p m r t n l*
+Bopeep Schedule
+ s l a i y u *
+Thalassographer
+ e s n a r*
+HAirpin UmbRage
+ r o S b i *
+ScaLenetriangLe
+ o a u c g e*
+AMounted Allege
+ a v e e l e a*
+Floral Nil Tace
+ l e y t y s y*
+\edata$$\crw$$
+is obtained---after |\input|\ |crwrev.tex|---via
+\verbatim
+\bdata%BHK's example
+ S I C T D S P*
+Swam Oho Icecap
+ o p m r t n l*
+Bopeep Schedule
+ s l a i y u *
+Thalassographer
+ e s n a r*
+HAirpin UmbRage
+ r o S b i *
+ScaLenetriangLe
+ o a u c g e*
+AMounted Allege
+ a v e e l e a*
+Floral Nil Tace
+ l e y t y s y*
+\edata$$\crw$$
+\endverbatim
+\endarticle
+\bye
+
+
+
+
+
+
+
+
diff --git a/macros/plain/contrib/doc b/macros/plain/contrib/doc
new file mode 120000
index 0000000000..9c67615fec
--- /dev/null
+++ b/macros/plain/contrib/doc
@@ -0,0 +1 @@
+../../../info/plain-doc \ No newline at end of file
diff --git a/macros/plain/contrib/edmac/braonain.dvi b/macros/plain/contrib/edmac/braonain.dvi
new file mode 100644
index 0000000000..01584c7b80
--- /dev/null
+++ b/macros/plain/contrib/edmac/braonain.dvi
Binary files differ
diff --git a/macros/plain/contrib/edmac/braonain.ps b/macros/plain/contrib/edmac/braonain.ps
new file mode 100644
index 0000000000..251b1db231
--- /dev/null
+++ b/macros/plain/contrib/edmac/braonain.ps
@@ -0,0 +1,318 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.58 Copyright 1986, 1994 Radical Eye Software
+%%Title: braonain.dvi
+%%CreationDate: Mon Nov 11 13:38:15 1996
+%%Pages: 2
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%EndComments
+%DVIPSCommandLine: dvips braonain
+%DVIPSParameters: dpi=300, compressed, comments removed
+%DVIPSSource: TeX output 1996.11.11:1337
+%%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 round sub abs 0.00001 lt{round}if}
+forall round exch round exch]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 sub]/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 300 300 (/do/braonain.dvi)
+@start /Fa 34 118 df<13FCEA0782EA0E07121C130290C7FCA4B5FCEA1C07AC387F1F
+C01217809614>12 D<12F81238AC12FE070E7F8D0A>16 D<121CA2123C1270126012C006
+06799612>19 D<126012F0A212701210A21220A21240A2040A7D960A>39
+D<126012F0A212701210A21220A21240A2040A7D830A>44 D<126012F0A2126004047D83
+0A>46 D<126012F0A212601200A6126012F0A21260040E7D8D0A>58
+D<EAFFFE381C0380EB00E014601470A414E0EB01C0381FFF8014C0381C00E01470143014
+38A4147014E0EB01C0B5120015177F9619>66 D<EBFC1038038330380E00B04813704813
+30123000701310126012E01400A51410126012700030132012386C13406C138038038300
+EA00FC14177E9619>I<B5FC381C01C0EB00E0143014381418141C140C140EA7140C141C
+A2143814301460EB01C0B5120017177F961B>I<B512E0EA1C00146014201410A3EB0400
+A3130CEA1FFCEA1C0C13041408A2130014181410A2143014F0B5FC15177F9618>I<EAFF
+C0001CC7FCAD1420A31460A2144014C01303B5FC13177F9616>76
+D<00FEEB03F8001E14C000171305A338138009A23811C011A33810E021A2EB7041A3EB38
+81A2EB1D01A2130EA2123839FE040FF81D177F9620>I<EA0FC4EA302CEA601CEA400CEA
+C004A3EAE0001270127FEA3FE0EA0FF8EA01FCEA001C130E13061280A3EAC004EAE008EA
+D810EA87E00F177E9614>83 D<387FFFF83860381800401308A200801304A300001300AF
+3803FF8016177F9619>I<12FCA2120CB3AB12FCA2062180980A>93
+D<EA3FC0EA70601330EA20381200EA03F8EA1E3812301270EAE039A21379EA70FFEA1F1E
+100E7F8D12>97 D<12F81238A8EA39F0EA3E0CEA380613077F1480A414005B1306EA361C
+EA21F011177F9614>I<EA07F0EA18381230EA7010EA600012E0A41260EA70081230EA18
+30EA07C00D0E7F8D10>I<133E130EA8EA07CEEA1C3EEA300E1270126012E0A412601270
+EA301EEA182E3807CF8011177F9614>I<EA0FC0EA1860EA3030EA7038EAE018EAFFF8EA
+E000A31260EA7008EA3010EA1830EA07C00D0E7F8D10>I<EA03E0EA0670120EEA1C2013
+00A5EAFF80EA1C00ACEA7F800C1780960B>I<EA0F9EEA18E3EA3060EA7070A3EA3060EA
+18C0EA2F80EA20001260EA3FE013F813FCEA600EEAC006A3EA600CEA3838EA0FE010157F
+8D12>I<12F81238A813F8EA3B1CEA3C0E1238AA38FE3F8011177F9614>I<12301278A212
+301200A512F81238AC12FE07177F960A>I<12F81238B3A312FE07177F960A>108
+D<38F8F83E383B1CC7393C0F0380EA380EAA39FE3F8FE01B0E7F8D1E>I<EAF8F8EA3B1C
+EA3C0E1238AA38FE3F80110E7F8D14>I<EA07C0EA1830EA3018EA600CA2EAE00EA5EA70
+1CEA3018EA1830EA07C00F0E7F8D12>I<EAF9F0EA3E1CEA380613077F1480A414005B13
+0EEA3E1CEA39F00038C7FCA512FE11147F8D14>I<EAF9E0EA3A70123CEA38201300A9B4
+FC0C0E7F8D0E>114 D<EA1F40EA60C0EAC040A2EAE000B4FCEA7F80EA1FC0EA01E0EA80
+60A212C0EAE0C0EA9F000B0E7F8D0E>I<1208A31218A21238EAFFC0EA3800A71340A4EA
+1C80EA0F000A147F930E>I<EAF83EEA380EAA131EEA1C2E3807CF80110E7F8D14>I
+E /Fb 6 109 df<381FFFFC3838381C00201308126012401370128000001300A25BA448
+5AA4485AA448C7FCEA7FF016177A961A>84 D<EA0390EA0C701218EA303013601260A3EA
+C0C013C812401241EA62D0EA1C700D0E7C8D12>97 D<133E130CA41318A4EA03B0EA0C70
+1218EA303013601260A3EAC0C013C812401241EA62D0EA1C700F177C9612>100
+D<EA0780EA1840EA302012601340EAFF80EAC000A413201340EA6180EA3E000B0E7C8D10
+>I<1203120712061200A61218122C124CA2128C1218A312301232126212641224123808
+177D960B>105 D<123E120CA41218A41230A41260A412C012C8A312D0126007177D9609>
+108 D E /Fc 1 51 df<EA0FC0EA3FF8EA70FCEAF83C133E131E1270EA003E133C133813
+7013E0EA01C0EA0380EA0606120CEA180EEA3FFC127F12FFA20F157E9414>50
+D E /Fd 10 58 df<120FEA30C0EA6060A2EA4020EAC030A9EA4020EA6060A2EA30C0EA
+0F000C137E9211>48 D<120C121C12EC120CAFEAFFC00A137D9211>I<121FEA60C01360
+EAF07013301260EA0070A2136013C012011380EA02005AEA08101210EA2020EA7FE012FF
+0C137E9211>I<EA0FC0EA3070EA7038A31200133013E0EA0FC0EA007013381318131C12
+6012F01318EAE038EA6070EA1FC00E137F9211>I<136013E0A2EA016012021206120C12
+0812101220126012C0EAFFFCEA0060A5EA03FC0E137F9211>I<EA6060EA7FC01380EA44
+001240A3124FEA70C0EA40E0EA00601370A212E0A21360EA40E0EA21C0EA1F000C137E92
+11>I<EA07C0EA0C20EA10701220EA6000A25A12CFEAD0C0EAE060EAC0201330A31240EA
+6020EA2060EA10C0EA0F000C137E9211>I<1240EA7FFC13F8EA4010EA80301320EA0040
+1380EA0100A25A12021206A2120EA512040E147E9311>I<EA0FC0EA1070EA20181260A2
+1270EA3C30EA3F60EA0F8013E0EA31F0EA6078EAC01C130CA3EA6018EA3030EA0FC00E13
+7F9211>I<120FEA3080EA6040EA4060EAC0201330A31240EA6070EA30B0EA0F30120013
+201360EAE0401380EA4100123E0C137E9211>I E /Fe 51 119 df<137E3801C180EA03
+01380703C0120EEB018090C7FCA5B512C0EA0E01B0387F87F8151D809C17>12
+D<12FC121CB0EAFF8009127F910C>16 D<120EA2121E1238127012E012800707779C15>
+19 D<126012F012F812681208A31210A2122012401280050C7C9C0C>39
+D<1380EA0100120212065AA25AA25AA35AA412E0AC1260A47EA37EA27EA27E12027EEA00
+80092A7C9E10>I<126012F0A212701210A41220A212401280040C7C830C>44
+D<EAFFE0A20B0280890E>I<126012F0A2126004047C830C>I<5A1207123F12C71207B3A5
+EAFFF80D1C7C9B15>49 D<EA07C0EA1830EA201CEA400C130EEAF00F12F81307A21270EA
+000F130EA2131CA213381370136013C0EA0180EA0300EA0601120C1218EA1002EA3FFE12
+7F12FF101C7E9B15>I<126012F0A212601200AA126012F0A2126004127C910C>58
+D<126012F0A212601200AA126012F0A212701210A41220A212401280041A7C910C>I<EA
+0FE0EA3038EA401CEAE00E12F0A3EA000C131C1330136013C0138012011300A6C7FCA512
+03EA0780A2EA03000F1D7E9C14>63 D<1306A3130FA3EB1780A2EB37C01323A2EB43E013
+41A2EB80F0A338010078A2EBFFF83802003CA3487FA2000C131F80001E5BB4EBFFF01C1D
+7F9C1F>65 D<B512C0380F00788080140E140FA4140E141E5C14F8EBFFF0EB003C808080
+1580A5EC0F00A2141E1478B512E0191C7F9B1D>I<90381F8080EBE06138018019380700
+07000E13035A14015A00781300A2127000F01400A8007014801278A212386CEB0100A26C
+13026C5B380180083800E030EB1FC0191E7E9C1E>I<B512C0380F00F0143C140E80A2EC
+038015C01401A215E0A815C0A21403158014071500140E5C1470B512C01B1C7E9B20>I<
+B512FC380F003C140C1404A214061402A213011400A35B13FF13037FA3140113001402A3
+1406A2140C143CB512FC181C7E9B1C>I<B512F8380F007814181408A2140C1404A21301
+1400A35B13FF13037FA490C7FCA8EAFFF8161C7E9B1B>I<90381F8080EBE06138018019
+38070007000E13035A14015A00781300A2127000F01400A6ECFFF0EC0F80007013071278
+A212387EA27E6C130B380180113800E06090381F80001C1E7E9C21>I<EAFFF0EA0F00B3
+A8EAFFF00C1C7F9B0F>73 D<3807FF8038007C00133CB3127012F8A21338EA7078EA4070
+EA30E0EA0F80111D7F9B15>I<EAFFF8EA0F8090C7FCB01408A31418A2141014301470EB
+01F0B5FC151C7E9B1A>76 D<B46CEBFF80000FECF800A2390BC00178A33809E002A23808
+F004A3EB7808A3EB3C10A3EB1E20A3EB0F40A2EB0780A3EB0300121C3AFF8307FF80211C
+7E9B26>I<B4EB1FF0390F8003809038C00100120BEA09E0EA08F0A21378133C133E131E
+130F14811307EB03C1EB01E114F113001479147D143D141FA2808080121CB46C7E1C1C7F
+9B1F>I<EB3F80EBE0E03803803848487E000E7F487F003C148000381303007814C0A200
+70130100F014E0A8007014C000781303A200381480003C1307001C14006C130E6C5B6C6C
+5A3800E0E0EB3F801B1E7E9C20>I<B51280380F00E01478143C141C141EA5141C143C14
+7814E0EBFF8090C7FCACEAFFF0171C7E9B1C>I<3807E080EA1C19EA30051303EA600112
+E01300A36C13007E127CEA7FC0EA3FF8EA1FFEEA07FFC61380130FEB07C0130313011280
+A300C01380A238E00300EAD002EACC0CEA83F8121E7E9C17>83 D<007FB512C038700F01
+0060130000401440A200C014201280A300001400B1497E3803FFFC1B1C7F9B1E>I<39FF
+F01FF0390F000380EC0100B3A26C1302138000035BEA01C03800E018EB7060EB0F801C1D
+7F9B1F>I<12FEA212C0B3B312FEA207297C9E0C>91 D<12FEA21206B3B312FEA2072980
+9E0C>93 D<EA1FC0EA3070EA78387F12301200A2EA01FCEA0F1C12381270126000E01340
+A3EA603C38304E80381F870012127E9115>97 D<12FC121CAA137CEA1D87381E0180381C
+00C014E014601470A6146014E014C0381E018038190700EA10FC141D7F9C17>I<EA03F8
+EA0C0CEA181E1230EA700CEA600012E0A61260EA70021230EA1804EA0C18EA03E00F127F
+9112>I<EB1F801303AAEA03F3EA0E0BEA1807EA30031270126012E0A6126012701230EA
+1807EA0E1B3803E3F0141D7F9C17>I<EA07E0EA0C30EA1818EA300CEA700EEA600612E0
+EAFFFEEAE000A41260EA70021230EA1804EA0C18EA03E00F127F9112>I<13F8EA018CEA
+071E1206EA0E0C1300A6EAFFE0EA0E00B0EA7FE00F1D809C0D>I<EB03803807C4C0EA1C
+783838388038301800EA701CA4EA3018EA38386C5AEA27C00020C7FCA21230EA3FF86CB4
+FC1480EA2003386001C0EAC000A33860018038300300EA1C0EEA07F8121C7F9215>I<12
+FC121CAA137C1387EA1D03001E1380121CAD38FF9FF0141D7F9C17>I<1218123CA21218
+C7FCA712FC121CB0EAFF80091D7F9C0C>I<12FC121CB3A9EAFF80091D7F9C0C>108
+D<39FC7E07E0391C838838391D019018001EEBE01C001C13C0AD3AFF8FF8FF8021127F91
+24>I<EAFC7CEA1C87EA1D03001E1380121CAD38FF9FF014127F9117>I<EA03F0EA0E1CEA
+1806487E00701380EA600100E013C0A600601380EA700300301300EA1806EA0E1CEA03F0
+12127F9115>I<EAFC7CEA1D87381E0180001C13C0EB00E0A21470A614E0A2EB01C0001E
+1380381D0700EA1CFC90C7FCA7B47E141A7F9117>I<EAFCE0EA1D38EA1E78A2EA1C3013
+00ACEAFFC00D127F9110>114 D<EA1F90EA2070EA4030EAC010A212E0EAF800EA7F80EA
+3FE0EA0FF0EA00F8EA8038131812C0A2EAE010EAD060EA8FC00D127F9110>I<1204A412
+0CA2121C123CEAFFE0EA1C00A91310A5120CEA0E20EA03C00C1A7F9910>I<38FC1F80EA
+1C03AD1307120CEA0E1B3803E3F014127F9117>I<38FF07E0383C0380381C0100A2EA0E
+02A2EA0F06EA0704A2EA0388A213C8EA01D0A2EA00E0A3134013127F9116>I
+E /Ff 1 51 df<EA07F8EA1FFE38383F8038780FC0EAFC0714E01303A21278EA000714C0
+A2EB0F80EB1F00131E13385B5B38018060EA03001206000813E0381FFFC05A5AB5FCA213
+1B7E9A18>50 D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+%%PaperSize: a4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 574 42 a Ff(22)135 125 y Fe([Se\023)-21 b(an)251
+115 y(\023)245 125 y(O)14 b(Braon\023)-21 b(ain)14 b(cct])g(c)o(h)o
+(uim)e(T)m(om\023)-21 b(ais)12 b(U)-5 b(\023)-16 b(\020)13
+b(Dh)q(\023)-22 b(unlaing)90 180 y([F)m(onn:)17 b(M\023)-21
+b(airse\023)g(ail)13 b(U)427 169 y(\023)432 180 y('i)g(Sh)q(\023)-22
+b(uilleabh\023)h(ain)12 b(\(P\023)-21 b(ainseac)o(h)14
+b(na)g(nUbh])83 264 y(A)g(dh)o(uine)g(gan)f(c)o(h)o(\023)-20
+b(eill)14 b(do)f(mhaisligh)e(an)j(c)o(hl)o(\023)-20 b(eir)166
+313 y(is)14 b(tharcaisnigh)f(naomhscruipt)g(na)h(bhf\023)-21
+b(aige,)83 363 y(na)14 b(haithean)o(ta)f(r)o(\023)-20
+b(eab)14 b('s)g(an)g(t-aifreann)f(thr)o(\023)-20 b(eig)-66
+413 y Fd(4)215 b Fe(re)15 b(taithneamh)d(do)i(c)o(hlaonc)o(hreideamh)e
+(Mh\023)-21 b(artain,)249 463 y(c\023)g(a)14 b(rac)o(hair)g('o)q(d)f
+(dh)-5 b(\023)-16 b(\020on)14 b(ar)675 452 y(\023)678
+463 y(Iosa)g(Nasardha)249 513 y(n)o(uair)f(c)o(haith\014mid)f(cruinn)j
+(bheith)f(ar)g(mhaoileann)332 563 y(Josepha?)83 612 y(N)-5
+b(\023)-16 b(\020)14 b(caraid)f(Mac)h(Crae)h(c)o(h)o(uim)d(t'anama)f(')
+j(phl)o(\023)-20 b(e)-66 662 y Fd(8)215 b Fe(n\023)-21
+b(a)14 b(Calvin)e(bhiais)h(taobh)h(ris)g(an)g(l\023)-21
+b(a)13 b(sin.)83 746 y(N\023)-21 b(ac)o(h)14 b(daman)o(ta)e(an)i(sc)o
+(\023)-20 b(eal)14 b(don)g(c)o(hreac)o(haire)h(c)o(hlaon)166
+796 y(ghlac)e(baiste)i(na)e(cl)o(\023)-20 b(eire)15 b('na)e(ph\023)-21
+b(aiste)83 846 y('s)14 b(do)f(glanadh)g(mar)g(ghr)o(\023)-20
+b(ein)14 b(\023)-21 b(on)13 b(bp)q(eaca)i(r\023)-21 b(o-dhaor)-83
+895 y Fd(12)215 b Fe(tr)-5 b(\023)-16 b(\020)14 b(ainibh\014os)415
+885 y(\023)411 895 y(Ev)n(a)f(rinn)586 885 y(\023)581
+895 y(Adam,)249 945 y(tuitim)f(ar)-5 b(\023)-16 b(\020s)14
+b(f)o(\023)-20 b(e)14 b(c)o(h)o(uing)f(na)h(haicme)e(sin)249
+995 y(tug)i(atharrac)o(h)g(br)-5 b(\023)-16 b(\020)14
+b(don)f(scr)-5 b(\023)-16 b(\020bhinn)15 b(bheannaithe,)83
+1045 y(d'aistrigh)e(b)o(\023)-20 b(easa)14 b(agus)g(reac)o(h)o(ta)g(na)
+g(cl)o(\023)-20 b(eire)-83 1095 y Fd(16)215 b Fe('s)14
+b(n\023)-21 b(ac)o(h)14 b(tugann)f(aon)h(gh)o(\023)-20
+b(eilleadh)13 b(don)h(Ph\023)-21 b(apa?)83 1179 y(Gac)o(h)14
+b(scolaire)f(baoth,)h(n)-5 b(\023)-16 b(\020)13 b(mholaim)d(a)j(c)o
+(heird)166 1228 y('t\023)-21 b(a)13 b(ag)h(obair)f(le)h(g)o(\023)-20
+b(eilleadh)13 b(d\023)-21 b(a)13 b(th\023)-21 b(aille)83
+1278 y(don)14 b(doirbhc)o(hoin)f(c)o(hlaon)g(d\023)-21
+b(a)14 b(ngorthar)g(Mac)g(Crae,)-83 1328 y Fd(20)215
+b Fe(deisceabal)14 b(straeigh)g(as)g(an)g(gcoll\023)-21
+b(aiste.)249 1378 y(T\023)g(a)14 b(adaithe)f(th)-5 b(\023)-16
+b(\020os)14 b(in)9 b(\023)-16 b(\020o)q(c)o(h)o(tar)13
+b(ifrinn,)249 1428 y(gan)g(solas)h(gan)g(soilse)f(i)h(dt)-5
+b(\023)-16 b(\020orthaibh)13 b(dorc)o(ha,)83 1478 y(tuigsin)o(t)g(an)h
+(l)o(\023)-20 b(einn,)13 b(gac)o(h)h(cuirp)q(eac)o(h)o(t)h(d)o(\023)-20
+b(ein)-83 1527 y Fd(24)215 b Fe(is)14 b(Lucifer)g(aosta)g('na)f(mh\023)
+-21 b(aistir.)83 1611 y('S)12 b(\023)-20 b(e)15 b(Lucifer)f(f)o(\023)
+-20 b(ein)14 b(go)f(follas)f(don)i(tsaol)166 1661 y(ar)g(aingealaibh)e
+(D)o(\023)-20 b(e)14 b(do)g(th)o(ug)f(\023)-21 b(arghoin)p
+0 1692 600 2 v 0 1726 a Fd(2)17 b Fc(22)c Fb(T)m(eide)n(al)s
+Fa(:)k(Dh)o(uinnluinn)o(g)9 b(T,)j(Se\023)-18 b(aghan)9
+b(Mac)i(Domhnaill)e(cct)i(B)0 1764 y Fd(1)17 b Fa(dh)o(uinne)d(T)46
+b Fd(1)17 b Fa(mhaslaidh)d(T,)i(mhaslaig)e(B)45 b Fd(3)18
+b Fa(raob)c(T)47 b Fd(4)17 b Fa(le)f(B)45 b Fd(5)18 b
+Fa(do)q(d)d(B)0 1801 y Fd(6)i Fa(c)o(haithfam)l(\023)-14
+b(\020d)8 b(T)34 b Fd(6)17 b Fa(maoilinn)9 b(B)33 b Fd(7)18
+b Fa(phleidh)9 b(T)34 b Fd(8)17 b Fa(bh)l(\023)-14 b(\020os)10
+b(B)34 b Fd(8)17 b Fa(leis)10 b(B)34 b Fd(9)17 b Fa(claon)0
+1843 y(B)42 b Fd(11)17 b Fa(glann)o(uig)12 b(T)43 b Fd(12)16
+b Fa(ainnibh\014os)c(T,)j(ainn)o(bh\014os)c(B)42 b Fd(12)904
+1835 y Fa(\023)901 1843 y(Eabha)13 b(B)42 b Fd(15)17
+b Fa(is)e(B)0 1880 y Fd(16)i Fa(tuigionn)10 b(T)38 b
+Fd(17)17 b Fa(sgollaire)11 b(T)38 b Fd(17)17 b Fa(mholluim)10
+b(T)38 b Fd(18)17 b Fa('t\023)-18 b(ag)11 b(ccobar)g(T)39
+b Fd(18)16 b Fa(re)d(B)0 1918 y Fd(19)k Fa(dorbhc)o(hon)6
+b(daor)i(B)25 b Fd(20)17 b Fa(strao)q(dhaig)6 b(T)27
+b Fd(21)17 b Fa(fhadogh)o(th)o(e)6 b(ts)l(\023)-14 b(\020os)9
+b(T)26 b Fd(21)17 b Fa(fadaigh)o(the)0 1955 y(B)33 b
+Fd(22)17 b Fa(sollus)10 b(T)34 b Fd(23)16 b Fa(cuirrip)q(eac)o(h)o(t)8
+b(T)34 b Fd(24)16 b Fa(Luicifer)10 b(T,)h(L)q(\023)-19
+b(ucifer)10 b(B)33 b Fd(24)17 b Fa(mhaighistir)0 1993
+y(T)36 b Fd(25)17 b Fa(Luici\014r)10 b(T)35 b Fd(25)17
+b Fa(ts\023)-18 b(aogh)o(uill)9 b(T)36 b Fd(26)17 b Fa(aingeallaib)o(h)
+9 b(T)587 2092 y Fe(1)p eop
+%%Page: 2 2
+2 1 bop 83 42 a Fe(is)14 b(J)q(\023)-22 b(udas)14 b('na)f(dh)o(\023)-20
+b(eidh)14 b(do)g(reic)h(go)e(soil)o(\023)-20 b(eir)-83
+91 y Fd(28)215 b Fe(Lean)o(bh)14 b(r\023)-21 b(o-naomh)o(tha)12
+b(na)h(P\023)-21 b(aise;)249 141 y(L)q(\023)f(uitir)13
+b(ar)-5 b(\023)-16 b(\020s)14 b(an)g(tr)-5 b(\023)-16
+b(\020mhadh)12 b(p)q(earsa)j(aco)249 191 y(fuair)e(eo)q(c)o(hair)h(na)g
+(r)-5 b(\023)-16 b(\020o)q(c)o(h)o(ta)14 b(bh)-5 b(\023)-16
+b(\020)13 b(l)-5 b(\023)-16 b(\020on)o(ta)13 b(d'ainibh\014os;)83
+241 y(a)h(ndeisceabal)g(Crae)g(is)g(gac)o(h)g(nduine)g(d\023)-21
+b(a)13 b(c)o(hl)o(\023)-20 b(eir)-83 291 y Fd(32)215
+b Fe(ar)14 b(an)g(obair)f(go)g(l)o(\023)-20 b(eir)14
+b(do)f(c)o(h)o(uir)h(pl\023)-21 b(ana.)83 390 y(Mo)14
+b(theagasc)g(don)g(t)o(\023)-20 b(e)14 b('t\023)-21 b(a)14
+b(ag)f(im)o(theac)o(h)o(t)g(ar)g(strae)166 440 y(a')g(taisteal)h(an)f
+(tsaoghail)g(re)h(d\023)-21 b(asac)o(h)o(t,)83 490 y(a')13
+b(dalladh)g(gac)o(h)g(n-aon)h(re)g(dlithe)g(Mhic)g(Crae)-83
+540 y Fd(36)215 b Fe(agus)14 b(B)-5 b(\023)-16 b(\020obla)-5
+b(\023)-16 b(\020)12 b(br)o(\023)-20 b(eige)15 b('na)e(mh\023)-21
+b(ala.)249 589 y(F\023)g(ogair)13 b(don)h(diabhal)e(a)i(gcliar)f('s)h
+(a)f(gcaradas)249 639 y(is)h(f\023)-21 b(oir\014dh)13
+b(ort)h(Dia)f('t\023)-21 b(a)13 b(dian)g(a')h(tathain)o(t)f(ort;)83
+689 y(maith\014dh)f(Mac)i(D)o(\023)-20 b(e)14 b(dh)o(uit)g(ar)g(imp)-5
+b(\023)-16 b(\020)11 b(na)j(cl)o(\023)-20 b(eire)-83
+739 y Fd(40)215 b Fe(agus)14 b(cion)o(taigh)f(tu)h(f)o(\023)-20
+b(einig)12 b('na)i(l\023)-21 b(athair.)p 0 1845 600 2
+v 0 1880 a Fd(27)17 b Fa(dh)o(\023)-17 b(eig)7 b(T)25
+b Fd(29)17 b Fa(L)q(\023)-19 b(uter)7 b(B)25 b Fd(30)17
+b Fa(na)8 b(.)g(.)h(.)g(d'ainibh\014o)o(s])d(an)i(.)h(.)f(.)h(l)l(\023)
+-14 b(\020on)o(ta)7 b(mhallaigh)o(th)o(ea)o(c)o(h)o(t)0
+1918 y(B)37 b Fd(31)17 b Fa(nduinne)10 b(T)37 b Fd(31)17
+b Fa(dh\023)-18 b(a)11 b(c)o(heird)g(B)37 b Fd(33)17
+b Fa(strao)q(dh)10 b(T)37 b Fd(34)17 b Fa(le)12 b(B)37
+b Fd(35)17 b Fa(Crao)q(dh)11 b(T)0 1955 y Fd(36)17 b
+Fa(b)l(\023)-14 b(\020oblaimhe)10 b(T)42 b Fd(36)16 b
+Fa(iona)d(B)41 b Fd(36)17 b Fa(mh\023)-18 b(aladh)11
+b(T)41 b Fd(37)17 b Fa(diabh)o(uil)12 b(T)41 b Fd(38)17
+b Fa(at\023)-18 b(a)13 b(dian)0 1993 y(atathan)o(t)c(B)35
+b Fd(40)17 b Fa(umhlaig)9 b(tu)i(fein)g(iona)g(l\023)-18
+b(athair)9 b(B)35 b Fd(40)17 b Fa(feinaidh)10 b(T)587
+2092 y Fe(2)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/plain/contrib/edmac/ed-nfss.txt b/macros/plain/contrib/edmac/ed-nfss.txt
new file mode 100644
index 0000000000..a93835098c
--- /dev/null
+++ b/macros/plain/contrib/edmac/ed-nfss.txt
@@ -0,0 +1,64 @@
+File: ed-nfss.txt 19/7/94. This is a plain ascii file.
+
+ Please note that the following method of using EDMAC within
+ LaTeX2e is still experimental. Initial trials with real-life
+ book preparation, however, seem to work well.
+
+The New Font Selection Scheme (NFSS) is the normal font-handling scheme
+used by LaTeX from version 2e (June 1994). It is described in the book
+"The LaTeX Companion" by Goossens, Mittelbach and Samarin
+(Addison-Wesley, 1993), chapter 7.
+
+To use this font scheme with EDMAC, you first need to install LaTeX2e.
+After doing this, you should have a new format file called something
+like "latex.fmt", which contains a dump of the LaTeX macros. To use
+this LaTeX2e format you might type a command like "tex &latex
+<filename>" where <filename> is the name of the TeX input file you wish
+to run through LaTeX2e.
+
+To use EDMAC and NFSS together, you will do exactly the same as running
+a normal LaTeX2e job, with the addition that you use the macro package
+"edmacfss" (i.e., edmacfss.sty) and apart from the first couple of lines
+of your EDMAC file, you treat your document as a standard EDMAC file.
+That is to say, only EDMAC and Plain TeX commands will work, and not
+LaTeX2e macros (except those required for NFSS).
+
+[In fact, this is a white lie: you may have some limited luck using a
+few other LaTeX2e commands, but this is rather hit-and-miss. In
+particular, EDMAC uses its own output routine, not LaTeX2e's, so lots
+and lots of stuff specific to the LaTeX output routine (like float
+placement) won't get executed.]
+
+Here is a sample of what an EDMAC/NFSS input file might look like:
+
+--------------------------------------
+\documentclass[12pt]{article} % this starts LaTeX2e up properly, with big fonts.
+\usepackage{adobegar} % sets up LaTeX to use the Adobe Garamond font family.
+\usepackage{edmacfss} % this calls edmacfss.sty, which in turn calls edmac.doc
+
+\begin{document} % normal start of a LaTeX document
+
+\firstlinenum=1 % EDMAC macros from here on...
+\linenumincrement=1
+
+\beginnumbering
+\pstart
+First \text{paragraph}\Afootnote{This is a test.}/. End of first
+paragraph.
+\pend
+
+\pstart
+\text{Second paragraph}\Bfootnote{So is this.}/. End of second
+paragraph.
+\pend
+\endnumbering
+
+\end{document} % equally, you can say just \bye.
+
+--------------------------------------
+
+Many thanks to Wayne Sullivan for suggesting this approach to accessing
+NFSS, and for providing the initial version of edmac.sty.
+
+Dominik Wujastyk
+19 July 1994.
diff --git a/macros/plain/contrib/edmac/edmacfss.sty b/macros/plain/contrib/edmac/edmacfss.sty
new file mode 100644
index 0000000000..cfc0c15e1e
--- /dev/null
+++ b/macros/plain/contrib/edmac/edmacfss.sty
@@ -0,0 +1,53 @@
+% edmac.sty
+\chardef\atcatcode=\catcode`\@
+\makeatletter
+
+\process@table
+
+% outwit LaTeX
+
+\everypar={}
+\let\end=\@@end
+
+
+
+% extra macros from plain.tex
+
+\def\supereject{\par\penalty-\@MM}
+\outer\def\bye{\par\vfill\supereject\end}
+
+\countdef\pageno=0 \pageno=1 % first page is number 1
+\def\advancepageno{\ifnum\pageno<\z@ \global\advance\pageno\m@ne
+ \else\global\advance\pageno\@ne \fi} % increase |pageno|
+
+\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\dosupereject{\ifnum\insertpenalties>\z@ % something is being held over
+ \hbox to \hsize{}\kern-\topskip\nobreak\vfill\supereject\fi}
+
+\newinsert\topins
+
+\newtoks\headline
+\newtoks\footline
+\headline={\hfil}
+\footline={\hss\textrm\folio\hss}
+\def\line{\hbox to \hsize}
+
+\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}}
+
+
+
+
+\input /edmac/edmac.doc % Could input edmac.tex instead.
+
+\catcode`\@=\atcatcode
+
+
+\endinput
+
+% end of edmac.sty
diff --git a/macros/plain/contrib/edmac/tabmac-example.dvi b/macros/plain/contrib/edmac/tabmac-example.dvi
new file mode 100644
index 0000000000..e8bbe2469c
--- /dev/null
+++ b/macros/plain/contrib/edmac/tabmac-example.dvi
Binary files differ
diff --git a/macros/plain/contrib/edmac/tabmac-example.ps b/macros/plain/contrib/edmac/tabmac-example.ps
new file mode 100644
index 0000000000..29306eecf5
--- /dev/null
+++ b/macros/plain/contrib/edmac/tabmac-example.ps
@@ -0,0 +1,1266 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.58 Copyright 1986, 1994 Radical Eye Software
+%%Title: tables.dvi
+%%CreationDate: Mon Nov 11 12:49:15 1996
+%%Pages: 11
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%EndComments
+%DVIPSCommandLine: dvips tables
+%DVIPSParameters: dpi=300, compressed, comments removed
+%DVIPSSource: TeX output 1996.10.15:1728
+%%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 round sub abs 0.00001 lt{round}if}
+forall round exch round exch]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 sub]/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 1200 300 300
+(/offline1/edmac/tables.dvi) @start /Fa 1 101 df<EB07E01300EB01C0A4EB03
+80A4EB0700EA01E7EA0617EA0C0FEA180E12381270A2485AA4EB3880A3EA607838319900
+EA1E0E131C7E9B16>100 D E /Fb 3 52 df<120C121C12EC120CAFEAFFC00A137D9212>
+49 D<121FEA60C01360EAF07013301260EA0070A2136013C012011380EA02005AEA0810
+1210EA2020EA7FE012FF0C137E9212>I<EA0FC0EA3070EA7038131813381200133013E0
+EA0FC0EA007013381318131C126012F01318EAE038EA6070EA1FC00E137F9212>I
+E /Fc 16 128 df<12035A123F12C71207B3A3EAFFF80D1A7C9915>49
+D<130CA2131C133C137C135C139CEA011C1203120212041208121812101220124012C0B5
+12C038001C00A73801FFC0121A7F9915>52 D<1240387FFF801400A2EA4002485A5BA248
+5A5BA25B13C0A212015BA21203A31207A66CC7FC111B7E9A15>55
+D<EA07E0EA0838EA100CEA2004EA6006A212701278EA7C0CEA3F18EA1FB0EA0FE0EA07F0
+EA0DFCEA10FEEA203EEA601FEAC0071303A31302EA6006EA3004EA1818EA07E0101A7E99
+15>I<126012F0A212601200A9126012F0A2126004117C900C>58
+D<B512FE380F001E14061402A21403801481A21480A2130113FF13011300A315801400EC
+0100A35CA21406141EB512FE191B7E9A1D>69 D<EA0FE0EA3838EA3C1C7F12181200133E
+EA07EEEA1E0E1238127800F01320A3EA701E38382740381FC38013117F9015>97
+D<EA03F0EA0E18EA180CEA380EEA7007A212F0B5FCEAF000A31270A2EA3801EA1C02EA0E
+04EA03F810117F9013>101 D<3807E380381C3CC038381C801400EA781EA3EA381CA26C
+5AEA37E00020C7FC1230A2EA3FF86CB4FC1480EA3003386001C0EAC000A3386001803830
+0300EA1C0EEA07F8121A7F9015>103 D<12FC121CB3A8EAFF80091C7F9B0C>108
+D<EAFC7E381C8380EA1D01001E13C0121CAC38FF8FF815117F9018>110
+D<EAFCF0EA1D1CEA1E3CA2EA1C181300ABEAFFC00E117F9011>114
+D<1204A4120CA2121C123CEAFFE0EA1C00A91310A4120CEA0E20EA03C00C197F9810>
+116 D<38FC0FC0EA1C01AC1303120CEA060D3803F1F815117F9018>I<B512F01401808A
+15>123 D<EA6060EAF0F0A2EA60600C047C9B15>127 D E /Fd 9
+126 df<12C012F01278123E7EEA0F80EA07C0EA03E0A2EA01F013F8120013FC137C137E
+A3133E133FB3A9102D777E2C>57 D<133FB3A9133E137EA3137C13FC13F8120113F0EA03
+E0A2EA07C0EA0F80EA1F00123E12785A12C0102D77802C>59 D<12FCB3AA127C127EA312
+3EA27EA27E13801207EA03C013E01201EA00F01378131C130EA2131C137813F0EA01E012
+0313C0EA0780120F13005AA2123EA2127EA3127C12FCB3AA0F5C6D802C>61
+D<12FCB106116D802C>I<1704170C1718A21730A21760A217C0A2EE0180A2EE0300A216
+06A35EA25EA25EA25EA25EA24B5AA24BC7FC1202000714065AD837805B126700875CEA03
+C05D6C7E5D6C7E5DA29038780180A2133C4AC8FC131E1406A26D5AA2EB0798A2EB03F0A2
+5C13015C13002E3C7B8132>112 D<143FEB01FF130F133F5B90B5FC000313803807F800
+EA0FC048C7FC121E12385A126012E05A1810818516>122 D<12FCB47E13F013FC7F7F00
+0113C038001FE0EB03F0EB00F81478141C140E1406140714031810818516>I<12C07E12
+6012707E121E121FEA0FC0EA07F83803FF80C613FF7F7F130F1301EB003F1810818F16>
+I<140314071406140E141C147814F8EB03F0EB1FE03801FFC0B512005B5B13F0138000FC
+C7FC1810818F16>I E /Fe 35 123 df<EBC00300015BA23803800EA448485AA4000E5B
+A31540001EEB7080A214F09038013100EA3B063839F80E0038C8FCA25AA45AA45A1A207F
+941E>22 D<127012F8A3127005057C840E>58 D<811401811403A21407140BA21413A214
+231443811481A2EB01011302A21304130C1308131090381FFFF05BEB600013405BA248C7
+FC5A12021206001E803AFFC00FFF80138021237EA225>65 D<90B512F815FF903907800F
+80ED07C0EB0F00150316E0A2011E14C01507A2ED0F80491400151E157CEC01F090387FFF
+E0903878007881153E49131EA2151FA24848131E153EA25D4848137815F8EC03F00007EB
+07C0B65A02FCC7FC23227EA126>I<027F1340903903FFC08090380FC06190381F001301
+7C130F01F0140048487F485A12074848130690C712025A123E5D4891C7FCA35AA55A1510
+A25D7E5D007814C0007C5C003C49C7FC6C13066C5B3807C0706CB45AC66CC8FC22247DA2
+24>I<90B512F815FF903907801F80ED07C090390F0003E01501ED00F0A2131E16F8A35B
+A44914F01501A349EB03E0A216C0150748481480ED0F005D151E48485B15F8EC01E00007
+EB0FC0B6C7FC14F825227EA129>I<90397FFC1FFF01FF5B9039078001E0A290390F0003
+C0A4011EEB0780A449EB0F00A3013FB5FC495B903878001EA3495BA448485BA448485BA3
+00071301397FFC1FFF00FF5B28227EA129>72 D<903AFFFC01FF80A2903A078000780016
+6049C712804BC7FC15025D011E13105D5D4AC8FCEB3C021406140E142FEB784F148F9038
+790780137C496C7E13F0811401EA01E06E7EA21578485AA2810007147E3AFFFC03FFC0A2
+29227EA12A>75 D<147F903803C1E090380E0070013C7F497F01E0131E0001140E484813
+0F485A48C7FC1680121E123EA25AA348EC1F00A3151E153E5A5DA25D5D6C13010078495A
+5D0038495A003C010EC7FC6C5B6C1378380381E0C6B4C8FC21247DA226>79
+D<EB7C303801C270EA0301000713E0EA0E005A123C383801C01278A338F00380A31484EB
+07081270130F38301310EA1863380F80E016157E941A>97 D<EA03C0EA3F80A21203A248
+C7FCA4120EA45A137CEA1D86EA1E03003C1380123814C0A21270A438E00780A3EB0F0013
+0EEA601CA2EA3030EA18E0EA0F8012237EA215>I<133FEBE080380380C0EA0701EA0E03
+121C003CC7FCA25AA35AA400701340A23830018038380200EA1C1CEA07E012157E9416>
+I<140F14FEA2140EA2141CA41438A41470137CEA01C2EA0301000713E0EA0E005A123C38
+3801C01278A338F00380A31484EB07081270130F38301310EA1863380F80E018237EA21A
+>I<137EEA038138070080120E5A5A38780100EA7006EAFFF800F0C7FCA25AA41480A238
+700300EA3004EA1838EA0FC011157D9417>I<141EEC638014C71301ECC30014801303A4
+49C7FCA4EBFFF8A2010EC7FCA55BA55BA55BA4136013E0A25BA21271EAF18090C8FC1262
+123C192D7EA218>I<EB0F86EB384EEB602EEBE03C3801C01CEA03801207EB00385AA300
+1E1370A414E0120E1301EA060238030DC0EA01F1EA0001A2EB0380A338700700EAF0065B
+EA6038EA3FE0171F809418>I<13F0EA0FE0A21200A2485AA4485AA448C7FCEB0FC0EB30
+60EB4030380E8038EA0F00A2120E481370A44813E0A2EB01C014C1007013C2EB0382A2EB
+018400E01388386000F018237EA21D>I<13E0A21201EA00C01300A9121E1223EA4380A2
+1283EA8700A21207120EA35AA3EA38201340127013801230EA3100121E0B227EA111>I<
+147014F0A214601400A9130FEB3180EB41C01381A2EA0101A238000380A4EB0700A4130E
+A45BA45BA3EA7070EAF0605BEA6380003EC7FC142C81A115>I<13F0EA0FE0A21200A248
+5AA4485AA448C7FC1478EB0184EB021C380E0C3C1310EB2018EB4000485A001FC7FC13E0
+EA1C38487EA27F140838701C10A3EB0C20EAE006386003C016237EA21A>I<EA01E0EA0F
+C0121F1201A2EA0380A4EA0700A4120EA45AA45AA45AA31380EAE100A31262A2123C0B23
+7EA20F>I<3A3C07E01F803A46183060C03A47201880603A87401D0070EB801EA2EB001C
+000E4913E0A44890387001C0A2ED038016824801E01384ED0704A2ED0308267001C01310
+D83000EB01E027157E942C>I<383C07E038461830384720183887401C1380A21300000E
+5BA4485BA25C158048EBE100EB01C1A2EB00C24813C40030137819157E941E>I<133FEB
+E1C0380380E038070070120E481378123CA25AA34813F0A214E01301007013C0EB038038
+300700EA380EEA1C3CEA07E015157E9418>I<3803C0F83804630CEB7406380878071370
+1580A2EA00E0A43901C00F00A3141E3803801C5C13C01460380721C0011FC7FC90C8FCA2
+120EA45AA2EAFFC0A2191F819419>I<EB7C103801C2303803017000071360380E00E05A
+123C383801C01278A338F00380A4EB070012705BEA3017EA186EEA0F8EEA000EA25BA45B
+A23803FF80A2141F7E9416>I<EA3C0F384630C0EA4741EA8783A2EB018090C7FC120EA4
+5AA45AA45A123012157E9416>I<137E138138010080EA0201EA0603140090C7FC120713
+F8EA03FE6C7EEA003FEB07801303127000F01300A2EAE002EA4004EA3018EA0FE011157E
+9417>I<136013E0A4EA01C0A4EA0380EAFFFCA2EA0380EA0700A4120EA45AA31308EA38
+10A21320EA184013C0EA0F000E1F7F9E12>I<001E131800231338EA438014701283A2EA
+8700000713E0120EA3381C01C0A314C2EB0384A21307380C0988EA0E113803E0F017157E
+941D>I<001E13E0EA2301384381F01380008313701430EA870000071320120EA3481340
+A21480A2EB0100A21302EA0C04EA0618EA03E014157E9418>I<001EEB181C0023EB383C
+D84380133EEC701E0083140E1506EA87000007EBE004120EA3391C01C008A31510A21520
+01031340EA0C0439070861803901F03E001F157E9424>I<3801E0F03806310C38081A1C
+0010133CEA201C14181400C65AA45BA314083860E01012F0142038E1704038423080383C
+1F0016157E941C>I<001E131800231338EA438014701283A2EA8700000713E0120EA338
+1C01C0A4EB0380A21307EA0C0B380E1700EA03E7EA0007A2130E1260EAF01C1318485AEA
+8060EA41C0003FC7FC151F7E9418>I<EBE0103803F0203807F86038060FC038080080EB
+0100EA00025B5B5B5B13C048C7FC1202481340481380EA1001383F8300EA61FEEA40FCEA
+807814157E9417>I E /Ff 4 107 df<B612FCA21E027C8C27>0
+D<EB03C0EB1E0013385B5BB1485A485A000FC7FC12F8120FEA03806C7E6C7EB113707F13
+1EEB03C012317DA419>102 D<12F8120FEA03806C7E6C7EB113707F131EEB03C0EB1E00
+13385B5BB1485A485A000FC7FC12F812317DA419>I<12C0B3B3AD02317AA40E>106
+D E /Fg 60 128 df<127012F8B1127812701200A5127012F8A31270051E769D1A>33
+D<136013E0A4EA03F8EA0FFE381FFF80383CE7C0EA78E13870E0E012E013E1A2EBE0C000
+7013001278123F6C7EEA07FCC6B4FCEBEF80EBE3C013E1EBE0E012F0A312E03870E1C0EA
+78E3383CEF80381FFF006C5AEA03F0C65AA3136013277DA21A>36
+D<13E0EA03F0487E1338EA0E1CA45BEB39FC1371EA07F1EBE1C013C11381EB8380120FEA
+1FC3383DC700EA78E7EA70EEEAE07EA2EB3C08141C137EEA70FF387FE7F8EA3FC3380F00
+E0161E7F9D1A>38 D<13301378A8387FFFF0B512F8A26C13F038007800A8133015167E99
+1A>43 D<1218123E127E127F123F121F1207120EA2121C12FC12F81260080D77851A>I<
+387FFFC0B512E0A26C13C013047D901A>I<1230127812FCA212781230060676851A>I<14
+C0EB01E0A2130314C013071480130F1400A25B131E133E133C137C1378A213F85B12015B
+12035BA212075B120F90C7FC5A121EA2123E123C127C127812F85AA2126013277DA21A>
+I<EA01F0EA07FC487EEA1F1FEA1C0738380380A2387001C0A338E000E0A9EAF001007013
+C0A2EA780300381380EA3C07001C1300EA1F1FEA0FFE6C5AEA01F0131E7D9D1A>I<13C0
+1201A212031207120F127F12FD12711201B2EA7FFFA3101E7B9D1A>I<EA03F0EA0FFC48
+B4FC383C0F80387803C0EA700138E000E07EA21260C7FCA2EB01C0A2EB03801307EB0F00
+130E133C137C13F0485A485A485A48C7FC001E13E05AEA7FFFB5FC7E131E7D9D1A>I<EA
+03FCEA0FFF003F13C0383C03E0EA78001470A2C7FCA214E01301EB07C03803FF80140014
+C0380003E01300147014781438A2126012F01478481370007013E0EA7E03383FFFC0000F
+1300EA01FC151E7E9D1A>I<EB0F80131F133F133B137B13F313E31201EA03C313831207
+EA0F03120E121E123C1238127812F0B512FEA338000380A6EB3FF8EB7FFCEB3FF8171E7F
+9D1A>I<383FFFC05AA20070C7FCA8EA71F8EA7FFE7F387E0780387803C0EA30011200EB
+00E0A3126012F0EB01C012E038700380EA7C0F383FFF00EA0FFCEA03F0131E7D9D1A>I<
+137E3801FF804813C0380781E0EA0F01121E383C00C0003813005AA3EAE1F8EAE7FEB5FC
+38FE078038F803C0EAF001EB00E0A25A7E1270A2EB01C01238383C0380EA1E0F380FFF00
+EA07FCEA01F0131E7D9D1A>I<EA01FCEA07FF001F13C01307383C01E0387800F0007013
+70A3007813F0003813E0381E03C0380FFF803803FE00487E381F8FC0383C01E0387800F0
+00701370481338A46C137800701370007813F0383E03E0381FFFC000071300EA01FC151E
+7E9D1A>56 D<EA01F0EA07FCEA1FFEEA3E0F38380780EA7003EB01C012E0A214E01300A2
+13011270EA7803EA3C0FEA1FFFEA0FFCEA03F0380001C0A3EB0380126038F007005B133E
+EA7FFCEA3FF0EA0FC0131E7D9D1A>I<387FFFF0B512F8A26C13F0C8FCA4387FFFF0B512
+F8A26C13F0150C7E941A>61 D<1338137CA2136C13EEA313C6A2EA01C7A438038380A438
+0701C0A213FFA24813E0EA0E00A4481370387F01FC38FF83FE387F01FC171E7F9D1A>65
+D<EAFFFEEBFF8014C0381C03E0130014F01470A414E01301EB07C0381FFF80A214C0381C
+01E0EB00F014701438A5147814F01301B512E014C01400151E7E9D1A>I<EB7C38EA01FF
+000713F8EA0F83EA1E00001C13785A14385AA214005AA812701438A27EA26C1370001E13
+F0380F83E03807FFC00001138038007C00151E7E9D1A>I<EA7FFEB5FC6C1380381C07C0
+EB01E0EB00F0147014781438A2143C141CA8143C1438A21478147014F0EB01E0EB07C0EA
+7FFFB512006C5A161E7F9D1A>I<B512F8A3381C0038A51400A2130EA3EA1FFEA3EA1C0E
+A390C7FCA3141CA5B512FCA3161E7E9D1A>I<38FF83FEA3381C0070AA381FFFF0A3381C
+0070AB38FF83FEA3171E7F9D1A>72 D<387F03F838FF87FC387F03F8381C01E0EB03C014
+80EB07005B131E131C5B13785B7F121DEA1FDC139C130EEA1E0F7F001C13801303EB01C0
+A2EB00E0A21470007F13FC38FF81FE387F00FC171E7F9D1A>75 D<EA0FFE383FFF804813
+C0EA7C07EA700100F013E0EAE000B1EAF001A2007013C0EA7C07EA7FFF6C1380380FFE00
+131E7D9D1A>79 D<3803F1C0EA0FFDEA3FFFEA7C0FEA700312E01301A390C7FC12701278
+123FEA1FF0EA07FE3800FF80EB0FC0EB01E013001470A2126012E0A214E0EAF00138FC03
+C0B5128000EF1300EAE3FC141E7D9D1A>83 D<387FFFFEB5FCA238E0380EA500001300B3
+3803FF80A3171E7F9D1A>I<00FE13FEA30070131CA26C1338A7137C00181330381CEE70
+A513C6A2380DC760A31383A3000F13E0A2380701C0171E7F9D1A>87
+D<126012F0A27E1278127C123C123E121EA2121F7E7F12077F1203A27F12017F12007F13
+78A2137C133C133E131E131F7FA21480130714C0130314E01301A2EB00C013277DA21A>
+92 D<EA0180EA07C0EA1FF0EA3EF8EAF83EEAF01EEA40040F077B9D1A>94
+D<EA1FF0EA3FFC487EEA780FEA300738000380A2137FEA07FF121FEA3F83EA7803127012
+E0A3EA7007EA780F383FFFFCEA1FFDEA07F016157D941A>97 D<12FEA3120EA6133EEBFF
+80000F13E0EBC1F0EB8070EB0038120E141CA7000F13381478EB80F0EBC1E0EBFFC0000E
+138038063E00161E7F9D1A>I<EBFF80000313C0000F13E0EA1F01383C00C04813001270
+A25AA51270A2007813707E381F01F0380FFFE0000313C03800FE0014157D941A>I<EB1F
+C0A31301A6EA01F1EA07FDEA0FFFEA1E0FEA3C07EA7803EA700112E0A7EA7003A2EA3807
+EA3E0F381FFFFCEA07FDEA01F1161E7E9D1A>I<EA01F8EA07FF481380381E07C0EA3C01
+387800E01270481370A2B512F0A300E0C7FC1270A2007813707E381F01F0380FFFE00003
+13803800FE0014157D941A>I<EB07E0EB1FF0EB3FF8EB7878EBF030EBE000A4387FFFF0
+B5FCA23800E000AF383FFF804813C06C1380151E7F9D1A>I<3801F87C3807FFFE5A381E
+078C381C0380383801C0A5381C0380EA1E07381FFF005BEA39F80038C7FCA27E381FFF80
+14E04813F83878007C0070131C48130EA40070131C0078133C003E13F8381FFFF0000713
+C00001130017217F941A>I<12FEA3120EA6133EEBFF80000F13C013C1EB80E01300120E
+AC38FFE3FE13E713E3171E7F9D1A>I<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387F
+FF80B512C06C1380121F7C9E1A>I<131C133EA3131C1300A5EA0FFEA3EA000EB3A5131C
+1260EAF038EAFFF8EA7FF0EA1FC00F2A7E9E1A>I<12FEA3120EA6EB0FFCEB1FFEEB0FFC
+EB03C0EB0780EB0F00131E5B5B13FC120F13DE138F380E07801303EB01C014E0EB00F038
+FFE3FE14FF14FE181E7F9D1A>I<EAFFE0A31200B3A6B512E0A3131E7D9D1A>I<387CE0E0
+38FFFBF8EA7FFF381F1F1CEA1E1EA2EA1C1CAC387F1F1F39FF9F9F80397F1F1F00191580
+941A>I<EAFE3EEBFF80B512C0EA0FC1EB80E01300120EAC38FFE3FE13E713E317157F94
+1A>I<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA700138E000E0A6EAF0010070
+13C0EA7803383C0780EA3E0F381FFF00EA07FCEA01F013157D941A>I<EAFE3EEBFF80B5
+12E0380FC1F0EB8070EB0038120E141CA7000F13381478EB80F0EBC1E0EBFFC0000E1380
+EB3E0090C7FCA8EAFFE0A316207F941A>I<3801F8E0EA07FEEA0FFFEA1E07EA3C03EA78
+011270EAE000A613011270EA7803123CEA1E0FEA0FFFEA07FCEA01F0C7FCA8EB0FFEA317
+207E941A>I<387F81F838FF8FFC387F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5
+FC7E17157F941A>I<3807FB80EA1FFF127FEA7807EAE003A30078C7FCEA7FC0EA1FFCEA
+07FE38003F801307386001C012E0A2EAF00338FC0780B51200EAEFFEEAE3F812157C941A
+>I<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E013FF6C1380EB3F00141C
+7F9B1A>I<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7EEA00FC17157F941A>I<387FC7
+FC00FF13FE007F13FC380E00E0A3380701C0A338038380A33801C700A3EA00EEA3137CA2
+133817157F941A>I<38FF83FE13C7138338380038A26C1370A31338137CA2380C6C6000
+0E13E013EEA313C6000613C0EA07C7A2138317157F941A>I<387FC7F8EBCFFCEBC7F838
+0703C038038380EBC700EA01EFEA00FE137C13781338137C13EE120113C7380383800007
+13C01301387FC7FC00FF13FE007F13FC17157F941A>I<387FC7FC00FF13FE007F13FC38
+0E00E0A27EEB01C013811203EB8380EA01C3A2EBC700EA00E7A213E61366136E133CA313
+38A3137813701230EA78E01271EA7FC06C5A001EC7FC17207F941A>I<387FFFF0B5FCA2
+38E001E0EB03C0EB078038000F00131E5B5B5B485A485A485A380F0038121E5A5AB512F8
+A315157E941A>I<126012F0B3B31260042775A21A>124 D<EA0703381F8780EA3FCF38F9
+FE00EAF0FCEA607011067C9D1A>126 D<EA701CEA783CEAF83EEA783CEA701C0F057B9E
+1A>I E /Fh 32 128 df<14081410142014C0EB018014005B13065B131C5B1330137013
+6013E0485AA2485AA2120790C7FCA2120EA2121EA2121C123CA21238A21278A21270A312
+F0A25AAD1260A37EA37E1208120C1204153D77AC18>40 D<5BEB008014C014401460A214
+30A31438AF1478A31470A214F0A214E0A21301A214C013031480A213071400A2130EA25B
+A25BA25B136013E05B485A120390C7FC12065A5A5A5A1280153D7FAC18>I<1207EA0F80
+121FA3120E1200A2EA0100A21202A25A5A5A123012405A09127C8512>44
+D<151CA2153C157CA215FCA21401A2EC037CA21406140E140C1418157EEC303EA2146014
+E014C0EB0180A2EB0300A21306A290380FFFFE5B903818003E5B153F497FA25B12015B12
+031207000F5C3AFFF003FFF816F0252A7CA92C>65 D<013FB6FC5B903903F0007F4A131F
+160EA21606495AA2160E160C495A1518A2160049485AA2157015F049B45AA2EB3E011400
+495BA2163016609038F8018091C7FC16C0A24848130116801503160048485B5D153E0007
+14FEB6FC5D28297BA829>69 D<913807F80291383FFE069138FC070E903903F0019E9039
+07C000FC49C7FC013E147C5B49147848481438A2485A48481430A2485A121F160048C9FC
+A3127EA4127C00FC903807FFF8A29138001F801600127CA3153EA27EA26C5C6C14FCEB80
+013903E0039C3901F80E183900FFFC08D91FE0C7FC272B77A92E>71
+D<903A3FFFC01FFE491380903A03F00007F04A14801700160C5E494813705EED01804BC7
+FC90380F8006151C5D156049485A14011407140F90383E1BE01433146390383FC1F0EB7F
+8190387E01F8EB7C00A249137CA381485AA281A2485A6F7EA200074A7EB5EBFFFC5E2F29
+7CA82E>75 D<D93FF0EC1FFE017FED3FFC010316800278EC7F00A217DFEE019F010615BE
+EE033EA21606010C5D160C1618A201184A5A801660A20130ECC1F0ED0181A2ED03010160
+4A5A1506150CA201C049485A141E1530A2D8018049485A15C0A2EC1F80D803004AC7FC15
+005A260F801E5B3BFFF81C07FFF8A237297BA836>77 D<013FB5FC4914E0903903F003F0
+9138E000F8167CA2167E495AA4494813FCA3ED01F8D91F0013F0ED03E0ED07C0ED0F8001
+3EEB3E0090383FFFF8013EC8FCA25BA45BA4485AA4485AA31207B5FCA227297BA829>80
+D<EC3F01903801FFC3903803C0E7903807007F010E133E49131E5B13780170131C13F0A3
+00011418A215007F6C7E13FF14F0EB7FFE6D7E6D1380010313C0EB007FEC0FE01403A314
+011218A30038EB03C0A21580140700781400007C130E5C00775B38E3C0F038C1FFE0D880
+7FC7FC202B7BA922>83 D<000FB612F8A2391F803E013A1E007C0078001C15305AA20030
+5BA25A1660495A12C0A200001500495AA4495AA4495AA449C8FCA4133EA45BA313FC387F
+FFF8B5FC252975A82B>I<133EEBE1183801C0BC380380FC380700785A121EA2003E5B5A
+A348485AA448485AECC180A39038078300EA700FEB0B86EA38333818618C380F80F0191A
+79991F>97 D<EA01E0123FA212035BA4485AA448C7FCA4EA1E3EEB6380381F81C0130100
+3E13E0EA3C00EB01F0A21278A438F003E0A314C0EAE007A21480EB0F00A2131EEA701CEA
+3038EA18E0EA0F80142A79A91B>I<EB1F80EB70603801C03038038070000713F0EA0F01
+121EEB00E0003E1300123C127CA25AA45AA314201460007013C038380180EB0700EA1C1C
+EA07F0141A79991B>I<EC03C0147FA214071580A4EC0F00A4141EA4EB3E3C13E13801C0
+BC380380FC380700785A121EA2003E5B5AA348485AA448485AECC180A39038078300EA70
+0FEB0B86EA38333818618C380F80F01A2A79A91F>I<EB1F80EB70403801C02038038030
+EA07005A121E003E1360123C387C01C0EB0F00EA7FF800F8C7FCA55AA214200070136000
+7813C03838018038180700EA0C1CEA07F0141A79991B>I<EB03E090380E118090381C0B
+C0EB380F903870078013F0EA01E0A20003EB0F00EA07C0A3380F801EA4495AA45C6C13F8
+A238038378380186F0EA00F81300A2495AA35CEA700338F8078091C7FCEAF00EEAE03CEA
+3FE01A267D991B>103 D<133CEA07FCA2EA007C1378A45BA4485AA43803C3E0EBCC38EB
+D01C13E00007131E13C01380A248485AA4001E5BA35C5A1560EB01E01540007814C0ECC0
+8014C1ECC30038F000C6006013781B2A7BA91F>I<131C133EA2133C13381300A9EA03C0
+EA0CE0EA1860EA30F0A21260A2EA61E012C11201EA03C0A2EA0780A3EA0F00A2130C121E
+13081318121C13301320EA0C40EA07800F287BA712>I<133CEA07FCA2EA007C1378A45B
+A4485AA43803C01FEC218014C3EBC1073807820FA290388407000188C7FC485A5B13C0A2
+EA1E78131E7F6D7E123C1483A300781306A21404140C486C5A386001F0192A7CA91B>
+107 D<1378EA07F8120F120013F0A4EA01E0A4EA03C0A4EA0780A4EA0F00A4121EA45AA4
+5A1360A3EAF0C0A21270EA7180EA3100121E0D2A7BA90F>I<2607807E13F83A08C1C383
+0E3A18E301C407D830F613C801FC01F81380D860F813F001F013E0A23BC1E003C00F0012
+01A33A03C007801EA35E3907800F00171816781710260F001E1430EE7020176017C0001E
+49EB3180000C0118EB1E002D1A7B9931>I<3807807C3808C1873918E20380EA30F401FC
+13C0EA60F813F0A239C1E007801201A33903C00F00A3141EEA0780150C143C1508D80F00
+1318EC381015301560001EEB18C0000CEB0F001E1A7B9922>I<EB0FC0EB7870EBE03838
+03C01CEA0780380F001E5A001E131F123E123C127CA248133EA3143C48137C147814F814
+F0387001E0007813C03838038038180700EA0E1CEA03F0181A79991F>I<9038780F8090
+388C18E039018E607038030FC0EC80780006EB0038157CA2EA0C1E1200A34913F8A315F0
+EB7801A215E0EC03C013F8EC07801500EBFC0E3801E638EBE3E001E0C7FCA2485AA4485A
+A3120FEA7FF812FF1E267F991F>I<380F01FC3819C7063831CC07EBF80F3861F01FA2EB
+E00E1400485A1203A3485AA448C7FCA4121EA45A1218181A7B9919>114
+D<EB1F80EB7060EBC0301201EB8070000313F0A21460EBC00013F013FEEBFF806C13C06C
+13E0130F13031301EA3800127C14C0EAF80100701380EA600338200700EA181CEA07F014
+1A7C9918>I<13301378A213F0A4EA01E0A4B5FCA2EA03C0A2EA0780A4EA0F00A4121EA4
+5A1306A2130C12781318EA38101320EA1840EA0F8010257AA414>I<3907C00180390CE0
+03C0EA1860EA30F0EC07801260A2EA61E000C1EB0F001201EA03C0A2141EEA0780A34848
+5A1530A3EC7860A26C13F8903801B8C039038218803900FC0F001C1A7B9920>I<2603C0
+0313E03A04700781F0EA0830EA10780030EB0F0012200060157013F000C0011E13601200
+EA01E0A24A13C0EA03C0A33A0780780180A3ED0300A2ECF80612033901C19C0C3900E30E
+1890387E03E0241A7B9928>119 D<EBF81F39030C318039060661C0380C07C3001813C7
+14870030EB8380EC80004848C7FC1200A3131EA45BEC0180A20030EB0300EA787C38F878
+06EBDC0400F05B38618C30381E03E01A1A7C991C>I<EA380EEA7C1FEAFC3FA2EAF83EEA
+701C10066FA81F>127 D E /Fi 6 54 df<EA07E0EA1C38EA300CA2EA6006A2EAE007AA
+EA6006EA700EEA300CEA381CEA1C38EA07E010167F9514>48 D<12035AB4FC1207B2EAFF
+F00C167D9514>I<EA0FC0EA3070EA4038A2EAC03CEAE01CA2EA003C1338A21370136013
+C0EA0180EA03001206EA04041208EA100CEA3FF8127F12FF0E167E9514>I<EA0F80EA30
+E0EA6070EA70781338EA207812001370136013C0EA0F80EA00E013701338133C124012E0
+A2EA8038EA4070EA30E0EA0F800E167E9514>I<1330A2137013F0A2EA01701202120612
+0412081210A21220124012C0B5FCEA0070A5EA07FF10167F9514>I<EA3018EA3FF013E0
+1380EA2000A4EA2FC0EA3060EA2030EA0018131CA312E0A2EAC018EA40381330EA30E0EA
+0F800E167E9514>I E /Fj 54 128 df<13181330136013C01201EA0380120713005A12
+1EA2123E123CA2127CA3127812F8AD1278127CA3123CA2123E121EA27E7E13801203EA01
+C012001360133013180D317BA416>40 D<12C012607E7E121C7E120F7E1380EA03C0A213
+E01201A213F0A3120013F8AD13F01201A313E0A2120313C0A2EA078013005A120E5A1218
+5A5A5A0D317DA416>I<123C127EB4FCA21380A2127F123D1201A2EA0300A25A12065A12
+1C5A122009127C8710>44 D<EAFFFCA50E057F8D13>I<123C127E12FFA4127E123C0808
+7C8710>I<13FF000313C0380FC3F0381F00F8003E137CA248133EA400FC133FAD007C13
+3EA2007E137E003E137CA26C13F8380FC3F03803FFC0C6130018207E9F1D>48
+D<13381378EA03F812FF12FD1201B3A7387FFFF0A214207C9F1D>I<EA03FC380FFF8038
+3C0FE0387007F0387C03F8EAFE0114FCA3127C1238120014F8130314F0EB07E0EB0FC014
+80EB1E005B5BEBE00CEA01C0EA038013000006131C380FFFF85A5A5AB5FCA216207D9F1D
+>I<13FF000713C0380F03F0381E01F8123F14FC13811301121F000C13F8EA000314F0EB
+07E0EB0FC03801FF00A2380003E0EB01F814FCEB00FEA214FF127CA212FEA214FE387C01
+FC1278383C03F0380FFFE00001130018207E9F1D>I<00101330381E01F0381FFFE0A214
+C014005B13F80018C7FCA4EA19FE381FFF80381E07E0381803F0EA1001000013F8A214FC
+A2127812FCA314F812F8386003F0003013E0381C0FC0380FFF00EA03FC16207D9F1D>53
+D<EB1FC0EBFFF03801F0383807C078380F80FCEA1F00A25A007E13781400A212FEEB3FC0
+EB7FF0EB80F800FF137CEB007EA248137FA4127EA3003E137EA26C137C6C13F83807C1F0
+3803FFE0C6130018207E9F1D>I<12601278007FB5FCA214FE14FC14F814F038E00060A2
+4813C0EB0180EB0300EA0006130E130C131C5BA21378A25BA21201A31203A66C5A6C5A18
+227DA11D>I<13FF000313E0380701F0380E00785A143C123C123E123FEBC038EBF07838
+1FF8F0EBFFE06C13806C13E06C13F04813F8381F3FFC383C0FFEEA7807EB01FF38F0007F
+141FA2140FA26C130E0078131C7E001F13F8380FFFE00001130018207E9F1D>I<13FF00
+0713C0380F83E0381F00F0003E13F8007E137CA200FE137EA3147FA4007E13FFA2EA3E01
+001F137FEA0FFEEA03FCC7FC147EA2121E003F13FCA214F8EB01F0381E03E0381C0FC038
+0FFF00EA03FC18207E9F1D>I<123C127E12FFA4127E123C1200A6123C127E12FFA4127E
+123C08167C9510>I<14301478A214FCA3497EA2497E80A29038063F80A2010C7F141F01
+1C7FEB180FA2496C7EA201707FEB6003EB7FFF90B57EEBC001D801807F140000038090C7
+7EA20006EC3F80120F3AFFE007FFFCA226227EA12B>65 D<B67E15F03907E001FC6E7E15
+7FA21680153FA3157F1600A215FEEC03FC90B512F0A29038E001FEEC007FED3F8016C015
+1F16E0A6ED3FC01680157F913801FE00B65A15E023227EA129>I<B67E15F83907F001FC
+EC007FED3F80ED0FC016E0150716F0150316F8A316FCA916F8A3ED07F0A2ED0FE016C0ED
+1F80ED7F00EC01FEB612F8158026227EA12C>68 D<B612FEA23807F000151E150EA281A2
+81140CA392C7FC141C143CEBFFFCA2EBF03C141C140CA2ED0180A21400ED0300A35DA25D
+5D15FEB6FCA221227EA126>I<B612FCA23807F000153C151C150C150EA21506A2140CA2
+1500A2141C143CEBFFFCA2EBF03C141C140CA491C7FCA8B512E0A21F227EA124>I<B500
+81B5FCA23A07F0000FE0AD90B6FCA29038F0000FAFB50081B5FCA228227EA12D>72
+D<B538800FFEA23A07F00001E01680ED0700150E15185D5D4A5A4A5A0206C7FC5C143C14
+7E14FEEBF1FF9038F33F8001FE7F496C7EEBF00F6E7E6E7E8114016E7E157F1680ED3FC0
+151FED0FE016F0B56CB5FCA228227EA12D>75 D<B512C0A2D807F0C7FCB31518A41538A2
+1570A215F014011407B6FCA21D227EA122>I<B67E15F03907F003F86E7E6E7E157FA216
+80A51600A215FE4A5A4A5A90B55A158001F0C8FCADB57EA221227EA127>80
+D<3801FE023807FFCE381F01FE383C007E141E48130EA200F81306A27E91C7FCB4FC13F0
+6CB47E6C13E014F86C7F00077F7E38003FFF13019038003F80141FA200C0130FA36C1400
+A26C131E00FC131C38FF807838E7FFF038807FC019227DA120>83
+D<007FB612C0A2397E03F80F00781403007014010060140000E015E0A200C01560A40000
+1500B348B512F0A223217EA028>I<B5388007FFA2D807F0C712E06D1460000315C07F00
+01EC0180A26D1303000015006D5B6D13061480013F5B14C0011F5BA26D6C5AA2ECF07001
+07136014F801035B14FC903801FD80A26DB4C7FCA3147EA2143CA2141828227FA12B>86
+D<B53A07FFF80FFFA23C0FF0007F8000700007023F1460A26C6C6E13C0151F7F00019139
+3FE00180A26D90387FF003000002671400A2017F9038C3F806A20280EBFC0E90263F8181
+130CA2D91FC36D5A150014E3D90FE6EB7F30A202FE14F06D486D5AA26D486D5AA36D486D
+5AA2010092C7FC4A7FA238227FA13B>I<B53881FFF0A23A07F8001C006C6C13186C6C13
+385D6C6C13606D6C5AEC8180EB3FC3D91FE7C7FCEB0FE614FC13071303A26D7E6D7E5B81
+9038033FC0496C7E130E90380C0FF0496C7E1338496C7E90386001FEEBC0000001804848
+EB7F800007EC3FC03AFFF803FFFCA226227EA12B>I<EA07FE381FFF80383F07E06D7E13
+0180121E1200A2133FEA03FDEA1F81EA3E01127C12F8A4EA7C02EA7E0C391FF87F803807
+E03F19167E951C>97 D<B47EA2121FABEB87F0EBBFFCEBF03EEBC01F9038800F8015C014
+0715E0A715C0A2140F15809038C01F00381E707E381C3FFC38180FE01B237EA220>I<EB
+FF80000713E0380F83F0EA1F03123E127E387C01E090C7FC12FCA6127C127EA2003E1318
+6C1330380FC0603807FFC0C6130015167E9519>I<49B4FCA2EB003FAB13FE3807FFBF38
+0FC1FF48C67E003E7F127E127CA212FCA7127C127E123E6C5B380F81FF3907FF3FE0EA01
+FC1B237EA220>I<13FE3807FF80380F83C0381E01E0383E00F0127E007C13F8147812FC
+B512F8A200FCC7FCA3127CA26C1318A26C1330380F80E03803FFC0C6130015167E951A>
+I<EB1F80EBFFE03801F1F0EA03E31207EA0FC3EBC1E0EBC000A6EAFFFEA2EA0FC0B2EA7F
+FCA214237EA212>I<9038FE0F803903FF9FC0380F83E3381F01F3391E00F000003E7FA5
+001E5BEA1F01380F83E0380BFF80D808FEC7FC0018C8FCA2121C381FFFE014FC6C13FF7E
+001F1480397C001FC00078130F00F81307A3007CEB0F806CEB1F00381F807E6CB45A0001
+13E01A217F951D>I<B47EA2121FABEB83F0EB8FFCEB987EEBA03EEBC03FA21380AE39FF
+F1FFE0A21B237DA220>I<121E123FEA7F80A4EA3F00121EC7FCA6EAFF80A2121FB2EAFF
+F0A20C247EA30F>I<133C137E13FFA4137E133C1300A6EA03FFA2EA003FB3A5127812FC
+133E137CEA7878EA3FF0EA1FC0102E83A312>I<B47EA2121FABECFF80A2EC3C00143014
+E0EB81C00183C7FC1386139E13BE13FFEBDF80EB8FC01307806D7E6D7E130080147E39FF
+E1FFC0A21A237EA21E>I<EAFF80A2121FB3ADEAFFF0A20C237EA20F>I<3AFF03F803F890
+390FFE0FFE3A1F183F183F9039201F201F014001C01380A201801380AE3BFFF0FFF0FFF0
+A22C167D9531>I<38FF03F0EB0FFC381F187EEB203EEB403FA21380AE39FFF1FFE0A21B
+167D9520>I<13FF000713E0380F81F0381F00F8003E137C48133EA300FC133FA7007C13
+3E007E137E003E137C6C13F8380F81F03807FFE0C6130018167E951D>I<38FF87F0EBBF
+FC381FF07EEBC01F9038800F8015C0A2EC07E0A715C0140FA2EC1F8001C01300EBF07EEB
+BFFCEB8FE00180C7FCA8EAFFF0A21B207E9520>I<38FF0F80EB1FE0381F33F013631343
+A2EBC1E0EB8000ADEAFFF8A214167E9518>114 D<3807F980EA1FFFEA3807EA7003EAF0
+01A26CC7FCB4FC13F8EA7FFE6C7E6C1380120738003FC0EAC007130312E0A200F0138038
+FC0F00EAEFFEEAC3F812167E9517>I<487EA41203A21207A2120F123FB5FCA2EA1F80AB
+EB8180A5380F830013C3EA07FEEA01F811207F9F16>I<38FF81FFA2381F803FAF5C5C38
+0FC1BF3907FF3FE0EA01FC1B167D9520>I<39FFF01FE0A2391FC00700000F1306EBE00E
+0007130C13F000035BA26C6C5AA26C6C5AA2EBFEE0EB7EC0137F6D5AA26DC7FCA2130EA2
+1B167F951E>I<3AFFF3FF83FCA23A1F807C00E0D80FC014C08001E013010007017F1380
+A2D803F0EB0300ECCF8301F81387D801F913C61487D800FD13ECEBFF0315FC017F5BEB7E
+01013E5BEB3C00A20118136026167F9529>I<39FFF07FC0A2390FC01C006C6C5A6D5A00
+035B6C6C5A3800FD80137F91C7FC7F6D7E497EEB37E0EB67F013C33801C1F8380380FC48
+487E000E137F39FF81FFE0A21B167F951E>I<387FFFF0A2387C07E038700FC0EA601F00
+E0138038C03F005B137EC65A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB00
+E0EA7E03B5FCA214167E9519>122 D<EA3807387C0F8038FE1FC0A3387C0F8038380700
+12077BA31D>127 D E /Fk 19 123 df<EC03804A7EA24A7EA34A7EA24A7EA3EC73FCA2
+ECF3FE14E101017F14C0A2010380EC807F010780EC003FA2010E6D7EA2011E80011C130F
+011FB5FC4980A29039780007FC0170130301F080491301A2000181497F00031680D8FFFE
+011F13FEA32F297EA834>65 D<B712F0A33903FC000FED03F81501150016781638A3EDE0
+3C161CA302011300A2140790B5FCA3EBFC071401A202001307A3160E1500A2161EA2161C
+163C167C16FC1501150FB712F8A328297EA82D>69 D<007FB712C0A39039803FC03FD87E
+00140700781503A20070150100F016E0A2481500A5C71500B3A4017FB512E0A32B287EA7
+30>84 D<3803FF80000F13F0381F01F8383F807EA280D81F001380120EC7FCA3EB0FFF90
+B5FC3807FC3FEA0FE0EA3F8013005A12FEA4007E137F007F13DF393F839FFC380FFF0F38
+01FC031E1B7E9A21>97 D<EAFFE0A3120FACEBE1FE9038E7FF809038FE07E09038F801F0
+496C7E497F81157FA31680A71600A315FE5D6D485A6D485A90389E0FE090380FFF80260E
+01FCC7FC212A7EA926>I<EB3FF8EBFFFE3803F01F3907E03F80EA0FC0EA1F80003FEB1F
+00387F000E91C7FCA25AA77EA27F003FEB01C0121F390FC003803907E007003803F01E38
+00FFFCEB3FE01A1B7E9A1F>I<EC3FF8A31403ACEB1FE3EBFFFB3803F83F3807E00F380F
+C007381F8003123FEA7F00A35AA77EA3EA3F80121F000F13073807C00F3A03F03FFF8038
+00FFF3EB3FC3212A7EA926>I<EB3FE03801FFF83803F07E3807C01FD80F801380001F13
+0F003F14C0EA7F00140715E05AA290B5FCA290C8FCA37EA36C6C13E0121F390FC001C039
+07E003803903F81F003800FFFEEB1FF01B1B7E9A20>I<9038FF81F00003EBE7F8390FC1
+FE7C381F80FC9038007C3848EB7E1048EB7F00A66C137E6C137CEB80FC380FC1F8381FFF
+E0001813800038C8FCA2123C123E383FFFF86C13FF15806C14C06C14E0001F14F0383C00
+07007CEB01F8481300A4007CEB01F0003C14E0001FEB07C0390FC01F803903FFFE003800
+7FF01E287E9A22>103 D<1207EA0F80EA1FC0EA3FE0A3EA1FC0EA0F80EA0700C7FCA7EA
+FFE0A3120FB3A3EAFFFEA30F2B7DAA14>105 D<EAFFE0A3120FACEC1FFCA3EC0780EC0F
+00141E5C5C14E0EBE3C013E7EBEFE013FF80EBF3F813E3EBC1FCEBC0FE147FA2EC3F80EC
+1FC0140F15E039FFFC3FFEA31F2A7EA924>107 D<EAFFE0A3120FB3B2EAFFFEA30F2A7D
+A914>I<3BFFC07F800FF0903AC1FFE03FFC903AC383F0707E3B0FC603F8C07F903ACC01
+F9803F01D8D9FF00138001F05BA201E05BB03CFFFE1FFFC3FFF8A3351B7D9A3A>I<38FF
+C07F9038C1FFC09038C787E0390FCE03F013D88113F0A213E0B03AFFFE3FFF80A3211B7D
+9A26>I<EB3FE03801FFFC3803F07E390FC01F80391F800FC0003F14E0EB00074814F0A3
+4814F8A86C14F0A2393F800FE0A2001F14C0390FC01F803907F07F003801FFFC38003FE0
+1D1B7E9A22>I<38FFE1FE9038E7FF809038FE07E0390FF803F0496C7E496C7E818181A2
+1680A716005DA25D4A5A01F05B6D485A9038FE0FE09038EFFF80D9E1FCC7FC01E0C8FCA9
+EAFFFEA321277E9A26>I<1370A413F0A312011203A21207381FFFF0B5FCA23807F000AD
+1438A61203EBF870000113603800FFC0EB1F8015267FA51B>116
+D<39FFE03FF8A3000F1303B214071207140F3A03F03BFF803801FFF338003FC3211B7D9A
+26>I<003FB51280A29038007F00003C13FEEA3801387803FC5CEA7007495A5CC6485A13
+3F495A91C7FC5B3901FE038013FCEA03F81207380FF00713E0001F140048485A495A387F
+007FB6FCA2191B7E9A1F>122 D E /Fl 78 128 df<90380FC0F890387833869038E03F
+0F3901807E1F12033907007C0EEC3C00141CA7B612E0A23907001C00B1397FF1FFE0A220
+2380A21D>11 D<EB0FC0EB7830EBE0083801803C0003137CEA0700A2143891C7FCA6B512
+FCA23807003C141CB0397FF1FFC0A21A2380A21C>I<90380FC03F90397031E0C09039E0
+0B80203A01803E00F00003EB7E013807007CA291383C00E0021C1300A6B712F0A2390700
+1C001670B03A7FF1FFC7FFA2282380A22A>14 D<137E3801C380380301C0000713E0EA06
+00000E13F0A5EB01E014C0EB0380EB0700EAFE3C1307380E0380EB01C0EB00E014701478
+A21438143CA61438EB3078EB787014E038FE31C0EB1F0016237FA219>25
+D<127012F8A71270AC1220A61200A5127012F8A3127005247CA30E>33
+D<EA7038EAF87CEAFC7EA2EA743AEA0402A4EA0804A2EA1008A2EA2010EA40200F0F7EA2
+19>I<133C136213C138018080A21203A40181C8FCA213821384EA01C8A29039D001FFC0
+EA00E09138003C001518D80170131000025C487ED8083C5BD8181C5B487ED90F01C7FC38
+70070238F0038214C4EB01C8D900F013806C13700078EB78013A7C019C0300393E070F06
+390FFE07FE3903F001F822257EA327>38 D<132013401380EA01005A12061204120CA25A
+A25AA312701260A312E0AE1260A312701230A37EA27EA2120412067E7EEA008013401320
+0B327CA413>40 D<7E12407E7E12187E12041206A27EA2EA0180A313C01200A313E0AE13
+C0A312011380A3EA0300A21206A21204120C5A12105A5A5A0B327DA413>I<497EB0B7FC
+A23900018000B020227D9C27>43 D<127012F812FCA212741204A41208A21210A2122012
+40060F7C840E>I<EAFFF0A20C027F8B11>I<127012F8A3127005057C840E>I<EA01F8EA
+070EEA0E07381C0380383801C0A2007813E0EA7000A300F013F0AE007013E0A3EA780100
+3813C0A2381C0380380E0700EA070EEA01F814227EA019>48 D<13801203120F12FF12F3
+1203B3A8EAFFFEA20F217BA019>I<EA03F8EA0FFE38181F80383007C0EA4003EB01E012
+F800FC13F01300A21278EA3001000013E0A2130314C0EB07801400130E5B5B5B5B138048
+C7FC000213105A5A481330481320387FFFE0B5FCA214217EA019>I<EA01F8EA0FFE381C
+0F80383003C01238007C13E01301A2EA3C031218000013C014801307EB0E005BEA03F8EA
+000EEB0780EB03C014E0130114F0A21230127812FCA214E0EAF803004013C03820078038
+1C0F00EA0FFEEA03F814227EA019>I<EB0180A213031307A2130B131313331323134313
+83A2EA010312021206120412081210A21220124012C0B512FCA238000380A7EB7FFCA216
+217FA019>I<00101340381E0380381FFF005B5BEA13F00010C7FCA613F8EA1306EA1403
+38180180001013C0000013E0130014F0A3127012F8A314E0EAC001004013C0EA60030030
+1380381C0F00EA0FFEEA03F014227EA019>I<133EEBFF803803C0C0380700E0EA0E01EA
+1C03A2383801C090C7FC12781270A2EAF0F8EAF306EAF403EB018000F813C0EB00E05A14
+F0A51270A2007813E012381301001C13C0EB0380380F0700EA03FEEA01F814227EA019>
+I<12401260387FFFF0A214E03840002000C01340481380EB0100A2EA00025BA25B5BA213
+305BA213E0A2485AA31203A41207A66C5A14237DA119>I<EA01F8EA07FE380E07803818
+01C0EA3000481360A41270007C13C06C1380381F8100EA0FC6EA07FC6C5AEA01FEEA067F
+380C1F8038100FC0383003E0EA6001EB00705A1430A400601360007013406C13C0381E07
+80380FFE00EA01F814227EA019>I<EA01F8EA07FEEA0E0F381C03801238387801C01270
+14E0EAF000A214F0A5127013011238EA1802120CEA060CEA01F0C712E0A2130114C01238
+387C0380A238780700EA300EEA383CEA1FF8EA07E014227EA019>I<127012F8A3127012
+00AB127012F8A3127005157C940E>I<B7FCA2C9FCA8B7FCA2200C7D9127>61
+D<497EA3497EA3EB05E0A2EB0DF01308A2497E1478A2497EA3497EA3497EA290B5FC4814
+80EB0007A20002EB03C0A2000614E000041301A2000C14F0121E39FF800FFFA220237EA2
+25>65 D<B512F814FE3907800F80EC07C0EC03E0140115F0A515E01403EC07C0EC0F80EC
+3E00EBFFFE9038800780EC03C0EC01E015F0140015F8A6EC01F0140315E0EC0FC0B61200
+14FC1D227EA123>I<903807F00890383FFC18EBFC063901F001383903C000F848481378
+48C71238121E15185AA2007C1408A2127800F81400A81278007C1408A2123CA26C1410A2
+6C14206C7E6C6C13403901F001803900FC0700EB3FFCEB07F01D247DA224>I<B512F814
+FE3907800F80EC03C0EC01E0EC00F01578A2153CA2153E151EA2151FA9151EA2153E153C
+A2157815F0EC01E0EC03C0EC0F80B6120014F820227EA126>I<B612E0A2380780031400
+156015201530A215101410A3150014301470EBFFF0A2EB807014301410A21504A2140015
+08A31518A215381578EC01F0B6FCA21E227EA122>I<B612E0A238078003140015601520
+1530A21510A21410A21500A214301470EBFFF0A2EB807014301410A491C7FCA8EAFFFEA2
+1C227EA121>I<903807F80490381FFE0CEB7E073901F0009CD803C0137C4848133C48C7
+121C5A001E140C123E123C007C1404A2127800F891C7FCA791380FFF801278007C903800
+3C00A2123C123E121E121F7E6C7ED803E0135C6C6C13DC39007E038C90381FFE04D907F8
+C7FC21247DA227>I<39FFFC3FFFA239078001E0AD90B5FCA2EB8001AF39FFFC3FFFA220
+227EA125>I<EAFFFCA2EA0780B3ACEAFFFCA20E227EA112>I<EBFFFCA2EB03C0B3A51230
+127812FCA21480EAF80700401300EA200EEA183CEA07F016237FA11A>I<3AFFFC01FF80
+A23A0780007800156015405D4AC7FC14025C5C5C5C5C14C01381EB83E0EB84F01388EB90
+78EBA03C13C0497E80A26E7E6E7EA26E7E6E7EA2157815FC3AFFFC03FFC0A222227EA127
+>I<EAFFFEA2EA0780B31540A415C0A21580140114031407141FB6FCA21A227EA11F>I<B4
+6C903801FF80A20007EDF000D805C01302A2D804E01304A301701308A26D1310A36D1320
+A36D1340A26D1380A39038038100A3EB01C2A2EB00E4A31478A2001F1330D8FFE090381F
+FF80A229227EA12E>I<39FF8007FF13C00007EB00F8D805E01320EA04F0A21378137C13
+3C7FA27FEB0780A2EB03C0EB01E0A2EB00F014F81478143CA2141E140FA2EC07A0EC03E0
+A21401A21400001F1460EAFFE0152020227EA125>I<EB0FF0EB381CEBE0073901C00380
+39078001E090C7FC000E1470001E147848143CA2007C143EA20078141EA200F8141FA900
+7C143EA3003C143C003E147C001E14786C14F0A239078001E03903C003C03900E00700EB
+381CEB0FF020247DA227>I<B512F814FE3807801FEC07C0140315E0140115F0A515E014
+0315C0EC0780EC1F00EBFFFC0180C7FCAEEAFFFCA21C227EA122>I<B512E014FC380780
+1FEC07806E7E81140181A45D14035D4AC7FC143EEBFFF0EB80388080140F8081A481A316
+4015E0140326FFFC011380913800F100C8123E22237EA125>82 D<3803F810380FFE30EA
+1E07383801F0EA70001470481330A21410A36C13001270127C127FEA3FF0EA1FFE380FFF
+80000313C038003FE0EB03F013001470147814387EA46C133014706C136000F813E038CF
+03C038C7FF00EA80FE15247DA21C>I<007FB512FCA2397803C03C0060140C00401404A2
+00C01406A200801402A400001400B3A248B51280A21F227EA124>I<39FFFC07FFA23907
+8000F81520B3A5000314407FA2000114803800E0019038700300EB3C0EEB1FF8EB03F020
+237EA125>I<D8FFF0EB7FC0A2D80F80EB1E000007140C1508A26C6C5BA26D1330000114
+20A26C6C5BA301785BA2EB7C01013C90C7FCA2EB1E02A2131F6D5AA2EB0788A3EB03D0A2
+14F06D5AA26D5AA322237FA125>I<3BFFF01FFE03FFA23B0F8003E00078D900011430D8
+0780152081A201C015600003D902781340A3D801E015804A7EA2D800F0EC0100EC081EA2
+01781402EC100FA2013C5C9138200784A2011E148891384003C8A2131FD90FC013F0EC80
+01A201075C91C7FCA26D5C0102144030237FA133>I<397FF807FFA23907E001F00003EB
+00C000015C6C6C48C7FC6D5AEB78026D5AEB3E0CEB1E08EB1F10EB0FB0EB07A014C06D7E
+130180497EEB0278EB047CEB0C3EEB081EEB101FEB300F903820078001407FEBC003496C
+7ED801007F481300D80F807F3AFFE007FFC0A222227FA125>I<387FFFFEA2387E003C12
+7800701378006013F05AEB01E0A2388003C0EB0780A238000F00A2131E5BA25BA25B3801
+E001A2EA03C0A2EA0780380F0003A2001E1302140648130E48131E147EB512FEA218227D
+A11E>90 D<EA1FF0EA381CEA7C061307EB038012381200A2137FEA07C3EA1E03123C1278
+A200F01384A31307EA780B383C11C8380FE0F016157E9419>97 D<120E12FEA2121E120E
+AAEB1F80EB60E0EB8030380F0038000E131C141E140E140FA7140E141E141C000F133838
+0C8070EB60E038081F0018237FA21C>I<EA01FEEA0707380C0F80121C12383878070000
+70C7FC12F0A712700078134012386C1380380C0100EA0706EA01F812157E9416>I<1470
+EB07F0A213001470AA13F8EA0706EA0E01381C00F04813701278127012F0A71270127812
+386C13F0380C01783807067FEA01F818237EA21C>I<EA01FCEA0707380C0380381C01C0
+1238387800E0127012F0B5FC00F0C7FCA512700078132012386C13406C138038070300EA
+00FC13157F9416>I<133EEBE1803801C3C0EA0387A23807038090C7FCA8EAFFF8A20007
+C7FCB1EA7FF0A2122380A20F>I<14383801F8CC38070F1CEA0E07381C0380A2003C13C0
+A4001C1380A2380E0700EA0F0EEA19F80010C7FCA21218121CEA1FFF6C13E014F0383800
+F8006013180040131C00C0130CA300601318A200381370380E01C03801FE0016217F9519
+>I<120E12FEA2121E120EAAEB1F80EB60E0EB8070380F0038A2120EAE39FFE3FF80A219
+237FA21C>I<121C123EA3121CC7FCA8120E127EA2121E120EAFEAFFC0A20A227FA10E>I<
+137013F8A313701300A81338EA03F8A2EA00781338B3A31270EAF83013701360EA70C0EA
+1F000D2C83A10F>I<120E12FEA2121E120EAAEB03FCA2EB01E01480EB02005B5B5B1338
+13F8EA0F1CEA0E1E130E7F1480EB03C0130114E014F038FFE3FEA217237FA21A>I<120E
+12FEA2121E120EB3ABEAFFE0A20B237FA20E>I<390E1FC07F3AFE60E183809039807201
+C03A1F003C00E07E000E1338AE3AFFE3FF8FFEA227157F942A>I<380E1F8038FE60E0EB
+8070381F00387E120EAE39FFE3FF80A219157F941C>I<13FC38070380380E01C0381C00
+E0481370007813780070133800F0133CA70070133800781378003813706C13E0380E01C0
+380703803800FC0016157F9419>I<380E1F8038FE60E0EB8070380F0038000E131C141E
+A2140FA7141EA2141C000F1338380E8070EB60E0EB1F0090C7FCA8EAFFE0A2181F7F941C
+>I<3801F82038070460EA0E02EA1C01003813E0EA7800A25AA71278A2EA3801121CEA0C
+02EA070CEA01F0C7FCA8EB0FFEA2171F7E941A>I<EA0E1EEAFE63EB8780121E380F0300
+90C7FC120EADEAFFF0A211157F9414>I<EA0FC4EA303CEA600C12C01304A212E0EAF800
+EA7F80EA3FF0EA0FF8EA00FC131EEA800E130612C0A21304EAE00CEAD818EA87E00F157E
+9414>I<1202A51206A3120E121EEA3FFC12FFEA0E00AA1304A6EA07081203EA01F00E1F
+7F9E13>I<000E133838FE03F8A2381E0078000E1338AC1478A26C13BC3903833F80EA00
+FC19157F941C>I<38FF80FEA2381E0078000E1320A26C1340A2EB80C000031380A23801
+C100A2EA00E2A31374A21338A3131017157F941A>I<3AFF8FF87F80A23A1E01E01E0039
+0E00C00CECE008EB01600007EB7010A2EB02303903823820A2EB84183901C41C4013CC90
+38E80CC00000EB0E80EBF006D97007C7FCA2EB6003EB200221157F9424>I<38FF81FEA2
+380F00E06C1380138138038300EA01C2EA00E41378A21338133C134E138EEA0187380303
+80380201C0000413E0EA1E0038FF03FEA217157F941A>I<38FF80FEA2381E0078000E13
+20A26C1340A2EB80C000031380A23801C100A2EA00E2A31374A21338A31310A25BA3EAF8
+40A25B12F90063C7FC123C171F7F941A>I<383FFFC038380380EA300700201300EA600E
+EA401C133C1338C65A5B12015B38038040EA07005A000E13C04813805AEA7801EA7007B5
+FC12157F9416>I<B6FC1801808C19>I<B912803101808C32>I<EA7038EAF87CA3EA7038
+0E057BA119>127 D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+%%PaperSize: a4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 1389 70 a Fl(F)l(assung)14 b(v)o(om)i(15.10.1996)250
+198 y Fk(Anleitung)21 b(zu)h(mit)f(Edmac)i(k)n(ompatiblen)e(T)-6
+b(ab)r(ellen)545 326 y Fl(v)o(on)16 b(Nora)g(G\177)-25
+b(adek)o(e)16 b(und)g(Herb)q(ert)h(Breger)100 455 y Fj(V)-5
+b(orb)r(emerkung:)22 b(Der)k(folgende)f(T)-5 b(ext)26
+b(ist)g(ein)g(Auszug)f(aus)g(der)g(am)f(Leibniz-)0 525
+y(Arc)n(hiv)c(Hanno)n(v)n(er)f(\(W)-5 b(aterlo)r(ostr.)18
+b(8,)g(30169)f(Hanno)n(v)n(er,)h(T)-5 b(el.:)19 b(0511)e(1267)h(327)f
+(o)r(der)78 b Fi(5)0 594 y Fj(0511)18 b(1267)f(322\))i(v)n(erw)n
+(endeten)i(Anleitung)f(f)r(\177)-30 b(ur)17 b(T)1117
+605 y(E)1148 594 y(X)j(und)e(Edmac.)801 737 y Fh(A)n(l)s(lgemeines)100
+866 y Fl(Als)j(T)l(ab)q(elle)g(b)q(ezeic)o(hnen)f(wir)g(im)h(folgenden)
+f(jedes)h(Gebilde,)g(das)f(zum)h(einen)f(mehrzeilig)0
+935 y(ist)d(und)e(zum)h(anderen)g(aus)g(mehreren)f(Spalten)h(b)q(esteh)
+o(t,)h(deren)e(einzelne)i(Zeilen)g(in)f(irgendeiner)0
+1005 y(W)l(eise)j(b)q(\177)-26 b(undig)17 b(o)q(der)i(symmetrisc)o(h)e
+(aufeinander)g(ausgeric)o(h)o(tet)g(sind.)h(In)h(einer)f(T)l(ab)q(elle)
+g(k\177)-25 b(onnen)60 b Fi(10)0 1075 y Fl(so)o(w)o(ohl)21
+b(T)l(ext)i(als)e(auc)o(h)h(F)l(ormeln)e(v)o(ork)o(ommen.)g(T)1009
+1086 y(E)1036 1075 y(X)j(bietet)g(sehr)e(sc)o(h\177)-25
+b(one)22 b(M\177)-25 b(oglic)o(hk)o(eiten)21 b(zur)0
+1145 y(T)l(ab)q(ellenherstellung,)10 b(die)j(ab)q(er)f(f)q(\177)-26
+b(ur)12 b(unsere)g(Zw)o(ec)o(k)o(e)g(nac)o(h)g(gegen)o(w\177)-25
+b(artigem)11 b(Stand)h(nic)o(h)o(t)g(in)g(F)l(rage)0
+1214 y(k)o(ommen,)h(w)o(eil)g(die)h(Zeilenz\177)-25 b(ahlung)13
+b(aussetzt)h(und)f(die)h(T)l(ab)q(elle)g(nic)o(h)o(t)f(zen)o(triert)g
+(ausgegeb)q(en)h(wird)0 1284 y(\(Probleme)20 b(mit)h(EDMA)o(C)f(b)q(ei)
+h Fg(\\vbox)p Fl(\).)i(Diese)d(Probleme)g(w)o(erden)g(durc)o(h)f(die)i
+(selbsterstellten)0 1354 y(Macros)15 b(f)q(\177)-26 b(ur)16
+b(T)l(ab)q(ellen)g(umgangen.)1282 b Fi(15)167 1482 y
+Fh(A)n(usgerichtete)25 b(Gleichungen)e(\(T)-5 b(ab)m(el)s(len)23
+b(im)f(Mathematikmo)m(dus\))100 1610 y Fl(Zun\177)-25
+b(ac)o(hst)18 b(ist)h(grunds\177)-25 b(atzlic)o(h)16
+b(zu)j(sagen,)f(da\031)h(alle)g(mathematisc)o(hen)e(T)l(ab)q
+(ellenmacros)g(alle)0 1680 y(Elemen)o(te)f(automatisc)o(h)f(im)h
+(displa)o(yst)o(yle)f(bringen.)100 1750 y(Nun)h(zu)g(den)g(einzelnen)g
+(Macros:)100 1820 y(Die)c(b)q(ei)g(w)o(eitem)g(angenehmste)f(M\177)-25
+b(oglic)o(hk)o(eit,)11 b(eine)h(T)l(ab)q(elle)g(zu)g(erstellen,)f
+(bieten)h(die)g(Macros)59 b Fi(20)0 1889 y Fg(\\rtab)p
+Fl(,)25 b Fg(\\ltab)g Fl(bzw.)f Fg(\\ztab)p Fl(,)h(b)q(ei)g(W)l(unsc)o
+(h)e(in)h(V)l(erbindung)e(mit)i Fg(\\abstand)p Fl(.)i(Sie)e(lassen)f
+(sic)o(h)0 1959 y(allerdings)11 b(n)o(ur)h(b)q(ei)i(einheitlic)o(her)d
+(Ausric)o(h)o(tung)g(aller)i(T)l(ab)q(ellenelemen)o(te)f(v)o(erw)o
+(enden:)g(mit)h Fg(\\rtab)0 2029 y Fl(erh\177)-25 b(alt)16
+b(man)f(eine)h(rec)o(h)o(tsb)q(\177)-26 b(undige,)14
+b(mit)i Fg(\\ltab)h Fl(eine)f(linksb)q(\177)-26 b(undige)14
+b(T)l(ab)q(elle)i(und)g(mit)g Fg(\\ztab)h Fl(eine)0 2099
+y(T)l(ab)q(elle,)j(in)h(der)f(die)g(Elemen)o(te)g(zen)o(triert)g(sind.)
+g(Die)g(Macros)g Fg(\\rtab)p Fl(,)h Fg(\\ltab)h Fl(und)d
+Fg(\\ztab)j Fl(sind)0 2168 y(auf)14 b(maximal)g(sec)o(hzig)g(Spalten)g
+(ausgeric)o(h)o(tet)f(\(Erw)o(eiterung)g(w\177)-25 b(are)14
+b(sehr)g(leic)o(h)o(t)g(m\177)-25 b(oglic)o(h,)13 b(ist)h(ab)q(er)60
+b Fi(25)p 0 2304 213 2 v 100 2381 a Fl(10)49 b(Dies)21
+b(b)q(eginn)o(t)g(also)f(b)q(ereits)h(mit)g(quadratisc)o(hen)e(Gleic)o
+(h)o(ungen,)g(deren)i(Ko)q(e\016zien)o(ten)0 2451 y(zw)o(eizeilig)16
+b(un)o(tereinander)e(angeordnet)i(sind.)p eop
+%%Page: 2 2
+2 1 bop 861 -70 a Fl(|)16 b(2)h(|)0 70 y(v)o(erm)o(utlic)o(h)d(k)m(aum)
+i(erforderlic)o(h\).)e(Die)j(Anzahl)f(der)f(Zeilen)i(ist)f(un)o(b)q
+(egrenzt.)f(Das)h(Problem)f(einer)0 139 y(T)l(ab)q(elle,)e(in)g(der)g
+(n)o(ur)f(einzelne)h(Elemen)o(te)g(zen)o(triert)g(sein)g(sollen,)g(k)m
+(ann)g(man)g(mit)g Fg(\\phantom)i Fl(l\177)-25 b(osen.)0
+209 y(Da)23 b(die)g(Un)o(tersc)o(heidung)e(rec)o(h)o(tsb)q(\177)-26
+b(undig-)o(linksb\177)g(und)o(ig)20 b(innerhalb)h(einer)i(T)l(ab)q
+(elle)g(hier)f(en)o(tf\177)-25 b(allt,)0 279 y(sind)18
+b(auc)o(h)g(k)o(eine)h(zw)o(ei)g(v)o(ersc)o(hiedenen)f(P)o
+(ositionszeic)o(hen)f(n\177)-25 b(otig)19 b(\(wie)g(es)g(b)q(ei)h
+Fg(\\atab)p Fl(,)g(vgl.)f(Seite)-80 349 y Fi(5)60 b Fl(10,)13
+b(der)g(F)l(all)f(ist\):)h(nac)o(h)f(jedem)h(T)l(ab)q(ellenelemen)o(t)f
+(sc)o(hreibt)g(man)h(ein)g(&)g(\(au\031er)f(nac)o(h)h(dem)f(letzten)0
+418 y(Elemen)o(t)20 b(in)h(einer)f(Zeile\).)h(Nac)o(h)g(jedem)g(&)f
+(sollte)h(man)f(ein)h(blank)f(lassen.)g(\(F)l(ehlermeldungen)0
+488 y(wie)f("Anzahl)g(der)g(T)l(abulatoren)f(stimm)o(t)g(nic)o(h)o(t)h
+(\177)-26 b(ub)q(erein)18 b(mit)h(der)g(Anzahl)g(der)g(T)l(abulatoren)e
+(in)0 558 y(der)h(v)o(orangehenden)f(Zeile")i(k\177)-25
+b(onnen)18 b(auf)g(ein)h(solc)o(hes)e(fehlendes)h(blank)g(zur)q(\177)
+-26 b(uc)o(kzuf)q(\177)g(uhren)16 b(sein.\))0 628 y(Abgesc)o(hlossen)e
+(wird)i(eine)g(jede)g(Zeile)h(\(au\031er)f(der)f(letzten\))i(mit)f
+(einem)g Fg(!)p Fl(.)g(Die)h(gesam)o(te)e(T)l(ab)q(elle)-99
+697 y Fi(10)59 b Fl(wird)16 b(in)g(gesc)o(h)o(w)o(eifte)f(Klammern)g
+(gesetzt.)i(Nun)f(ein)h(Beispiel:)e(Die)i(Eingab)q(e)100
+767 y Fg(\\rtab)p Ff(f)26 b Fg(2xyz)h(&)g(+&)f(\\text)p
+Ff(f)p Fg(a)p Ff(g)p Fg(\\dfootnote)p Ff(f)i Fg(Erl\177)-26
+b(auterung)p Ff(g)p Fg(/&)28 b(-)f(&)p Ff(f)p Fg(\\mu\\over)g(x^2)p
+Ff(g)p 2654 780 25 50 v 2679 780 V 0 837 a Fg(&)f(+&)h(r^2&)g(=)f(&)g
+(0)g(!)100 907 y(4b)g(&)g(-&)h(bgh&)g(+)f(&)g(ac)h(&)f(-)g(&)h(z)f(&)g
+(=)g(&)h(0)f(!)100 976 y(a)g(&)g(+&)h(4c)f(&)g(-)h(&)f(r)g(&)h(+)f(&)g
+(\\sqrt)p Ff(f)p Fg(vrft)p Ff(g)i Fg(&)e(=)g(&)h(0)f(!)-99
+1046 y Fi(15)159 b Fg(&)26 b(&)g(&)h(-)f(&)g(p)g(&)h(+)f(&)g(v^4)h(&)f
+(=)h(&)f(0)g Ff(g)0 1116 y Fl(ergibt)430 1186 y(2)p Fe(xy)r(z)53
+b Fl(+)99 b Fe(a)50 b Ff(\000)904 1152 y Fe(\026)p 894
+1174 51 2 v 894 1220 a(x)922 1205 y Fi(2)1000 1186 y
+Fl(+)151 b Fe(r)1213 1165 y Fi(2)1286 1186 y Fl(=)50
+b(0)489 1255 y(4)p Fe(b)g Ff(\000)g Fe(bg)r(h)f Fl(+)65
+b Fe(ac)49 b Ff(\000)172 b Fe(z)52 b Fl(=)e(0)509 1325
+y Fe(a)g Fl(+)79 b(4)p Fe(c)49 b Ff(\000)89 b Fe(r)51
+b Fl(+)1089 1280 y Fd(p)p 1139 1280 98 2 v 45 x Fe(v)r(r)q(f)5
+b(t)51 b Fl(=)f(0)-99 1395 y Fi(20)858 b Ff(\000)87 b
+Fe(p)50 b Fl(+)149 b Fe(v)1214 1374 y Fi(4)1286 1395
+y Fl(=)50 b(0)100 1465 y(F)l(alls)20 b(der)i(Spaltenabstand)e(zu)i
+(klein)g(o)q(der)f(zu)h(gro\031)g(sein)f(sollte,)h(k)m(ann)g(man)f(ihn)
+g(mittels)0 1534 y Fg(\\abstand)g Fl(v)m(ariieren.)d(V)l(orgegeb)q(en)h
+(ist)g(zun\177)-25 b(ac)o(hst)18 b(ein)h(Abstand)g(v)o(on)g(10pt.)g
+(Will)g(man)f(ihn)h(z.B.)0 1604 y(auf)g(15pt)g(v)o(er\177)-25
+b(andern,)18 b(so)g(setzt)i(man)f(v)o(or)f(Beginn)h(der)g(T)l(ab)q
+(elle)g Fg(\\abstand=15pt)p Fl(.)i(Dieser)e(W)l(ert)0
+1674 y(ist)d(dann)g(n)o(ur)f(f)q(\177)-26 b(ur)16 b(diese)g(T)l(ab)q
+(elle)g(g)q(\177)-26 b(ultig,)16 b(danac)o(h)g(gilt)g(automatisc)o(h)f
+(wieder)h Fg(\\abstand=10pt)p Fl(.)-99 1743 y Fi(25)159
+b Fl(Wie)15 b(man)g(sieh)o(t,)f(ersc)o(hein)o(t)g(alles)h(automatisc)o
+(h)f(im)h(displa)o(yst)o(yle.)f(Es)h(ist)g(nic)o(h)o(t)f(erforderlic)o
+(h,)0 1813 y(v)o(orher)22 b(in)g(den)h(Mathematikmo)q(dus)e(zu)i
+(gehen,)f(da)h(dies)f(automatisc)o(h)g(gesc)o(hieh)o(t.)f(F)l(alls)h
+(man)0 1883 y(allerdings)15 b(b)q(ei)j(Beginn)f(der)g(T)l(ab)q(elle)g
+(sc)o(hon)f(im)h(Mathematikmo)q(dus)f(ist,)h(m)o(u\031)f(man)h(diesen)f
+(erst)0 1953 y(v)o(erlassen.)e(Will)h(man)g(innerhalb)e(der)i(T)l(ab)q
+(elle)g(T)l(ext)32 b(sc)o(hreib)q(en,)14 b(so)h(k)m(ann)g(man)g(dies)g
+(durc)o(h)e Ff(f)p Fg(\\rm)0 2022 y(Textwort)p Ff(g)22
+b Fl(tun.)f(Hat)h(man)e(allerdings)f(mehrere)h(T)l(ext)o(w)o(orte,)h
+(so)g(w)q(\177)-26 b(urde)20 b(T)1510 2033 y(E)1537 2022
+y(X)i({)f(da)g(man)f(sic)o(h)-99 2092 y Fi(30)59 b Fl(ja)22
+b(im)g(Mathematikmo)q(dus)f(b)q(e\014ndet)g({)i(die)e(Abst\177)-25
+b(ande)22 b(zwisc)o(hen)f(den)h(W)l(orten)g(v)o(ersc)o(h)o(winden)0
+2162 y(lassen.)15 b(Man)h(sollte)g(daher)g Ff(f)p Fg(\\rm)27
+b(Textwort)g(~)f(Textwort)i Ff(g)16 b Fl(eingeb)q(en.)100
+2232 y(Wic)o(h)o(tig:)23 b(Bei)i Fg(\\rtab,)i(\\ltab,)g(\\ztab,)g
+(\\rtabtext)f Fl(und)e Fg(\\ltabtext)i Fl(darf)e(man)g(nac)o(h)0
+2301 y(der)15 b(T)l(ab)q(elle)g(k)o(eine)h(Leerzeile)f(v)o(erw)o
+(enden,)f(sondern)g(m)o(u\031)g Fg(\\pend\\pstart)k Fl(sc)o(hreib)q
+(en,)c(w)o(eil)h(sonst)p 0 2380 1913 2 v 0 2451 a Fc(17)22
+b(a:)14 b(Erl\177)-21 b(auterung)p eop
+%%Page: 3 3
+3 2 bop 861 -70 a Fl(|)16 b(3)h(|)0 70 y(fo)q(otnotes)g(und)f(lab)q
+(els)g(v)o(ersc)o(h)o(winden)e(k\177)-25 b(onnen.)100
+139 y(Sollte)17 b(man)g(\(w)o(as)g(un)o(w)o(ahrsc)o(heinli)o(c)o(h)e
+(ist\))j(innerhalb)d(der)i(T)l(ab)q(elle)h(ein)f(!)h(sc)o(hreib)q(en)e
+(w)o(ollen,)0 209 y(so)d(k)m(ann)g(man)f(dies,)g(indem)g(man)h(das)f
+(Ausrufezeic)o(hen)g(in)h(eine)g(gesc)o(h)o(w)o(eifte)f(Klammer)f
+(setzt:)j Ff(f)p Fg(!)p Ff(g)p Fl(.)0 279 y(Dann)i(wird)g(das)f(Zeic)o
+(hen)i(v)o(on)f(T)641 290 y(E)668 279 y(X)h(nic)o(h)o(t)f(als)g
+(Zeilenende)g(gelesen.)100 349 y(Hat)j(man)e(sic)o(h)h(b)q(ei)g
+Fg(\\rtab)p Fl(,)p Fg(\\ltab)i Fl(o)q(der)e Fg(\\ztab)h
+Fl(b)q(ei)g(den)f(T)l(abulatoren)f(v)o(erz\177)-25 b(ahlt,)17
+b(so)h(erh\177)-25 b(alt)79 b Fi(5)0 418 y Fl(man)20
+b(eine)h(F)l(ehlermeldung.)d(Sie)j(w)o(eist)g(auf)g(die)f(fehlende)1171
+406 y(\177)1165 418 y(Ub)q(ereinstimm)o(ung)e(in)j(der)g(Zahl)g(der)0
+488 y(T)l(abulatoren)h(hin.)g(W)l(enn)g(man)h(b)q(eispielsw)o(eise)e
+(in)i(der)f(ersten)h(Zeile)g(einen)g(T)l(abulator)f(zuviel)0
+558 y(o)q(der)15 b(zu)o(w)o(enig)g(gesetzt)i(hat,)e(erh\177)-25
+b(alt)16 b(man)f(in)g(der)g(zw)o(eiten)h(Zeile)g(einen)g(Hin)o(w)o(eis)
+e(auf)i(die)f(fehlende)6 615 y(\177)0 628 y(Ub)q(ereinstimm)o(ung)g(in)
+i(der)f(Anzahl)h(der)g(T)l(abulatoren.)e(W)l(enn)i(man)f(in)h(der)g(zw)
+o(eiten)g(Zeile)g(einen)0 697 y(T)l(abulator)k(zuviel)i(o)q(der)f(zu)o
+(w)o(enig)g(gesetzt)h(hat,)g(so)f(erh\177)-25 b(alt)22
+b(man)g(eine)g(F)l(ehlermeldung)e(f)q(\177)-26 b(ur)22
+b(die)60 b Fi(10)0 767 y Fl(zw)o(eite)16 b(und)f(die)g(dritte)h(Zeile)g
+(\(w)o(eil)g(jew)o(eils)f(die)g(Anzahl)h(der)f(T)l(abulatoren)f(nic)o
+(h)o(t)h(mit)g(der)g(v)o(oran-)0 837 y(gehenden)k(Zeile)j(\177)-26
+b(ub)q(ereinstimm)o(t\).)18 b(Diese)i(F)l(ehlermeldung)d(hat)j(jedo)q
+(c)o(h)g(n)o(ur)f(Kon)o(trollfunktion:)0 907 y(denn)g(man)g(k)m(ann)g
+(durc)o(haus)e(T)l(abulatoren)h(\(w)o(enn)h(z.B.)h(in)f(einigen)g
+(Zeilen)h(die)f(letzten)i(Spalten)0 976 y(leer)12 b(bleib)q(en)g
+(sollen\))g(w)o(eglassen,)f(ohne)i(die)f(T)l(ab)q(elle)g(in)h(Gefahr)f
+(zu)g(bringen.)f(Man)h(b)q(ek)o(omm)o(t)g(dann)0 1046
+y(p)q(er)i(F)l(ehlermeldung)e(den)i(Hin)o(w)o(eis)g(auf)g(die)g
+(fehlende)1054 1033 y(\177)1047 1046 y(Ub)q(ereinstimm)o(ung)f(in)h
+(der)g(Zahl)g(der)g(T)l(abu-)59 b Fi(15)0 1116 y Fl(latoren,)16
+b(ab)q(er)h(das)f(k)m(ann)h(man)f(ignorieren,)f(w)o(enn)h(man)g(sic)o
+(h)g(sic)o(her)f(ist,)i(k)o(einen)f(F)l(ehler)g(gemac)o(h)o(t)0
+1186 y(zu)g(hab)q(en.)100 1255 y(In)21 b(der)g(praktisc)o(hen)e(Ausf)q
+(\177)-26 b(uhrung)20 b(ist)h Fg(\\rtab)h Fl(etc.)g(meistens)f
+Fg(\\atab)h Fl(\(vgl.)g(Seite)f(10\))h(v)o(or-)0 1325
+y(zuziehen)d({)h(sofern)f(die)h(Orien)o(tierung)d(der)j(Elemen)o(te)f
+(nic)o(h)o(t)g(w)o(ec)o(hselt.)g(In)g(einem)h(F)l(all)e(ist)i(ab)q(er)0
+1395 y(anzuraten,)13 b(auf)g(das)h(k)o(ompliziertere)e(Macro)h(zur)q
+(\177)-26 b(uc)o(kzugreifen:)12 b(w)o(enn)h(die)g(T)l(ab)q(elle)h(un)o
+(terbro)q(c)o(hen)58 b Fi(20)0 1465 y Fl(und)13 b(nac)o(h)g(einigen)g
+(Zeilen)g(normalen)f(T)l(extes)i(wieder)f(fortgef)q(\177)-26
+b(uhrt)14 b(wird.)e(Hier)i(ist)g(die)f({)h(in)f(diesem)0
+1534 y(F)l(all)19 b(immer)f(wieder)h(neu)h(\(und)f(v)o(or)g(allem)g
+(immer)g(wieder)g(gleic)o(h\))g(zu)h(setzende)g({)g(Musterzeile)0
+1604 y(wic)o(h)o(tig.)100 1674 y Fj(F)-5 b(ormeln)13
+b(o)r(der)h(T)-5 b(ext)17 b(\177)-30 b(ub)r(er)12 b(die)k(Spalten)n
+(breite)h(hinaus)p Fl(:)24 b(W)l(enn)13 b(man)e(in)h(einer)g(T)l(ab)q
+(elle)0 1743 y(\(die)22 b(mit)g Fg(\\rtab)p Fl(,)p Fg(\\ltab)p
+Fl(,)h Fg(\\ztab)p Fl(,)p Fg(\\rtabtext)h Fl(o)q(der)e
+Fg(\\ltabtext)i Fl(gemac)o(h)o(t)c(ist\))j(ausnahmsw)o(eise)57
+b Fi(25)0 1813 y Fl(einmal)19 b(\177)-26 b(ub)q(er)17
+b(die)h(Spalten)o(breite)e(hinaussc)o(hreib)q(en)f(will,)j(so)g(k)m
+(ann)g(man)f(dies)h(mittels)g Fg(\\breiter)0 1883 y Fl(\(en)o(tspric)o
+(h)o(t)d(in)h(et)o(w)o(a)g Fg(\\multispan)p Fl(\).)j(Beispiel:)c(Die)i
+(Eingab)q(e)100 1953 y Fg(\\ltab)p Ff(f)26 b Fg(a&)h(s)f(&)h(huiz)f(&)h
+(K)f(&)g(H)g(&)h(O)f(&)g(z)h(!)100 2022 y(&)f(&)g(\\breiter)p
+Ff(f)p Fg(a+b+c+d+e)p Ff(g)j Fg(&)d(&)g(&)h(&)f(!)100
+2092 y(a&)g(s)g(&)h(h&)f(K)g(&)h(H)f(&)g(O)h(&)f(z)g(!)1220
+b Fi(30)100 2162 y Fg(a&)26 b(s)g(&)h(h&)f(K)g(&)h(H)f(&)g(O)h(&)f(z)g
+Ff(g)100 2232 y Fl(ergibt)p eop
+%%Page: 4 4
+4 3 bop 861 -70 a Fl(|)16 b(4)h(|)613 70 y Fe(a)50 b(s)g(huiz)i(K)h(H)i
+(O)c(z)762 139 y(a)11 b Fl(+)g Fe(b)h Fl(+)f Fe(c)f Fl(+)h
+Fe(d)g Fl(+)g Fe(e)613 209 y(a)50 b(s)g(h)121 b(K)53
+b(H)i(O)c(z)613 279 y(a)f(s)g(h)121 b(K)53 b(H)i(O)c(z)-80
+349 y Fi(5)160 b Fl(Nur)18 b(b)q(ei)g Fg(\\ltab)i Fl(wird)d(das)h(mit)g
+Fg(\\breiter)i Fl(Eingegeb)q(ene)e(auc)o(h)g(wirklic)o(h)f(b)q(\177)-26
+b(undig)17 b(ausgege-)0 418 y(b)q(en.)k(Bei)h Fg(\\rtab)g
+Fl(k\177)-25 b(onn)o(te)21 b(man)f(sic)o(h)h(zum)f(Beispiel)h(dadurc)o
+(h)e(helfen,)i(da\031)g(man)g(in)g(der)f(Spalte)0 488
+y(da)o(v)o(or)f(den)g(gew)q(\177)-26 b(unsc)o(h)o(ten)19
+b(Ausdruc)o(k)f(eingibt)i(und)f(ihn)g(mittels)h Fg(\\phantom)h
+Fl(so)f(w)o(eit)g(v)o(ersc)o(hiebt)0 558 y(wie)d(erforderlic)o(h,)e
+(also:)h Fg(\\phantom)p Ff(f)p Fe(:)8 b(:)g(:)i Ff(g)p
+Fg(\\breiter)p Ff(f)p Fe(:)e(:)g(:)h Ff(g)p Fl(.)17 b(Das)g(nac)o(h)f
+Fg(\\breiter)i Fl(F)l(olgende)e(wird)0 628 y(automatisc)o(h)j(im)h
+(Mathematikmo)q(dus)e(und)i(displa)o(yst)o(yle)e(gesetzt.)j(Will)f(man)
+g(T)l(ext)h(sc)o(hreib)q(en,)-99 697 y Fi(10)59 b Fl(der)16
+b(sic)o(h)h(\177)-26 b(ub)q(er)15 b(mehrere)h(Spalten)g(erstrec)o(kt,)g
+(so)g(v)o(erw)o(endet)g(man)f Fg(\\breitertext)p Fl(.)100
+767 y(F)q(\177)-26 b(ur)20 b(die)g(T)l(ab)q(ellenmacros)g
+Fg(\\rtab)p Fl(,)i Fg(\\ltab)g Fl(und)e Fg(\\ztab)i Fl(gibt)f(es)g(die)
+g(Macros)f Fg(\\davor)i Fl(und)0 837 y Fg(\\danach)p
+Fl(,)15 b Fj(um)f(links)j(v)n(or)f(dem)e(Beginn)i(der)f(T)-5
+b(ab)r(elle)18 b(bzw.)e(rec)n(h)n(ts)g(nac)n(h)g(dem)f(Ende)g(der)0
+907 y(T)-5 b(ab)r(elle)19 b(sc)n(hreib)r(en)f(zu)g(k\177)-29
+b(onnen)p Fl(.)14 b(In)h(dem)f(folgenden)h(Beispiel)f(m\177)-25
+b(oc)o(h)o(te)14 b(man)g(v)o(or)h(der)f(T)l(ab)q(elle)0
+976 y("Sit")j(und)f(nac)o(h)g(der)g(T)l(ab)q(elle)h("Erit")g(sc)o
+(hreib)q(en.)e(Da)i(die)g(ric)o(h)o(tige)f(P)o(osition)g(v)o(on)g
+("Sit")h(v)o(on)g(der)-99 1046 y Fi(15)59 b Fl(Breite)18
+b(des)f(ersten)g(T)l(ab)q(ellenelemen)o(ts)f(\(und)h(die)h(ric)o(h)o
+(tige)e(P)o(osition)g(v)o(on)h("Erit")g(v)o(on)h(der)f(Breite)0
+1116 y(des)j(letzten)h(T)l(ab)q(ellenelemen)o(ts\))f(abh\177)-25
+b(angt,)19 b(m)q(\177)-26 b(ussen)19 b(diese)h(T)l(ab)q(ellenelemen)o
+(te)g(mitgeklammert)0 1186 y(w)o(erden.)15 b(Die)i(Eingab)q(e)100
+1255 y Fg(\\lineskip=5pt)100 1325 y(\\pstart)-99 1395
+y Fi(20)159 b Fg(\\abstand=10pt)100 1465 y(\\rtab)100
+1534 y Ff(f)p Fg(\\davor)p Ff(f)p Fg(Sit)p Ff(gf)p Fg(A)p
+Ff(g)p Fg(&)27 b(=)f(&)h(1\\over1)g(&)f(+)g(&)h(1\\over2)g(&)f(+)h(&)f
+(1\\over3)h(!)426 1604 y(B)f(&)g(=)h(&)f(1\\over1)h(&)f(+)h(&)f
+(1\\over3)h(&)f(+)h(&)f(1\\over6)h(!)426 1674 y(C)f(&)g(=)h(&)f
+(1\\over1)h(&)f(+)h(&)f(1\\over4)h(&)f(+)h(&)f(1\\over10)h(!)-99
+1743 y Fi(25)485 b Fg(D)26 b(&)g(=)h(&)f(1\\over1)h(&)f(+)h(&)f
+(1\\over5)h(&)f(+)h(&)1092 1813 y(\\danach)p Ff(ff)p
+Fg(1\\over15)p Ff(ggf)p Fg(Erit)p Ff(gg)0 1883 y Fl(ergibt:)624
+1983 y Fe(A)-661 b Fl(Sit)650 b(=)805 1950 y(1)p 805
+1972 25 2 v 805 2018 a(1)886 1983 y(+)980 1950 y(1)p
+980 1972 V 980 2018 a(2)1061 1983 y(+)1181 1950 y(1)p
+1181 1972 V 1181 2018 a(3)621 2108 y Fe(B)52 b Fl(=)805
+2075 y(1)p 805 2097 V 805 2142 a(1)886 2108 y(+)980 2075
+y(1)p 980 2097 V 980 2142 a(3)1061 2108 y(+)1181 2075
+y(1)p 1181 2097 V 1181 2142 a(6)-99 2233 y Fi(30)681
+b Fe(C)53 b Fl(=)805 2199 y(1)p 805 2222 V 805 2267 a(1)886
+2233 y(+)980 2199 y(1)p 980 2222 V 980 2267 a(4)1061
+2233 y(+)1168 2199 y(1)p 1156 2222 50 2 v 1156 2267 a(10)618
+2358 y Fe(D)f Fl(=)805 2324 y(1)p 805 2347 25 2 v 805
+2392 a(1)886 2358 y(+)980 2324 y(1)p 980 2347 V 980 2392
+a(5)1061 2358 y(+)1168 2324 y(1)p 1156 2347 50 2 v 1156
+2392 a(15)1826 2358 y(Erit)p eop
+%%Page: 5 5
+5 4 bop 861 -70 a Fl(|)16 b(5)h(|)737 70 y Fh(T)-5 b(ab)m(el)s(len)23
+b(im)e(T)-5 b(ext)100 199 y Fl(Die)24 b(bisher)e(erl\177)-25
+b(auterten)24 b(T)l(ab)q(ellen)o(b)q(efehle)f Fg(\\rtab,\\ltab,)28
+b(\\ztab)d Fl(so)o(wie)e(das)h(sp\177)-25 b(ater)23 b(zu)0
+269 y(er\177)-25 b(orternde)12 b Fg(\\atab)i Fl(sind)e(auf)h(den)g
+(Gebrauc)o(h)e(f)q(\177)-26 b(ur)13 b(Mathematik)g(zugesc)o(hnitten:)f
+(Sie)h(sorgen)f(daf)q(\177)-26 b(ur,)0 339 y(da\031)16
+b(alle)g(T)l(ab)q(ellenelemen)o(te)g(automatisc)o(h)f(im)h(displa)o
+(yst)o(yle)f(ersc)o(heinen.)100 408 y(Gelegen)o(tlic)o(h)20
+b(brauc)o(h)o(t)f(man)i(ab)q(er)g(auc)o(h)f(im)h(nic)o(h)o
+(t{mathematisc)o(hen)d(T)l(ext)k(eine)f(T)l(ab)q(elle.)79
+b Fi(5)0 478 y Fl(Daf)q(\177)-26 b(ur)18 b(stehen)g(die)g(Macros)f
+Fg(\\ltabtext)j Fl(und)d Fg(\\rtabtext)j Fl(zusammen)d(mit)h
+Fg(\\abstand)i Fl(zur)d(V)l(er-)0 548 y(f)q(\177)-26
+b(ugung.)18 b(Sie)h(sind)g(in)g(jeder)g(Hinsic)o(h)o(t)f(den)h(Macros)f
+Fg(\\ltab)i Fl(und)f Fg(\\rtab)h Fl(v\177)-25 b(ollig)19
+b(gleic)o(h,)f(mit)i(dem)0 618 y(einzigen)h(Un)o(tersc)o(hied,)f
+(da\031)i(die)g(T)l(ab)q(ellenelemen)o(te)e(nic)o(h)o(t)h(automatisc)o
+(h)g(im)g(Mathematikmo-)0 687 y(dus)c(stehen.)h(Will)g(man)g(\177)-26
+b(ub)q(er)17 b(die)h(Spalten)o(breite)f(hinaus)g(sc)o(hreib)q(en,)f(so)
+i(gesc)o(hieh)o(t)f(dies)g(mittels)0 757 y Fg(\\breitertext)h
+Fl(\(vgl.)f(S.)f(3\))1426 b Fi(10)554 887 y Fh(T)-5 b(ab)m(el)s(len)23
+b(im)e(kritischen)i(App)m(ar)m(at)100 1016 y Fl(Die)14
+b(T)l(ab)q(ellenmacros)f(sind)h(auc)o(h)g(im)g(kritisc)o(hen)g(Apparat)
+g(v)o(erw)o(endbar,)e Fj(sofern)k(man)f(Ed-)0 1086 y(mac)k(2.3)f(v)n
+(erw)n(endet.)j(Bei)g(V)-5 b(erw)n(endung)20 b(v)n(on)f(Edmac)f(3.16)h
+(k\177)-29 b(onnen)19 b(Probleme)g(auf-)0 1156 y(treten,)g(die)i(bis)e
+(jetzt)h(no)r(c)n(h)f(nic)n(h)n(t)i(un)n(tersuc)n(h)n(t)f(w)n(orden)f
+(sind.)100 1225 y Fl(Man)12 b(m)o(u\031)f(im)h(fo)q(otnote-F)l(ormat)g
+(\(also)h(in)f Fg(\\Afootfmt)p Fl(,)i Fg(\\Bfootfmt)g
+Fl(bzw.)f(in)f Fg(\\parafootfmt)62 b Fi(15)0 1295 y Fl(usw.\))27
+b Fg(\\def\\variab)p Ff(f)p Fg(\\hfill\\penalty-9)q(999)p
+Ff(g)j Fl(hinzuf)q(\177)-26 b(ugen.)25 b(Nac)o(h)i(dem)g(Bezugsw)o(ort)
+f(wird)0 1365 y(dann)16 b(mit)g(der)g(T)l(ab)q(elle)g(in)g(einer)g
+(neuen)g(Zeile)h(b)q(egonnen.)346 1554 y Fh(Klammern,)22
+b(Striche)g(und)f(P)q(\177)-31 b(unktchen)20 b(in)h(T)-5
+b(ab)m(el)s(len)100 1684 y Fl(Das)12 b(F)l(olgende)g(b)q(ezieh)o(t)h
+(sic)o(h)e(auf)i Fg(\\rtab)p Fl(,)h Fg(\\ltab)f Fl(und)f
+Fg(\\ztab)i Fl(so)o(wie)e Fg(\\rtabtext)i Fl(und)e Fg(\\ltab-)0
+1753 y(text)p Fl(.)1855 b Fi(20)100 1823 y Fj(W)-5 b(aagerec)n(h)n(te)
+18 b(Stric)n(he:)e Fl(Daf)q(\177)-26 b(ur)14 b(k)m(ann)h(man)f(das)g
+(Macro)g Fg(\\wastrich)i Fl(b)q(en)o(utzen.)e(Ein)g(w)o(aa-)0
+1893 y(gerec)o(h)o(ter)h(Stric)o(h,)g(der)g(die)h(erste)g(und)f(zw)o
+(eite)i(Spalte)e(umfassen)g(soll,)g(wird)g(in)h(der)g(ersten)f(Spalte)0
+1963 y(eingegeb)q(en,)i(und)g(zw)o(ar)g(gibt)g(man)g(die)h(Nummern)e
+(der)h(Spalten)g(mit)g(einem)g(bac)o(kslash)f(ein)i(und)0
+2032 y(setzt)25 b(danac)o(h)d(einen)i Ff(j)p Fl(.)f(Die)h(Eingab)q(e)g
+(ist)f(also)h Fg(\\wastrich\\eins\\zwei)p Ff(j)p Fl(.)i(Ein)d(Beispiel)
+h(wird)0 2102 y(zusammen)15 b(mit)h(den)g(w)o(aagerec)o(h)o(ten)f
+(Klammern)g(angegeb)q(en.)751 b Fi(25)100 2172 y Fl(F)l(alls)13
+b(man)h(direkt)h(in)f(Zahlen)h(angeb)q(en)f(m\177)-25
+b(oc)o(h)o(te,)14 b(wie)h(lang)f(der)g(Stric)o(h)g(sein)g(soll,)g(so)g
+(sc)o(hreibt)0 2242 y(man)i Fg(\\klamdimen=45pt\\wastrich\\k)q(lamdim)q
+(en)p Ff(j)j Fl(und)d(erh\177)-25 b(alt)16 b(einen)g(Stric)o(h)f(v)o
+(on)i(45)f(pt.)100 2311 y Fj(W)-5 b(aagerec)n(h)n(te)22
+b(Klammern:)16 b Fl(Eine)h(nac)o(h)g(ob)q(en)h(o\013ene)g(Klammer)e
+(erh\177)-25 b(alt)17 b(man)h(mit)f Fg(\\wa-)0 2381 y(klam)p
+Fl(,)d(eine)g(nac)o(h)f(un)o(ten)h(o\013ene)f(Klammer)g(mit)g
+Fg(\\Waklam)p Fl(.)i(Eine)f(w)o(aagerec)o(h)o(te)f(Klammer,)f(die)h(v)o
+(on)0 2451 y(der)20 b(vierten)g(bis)f(zur)h(sec)o(hsten)f(Spalte)h
+(reic)o(hen)f(soll,)g(wird)g(in)h(der)f(vierten)i(Spalte)e(eingegeb)q
+(en,)60 b Fi(30)p eop
+%%Page: 6 6
+6 5 bop 861 -70 a Fl(|)16 b(6)h(|)0 70 y(und)e(zw)o(ar)f(gibt)i(man)e
+(die)h(Nummern)f(der)h(Spalten)g(mit)g(einem)g(Bac)o(kslash)f(ein)i
+(und)e(setzt)i(danac)o(h)0 139 y(einen)e Ff(j)p Fl(.)h(Die)g(Eingab)q
+(e)g(ist)f(also:)h Fg(\\waklam\\vier\\fuenf\\sechs)p
+Ff(j)p Fl(.)j(\(Man)d(b)q(eac)o(h)o(te,)f(da\031)h(man)f(hier)0
+209 y("fuenf")j(statt)h("f)q(\177)-26 b(unf")17 b(sc)o(hreib)q(en)f(m)o
+(u\031:)f(Ein)i(Umlaut)g(ist)g(n\177)-25 b(amlic)o(h)16
+b(ein)h(v)o(erk)m(appter)f(T)1681 220 y(E)1709 209 y(X-Befehl,)0
+279 y(deshalb)21 b(k)m(ann)i(im)f(T)419 290 y(E)447 279
+y(X-Befehl)h Fg(\\fuenf)g Fl(k)o(ein)g(Umlaut)f(und)g(damit)g(ein)h
+(anderer)e(T)1695 290 y(E)1723 279 y(X-Befehl)-80 349
+y Fi(5)60 b Fl(v)o(ork)o(ommen\).)100 418 y(Die)19 b(w)o(aagerec)o(h)o
+(ten)f(Klammern)f(m)q(\177)-26 b(ussen)18 b(eine)h(gewisse)g
+(Mindestl\177)-25 b(ange)18 b(hab)q(en,)g(sonst)h(mi\031-)0
+488 y(gl)q(\177)-26 b(uc)o(k)o(en)14 b(sie.)i(Sollte)f(eine)g(Spalte)h
+(nic)o(h)o(t)e(breit)h(gen)o(ug)g(sein)g(\(w)o(eil)g(sie)g(et)o(w)o(a)g
+(n)o(ur)g(einen)g(Buc)o(hstab)q(en)0 558 y(breit)h(ist\),)h(so)f(k)m
+(ann)h(man)f(einfac)o(h)g(ein)g(o)q(der)g(zw)o(ei)h(gesc)o(h)q(\177)-26
+b(utzte)16 b(Spatien)g(eingeb)q(en,)h(um)f(die)g(erfor-)0
+628 y(derlic)o(he)f(Mindestbreite)g(der)h(Spalte)h(zu)f(b)q(ek)o
+(ommen.)-99 697 y Fi(10)159 b Fl(F)l(alls)22 b(man)h(direkt)h(in)f
+(Zahlen)h(angeb)q(en)f(m\177)-25 b(oc)o(h)o(te,)23 b(wie)h(lang)f(die)h
+(Klammer)e(sein)h(soll,)g(so)0 767 y(sc)o(hreibt)d(man)h
+Fg(\\klamdimen=30pt\\waklam\\kla)q(mdimen)p Ff(j)k Fl(und)20
+b(erh\177)-25 b(alt)21 b(eine)g(Klammer)f(v)o(on)h(30)0
+837 y(pt.)100 907 y(Nun)16 b(ein)g(Beispiel.)g(Die)h(Eingab)q(e)100
+976 y Fg(\\rtab)p Ff(f)p Fg(\\wastrich\\eins\\zwei)p
+Ff(j)29 b Fg(&)d(&)h(fd)f(&)h(h)f(&)g(qwertzuiohg)i(!)-99
+1046 y Fi(15)159 b Fg(v)26 b(&)g(wpotzug)h(&)g(x)f(&)g(y)h(&)f(vb)g(!)
+100 1116 y(g)g(&)g(nnnn)h(&)f(\\waklam\\drei\\vier\\fuen)q(f)p
+Ff(j)j Fg(&)d(&)g(!)100 1186 y(\\Waklam\\eins\\zwei\\drei)p
+Ff(j)j Fg(&)d(&)h(&)f(pq)g(&)h(dgh)f(!)100 1255 y(k)g(&)g(&)h(l)f(&)g
+(co)h(&)f(ghweropjklmnbvcxys)j Ff(g)100 1325 y Fl(ergibt)-99
+1395 y Fi(20)p 420 1395 261 2 v 790 w Fe(f)5 b(d)71 b(h)248
+b(q)r(w)q(er)q(tz)r(uiohg)422 1465 y(v)51 b(w)q(potz)r(ug)79
+b(x)73 b(y)480 b(v)r(b)422 1534 y(g)115 b(nnnn)50 b Fd(|)p
+753 1534 295 6 v 295 w({z)p 1092 1534 V 295 w(})420 1604
+y(z)p 442 1604 139 6 v 139 w(}|)p 625 1604 V 139 w({)g
+Fe(pq)447 b(dg)r(h)420 1674 y(k)325 b(l)54 b(co)49 b(g)r(hw)q(er)q(opj)
+s(k)r(l)q(mnbv)r(cxy)r(s)-99 1743 y Fi(25)159 b Fj(W)-5
+b(aagerec)n(h)n(te)24 b(P)r(\177)-30 b(unktc)n(hen:)21
+b Fl(Man)e(b)q(en)o(utzt)h(das)g(Macro)f Fg(\\wapunkte)p
+Fl(.)i(Die)f(Eingab)q(e)g(ist)0 1813 y(eb)q(enso)11 b(wie)h(b)q(ei)g
+(den)f(w)o(aagerec)o(h)o(ten)f(Stric)o(hen)g(und)h(Klammern.)f(W)l(enn)
+h(die)g(w)o(aagerec)o(h)o(ten)f(P)q(\177)-26 b(unkt-)0
+1883 y(c)o(hen)19 b(die)h(erste)f(und)g(zw)o(eite)h(Spalte)g(umfassen)e
+(sollen,)h(wird)f(das)h(Macro)g(in)h(der)f(ersten)g(Spalte)0
+1953 y(eingegeb)q(en,)e(und)f(zw)o(ar)g(gibt)h(man)f(die)h(Nummern)f
+(der)g(Spalten)h(mit)f(einem)h(Bac)o(kslash)f(ein)h(und)0
+2022 y(setzt)f(danac)o(h)d(einen)i Ff(j)p Fl(.)g(Die)g(Eingab)q(e)f
+(ist)h(also)f Fg(\\wapunkte\\eins\\zwei)p Ff(j)p Fl(.)k(Ein)c
+(Beispiel:)h(Die)g(Ein-)-99 2092 y Fi(30)59 b Fl(gab)q(e)p
+eop
+%%Page: 7 7
+7 6 bop 861 -70 a Fl(|)16 b(7)h(|)100 70 y Fg(\\rtab)p
+Ff(f)26 b Fg(a)h(&)f(b)g(&)h(C)f(&)g(d)h(&)f(!)0 139
+y(\\wapunkte\\eins\\zwei)p Ff(j)j Fg(&)d(&)g(&)h(y)f(&)g(!)0
+209 y(m)g(&)h(n)f(&)g(o)h(&)f(p)g(&)g(!)0 279 y(k)g(&)h(&)f(l)g(&)h
+(cvb)f(&)g Ff(g)1992 349 y Fi(5)100 418 y Fl(ergibt)742
+488 y Fe(a)59 b(b)50 b(C)96 b(d)735 558 y(:)8 b(:)g(:)g(:)g(:)192
+b(y)724 628 y(m)50 b(n)65 b(o)93 b(p)741 697 y(k)154
+b(l)51 b(cv)r(b)917 b Fi(10)100 767 y Fl(F)l(alls)21
+b(man)h(direkt)h(in)f(Zahlen)h(angeb)q(en)f(m\177)-25
+b(oc)o(h)o(te,)22 b(wie)h(lang)f(die)h(P)q(\177)-26 b(unktc)o(hen)22
+b(sein)g(sollen,)0 837 y(so)e(sc)o(hreibt)e(man)h Fg
+(\\klamdimen=20pt\\wapunk)q(te\\klam)q(dimen)p Ff(j)k
+Fl(und)c(erh\177)-25 b(alt)20 b(Punkte)g(auf)g(einer)0
+907 y(L\177)-25 b(ange)16 b(v)o(on)g(20)h(pt.)100 976
+y Fj(Senkrec)n(h)n(te)g(Stric)n(he:)e Fl(Der)e(Befehl)h
+Fg(\\sestrich)h Fl(erlaubt)d(es,)h(in)g(T)l(ab)q(ellen)g(senkrec)o(h)o
+(te)g(Stri-)0 1046 y(c)o(he)i(zu)g(ziehen.)f(Man)h(gibt)g
+Fg(\\sestrich)h Fl(dort)f(ein,)g(w)o(o)f(der)h(Stric)o(h)f(sein)h(un)o
+(teres)f(Ende)g(hab)q(en)h(soll.)59 b Fi(15)0 1116 y
+Fl(Die)17 b(Eingab)q(e)f Fg(\\sestrich)p Ff(f)p Fg(45)p
+Ff(g)i Fl(erzeugt)e(dann)g(einen)g(senkrec)o(h)o(ten)f(Stric)o(h)g(v)o
+(on)i(45)f(pt)h(H\177)-25 b(ohe.)100 1186 y Fj(Senkrec)n(h)n(te)18
+b(Klammern:)13 b Fg(\\seklam)j Fl(ergibt)e(eine)g(nac)o(h)g(links)g
+(o\013ene)h(Klammer,)e Fg(\\Seklam)0 1255 y Fl(ergibt)22
+b(eine)h(nac)o(h)e(rec)o(h)o(ts)h(o\013ene)g(Klammer.)f(Hin)o(ter)h
+(dem)g(Macro)g(gibt)g(man)g(in)g(gesc)o(h)o(w)o(eiften)0
+1325 y(Klammern)c(die)i(H\177)-25 b(ohe)20 b(der)f(\(Halb-\)Klammer)g
+(in)g(Punkten)h(ein.)g(Man)f(gibt)h(das)f(Macro)g(immer)0
+1395 y(in)e(der)g(Zeile)i(ein,)e(in)g(der)g(die)h(senkrec)o(h)o(te)f
+(Klammer)f(enden)h(soll)g(\(also)g(in)g(der)h(un)o(tersten)e(Zeile\).)
+61 b Fi(20)0 1465 y Fl(Beispiel:)16 b(Die)g(Eingab)q(e)100
+1534 y Fg(\\rtab)p Ff(f)26 b Fg(a)h(&)f(b)g(&)h(C)f(&)g(d)h(&)f(!)100
+1604 y(v)g(&)g(w)h(&)f(x)g(&)g(y)h(&)f(!)100 1674 y(m)g(&)g(n)h(&)f(o)g
+(&)g(p)h(&)f(!)100 1743 y(k)g(&)g(&)h(l)f(&)g(cvb)h(&)f(\\seklam)p
+Ff(f)p Fg(21)p Ff(gg)1146 b Fi(25)100 1813 y Fl(ergibt)713
+1963 y Fe(a)66 b(b)50 b(C)96 b(d)714 2032 y(v)51 b(w)62
+b(x)93 b(y)696 2102 y(m)56 b(n)65 b(o)94 b(p)712 2172
+y(k)161 b(l)51 b(cv)r(b)1090 1993 y Fd(9)1090 2037 y(=)1090
+2127 y(;)1973 2172 y Fi(30)100 2242 y Fl(W)l(enn)21 b(man)g(einen)h
+(senkrec)o(h)o(ten)f(Stric)o(h)g(und)g(eine)h(senkrec)o(h)o(te)f
+(Klammer)f(eingeb)q(en)i(will,)0 2311 y(die)e(gleic)o(h)g(ho)q(c)o(h)g
+(sind,)f(so)h(m)o(u\031)f(man)g(v)o(ersc)o(hiedene)g(Zahlen)o(w)o(erte)
+g(v)o(erw)o(enden)g(\(der)i(W)l(ert)f(hin-)0 2381 y(ter)h
+Fg(\\seklam)h Fl(gibt)e(n\177)-25 b(amlic)o(h)19 b(n)o(ur)g(ungef\177)
+-25 b(ahr)20 b(die)g(H\177)-25 b(ohe)21 b(der)f(Halb-Klammer)f(an\).)h
+(Genauer)g(ge-)0 2451 y(sagt:)h Fg(\\sestrich)p Ff(f)p
+Fg(36)p Ff(g)h Fl(und)e Fg(\\seklam)p Ff(f)p Fg(21)p
+Ff(g)i Fl(sind)e(gleic)o(h)g(ho)q(c)o(h,)h(eb)q(enso)f
+Fg(\\sestrich)p Ff(f)p Fg(48)p Ff(g)j Fl(und)p eop
+%%Page: 8 8
+8 7 bop 861 -70 a Fl(|)16 b(8)h(|)0 70 y Fg(\\seklam)p
+Ff(f)p Fg(28)p Ff(g)p Fl(.)100 139 y(Manc)o(hmal)h(m\177)-25
+b(oc)o(h)o(te)18 b(man)i(neb)q(en)f(die)h(senkrec)o(h)o(te)f(Klammer)f
+(no)q(c)o(h)h(et)o(w)o(as)g(sc)o(hreib)q(en,)g(w)o(as)0
+209 y(genau)f(in)g(der)g(ric)o(h)o(tigen)f(H\177)-25
+b(ohe)19 b(stehen)g(soll.)e(W)l(enn)i(die)f(senkrec)o(h)o(te)g(Klammer)
+f(ab)q(er)i(\177)-26 b(ub)q(er)18 b(vier,)0 279 y(sec)o(hs,)c(ac)o(h)o
+(t)h(o)q(der)g(zehn)g(Zeilen)h(geh)o(t,)f(dann)f(ist)h(die)g(ric)o(h)o
+(tige)f(H\177)-25 b(ohe)16 b(zwisc)o(hen)e(den)h(regul\177)-25
+b(aren)14 b(Zei-)-80 349 y Fi(5)60 b Fl(len.)19 b(F)q(\177)-26
+b(ur)18 b(diesen)h(Zw)o(ec)o(k)h(k)m(ann)f(man)g(mit)g(den)g(Macros)g
+Fg(\\seklamgl)i Fl(und)d Fg(\\Seklamgl)j Fl(arb)q(eiten.)0
+418 y(Man)13 b(gibt)h(hin)o(ter)e Fg(\\seklamgl)j Fl(\(in)f(gesc)o(h)o
+(w)o(eiften)e(Klammern\))g(die)i(H\177)-25 b(ohe)13 b(der)h(Klammer)d
+(in)j(Punk-)0 488 y(ten)20 b(an,)g(danac)o(h)f(in)h(w)o(eiteren)g(gesc)
+o(h)o(w)o(eiften)f(Klammern)f(den)h(w)o(eiteren)h(T)l(ext.)h(Bei)f
+Fg(\\Seklamgl)0 558 y Fl(ist)i(die)f(Reihenfolge)g(anders:)f(Man)h
+(gibt)h(zuerst)f(in)g(gesc)o(h)o(w)o(eiften)g(Klammern)e(an,)i(w)o(as)g
+(neb)q(en)0 628 y(der)c(Klammerspitze)g(stehen)g(soll,)h(danac)o(h)e
+(in)i(w)o(eiteren)f(gesc)o(h)o(w)o(eiften)g(Klammern)f(die)i(H\177)-25
+b(ohe)18 b(in)-99 697 y Fi(10)59 b Fl(Punkten.)16 b(Beispiel:)g(Die)h
+(Eingab)q(e)100 767 y Fg(\\rtab)p Ff(f)26 b Fg(a)h(&)f(b)g(&)h(C)f(&)g
+(d)h(&)f(!)100 837 y(v)g(&)g(w)h(&)f(x)g(&)g(y)h(&)f(!)100
+907 y(m)g(&)g(n)h(&)f(o)g(&)g(p)h(&)f(!)100 976 y(k)g(&)g(&)h(l)f(&)g
+(cvb)h(&)f(\\seklamgl)p Ff(f)p Fg(29)p Ff(gf)p Fl(=)15
+b Ff(f)p Fl(1)p Fg(\\over3)p Ff(ggg)-99 1046 y Fi(15)159
+b Fl(ergibt)639 1116 y Fe(a)66 b(b)50 b(C)96 b(d)640
+1186 y(v)51 b(w)62 b(x)93 b(y)622 1255 y(m)56 b(n)65
+b(o)94 b(p)638 1325 y(k)161 b(l)51 b(cv)r(b)1016 1086
+y Fd(9)1016 1131 y(>)1016 1146 y(>)1016 1161 y(=)1016
+1250 y(>)1016 1265 y(>)1016 1280 y(;)1074 1218 y Fl(=)1132
+1198 y Fi(1)p 1132 1206 20 2 v 1132 1235 a(3)-99 1395
+y(20)159 b Fl(Da)16 b(der)g(Bruc)o(h)418 1375 y Fi(1)p
+418 1383 V 418 1412 a(3)461 1395 y Fl(in)g(der)f(letzten)j(Zeile)e
+(eingegeb)q(en)g(wurde,)g(steh)o(t)g(er)g(f)q(\177)-26
+b(ur)16 b(T)1591 1405 y(E)1618 1395 y(X)h(in)f(Zeile)h(19.)0
+1465 y(Normalerw)o(eise)f(ist)h(das)g(egal,)g(ab)q(er)g(w)o(enn)g(man)f
+(eine)h(Erl\177)-25 b(auterung)16 b(dazu)h(mac)o(hen)f(will,)h(so)g(m)o
+(u\031)0 1534 y(man)h(mit)g Fg(\\label)h Fl(und)e Fg(\\linenum)j
+Fl(arb)q(eiten,)e(um)g(die)g(ric)o(h)o(tige)f(Zeilenn)o(ummer)f(zu)i(b)
+q(ek)o(ommen.)0 1604 y(Man)c(gibt)g(in)h(der)f(Zeile,)h(in)f(der)g(die)
+g(senkrec)o(h)o(te)g(Klammer)f(b)q(eginn)o(t,)h(ein)g(lab)q(el)h(ein.)f
+(Beispiel:)g(Die)0 1674 y(Eingab)q(e:)-99 1743 y Fi(25)159
+b Fg(\\rtab)p Ff(f)26 b Fg(ga)h(&b)f(&)h(C)f(&)g(d)h(&)f(\\label)p
+Ff(f)p Fg(etwas)p Ff(g)i Fg(!)100 1813 y(v)e(&w)g(&)h(x)f(&)g(y)h(&)f
+(!)100 1883 y(m)g(&)g(n)h(&)f(o)g(&)g(p)h(&)f(!)100 1953
+y(k)g(&)g(&)h(l)f(&)g(cvb)h(&)f(\\seklamgl)p Ff(f)p Fg(29)p
+Ff(gf)p Fg(=)100 2022 y(\\text)p Ff(ff)p Fg(1\\over3)p
+Ff(gg)p Fg(\\linenum)p Ff(f)p Fg(\\xpageref)q Ff(f)p
+Fg(etwas)p Ff(gj)p Fg(\\xli)q(neref)p Ff(f)p Fg(et)q(was)p
+Ff(gjjjjg)-99 2092 y Fi(30)159 b Fg(\\lemma)p Ff(f)p
+Fg($1\\over3$)p Ff(g)p Fg(\\dfootnote)p Ff(f)p Fg(Erl)q(\177)-26
+b(auteru)q(ng)p Ff(g)p Fg(/)p Ff(g)100 2222 y Fl(ergibt)p
+eop
+%%Page: 9 9
+9 8 bop 861 -70 a Fl(|)16 b(9)h(|)643 70 y Fe(g)r(a)65
+b(b)50 b(C)96 b(d)669 139 y(v)51 b(w)62 b(x)93 b(y)651
+209 y(m)56 b(n)65 b(o)94 b(p)667 279 y(k)161 b(l)51 b(cv)r(b)1045
+40 y Fd(9)1045 85 y(>)1045 100 y(>)1045 115 y(=)1045
+204 y(>)1045 219 y(>)1045 234 y(;)1103 172 y Fl(=)1161
+152 y Fi(1)p 1161 160 20 2 v 1161 189 a(3)100 349 y Fj(Senkrec)n(h)n
+(te)18 b(P)r(\177)-30 b(unktc)n(hen:)14 b Fl(Mit)h(dem)e(Macro)h
+Fg(\\sepunkte)i Fl(k)m(ann)e(man)f(senkrec)o(h)o(te)h(Punkte)79
+b Fi(5)0 418 y Fl(erzeugen.)17 b(Man)h(gibt)g(hin)o(ter)f(dem)g(Befehl)
+i(an,)e(wie)h(ho)q(c)o(h)g(die)g(senkrec)o(h)o(ten)e(Punkte)j(sein)e
+(sollen.)0 488 y(Beispiel:)f(Durc)o(h)f(die)h(Eingab)q(e)100
+558 y Fg(\\rtab)p Ff(f)26 b Fg(a)h(&)f(b)g(&)h(C)f(&)g(d)h(&)f(!)100
+628 y(v)g(&)g(w)h(&)f(x)g(&)g(y)h(&)f(!)100 697 y(m)g(&)g(n)h(&)f(o)g
+(&)g(p)h(&)f(!)1429 b Fi(10)100 767 y Fg(k)26 b(&)g(&)h(l)f(&)g(cvb)h
+(&)f(\\sepunkte)p Ff(f)p Fg(50)p Ff(gg)0 837 y Fl(erh\177)-25
+b(alt)16 b(man)g(eine)g(Linie)g(senkrec)o(h)o(ter)f(Punkte,)i(die)f
+(insgesam)o(t)f(50pt)i(ho)q(c)o(h)f(ist:)731 907 y Fe(a)66
+b(b)50 b(C)96 b(d)732 976 y(v)52 b(w)61 b(x)93 b(y)714
+1046 y(m)57 b(n)64 b(o)94 b(p)921 b Fi(15)730 1116 y
+Fe(k)162 b(l)50 b(cv)r(b)1102 892 y Fl(.)1102 917 y(.)1102
+941 y(.)1102 966 y(.)1102 991 y(.)1102 1016 y(.)1102
+1041 y(.)1102 1066 y(.)1102 1091 y(.)1102 1116 y(.)100
+1186 y Fj(Ec)n(kige)23 b(Klammern:)18 b Fl(Mit)h Fg(\\waklamec)h
+Fl(k)m(ann)g(man)e(eine)h(ec)o(kige)h(w)o(aagerec)o(h)o(te)e(Klammer)0
+1255 y(erzeugen.)13 b(Die)g(Eingab)q(e)g(ist)g(genau)g(wie)g(die)g
+(Eingab)q(e)g(v)o(on)g Fg(\\waklam)i Fl(o)q(der)e(v)o(on)g
+Fg(\\wastrich)p Fl(.)h(Setzt)0 1325 y(man)e(eine)h(solc)o(he)e(Klammer)
+g(in)i(einer)f(T)l(ab)q(elle,)g(so)h(ersc)o(hein)o(t)e(sie)i(in)f(der)g
+(Mitte)h(der)g(Zeile.)g(Beispiel:)0 1395 y(Die)k(Eingab)q(e)1705
+b Fi(20)100 1465 y Fg(\\rtab)p Ff(f)26 b Fg(axcvgh)i(&)e(brtzj)h(&)f(c)
+g(!)100 1534 y(\\waklamec\\eins\\zwei)p Ff(j)i Fg(&)f(&)f(g)g(!)100
+1604 y(f)g(&)g(t)h(&)f(zu)g Ff(g)100 1674 y Fl(ergibt)704
+1743 y Fe(axcv)r(g)r(h)49 b(br)q(tz)r(j)86 b(c)847 b
+Fi(25)p 704 1813 2 20 v 706 1813 315 2 v 1021 1813 2
+20 v 1100 1813 a Fe(g)831 1883 y(f)149 b(t)50 b(z)r(u)100
+1953 y Fl(W)l(enn)14 b(man)g(eine)h(w)o(aagerec)o(h)o(te)f(ec)o(kige)h
+(Klammer)e(will,)i(die)f(et)o(w)o(as)h(tiefer)g(als)f(die)h(Zeile)h
+(sitzt,)0 2022 y(so)g(v)o(erw)o(endet)g(man)g Fg(\\waklamect)p
+Fl(.)i(Beispiel:)d(Die)i(Eingab)q(e)100 2092 y Fg(\\lineskip=5pt)1535
+b Fi(30)100 2162 y Fg(\\lineskiplimit=2pt)100 2232 y(\\pstart)100
+2301 y(\\rtab)p Ff(f)26 b Fg(\\waklamect\\eins\\zwei)p
+Ff(j)j Fg(axcvgh)f(&)e(brtzj)h(&)f(c)g(!)p 0 2372 1913
+2 v 0 2451 a Fc(1{4)91 2435 y Fb(1)p 91 2442 19 2 v 91
+2466 a(3)115 2451 y Fc(:)14 b(Erl\177)-21 b(auterung)p
+eop
+%%Page: 10 10
+10 9 bop 848 -70 a Fl(|)17 b(10)f(|)100 70 y Fg(rfklo)27
+b(&)f(ftz)g(&)h(g)f(!)100 139 y(f)g(&)g(t)h(&)f(zu)g
+Ff(g)100 209 y Fl(erzeugt)p 704 309 2 20 v 706 309 315
+2 v 1021 309 2 20 v 704 279 a Fe(axcv)r(g)r(h)49 b(br)q(tz)r(j)86
+b(c)-80 368 y Fi(5)799 b Fe(r)q(f)5 b(k)r(l)q(o)90 b(f)5
+b(tz)81 b(g)831 438 y(f)149 b(t)50 b(z)r(u)100 508 y
+Fl(Statt)13 b(die)g(L\177)-25 b(ange)12 b(der)h(Klammer)e(in)h(Spalten)
+g(anzugeb)q(en,)g(k)m(ann)h(man)f(auc)o(h)g(mit)g Fg(\\klamdimen)0
+578 y Fl(arb)q(eiten)k(und)g(die)g(L\177)-25 b(ange)16
+b(in)h(Punkten)f(angeb)q(en.)g(Die)h(Eingab)q(e)100 647
+y Fg(\\rtab)p Ff(f)26 b Fg(\\klamdimen=32pt\\wakla)q(mect\\k)q(lamdime)
+q(n)p Ff(j)j Fg(axcvgh)e(&)f(brtzj)h(&)f(c)h(!)-99 717
+y Fi(10)159 b Fg(rfkop)27 b(&)f(ftz)g(&)h(g)f(!)100 787
+y(f)g(&)g(t)h(&)f(zu)g Ff(g)100 857 y Fl(erzeugt)p 704
+956 V 706 956 315 2 v 1021 956 2 20 v 704 926 a Fe(axcv)r(g)r(h)49
+b(br)q(tz)r(j)86 b(c)730 1016 y(r)q(f)5 b(k)r(op)90 b(f)5
+b(tz)81 b(g)-99 1085 y Fi(15)890 b Fe(f)149 b(t)50 b(z)r(u)598
+1275 y Fh(Ein)21 b(weiter)m(es)i(T)-5 b(ab)m(el)s(lenmacr)m(o)100
+1405 y Fl(Mitun)o(ter)13 b(k)o(omm)o(t)g(es)h(v)o(or,)f(da\031)h
+(innerhalb)e(einer)i(T)l(ab)q(elle)g Fj(einzelne)19 b(Spalten)e(rec)n
+(h)n(tsb)r(\177)-30 b(un-)0 1474 y(dig,)18 b(andere)e(ab)r(er)h(linksb)
+r(\177)-30 b(undig)15 b Fl(ausgegeb)q(en)f(w)o(erden)g(sollen.)g(F)q
+(\177)-26 b(ur)13 b(solc)o(he)h(Zw)o(ec)o(k)o(e)h(ist)g
+Fg(\\atab)0 1544 y Fl(brauc)o(h)o(bar.)100 1614 y(Das)20
+b(T)l(ab)q(ellenmacro)e Fg(\\atab)k Fl(zusammen)c(mit)i
+Fg(\\atabell)i Fl(ist)e(f)q(\177)-26 b(ur)20 b(eine)g(v)m(ariable)g
+(Zahl)g(v)o(on)-99 1684 y Fi(20)59 b Fl(Spalten)21 b(geeignet,)h(h\177)
+-25 b(oc)o(hstens)20 b(jedo)q(c)o(h)i(f)q(\177)-26 b(ur)21
+b(sec)o(hzig)g(Spalten)g(\(also)g(120)h(P)o(ositionen\).)e(Die)i(An-)0
+1753 y(zahl)d(der)f(Zeilen)i(ist)f(un)o(b)q(egrenzt.)f(Die)h(P)o
+(ositionen)f(ersc)o(heinen)f(ab)o(w)o(ec)o(hselnd)g(linksb)q(\177)-26
+b(undig)17 b(und)0 1823 y(rec)o(h)o(tsb)q(\177)-26 b(undig,)17
+b(daher)h(der)h(Name.)g(Durc)o(h)g(F)l(reilassen)e(v)o(on)i(P)o
+(ositionen)f(k)m(ann)h(man)g(damit)g(auc)o(h)0 1893 y(eine)e(T)l(ab)q
+(elle)f(sc)o(hreib)q(en,)g(in)g(der)g(et)o(w)o(a)h(die)f(erste)h(bis)f
+(dritte)h(Spalte)f(linksb)q(\177)-26 b(undig)15 b(und)h(die)h(vierte)0
+1963 y(bis)f(sieb)q(en)o(te)g(Spalte)g(rec)o(h)o(tsb)q(\177)-26
+b(undig)14 b(ist.)-99 2032 y Fi(25)159 b Fl(Zun\177)-25
+b(ac)o(hst)16 b(gibt)g(man)g(mit)h Fg(\\atabell)h Fl(in)f(der)f
+(Musterzeile)g(die)h(Breite)g(der)f(T)l(ab)q(ellenspalten)0
+2102 y(\(nic)o(h)o(t)g(P)o(ositionen!\))g(in)h(mm)f(v)o(or.)g(Hin)o
+(ter)g(jede)h(Zahl)g(\(mit)g(Ausnahme)f(der)g(letzten\))i(wird)e(ein)h
+(&)0 2172 y(gesetzt,)12 b(hin)o(ter)f(die)g(letzte)i(Zahl)f(lediglic)o
+(h)e(ein)i(!)f(.)h(Danac)o(h)f(gibt)g(man)g(hin)o(ter)g
+Fg(\\atab)h Fl(die)g(eigen)o(tlic)o(he)0 2242 y(T)l(ab)q(elle)18
+b(ein.)g(Man)f(b)q(eginn)o(t)h({)g(nac)o(h)f(dem)g(ersten,)h(linksb)q
+(\177)-26 b(undigen)16 b(o)q(der)h(neutralen)g(\(V)l(orzeic)o(hen)0
+2311 y(z.B.\))24 b(Elemen)o(t)g({)f(mit)h(einem)f Ff(j)h
+Fl(und)f(setzt)i(dann)e(jew)o(eils)g(ab)o(w)o(ec)o(hselnd)e(ein)j(&)g
+(und)f(einen)g Ff(j)p Fl(.)-99 2381 y Fi(30)59 b Fl(Jede)22
+b(Spalte)f(\(au\031er)h(der)g(letzten\))h(wird)e(also)g(mit)h(einem)g
+(&)f(b)q(eendet,)i(die)e(Zwisc)o(henp)q(osition)0 2451
+y(mit)16 b(einem)g Ff(j)p Fl(.)h(Nac)o(h)f(dem)g(letzten)i
+Ff(j)e Fl(in)g(einer)g(Zeile)h(k)o(omm)o(t)f(statt)h(des)f(&)h(ein)f(!)
+h(.)f(Die)h(v)o(or)f(einem)g Ff(j)p eop
+%%Page: 11 11
+11 10 bop 848 -70 a Fl(|)17 b(11)f(|)0 70 y(stehenden)11
+b(Elemen)o(te)g(w)o(erden)f(linksb)q(\177)-26 b(undig)9
+b(ausgegeb)q(en,)i(die)g(v)o(or)g(einem)g(&)g(stehenden)f(Elemen)o(te)0
+139 y(rec)o(h)o(tsb)q(\177)-26 b(undig.)14 b(Die)i(gesam)o(te)g(T)l(ab)
+q(elle)g(wird)g(in)g(gesc)o(h)o(w)o(eifte)g(Klammern)e(gesetzt.)100
+209 y(Will)j(man)g(F)l(u\031noten,)g(V)l(arian)o(ten)f(o)q(der)i
+(Erl\177)-25 b(auterungen)16 b(aus)h(einer)g(mit)g Fg(\\atab)i
+Fl(gemac)o(h)o(ten)0 279 y(T)l(ab)q(elle)f(heraus)f(setzen,)i(so)f
+(darf)g(der)g(Bezugsausdruc)o(k,)e(d.h.)i(der)f(unmittelbar)g(nac)o(h)h
+Fg(\\text)h Fl(in)0 349 y(der)f(Klammer)g(stehende)g(Ausdruc)o(k,)g(k)o
+(einen)h Ff(j)g Fl(und)f(k)o(ein)g(&)h(en)o(thalten.)g(F)l(erner)e(m)o
+(u\031)h(man)g(den)79 b Fi(5)0 418 y Fl(Bezugsausdruc)o(k,)20
+b(in)j Fg($)g Fl(\(und)f(ev)o(en)o(tuell)g Fg(\\displaystyle)p
+Fl(\))p Fg(...)29 b($)23 b Fl(eingesc)o(hlossen,)d(in)i
+Fg(\\lemma)0 488 y Fl(wiederholen.)14 b(Bei)h(Erl\177)-25
+b(auterungen,)13 b(V)l(arian)o(ten)h(und)h(F)l(u\031noten)f(aus)g
+(einer)h(T)l(ab)q(elle)g(heraus)f(ist)h(zu)0 558 y(b)q(eac)o(h)o(ten,)k
+(da\031)g(die)h(v)o(on)f Fg(\\text)i Fl(geklammerten)e(W)l(orte)g(bzw.)
+h(F)l(ormelausdr)q(\177)-26 b(u)o(c)o(k)o(e)17 b(k)o(einen)i
+Ff(j)h Fl(und)0 628 y(k)o(ein)15 b(&)g(en)o(thalten)g(d)q(\177)-26
+b(urfen.)15 b(V)l(arian)o(ten)f(d)q(\177)-26 b(urfen)14
+b(ab)q(er)h(nat)q(\177)-26 b(urlic)o(h)14 b(trotzdem)h(in)g(senkrec)o
+(h)o(te)g(Stric)o(he)0 697 y(eingesc)o(hlossen)f(w)o(erden.)h(Hier)i
+(ein)f(Beispiel:)g(Die)h(Eingab)q(e)809 b Fi(10)100 767
+y Fg(\\atabell)27 b(4)f(&)h(19&)f(8!)100 837 y(\\atab)p
+Ff(f)g(j)g Fg(a)h(&)f(-)g(|)h Ff(f)p Fg(b)f(\\over)h(x^2)p
+Ff(g)p Fg(&=)p Ff(j)p Fg(0)g(!)100 907 y Ff(j)p Fg(\\text)p
+Ff(f)p Fg(d^2)p Ff(g)p Fg(\\lemma)p Ff(f)p Fg($d^2$)p
+Ff(g)p Fg(\\dfootnote)p Ff(f)p Fg(E)q(rl\177)-26 b(auter)q(ung)p
+Ff(g)p Fg(/&+)30 b Ff(j)100 976 y Fg(\\sqrt)p Ff(f)p
+Fg(abc^2xy)p Ff(g)p Fg(&=)p Ff(j)p Fg(0)e(!)100 1046
+y Ff(j)e Fg(r&-)p Ff(j)p Fg(p&=)p Ff(j)p Fg(0)h Ff(g)1571
+b Fi(15)0 1116 y Fl(ergibt)742 1219 y Fe(a)17 b Ff(\000)1012
+1185 y Fe(b)p 998 1207 51 2 v 998 1253 a(x)1026 1238
+y Fi(2)1071 1219 y Fl(=)49 b(0)720 1328 y Fe(d)746 1307
+y Fi(2)785 1328 y Fl(+)858 1282 y Fd(p)p 908 1282 147
+2 v 46 x Fe(abc)977 1314 y Fi(2)1000 1328 y Fe(xy)19
+b Fl(=)49 b(0)745 1398 y Fe(r)18 b Ff(\000)205 b Fe(p)17
+b Fl(=)49 b(0)100 1503 y(Wie)13 b(man)g(sieh)o(t,)f(ersc)o(heinen)g
+(die)h(Elemen)o(te)f(automatisc)o(h)g(im)h(displa)o(yst)o(yle.)f(Am)h
+(Ende)g(einer)59 b Fi(20)0 1572 y Fl(mit)20 b Fg(\\atab)g
+Fl(gemac)o(h)o(ten)f(T)l(ab)q(elle)h(sollte)g(man)f(k)o(ein)g
+Fg(\\pend)i Fl(eingeb)q(en,)e(sondern)f(einfac)o(h)i(w)o(eiter-)0
+1642 y(sc)o(hreib)q(en,)10 b(da)i(sic)o(h)f(sonst)h(eine)g(mitgez\177)
+-25 b(ahlte)12 b(leere)g(Zeile)g(ergeb)q(en)g(k)m(ann.)g(W)l(enn)f(die)
+h(erste)g(P)o(osition)0 1712 y(in)g(allen)g(Zeilen)g(nic)o(h)o(t)g(b)q
+(esetzt)h(ist,)f(w)o(enn)g(also)g(k)o(ein)g(V)l(orzeic)o(hen)f(in)h
+(der)g(ersten)g(Spalte)g(steh)o(t,)g(dann)0 1781 y(en)o(tsteh)o(t)20
+b(nat)q(\177)-26 b(urlic)o(h)18 b(der)h(Eindruc)o(k,)f(da\031)i(die)f
+(T)l(ab)q(elle)h(nic)o(h)o(t)f(zen)o(triert)g(sei,)h(w)o(eil)f(der)g
+(Leerraum)0 1851 y(links)i(mitb)q(erec)o(hnet,)f(ab)q(er)h(v)o(om)f
+(Betrac)o(h)o(ter)h(der)g(T)l(ab)q(elle)g(nic)o(h)o(t)f(w)o
+(ahrgenommen)e(wird.)j(Man)59 b Fi(25)0 1921 y Fl(k)m(ann)22
+b(sic)o(h)f(in)g(einem)h(solc)o(hen)e(F)l(alle)i(helfen,)f(indem)g(man)
+g(die)h(Breite)g(der)g(ersten)f(Spalte)h(sehr)0 1991
+y(klein)16 b(w\177)-25 b(ahlt.)100 2060 y(W)l(enn)16
+b(man)g(in)h(einer)f(Zeile)h(die)g(letzte)h(P)o(osition)e(o)q(der)g
+(die)h(letzte\(n\))h(Spalte\(n\))f(nic)o(h)o(t)f(mehr)0
+2130 y(brauc)o(h)o(t,)f(m)o(u\031)g(man)h(b)q(eim)g(Macro)g
+Fg(\\atab)h Fl(trotzdem)f(die)g(T)l(abulatoren)f(hinsc)o(hreib)q(en.)p
+0 2375 1913 2 v 0 2451 a Fc(18)22 b Fa(d)86 2437 y Fb(2)106
+2451 y Fc(:)14 b(Erl\177)-21 b(auterung)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/plain/contrib/edmac/tabmac.tex b/macros/plain/contrib/edmac/tabmac.tex
new file mode 100644
index 0000000000..9573bed7b5
--- /dev/null
+++ b/macros/plain/contrib/edmac/tabmac.tex
@@ -0,0 +1,641 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is file tabmac.tex 1.0.
+% You find here macros for tabular structures compatible with
+% Edmac (authored by Lavagnino/Wujastyk). The use of the macros is
+% explained in German language in file tabanlei.dvi. The macros were
+% developed for Edmac 2.3, but this file has been adjusted to Edmac 3.16.
+%
+% ATTENTION: This file uses some Edmac control sequences (like
+% \text, \Afootnote etc.) and redefines \morenoexpands. If you yourself
+% redefined some Edmac control sequences, be careful: some adjustements
+% might be necessary.
+% October 1996
+%
+% My kind thanks to Nora G^Ädeke for valuable support. Any hints and
+% comments are welcome, please contact Herbert Breger,
+% Leibniz-Archiv, Waterloostr. 8, D -- 30169 Hannover, Germany
+% Tel.: 511 - 1267 327
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\makeatletter
+
+\def\morenoexpands{\def\ss{\noexpand\ss}\def\"##1{\noexpand\"##1}%
+ \def\'##1{\noexpand\'##1}\def\`##1{\noexpand\`##1}%
+ \def\^##1{\noexpand\^##1}\def\phantom##1{\noexpand\phantom{##1}}%
+ \def\hphantom##1{\noexpand\hphantom{##1}}%
+ \def\underbrace##1{\noexpand\underbrace{##1}}%
+ \def\dots{\noexpand\dots}%
+ \let\rtab=0\let\ztab=0\let\ltab=0\let\rtabtext=0\let\ltabtext=0%
+ \let\davor=0\let\danach=0\let\T=0%
+ \let\wastrich=0\let\waklam=0\let\wapunkte=0\let\seklam=0%
+ \let\sepunkte=0\let\sestrich=0\let\seklamgl=0\let\Seklamgl=0%
+ \let\atab=0\let\atabell=0}
+
+\newcount\Undcount
+\newbox\hilfsbox
+\newskip\hilfsskip
+\newbox\Hilfsbox
+\newcount\hilfscount
+\newcount\stellencount
+
+\newdimen\eins
+\newdimen\zwei
+\newdimen\drei
+\newdimen\vier
+\newdimen\fuenf
+\newdimen\sechs
+\newdimen\sieben
+\newdimen\acht
+\newdimen\neun
+\newdimen\zehn
+\newdimen\elf
+\newdimen\zwoelf
+\newdimen\dreizehn
+\newdimen\vierzehn
+\newdimen\fuenfzehn
+\newdimen\sechszehn
+\newdimen\siebzehn
+\newdimen\achtzehn
+\newdimen\neunzehn
+\newdimen\zwanzig
+\newdimen\einundzwanzig
+\newdimen\zweiundzwanzig
+\newdimen\dreiundzwanzig
+\newdimen\vierundzwanzig
+\newdimen\fuenfundzwanzig
+\newdimen\sechsundzwanzig
+\newdimen\siebenundzwanzig
+\newdimen\achtundzwanzig
+\newdimen\neunundzwanzig
+\newdimen\dreissig
+\newdimen\einunddreissig
+\newdimen\zweiunddreissig
+\newdimen\dreiunddreissig
+\newdimen\vierunddreissig
+\newdimen\fuenfunddreissig
+\newdimen\sechsunddreissig
+\newdimen\siebenunddreissig
+\newdimen\achtunddreissig
+\newdimen\neununddreissig
+\newdimen\vierzig
+\newdimen\einvierzig
+\newdimen\zweivierzig
+\newdimen\dreivierzig
+\newdimen\viervierzig
+\newdimen\fuenfvierzig
+\newdimen\sechsvierzig
+\newdimen\siebenvierzig
+\newdimen\achtvierzig
+\newdimen\neunvierzig
+\newdimen\fuenfzig
+\newdimen\einfuenfzig
+\newdimen\zweifuenfzig
+\newdimen\dreifuenfzig
+\newdimen\vierfuenfzig
+\newdimen\fuenffuenfzig
+\newdimen\sechsfuenfzig
+\newdimen\siebenfuenfzig
+\newdimen\achtfuenfzig
+\newdimen\neunfuenfzig
+\newdimen\sechzig
+
+\stellencount=0
+
+\def\Dimenzuordnung{\ifcase \the\stellencount \eins %???
+ \or \eins \or \zwei \or \drei \or \vier \or \fuenf
+ \or \sechs \or \sieben \or \acht \or \neun \or \zehn
+ \or \elf \or \zwoelf \or \dreizehn \or \vierzehn
+ \or \fuenfzehn \or \sechszehn \or \siebzehn \or
+ \achtzehn \or \neunzehn \or \zwanzig \or \einundzwanzig
+ \or \zweiundzwanzig \or \dreiundzwanzig \or \vierundzwanzig
+ \or \fuenfundzwanzig \or \sechsundzwanzig \or \siebenundzwanzig
+ \or \achtundzwanzig \or \neunundzwanzig \or \dreissig
+ \or \einunddreissig \or \zweiunddreissig \or \dreiunddreissig
+ \or \vierunddreissig \or \fuenfunddreissig \or \sechsunddreissig
+ \or \siebenunddreissig \or \achtunddreissig \or \neununddreissig
+ \or \vierzig \or \einvierzig \or \zweivierzig \or \dreivierzig
+ \or \viervierzig \or \fuenfvierzig \or \sechsvierzig \or
+ \siebenvierzig \or \achtvierzig \or \neunvierzig \or \fuenfzig
+ \or \einfuenfzig \or \zweifuenfzig \or \dreifuenfzig \or
+ \or \vierfuenfzig \or \fuenffuenfzig \or \sechsfuenfzig \or
+ \or \siebenfuenfzig \or \achtfuenfzig \or \neunfuenfzig \or
+ \sechzig \else 0pt =0pt \errmessage{Tabelle hat mehr als sechzig
+ Spalten} \fi }
+
+\def\dimenzuordnung{\ifdim\Dimenzuordnung < \wd\hilfsbox
+ \Dimenzuordnung = \wd\hilfsbox
+ \else \relax \fi}
+
+\let\TEXT=\text
+\def\xtext #1#2/{\TEXT{#1}{#2}/}
+\let\A@@footnote=\Afootnote
+\let\B@@footnote=\Bfootnote
+\let\C@@footnote=\Cfootnote%
+\let\D@@footnote=\Dfootnote
+\let\@line@@num=\linenum%
+\def\verschwinden #1/{\relax}
+
+\Undcount=1
+\let\Relax=\relax
+\let\NEXT=\next
+\newcount\@hilfs@count
+
+\def\messen #1&{%
+ \ifx #1! \ifnum\stellencount=0\let\NEXT\relax%
+ \else\tabfehlermeldung%
+ \stellencount=0%
+ \let\NEXT\messen%
+ \fi%
+ \else\setbox\hilfsbox=\hbox{$\displaystyle{#1}$}%
+ \advance\stellencount by 1 %
+ \dimenzuordnung%
+ \let\NEXT\messen%
+ \fi\NEXT}
+
+
+\def\messentext #1&{%
+ \ifx #1! \ifnum\stellencount=0\let\NEXT\relax%
+ \else\tabfehlermeldung%
+ \stellencount=0%
+ \let\NEXT\messentext%
+ \fi%
+ \else\setbox\hilfsbox=\hbox{#1}%
+ \advance\stellencount by 1 %
+ \dimenzuordnung%
+ \let\NEXT\messentext%
+ \fi\NEXT}
+
+\def\Messen #1!{%
+ \ifx #1&\let\NEXT\relax%
+ \else\messen #1&!&!&%
+ \let\NEXT\Messen%
+ \fi\NEXT}
+\def\Messentext #1!{%
+ \ifx #1&\let\NEXT\relax%
+ \else\messentext #1&!&!&%
+ \let\NEXT\Messentext%
+ \fi\NEXT}
+
+\newskip\abstand
+\global\abstand=10pt
+
+
+\let\LABEL=\label
+\def\Label#1{\LABEL#1}
+\let\NEXT\relax
+\let\Next=\next
+\def\variab{\relax}
+
+\def\tabfehlermeldung{%
+ \ifnum\stellencount=1\relax%
+ \else\ifnum\Undcount=1\relax%
+ \else\ifnum\stellencount=\Undcount\relax%
+ \else\errmessage{Anzahl der Tabulatoren ist nicht
+ gleich der Anzahl in der vorigen Zeile
+ (oder Ausrufungszeichen vergessen ?)}%
+ \fi%
+ \fi\Undcount=\stellencount%
+ \fi}
+\def\rverteilen #1&{\def\label##1{}%
+ \ifx #1! \ifnum\stellencount=0%\removelastskip
+ \let\Next\relax%
+ \else\stellencount=0%
+ \let\Next=\rverteilen%
+ \fi%
+ \else%
+ \footnoteverschw%
+ \advance\stellencount by 1%
+ \setbox\hilfsbox=\hbox{$\displaystyle{#1}$}%
+ \let\text=\xtext\let\Dfootnote=\D@@footnote%
+ \let\Afootnote=\A@@footnote\let\Bfootnote=\B@@footnote%
+ \let\Cfootnote=\C@@footnote\let\linenum=\@line@@num%
+ \hilfsskip=\Dimenzuordnung%
+ \advance\hilfsskip by -\wd\hilfsbox\def\label##1{\Label{{##1}}}%
+ \hskip\hilfsskip$\displaystyle{#1}$%
+ \hskip\abstand%
+ \let\Next=\rverteilen%
+ \fi\Next}
+
+\def\rverteilentext #1&{\def\label##1{}%
+ \ifx #1! \ifnum\stellencount=0%\removelastskip
+ \let\Next\relax%
+ \else\stellencount=0%
+ \let\Next=\rverteilentext%
+ \fi%
+ \else%
+ \footnoteverschw%
+ \advance\stellencount by 1%
+ \setbox\hilfsbox=\hbox{#1}%
+ \let\text=\xtext\let\Dfootnote=\D@@footnote%
+ \let\Afootnote=\A@@footnote\let\Bfootnote=\B@@footnote%
+ \let\Cfootnote=\C@@footnote\let\linenum=\@line@@num%
+ \hilfsskip=\Dimenzuordnung%
+ \advance\hilfsskip by -\wd\hilfsbox\def\label##1{\Label{{##1}}}%
+ \hskip\hilfsskip#1%
+ \hskip\abstand%
+ \let\Next=\rverteilentext%
+ \fi\Next}
+\def\lverteilen #1&{\def\label##1{}%
+ \ifx #1! \ifnum\stellencount=0 \let\Next\relax%
+ \else\stellencount=0%
+ \let\Next=\lverteilen%
+ \fi%
+ \else \footnoteverschw%
+ \advance\stellencount by 1%
+ \setbox\hilfsbox=\hbox{$\displaystyle{#1}$}%
+ \hilfsskip=\Dimenzuordnung%
+ \advance\hilfsskip by -\wd\hilfsbox%
+ \let\text=\xtext\let\Afootnote=\A@@footnote%
+ \let\Bfootnote=\B@@footnote\let\Cfootnote=\C@@footnote%
+ \let\Dfootnote=\D@@footnote\def\label##1{\Label{{##1}}}%
+ \let\linenum=\@line@@num%
+ $\displaystyle{#1}$\hskip\hilfsskip\hskip\abstand%
+ \let\Next=\lverteilen%
+ \fi\Next}
+
+\def\lverteilentext #1&{\def\label##1{}%
+ \ifx #1! \ifnum\stellencount=0 \let\Next\relax%
+ \else\stellencount=0%
+ \let\Next=\lverteilentext%
+ \fi%
+ \else \footnoteverschw%
+ \advance\stellencount by 1%
+ \setbox\hilfsbox=\hbox{#1}%
+ \hilfsskip=\Dimenzuordnung%
+ \advance\hilfsskip by -\wd\hilfsbox%
+ \let\text=\xtext\let\Afootnote=\A@@footnote%
+ \let\Bfootnote=\B@@footnote\let\Cfootnote=\C@@footnote%
+ \let\Dfootnote=\D@@footnote\def\label##1{\Label{{##1}}}%
+ \let\linenum=\@line@@num%
+ #1\hskip\hilfsskip\hskip\abstand%
+ \let\Next=\lverteilentext%
+ \fi\Next}
+\def\zverteilen #1&{\def\label##1{}%
+ \ifx #1! \ifnum\stellencount=0\let\Next\relax%
+ \else\stellencount=0%
+ \let\Next=\zverteilen%
+ \fi%
+ \else \footnoteverschw%
+ \advance\stellencount by 1%
+ \setbox\hilfsbox=\hbox{$\displaystyle{#1}$}%
+ \hilfsskip=\Dimenzuordnung%
+ \advance\hilfsskip by -\wd\hilfsbox%
+ \let\text=\xtext\let\Afootnote=\A@@footnote%
+ \let\Bfootnote=\B@@footnote\let\Cfootnote=\C@@footnote%
+ \let\Dfootnote=\D@@footnote\def\label##1{\Label{{##1}}}%
+ \let\linenum=\@line@@num%
+ \hskip 0.5\hilfsskip$\displaystyle{#1}$\hskip0.5\hilfsskip%
+ \hskip\abstand%
+ \let\Next=\zverteilen%
+ \fi\Next}
+\let\NEXT=\relax
+
+\def\rsetzen #1!{%
+ \ifx #1& \let\NEXT\relax
+ \else%
+ \centerline{\rverteilen #1&!&!&}
+ \let\NEXT=\rsetzen
+ \fi\NEXT}
+
+\def\rsetzentext #1!{%
+ \ifx #1& \let\NEXT\relax
+ \else \centerline{\rverteilentext #1&!&!&}
+ \let\NEXT=\rsetzentext
+ \fi\NEXT}
+
+\def\lsetzen #1!{%
+ \ifx #1&\let\NEXT\relax
+ \else%
+ \centerline{\lverteilen #1&!&!&}
+ \let\NEXT=\lsetzen
+ \fi\NEXT}
+
+\def\lsetzentext #1!{%
+ \ifx #1& \let\NEXT\relax
+ \else%
+ \centerline{\lverteilentext #1&!&!&}
+ \let\NEXT=\lsetzentext
+ \fi\NEXT}
+\def\zsetzen #1!{%
+ \ifx #1& \let\NEXT\relax%
+ \else \centerline{\zverteilen #1&!&!&}
+ \let\NEXT=\zsetzen
+ \fi\NEXT}
+\def\nullsetzen{%
+ \advance\stellencount by 1 %
+ \Dimenzuordnung=0pt%
+ \ifnum\stellencount=30\let\NEXT\relax%
+ \stellencount=0%
+ \else\let\NEXT\nullsetzen%
+ \fi\NEXT}
+\def\footnoteverschw{%
+ \let\text\relax%
+ \let\Afootnote=\verschwinden%
+ \let\Bfootnote=\verschwinden%
+ \let\Cfootnote=\verschwinden%
+ \let\Dfootnote=\verschwinden%
+ \let\linenum=\@gobble%
+ }
+
+\def\Seklam#1{\vbox to 10pt{\vss\hbox{$\left\{\vrule width0pt height #1pt
+ depth 0pt \right. $\hss}\vfil%
+ }}
+\def\Seklamgl#1#2{\vbox to 4pt{\vss\hbox{$#1\left\{\vrule width0pt height #2pt
+ depth 0pt \right. $}\vfil%
+ }}
+\def\seklam#1{\vbox to 10pt{\vss\hbox{$\left.\vrule width0pt height #1pt
+ depth 0pt \right\} $\hss}\vfil%
+ }}
+\def\seklamgl#1#2{\vbox to 4pt{\vss\hbox{$\left.\vrule width0pt height #1pt
+ depth 0pt \right\}#2 $}\vfil%
+ }}
+\def\sestrich#1{\vbox to 8pt{\vss\hbox{\vrule height #1pt}\vfil}}%
+\def\sepunkte#1{\vbox to 1pt{\vss\vbox to #1pt%
+ {\cleaders\hbox{$\m@th\hbox{.}\vbox to 0.5em{ }$}\vfil}}}
+
+\newdimen\klamdimen
+\klamdimen=0pt
+
+\def\@add@#1{%
+ \ifx#1|\advance\klamdimen by-\abstand%
+ \let\next=\relax%
+ \else\advance\klamdimen by \the#1%
+ \advance\klamdimen by\abstand%
+ \let\next=\@add@%
+ \fi\next}
+\def\waklam#1|{%
+ \@add@#1|%
+ \hbox to\the\Dimenzuordnung{\hbox to%
+ \the\klamdimen{\upbracefill}\hss}}
+\def\Waklam#1|{%
+ \@add@#1|%
+ \hbox to \the\Dimenzuordnung{\hbox to%
+ \the\klamdimen{\downbracefill}\hss}}
+
+\def\waklamec#1|{%
+ \@add@#1|%
+ \hbox to\the\Dimenzuordnung{\hbox to%
+ \the\klamdimen{\vrule height 4pt\hrulefill\vrule height 4pt}\hss}}
+
+\def\waklamect#1|{\hbox to 0pt{\T{6}{\waklamec#1|}\hss}}
+
+\def\wastrich#1|{%
+ \@add@#1|%
+ \hbox to\the\Dimenzuordnung{\hbox to%
+ \the\klamdimen{\hrulefill}\hss}}
+
+\def\wapunkte#1|{%
+ \@add@#1|%
+ \hbox to\the\Dimenzuordnung{\hbox to%
+ \the\klamdimen{\dotfill}\hss}}
+
+\let\@waklam@=\waklam
+\def\@WAKLAM@#1|{\@waklam@#1|}
+\let\@Waklam@=\Waklam
+\def\@WAKlam@#1|{\@Waklam@#1|}
+\let\@wastrich@=\wastrich
+\def\@WASTRICH@#1|{\@wastrich@#1|}
+
+\def\linksltab#1{%
+ \hbox to 0pt{\vbox{\tabindent%
+ \moveleft\Hilfsskip\hbox{\ #1}}\hss}%
+ }
+
+\def\linksrtab#1#2{%
+ #2\hbox to 0pt{\vbox{\tabindent%
+ \advance\Hilfsskip by\eins%
+ \moveleft\Hilfsskip\hbox{\ #1}}\hss}%
+ }
+
+\def\linksztab#1#2{%
+ \hbox to 0pt{\vbox{\tabindent\stellencount=\Undcount%
+ \advance\Hilfsskip by 0.5\eins%
+ \setbox\hilfsbox=\hbox{\def\label##1{}%
+ \footnoteverschw$\displaystyle{#2}$}%
+ \advance\Hilfsskip by -0.5\wd\hilfsbox%
+ \moveleft\Hilfsskip\hbox{\ #1}}\hss}%
+ #2}
+
+\def\rechtsztab#1#2{%
+ \setbox\hilfsbox=\hbox{\def\label##1{}%
+ \footnoteverschw#2}\Undcount=\stellencount%
+ #1\hbox to 0pt{\vbox{\tabindent\stellencount=\Undcount%
+ \advance\Hilfsskip by 0.5\Dimenzuordnung%
+ \advance\Hilfsskip by -\wd\hilfsbox%
+ \setbox\hilfsbox=\hbox{\def\label##1{}%
+ \footnoteverschw$\displaystyle{#1}$}%
+ \advance\Hilfsskip by -0.5\wd\hilfsbox%
+ \advance\Hilfsskip by \abstand%
+ \moveright\Hilfsskip\hbox{ #2}}\hss}%
+ }
+
+\def\rechtsltab#1#2{%
+ \setbox\hilfsbox=\hbox{\def\label##1{}\footnoteverschw#2}\Undcount=\stellencount%
+ #1\hbox to0pt{\vbox{\tabindent\stellencount=\Undcount%
+ \advance\Hilfsskip by\Dimenzuordnung%
+ \advance\Hilfsskip by-\wd\hilfsbox%
+ \setbox\hilfsbox=\hbox{\def\label##1{}%
+ \footnoteverschw$\displaystyle{#1}$}%
+ \advance\Hilfsskip by-\wd\hilfsbox%
+ \advance\Hilfsskip by\abstand%
+ \moveright\Hilfsskip\hbox{ #2}}\hss}%
+ }
+
+\def\rechtsrtab#1#2{%
+ \setbox\hilfsbox=\hbox{\def\label##1{}\footnoteverschw#2}%
+ #1\hbox to0pt{\vbox{\tabindent%
+ \advance\Hilfsskip by-\wd\hilfsbox%
+ \advance\Hilfsskip by\abstand%
+ \moveright\Hilfsskip\hbox{ #2}}\hss}%
+ }
+
+\def\footnotewieder{%
+ \def\Afootnote##1##2/{\A@@footnote{##1}{##2}}
+ \def\Bfootnote##1##2/{\B@@footnote{##1}{##2}}
+ \def\Cfootnote##1##2/{\C@@footnote{##1}{##2}}
+ \def\Dfootnote##1##2/{\D@@footnote{##1}{##2}}
+ }
+
+
+\def\rtab#1{%
+ \def\label##1{}%
+ \def\waklam##1|{}%
+ \def\Waklam##1|{}%
+ \def\wastrich##1|{}%
+ \def\davor##1##2{\linksrtab{##1}{##2}}%
+ \def\danach##1##2{\rechtsrtab{##1}{##2}}%
+ \footnoteverschw%
+ \stellencount=0%
+ \nullsetzen%
+ \stellencount=0
+ \Messen #1!&!%
+ \global\Undcount=1
+ \def\waklam##1|{\@WAKLAM@##1|}%
+ \def\Waklam##1|{\@WAKlam@##1|}%
+ \def\wastrich##1|{\@WASTRICH@##1|}%
+ \variab
+ \rsetzen #1!&!%
+ \footnotewieder
+ }
+
+\def\rtabtext #1{%
+ \def\label##1{}%
+ \def\waklam##1|{}%
+ \def\Waklam##1|{}%
+ \def\wastrich##1|{}%
+ \footnoteverschw%
+ \stellencount=0%
+ \nullsetzen%
+ \stellencount=0
+ \Messentext #1!&!%
+ \global\Undcount=1
+ \def\waklam##1|{\@WAKLAM@##1|}%
+ \def\Waklam##1|{\@WAKlam@##1|}%
+ \def\wastrich##1|{\@WASTRICH@##1|}%
+ \variab
+ \rsetzentext #1!&!%
+ \footnotewieder
+ }
+
+
+\def\ltab #1{%
+ \def\label##1{}%
+ \def\waklam##1|{}%
+ \def\Waklam##1|{}%
+ \def\wastrich##1|{}%
+ \def\davor##1##2{\linksltab{##1}{##2}}%
+ \def\danach##1##2{\rechtsltab{##1}{##2}}%
+ \footnoteverschw%
+ \stellencount=0%
+ \nullsetzen%
+ \stellencount=0%
+ \Messen #1!&!%
+ \global\Undcount=1
+ \def\waklam##1|{\@WAKLAM@##1|}%
+ \def\Waklam##1|{\@WAKlam@##1|}%
+ \def\wastrich##1|{\@WASTRICH@##1|}%
+ \variab
+ \lsetzen #1!&!%
+ \footnotewieder
+ }
+
+\def\ltabtext #1{%
+ \def\label##1{}%
+ \def\waklam##1|{}%
+ \def\Waklam##1|{}%
+ \def\wastrich##1|{}%
+ \footnoteverschw%
+ \stellencount=0%
+ \nullsetzen%
+ \stellencount=0%
+ \Messentext #1!&!%
+ \global\Undcount=1
+ \def\waklam##1|{\@WAKLAM@##1|}%
+ \def\Waklam##1|{\@WAKlam@##1|}%
+ \def\wastrich##1|{\@WASTRICH@##1|}%
+ \variab
+ \lsetzentext#1!&!%
+ \footnotewieder
+ }
+
+
+\def\ztab #1{%
+ \def\label##1{}%
+ \def\waklam##1|{}%
+ \def\Waklam##1|{}%
+ \def\wastrich##1|{}%
+ \def\davor##1##2{\linksztab{##1}{##2}}%
+ \def\danach##1##2{\rechtsztab{##1}{##2}}%
+ \footnoteverschw%
+ \stellencount=0%
+ \nullsetzen%
+ \stellencount=0%
+ \Messen #1!&!%
+ \global\Undcount=1
+ \def\waklam##1|{\@WAKLAM@##1|}%
+ \def\Waklam##1|{\@WAKlam@##1|}%
+ \def\wastrich##1|{\@WASTRICH@##1|}%
+ \variab
+ \zsetzen #1!&!%
+ \footnotewieder
+ }
+
+\def\breitertext#1{%\stellencount=\Undcount%
+ \hbox to \the\Dimenzuordnung{\hbox{#1}\hss}%
+ }
+\def\breiter#1{%
+ \hbox to \the\Dimenzuordnung{\hbox{$\displaystyle{#1}$}\hss}%
+ }
+
+
+\def\tabellzwischen #1&{%
+ \ifx #1! \let\NEXT\relax \stellencount=0
+ \else \advance \stellencount by 1
+ \Dimenzuordnung = #1 mm
+ \let\NEXT=\tabellzwischen
+ \fi \NEXT }
+
+\def\atabell #1!{%
+ \tabellzwischen #1&!&}
+\def\Setzen #1&{%
+ \ifx #1\relax \let\NEXT=\relax
+ \else \advance\stellencount by 1
+ \let\tabelskip=\Dimenzuordnung
+ \TAB #1|
+ \let\NEXT=\Setzen
+ \fi\NEXT}
+
+
+\def\ATAB #1!{%
+ \ifx #1\Relax \centerline{\Setzen #1\relax&}
+ \let\Next\relax
+ \else \centerline{\Setzen #1&\relax&}
+ \let\Next=\ATAB
+ \fi\Next}
+\def\atab #1{%
+ \variab%
+ \ATAB #1!\Relax!}
+
+\newskip\HILFSskip
+\newskip\Hilfsskip
+
+\def\TABINDENT{%
+ \ifnum\stellencount=30\let\NEXT\relax\stellencount=0%
+ \else\advance\stellencount by 1%
+ \advance\Hilfsskip by\Dimenzuordnung%
+ \ifdim\Dimenzuordnung=0pt\advance\hilfscount by 1%
+ \else\advance\Hilfsskip by \the\hilfscount\abstand%
+ \hilfscount=1\fi%
+ \let\NEXT=\TABINDENT%
+ \fi\NEXT}%
+\def\tabindent{%
+ \stellencount=0%
+ \Hilfsskip=0pt%
+ \hilfscount=1%
+ \TABINDENT%
+ \hilfsskip=\hsize%
+ \advance\hilfsskip by -\Hilfsskip%
+ \Hilfsskip=0.5\hilfsskip%
+ }%
+
+\def\TAB #1|#2|{%
+ \setbox\tabhilfbox=\hbox{$\displaystyle{#1}$}%
+ \setbox\tabHilfbox=\hbox{$\displaystyle{#2}$}%
+ \advance\tabelskip by -\wd\tabhilfbox%
+ \advance\tabelskip by -\wd\tabHilfbox%
+ \unhbox\tabhilfbox\hskip\tabelskip%
+ \unhbox\tabHilfbox}%
+
+\def\TABtext #1|#2|{%
+ \setbox\tabhilfbox=\hbox{#1}%
+ \setbox\tabHilfbox=\hbox{#2}%
+ \advance\tabelskip by -\wd\tabhilfbox%
+ \advance\tabelskip by -\wd\tabHilfbox%
+ \unhbox\tabhilfbox\hskip\tabelskip%
+ \unhbox\tabHilfbox}%
+\newbox\tabhilfbox
+\newbox\tabHilfbox
+
+\makeatother
+\endinput
+---------- cut here ---------- cut here ---------- cut here ----------
diff --git a/macros/plain/contrib/epsf-dvipdfmx/README b/macros/plain/contrib/epsf-dvipdfmx/README
new file mode 100644
index 0000000000..6a14341b4d
--- /dev/null
+++ b/macros/plain/contrib/epsf-dvipdfmx/README
@@ -0,0 +1,51 @@
+epsf-dvipdfmx.tex is a plain TeX file to be \input after epsf.tex when
+using plain TeX with dvipdfmx. As in:
+
+\input epsf
+\input epsf-dvipdfmx
+
+It is needed when an .eps file has anything except the origin (0,0) for
+the lower-left of its bounding box.
+
+An alternative is to use the LaTeX graphicx package from your plain TeX
+document, as in:
+ \input miniltx
+ \input graphicx.sty
+ \input dvipdfmx.def % needed tex+dvipdfmx only, omit for xetex
+Loading graphicx can also be done through Eplain (http://tug.org/eplain).
+Of course graphicx has many more features than epsf.tex.
+
+That's the whole usage. The rest of this document is the explanation of
+why it is necessary.
+-----------------------------------------------------------------------------
+The ultimate source of the problem is that the dvipdfmx driver has a
+feature to autoconvert .eps files to .pdf in order to generate its PDF
+output. By default, the conversion is done using Ghostscript.
+Ghostscript forces the lower-left in the output to 0,0 regardless of the
+input, and graphics programs (e.g., MetaPost) can create an .eps with a
+lower-left that can be anything, depending on what is actually drawn
+(e.g., a graph starting at (-10,-10)).
+
+Since this conversion happens at DVI processing time, it conflicts with
+what the TeX code sees. The result is that the output is wrong; part of
+the graphic is lost. Included in this distribution is a trivial TeX
+file, graphic, and the bad output by default (the circle is cut off and
+misplaced). You can observe that uncommenting the \input epsf-dvipdfmx
+in the input file and rerunning tex+dvipdfmx produces good output (the
+whole circle).
+
+This cannot be fixed in epsf.tex, which looks at the graphic as it
+exists, with the arbitrary lower-left (and handles it properly), and has
+no way of knowing that a driver is going to transform it. The two
+reasonable workarounds for users are given above.
+
+It also cannot be fixed in the dvipdfmx program because the graphic
+inclusion in TeX might also use the trim or viewport options, and
+sufficient information is not passed through to handle them properly.
+
+The two viable workarounds for the problem that we have found are given above.
+-----------------------------------------------------------------------------
+This README was originally written in 2014 by Karl Berry.
+The epsf-dvipdfmx.tex and test files were originally written in 2014
+by Akira Kakuto.
+All released to the public domain.
diff --git a/macros/plain/contrib/epsf-dvipdfmx/epsf-dvipdfmx.tex b/macros/plain/contrib/epsf-dvipdfmx/epsf-dvipdfmx.tex
new file mode 100644
index 0000000000..b6267dde1b
--- /dev/null
+++ b/macros/plain/contrib/epsf-dvipdfmx/epsf-dvipdfmx.tex
@@ -0,0 +1,56 @@
+% epsf-dvipdfmx.tex - \input after epsf.tex when using dvipdfmx
+% Originally written by Akira Kakuto, 2014. Public domain.
+%
+% (x)dvipdfmx patch for epsf.tex - translate bounding box to have (0,0) LL.
+%
+\newdimen\epsfdpxtexdimen
+%
+% from latex.ltx
+%
+\begingroup
+ \catcode`P=12
+ \catcode`T=12
+ \lowercase{\def\x{\def\rempt##1.##2PT{##1\ifnum##2>0pt.##2\fi}}}
+ \expandafter\endgroup\x
+\def\strippt{\expandafter\rempt\the}
+%
+\def \epsfspecial #1{%
+ \epsftmp=10\epsfxsize
+ \divide \epsftmp by \pspoints
+ \ifnum \epsfrsize = 0%
+ \relax
+ \epsfdpxtexdimen=\epsfurx pt
+ \advance\epsfdpxtexdimen -\epsfllx pt
+ \edef\epsfurxx{\strippt\epsfdpxtexdimen}%
+ \epsfdpxtexdimen=\epsfury pt
+ \advance\epsfdpxtexdimen -\epsflly pt
+ \edef\epsfuryy{\strippt\epsfdpxtexdimen}%
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=0\space
+ lly=0\space
+ urx=\epsfurxx\space
+ ury=\epsfuryy\space
+ rwi=\number\epsftmp
+ \epsfclipstring
+ }%
+ \else
+ \epsfrsize=10\epsfysize
+ \divide \epsfrsize by \pspoints
+ \epsfdpxtexdimen=\epsfurx pt
+ \advance\epsfdpxtexdimen -\epsfllx pt
+ \edef\epsfurxx{\strippt\epsfdpxtexdimen}%
+ \epsfdpxtexdimen=\epsfury pt
+ \advance\epsfdpxtexdimen -\epsflly pt
+ \edef\epsfuryy{\strippt\epsfdpxtexdimen}%
+ \special{PSfile=\ifepsfdraft psdraft.ps\else#1\fi\space
+ llx=0\space
+ lly=0\space
+ urx=\epsfurxx\space
+ ury=\epsfuryy\space
+ rwi=\number\epsftmp
+ rhi=\number\epsfrsize
+ \epsfclipstring
+ }%
+ \fi
+}%
+\endinput
diff --git a/macros/plain/contrib/epsf-dvipdfmx/testepdpx.eps b/macros/plain/contrib/epsf-dvipdfmx/testepdpx.eps
new file mode 100644
index 0000000000..232600a2c4
--- /dev/null
+++ b/macros/plain/contrib/epsf-dvipdfmx/testepdpx.eps
@@ -0,0 +1,22 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: -40 -40 40 40
+%%CreationDate: 2014.09.15:0921
+%%BeginProlog
+/bd{bind def}bind def/fshow {exch findfont exch scalefont setfont show}bd
+/fcp{findfont dup length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall}bd
+/fmc{FontMatrix dup length array copy dup dup}bd/fmd{/FontMatrix exch def}bd
+/Amul{4 -1 roll exch mul 1000 div}bd/ExtendFont{fmc 0 get Amul 0 exch put fmd}bd
+/ScaleFont{dup fmc 0 get Amul 0 exch put dup dup 3 get Amul 3 exch put fmd}bd
+/SlantFont{fmc 2 get dup 0 eq{pop 1}if Amul FontMatrix 0 get mul 2 exch put fmd}bd
+%%EndProlog
+ 1 0 0 setrgbcolor
+newpath 40 0 moveto
+40 10.60913 35.78491 20.78247 28.28369 28.28369 curveto
+20.78247 35.78491 10.60913 40 0 40 curveto
+-10.60913 40 -20.78247 35.78491 -28.28369 28.28369 curveto
+-35.78491 20.78247 -40 10.60913 -40 0 curveto
+-40 -10.60913 -35.78491 -20.78247 -28.28369 -28.28369 curveto
+-20.78247 -35.78491 -10.60913 -40 0 -40 curveto
+10.60913 -40 20.78247 -35.78491 28.28369 -28.28369 curveto
+35.78491 -20.78247 40 -10.60913 40 0 curveto closepath fill
+%%EOF
diff --git a/macros/plain/contrib/epsf-dvipdfmx/testepdpx.tex b/macros/plain/contrib/epsf-dvipdfmx/testepdpx.tex
new file mode 100644
index 0000000000..582d2fb1d0
--- /dev/null
+++ b/macros/plain/contrib/epsf-dvipdfmx/testepdpx.tex
@@ -0,0 +1,13 @@
+% Public domain.
+%
+% To see the problem, as described in the README:
+% tex testepdpx; dvipdfmx testepdpx
+
+\input epsf
+
+% Uncomment to observe the problem being fixed:
+%\input epsf-dvipdfmx
+
+\nopagenumbers
+\centerline{\epsfxsize=8cm\epsfbox{testepdpx.eps}}
+\bye
diff --git a/macros/plain/contrib/figflow/README b/macros/plain/contrib/figflow/README
new file mode 120000
index 0000000000..0c33817675
--- /dev/null
+++ b/macros/plain/contrib/figflow/README
@@ -0,0 +1 @@
+README.figflow \ No newline at end of file
diff --git a/macros/plain/contrib/figflow/README.figflow b/macros/plain/contrib/figflow/README.figflow
new file mode 100644
index 0000000000..24d4a35e11
--- /dev/null
+++ b/macros/plain/contrib/figflow/README.figflow
@@ -0,0 +1,15 @@
+Subject: Re: Plain TeX macros for text-flowing-around-figures
+
+Carlos Felippa wrote:
+> I wrote my own macros to do this, but they involve
+> fiddling with several dimens and picking the
+> insertion spot. Also possible interaction with
+> footnotes, wide eqs, ejects, etc, often requires
+> intervention. Coulnt find anything pertinent in eplain.
+>
+> Note: I am not interested in LaTeX.
+
+Here is what I wrote (ages ago, I notice). I don't claim anything great
+about it, but it might give you or someone some ideas.
+
+Ian Hutchinson.
diff --git a/macros/plain/contrib/figflow/figflow.tex b/macros/plain/contrib/figflow/figflow.tex
new file mode 100644
index 0000000000..a949065442
--- /dev/null
+++ b/macros/plain/contrib/figflow/figflow.tex
@@ -0,0 +1,96 @@
+% FIGFLOW: plain TEX macro by Ian Hutchinson, 21 Oct 95.
+% Copyright 1995 Ian Hutchinson.
+% You may freely use, modify, and/or distribute this file, without limitation.
+% Make text flow round figure.
+% Usage: \figflow{<width>}{<height>}{<[Figure+][Caption]>}
+% at start of new paragraph. Figure top starts at insert.
+% #1 figure width dimen. If negative, fig on right, else left.
+% #2 figure height (including caption) dimen. (E.g.: 4 truein)
+% #3 \special for figure if desired, then \vfill caption. (Both optional).
+% Example: figflow{4 truein}{5 truein}{\epsfbox{figure.ps}\vfill Figure 1.}
+% User is responsible for the figure fitting within the space defined.
+% If figure won't fit on page, it is moved over the page break.
+% If a new figflow starts before the old one is finished, a message is given
+% and the second figure is skipped. Fix manually.
+% Does not work for Latex.
+
+\newdimen\pageremains\newdimen\pdepth
+\newdimen\figwidth
+\newdimen\figheight
+\newcount\figlines
+\newcount\flevel
+
+\def\figflow#1#2#3{
+\ifnum\flevel>0
+\message{******Figure collision. Ignoring second figure.******}
+\else
+\figwidth=#1
+\figheight=#2
+\def\contents{#3}
+% Put figure contents in an appropriate box.
+\def\figure{\let\temp=\par \let\par=\plainpar
+ \line{\overfullrule=0pt% Avoid black box.
+ \ifdim \figwidth<0pt \hsize=-\figwidth \hss\else \hsize=\figwidth\fi
+ \advance \hsize by -10pt% Give a little extra hspace.
+ \vbox to \figheight{\vfil\noindent\contents}
+ \ifdim \figwidth>0pt \hss\fi
+ } \vskip-\figheight
+ \let\par=\temp%
+}
+\advance\figheight by \baselineskip
+\divide\figheight by \baselineskip% convert height to lines.
+\figlines=\figheight \multiply\figheight by \baselineskip
+\begingroup\overfullrule=0pt% Turn off black box outside fig
+\tolerance=1000% Allow more spaced out lines.
+\flevel=1
+% Store \par
+\let\plainpar=\par
+% Define new \par to process figures each paragraph.
+\def\par{
+ \ifnum\flevel=1
+% We are starting a new figure. Set to look for enough room.
+ \plainpar
+% End the previous paragraph.
+ \pageremains=\pagegoal \advance\pageremains by -\pagetotal
+ \ifdim\pageremains<\figheight \message{Moving figure...}%keep looking
+ \else
+% Found the starting place. Store prevdepth. Remove glue. Place the figure.
+ \pdepth=\prevdepth
+ \nointerlineskip
+ \figure
+ \hangindent \figwidth \hangafter -\figlines \hfuzz 5 pt
+ \flevel=2
+ \prevgraf=0
+ \figheight=\baselineskip% Removed parskip adjust.
+ \fi
+ \else
+ \ifnum\flevel=2%level 2, making the figure.
+ \ifdim\figheight<\parskip
+ \advance\figlines -1 \advance\hangafter 1
+ \advance\figheight\baselineskip
+ \else
+ \advance\figheight -\parskip%\message{else \the\figheight}
+ \fi
+ \hangcarrypar\relax% I don't know why, but this is needed.
+ \fi
+ \fi
+}
+\par
+\vskip-\pdepth%Restore the prevdepth from the previous paragraph.
+\fi
+}
+% Macros.
+\def\endflow{\global\let\par=\plainpar\endgroup}% terminate main group.
+\def\hangcarrypar{% Carry the hangindent to next par.
+\edef\next{\hangafter=\the\hangafter\hangindent=\the\hangindent}
+\plainpar\next
+\edef\next{\prevgraf=\the\prevgraf}
+\ifnum\prevgraf>0
+ \ifnum\prevgraf>\figlines \endflow \flevel=0
+ \else
+ \message{FIGFLOW: line \the\prevgraf, of \the\figlines.}
+ \leavevmode% Sets prevgraf to 0. So reset it using next.
+ \next
+ \fi
+\fi
+}
diff --git a/macros/plain/contrib/font-change/README.txt b/macros/plain/contrib/font-change/README.txt
new file mode 100644
index 0000000000..cc454b5fd8
--- /dev/null
+++ b/macros/plain/contrib/font-change/README.txt
@@ -0,0 +1,23 @@
+This is version 2015.2 of the package "font-change". This is the fourth version, the earlier versions being version 2015.1, 2009.1 and 2010.1.
+
+The package includes 46 macro files of which 45 are macros to change text and math fonts in TeX.
+
+These fonts called by these macros are free fonts and are included in MiKTeX and TeX Live distributions.
+
+All these macros should work smoothly with a full installation of MiKTeX (tested version 2.9.4503) and TeX Live 2014.
+
+For more information please refer to the documentation (font-change.pdf).
+
+***User's comments and suggestions are welcomed.***
+
+=========== Licence / License ===========
+
+
+This work was released under Creative Commons Attribution-Share Alike 3.0 Unported License on July 19, 2010.
+
+You are free to Share (to copy, distribute and transmit the work) and to Remix (to adapt the work)
+provided you follow the Attribution and Share Alike guidelines of the licence. For the full licence text,
+please visit: http://creativecommons.org/licenses/by-sa/3.0/legalcode.
+
+Amit Raj Dhawan amitrajdhawan@gmail.com
+ (Author) \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/doc/font-change.pdf b/macros/plain/contrib/font-change/doc/font-change.pdf
new file mode 100644
index 0000000000..b12db5952c
--- /dev/null
+++ b/macros/plain/contrib/font-change/doc/font-change.pdf
Binary files differ
diff --git a/macros/plain/contrib/font-change/doc/font-change.tex b/macros/plain/contrib/font-change/doc/font-change.tex
new file mode 100644
index 0000000000..90739e3d20
--- /dev/null
+++ b/macros/plain/contrib/font-change/doc/font-change.tex
@@ -0,0 +1,2209 @@
+% The author of this work is Amit Raj Dhawan
+% This work was released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+%%%%%%%%% Fonts %%%%%%%%%%
+\font\webomints=WebOMintsGd at40pt
+\font\titlefont=artemisiarg8a at40pt
+\font\titleone=mdputr7t at18pt
+\font\titletwo=mdputri7t at18pt
+\font\sectionfont=rm-kurierh at18pt
+\font\subsectionfont=rm-kurierb at14pt
+\font\subsubsectionfont=rm-kurierb at12pt
+\font\sansrm=rm-kurierl at10pt
+\font\foliofont=mdbchr7t at9pt
+\font\amstexfont=cmsy10 at7.5pt
+\font\dev=dvng10 scaled \magstep1
+\font\letterone=RoyalIn at36pt
+
+
+%%%%%%%%%% Packages %%%%%%%%%%
+%%% Eplain
+\input eplain % Add Eplain before AmSTeX
+\beginpackages
+\usepackage{url}
+\usepackage{color}
+\usepackage{graphicx}
+\endpackages
+\enablehyperlinks[dvipdfm] % Enables hyperlinks using Eplain
+%\hlopts{colormodel=named,color=Black} % Produces links in black color
+%% Color
+\definecolor{brown}{rgb}{.7,.2,.2}
+
+
+%%% AmSTeX
+\input amstex
+\UseAMSsymbols
+
+\catcode`@=12
+
+%%% eps files
+\input epsf % Includes files like pictures and figures in eps format
+
+
+
+
+%%%%%%%%%% Page characteristics %%%%%%%%%%
+\magnification=1120
+\parindent=20pt
+\parfillskip=\parindent plus1fil
+\everypar{\looseness=-1}
+\headline{} \footline{}
+\vsize=24truecm
+\hoffset-2.9mm
+\settabs 20 \columns
+\exhyphenpenalty10000 % stops TeX to break words at dashes
+\hyphenpenalty200
+
+
+
+%%%%%%%%%% Definitions %%%%%%%%%%
+\def\bs{\bigskip}%
+\def\ms{\medskip}%
+\def\sk{\smallskip}%
+\def\cl{\centerline}%
+\def\ii{\noindent}%
+\def\pic#1#2#3{\bigskip\cl{\epsfxsize#1\epsfbox{#2.eps}}\par\cl{\eightrm #3}}%
+\def\amstex{{\amstexfont A\kern-.1667em\lower.5ex\hbox{M}\kern-.125em S}-\capstex}%
+\def\xetex{X\lower0.5ex\hbox{\kern-0.11em\reflectbox{E}}\kern-0.165em\TeX}%
+\def\latex{L\setbox0=\hbox{\sc A}\kern-0.5766\wd0\raise0.41ex\hbox{\sc A}\setbox1=\hbox{T}\kern-.177\wd1\TeX}%
+\def\xelatex{X\lower0.5ex\hbox{\kern-0.11em\reflectbox{E}}\kern-0.13em\latex}%
+\def\capstex{{\caps t\kern-.122em\lower.38ex\hbox{e}\kern-.11em x}}%
+\def\capslatex{{\caps l\setbox0=\hbox{\sevencaps a}\kern-0.5888\wd0{\raise0.33ex\hbox{\sevencaps a}}\setbox1=\hbox{t}\kern-.2\wd1\capstex}}%
+\def\capsxetex{{\caps x\lower0.38ex\hbox{\kern-0.1em\reflectbox{e}}\kern-0.13em\capstex}}%
+\def\capsxelatex{{\caps x\lower0.38ex\hbox{\kern-0.1em\reflectbox{e}}\kern-0.122em\capslatex}}%
+\def\fontss{\baselineskip=2.7ex plus0pt minus0pt%
+\spaceskip=0.29em plus0.1em minus0.1em}%
+\def\footnote#1{\numberedfootnote{\hskip-7mm\hbox to 20cm{\vtop{\hangindent\parindent\hangafter1\eightrm\fontss #1}}}}%
+\def\quote#1{\sk\leftskip10mm{\sl\noindent #1}\sk \leftskip0mm\rightskip0mm}%
+\def\emdash{\hbox{\kern0.15em---\kern0.15em}\relax}%
+\def\endash{\hbox{\kern0.15em--\kern0.15em}\relax}%
+
+
+\def\sample{\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+\noindent{\bf Euler Formula}: The Euler formula, also known as {\bf Euler identity}, states
+$$e^{\imath x} =\cos(x) + \imath \sin(x), $$
+where $\imath$~is the {\sl imaginary unit}.
+
+The Euler formula can be expanded as a series:
+$$\eqalign {e^{\imath x}
+&= \sum_{n=0}^{\infty} {(\imath x)^n\over{n!}}\cr
+&= \sum_{n=0}^{\infty}{(-1)^{n}x^{2n}\over (2n)!} + \imath\sum_1^{\infty}{(-1)^{n-1}x^{2n-1}\over(2n-1)!}\cr
+&= \cos(x) + \imath\sin(x).\cr}$$
+
+\bigskip\bigskip
+\noindent{\bf Cauchy Integral Theorem}: If $f(z)$ is analytic and its partial derivatives are continuous throughout some simply connected region~$R$,~then
+$$\oint_\gamma f(z)\,dz = 0$$
+for any closed contour~$\gamma$ completely contained in~$R$.\vskip2mm
+}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+%\input mathcharacters
+}
+
+
+%%%%%%%%%% Chapter, Section %%%%%%%%%%
+\newcount\sectionno\sectionno=0 % For sections
+\newcount\subsectionno\subsectionno=0 % For subsections
+\newcount\subsubsectionno\subsubsectionno=0 % For subsubsections
+\definecolor{sectioncolor}{rgb}{0.22,0.38,0.62}
+% NOTE: No two cross-references should be the same. This will cause chaos. In other words, no two chapters can the same "label name"
+
+\def\section#1#2{\newpage
+{\definexref{#2}{#2}{}}
+{\writetocentry{section}{\refs{#2}}}
+{\special{pdf: outline 1 << /Title (#2)/F 0 /Dest [@thispage /FitH @ypos ] >> }}
+\subsectionno=0 % For subsections
+\centerline{\textcolor{sectioncolor}{\sectionfont\fontss #1}}
+\nopagebreak\bigskip\nopagebreak\noindent}
+
+\def\subsection#1{
+{\definexref{#1}{#1}{}}
+{\writetocentry{subsection}{\kern5mm\refs{#1}}}
+{\special{pdf: outline 2 << /Title (#1)/F 0 /Dest [@thispage /FitH @ypos ] >> }}
+\bigskip\bigskip\medskip\goodbreak
+{\global\advance\subsectionno by 1
+ \noindent{\textcolor{sectioncolor}{\subsectionfont\fontss #1}}}
+\nopagebreak\medskip\nopagebreak\noindent}
+
+\def\subsubsection#1{
+{\definexref{#1}{#1}{}}
+{\writetocentry{subsubsection}{\kern5mm\refs{#1}}}
+{\special{pdf: outline 2 << /Title (#1)/F 0 /Dest [@thispage /FitH @ypos ] >> }}
+\bigskip\bigskip\medskip\goodbreak
+{\global\advance\subsubsectionno by 1
+ \noindent{\textcolor{sectioncolor}{\subsubsectionfont\fontss #1}}}
+\nopagebreak\medskip\nopagebreak\noindent}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_charter
+\fontss % font change and spacing
+\frenchspacing
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%% Cover %%%%%%%%%%
+{\special{pdf: outline 1 << /Title (Cover)/F 0 /Dest [@thispage /FitH @ypos ] >> }}
+{\centerline{{\color{brown}\webomints\char'160}\hskip8mm\titlefont\color{sectioncolor} font-change\hskip8mm{\color{brown}\webomints\char'161}}\bs
+\centerline{{\color{brown}\webomints\char'125\char'126}}
+\bs
+\centerline{Version \ 2015.2}
+\bs\bs
+{{\color{sectioncolor}\titleone\fontss\centerline{Macros to Change Text \& Math fonts in \TeX}\kern3mm
+\centerline{{\titleone 45}{\titletwo\fontss \ Beautiful Variants}}}
+\vskip2cm
+\centerline{\color{brown}\webomints \char'063}
+\vskip2cm
+\centerline{\twelvebf\fontss Amit Raj Dhawan}\sk
+\centerline{\href{mailto:amitrajdhawan@gmail.com}{\sansrm amitrajdhawan\@gmail.com}}\sk
+\centerline{\rm September 2, 2015}
+
+\vskip6cm
+
+% Licence
+\hrule\kern1pt\hrule\sk
+\ii{\epsfxsize2cm\epsfbox{by-sa.eps}}
+\vskip-7mm
+\vbox{\leftskip3cm\parindent=0pt\eightrm\fontss This work had been released under \href{http://creativecommons.org/licenses/by-sa/3.0/}{\eightbf Creative Commons Attribution-Share Alike 3.0 Unported License} on July 19, 2010.
+
+You are free to {\eightitbf Share\/} (to copy, distribute and transmit the work) and to {\eightitbf Remix\/} (to adapt the work) provided you follow the {\eightitbf Attribution\/} and {\eightitbf Share Alike\/} guidelines of the licence. For the full licence text, please visit:
+\href{http://creativecommons.org/licenses/by-sa/3.0/legalcode}{\eightrm http://creativecommons.org/licenses/by-sa/3.0/legalcode}.}\leftskip0cm
+\sk\hrule\kern1pt\hrule
+
+\BlackBoxes
+
+
+
+
+
+
+%%%%%%%%% Quote %%%%%%%%%%%%
+{\input font_artemisia_euler
+
+\sixteenrm \fontss
+\
+
+\vskip1cm
+\cl{\webomints\char'064}
+\vskip2cm
+
+\leftskip1cm \rightskip4cm
+
+\raggedright
+\ii When I reach the destination, more than I realize that I have realized the goal, I~am occupied with the reminiscences of the journey. It strikes to me again and again, ``Isn't the journey to the goal the\break real attainment of the goal?'' In this way even if I miss {\sixteencaps the} goal, I still have attained {\sixteencaps some} goal.
+
+
+}
+\leftskip0cm \rightskip0cm
+
+
+
+
+
+
+
+%%%%%%%%%% Contents %%%%%%%%%%
+\newpage\pageno=-3\footline{\centerline{\foliofont\folio}}
+{\special{pdf: outline 1 << /Title (Contents)/F 0 /Dest [@thispage /FitH @ypos ] >> }}
+\cl{\textcolor{sectioncolor}{\sectionfont Contents}}
+
+
+{\parskip0pt\bs\bs
+\readtocfile}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%% Introduction %%%%%%%%%%
+\section{Introduction}{Introduction}
+\pageno=1
+
+
+\hbox{\letterone \TeX\ }\vskip-14.5mm\ii \hangindent2.6cm\hangafter-3 typesets documents in Computer Modern fonts by default.\footnote{Typographically, the correct expression is, ``\capstex\ typesets documents in Computer Modern typefaces by default.'' But most people (including me) use the words {\eightit font\/} and {\eightit typeface\/} synonymously. In this manual such distinction has been avoided.} Knuth's Computer Modern fonts are very elegant but sometimes we all look for a change. Many of us want to typeset \capstex\ documents in fonts other than Computer Modern. At the user level, changing the font in \capstex's {\sl text mode}, i.e.\ the text font, is simple and there are many free fonts available with various typefaces like {\rm roman}, {\bf bold}, {\it italic}, {\sl slanted}, {\itbf italic bold}, {\slbf slanted bold}, {\caps Caps}, {\capsbf Bold Caps}, etc. The difficulty lies in changing the math fonts in \capstex\ documents. This is mainly due to the lack of math fonts for \capstex. Another reason is that switching the font in {\sl math mode\/} is not as simple as switching the font in {\sl text mode}. For \capslatex\ there are various packages that can be used to change the font\emdash text and math\emdash with one statement. But for \capstex, I could not find an easy way to change the font in the document\emdash text and math. Using one font in {\sl text mode\/} and another in {\sl math mode\/} can spoil the look of the document. It is always desired to have text and math in the same font; text in New Century and math in Computer Modern do not go well. Though there are some combinations, as we will see later, that go well.
+
+Being able to choose from different fonts is quite advantageous. Computer Modern fonts look very good on paper, esp.\ on inkjet printouts, but they look relatively thin on new computer screens (LCDs) and on laser printouts. For slide shows, most people prefer sans-serif fonts of relatively heavier weight. The idea of changing the entire font family which includes various typefaces like boldface, italics, etc., and the math fonts, with one control statement has been the motivation behind my work. For this purpose I have written 45~\capstex\ macros that instruct \capstex\ to typeset documents in the fonts called by those macros. In this document, the use of the above mentioned 45~font macros has been displayed. Each of these macros changes the fonts in the document globally, and can be used locally too, i.e.\ within a group. Now a \capstex\ document, which is normally produced in Computer Modern, can be produced in 45 other font variants. These macro files can be easily understood, and changed if convenient. Each macro has various typefaces declared at 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, and 20\,pt~sizes.
+
+To display our 45~font changing macros in action, a sample text has been typeset 45 times but in different fonts. The fonts/font~families called by our macros have almost all the glyphs contained in the Computer Modern family. In general, these fonts have more glyphs than Computer Modern. To see all the glyphs in a font, please use Werner Lemberg's \href{http://www.tex.ac.uk/ctan/help/Catalogue/entries/fontchart.html}{fontchart}~utility. In a few cases, e.g., in Epigrafica normal font~(\verbatim epigrafican8r|endverbatim), some important glyphs like $\Gamma$ and~$\Theta$ are missing. Our macro takes care of this; the user need not bother unless something very unusual is demanded from~\capstex.
+
+
+
+\subsection{Usage}These macros have been bundled as a package called {\color{brown}\verbatim font-change|endverbatim} which is included in {\caps m{\eightrm i}k}\capstex\ and \capstex~{\caps l{\eightrm ive}} distributions. The package can also be downloaded from \href{http://www.ctan.org/tex-archive/macros/plain/contrib/font-change/}{\caps ctan}. If our \capstex\ installation has the package {\color{brown}\verbatim font-change|endverbatim} installed then we can readily use it, e.g., to typeset our document in Charter, we have to type {\color{brown}\verbatim \input font_charter|endverbatim} in our source file. Of course, in order to use any of the macros of font-change, our \capstex\ installation should have the required fonts. In case we do not have {\color{brown}\verbatim font-change|endverbatim} installed on our \capstex\ system and we are lazy to install it, then we can download the package from the internet and follow the following procedure. Please read the following to know about the available options and to see the macros in~effect.
+
+Suppose we would like to typeset our \capstex\ document in Charter font. To do this we have to copy the \capstex\ macro file {\color{brown}\verbatim font_charter.tex|endverbatim} to the directory~(folder) which contains our \capstex\ source file. In our \capstex\ source file, we have to type {\color{brown}\verbatim \input font_charter|endverbatim}. This will change the font to Charter from the point where the statement {\color{brown}\verbatim \input font_charter|endverbatim} was declared. We can declare {\color{brown}\verbatim \input font_charter|endverbatim} in a closed group ({\color{brown}\verbatim {\input font_charter ... }|endverbatim}) to change the font to Charter in that group, provided no other font change is called in that group or its~sub-group.
+
+Another way to use the font changing macro files is to put them in a folder (say ``font-change") in some drive~(say ``C'') and then call these files in our \capstex\ source file. If we want to use the Charter font, we should type {\color{brown}\verbatim \input C:/font-change/font_charter|endverbatim} to get the desired change. If we have put the font changing macro files in a folder that has space(s) in its name~(say ``font change''), then we should type {\color{brown}\verbatim \input "C:/font change/font_charter"|endverbatim} to use the Charter font.
+
+The complete change of font will be at the default size in \capstex\ (10\,pt), though a little manipulation with the macro file will enable us to use the text and math fonts at smaller and larger point~changes.
+
+\goodbreak The basic typeface changing \capstex\ control statements\sk
+{\obeylines\leftskip1cm
+{\color{brown}\verbatim\rm|endverbatim} \dots {\rm roman}
+{\color{brown}\verbatim\it|endverbatim} \dots {\it italic}
+{\color{brown}\verbatim\bf|endverbatim} \dots {\bf boldface}
+{\color{brown}\verbatim\sl|endverbatim} \dots {\sl slanted}
+{\color{brown}\verbatim\tt|endverbatim} \dots {\tt typewriter}
+\leftskip0cm}\sk
+
+\ii hold their usual meaning. All the macro files that this {\caps pdf} mentions have the above mentioned five options. In addition, most macro files have other useful options too. These~are:\sk
+{\obeylines\leftskip1cm
+{\color{brown}\verbatim\itbf|endverbatim} \dots {\itbf italic boldface}
+{\color{brown}\verbatim\slbf|endverbatim} \dots {\slbf slanted boldface}
+{\color{brown}\verbatim\caps|endverbatim} \dots {\caps Caps}
+{\color{brown}\verbatim\capsbf|endverbatim} \dots {\capsbf Caps in Boldface}
+\leftskip0cm}\ms
+
+In the {\sl text mode}, the above mentioned typefaces can be used at 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, and 20\,pt~sizes. This is done by typing the size in words between the backslash~($\backslash$) and the words that declare the typeface. For example, if we want to typeset some text in bold at~14\,pt then we have to use the control statement {\color{brown}\verbatim \fourteenbf|endverbatim}.
+
+
+
+
+
+\newpage\subsection{Example}A sample \capstex\ source file as shown below:
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\obeylines\parindent=0pt\color{brown}\verbatim
+\parindent=0pt
+\input C:/font-change/font_cm
+This is the {\bf Computer Modern font}. The {\twelveslbf Gamma function\/}
+is defined as:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$
+
+\input C:/font-change/font_charter
+This is the {\bf Charter font}. The {\twelveslbf Gamma function\/}
+is defined as:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$
+
+{ % begin group
+\input C:/font-change/font_century
+This is the {\bf New Century Schoolbook font}. The {\twelveslbf Gamma
+function\/} is defined as:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$
+} % end group
+
+Now we are back to Charter.|endverbatim}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+
+
+
+
+\nopagebreak\ii after compilation will produce:\nopagebreak
+
+
+
+
+\bigskip\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\parindent=0pt
+\input font_cm \fontss
+This is the {\bf Computer Modern font}. The {\twelveslbf Gamma function\/} is defined~as:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$
+
+\input font_charter \fontss
+This is the {\bf Charter font}. The {\twelveslbf Gamma function\/} is defined as:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$
+
+{\input font_century \fontss
+This is the {\bf New Century font}. The {\twelveslbf Gamma function\/} is defined as:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$}
+
+Now we are back to Charter.}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+
+
+\subsection{AMS Symbols}Some fonts, e.g., Kp-Fonts, have support for {\caps ams} symbols. Fonts {\verbatim msam|endverbatim} and {\verbatim msbm|endverbatim} of the {\caps ams} font collection contain these symbols. Blackboard letters~($\Bbb A, \Bbb B, \Bbb C, \Bbb R, \dots$) are a part of {\caps ams} symbols. If we are using \amstex, and we are using the preprint style or we have already declared {\color{brown}\verbatim \UseAMSsymbols|endverbatim} (default \amstex\ command), then we can use {\caps ams} symbols with some of the macros of {\color{brown}\verbatim font-change|endverbatim} by declaring {\color{brown}\verbatim \UseAMSsymbols|endverbatim} {\bf again} after calling the macro. In a while we will look at an example of this implementation.
+
+If we have used instructions {\color{brown}\verbatim \loadmsam|endverbatim} or {\color{brown}\verbatim \loadmsbm|endverbatim} of \amstex, we can use the statements {\bf again} after declaring the {\color{brown}\verbatim font-change|endverbatim} macro to obtain the desired results. The control sequence {\color{brown}\verbatim \UseAMSsymbols|endverbatim} subsumes the instructions {\color{brown}\verbatim \loadmsam|endverbatim} and {\color{brown}\verbatim \loadmsbm|endverbatim}.
+
+If we would like to return to the default {\caps ams} fonts\emdash {\verbatim msam|endverbatim} and {\verbatim msbm|endverbatim}\emdash we will have to input the macro file {\color{brown}\verbatim default-amssymbols.tex|endverbatim} by instructing {\color{brown}\verbatim \input default-amssymbols|endverbatim} in our source file. This small file has just the following two defintions:
+
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\obeylines\parindent=0pt\color{brown}\verbatim
+\def\loadmsam{\font\tenmsa=msam10 \font\sevenmsa=msam7 \font\fivemsa=msam5
+\fam\msafam
+\textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa
+\scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\loadmsam
+%
+\def\loadmsbm{\font\tenmsb=msbm10 \font\sevenmsb=msbm7 \font\fivemsb=msbm5
+\fam\msbfam
+\textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb
+\scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\loadmsbm
+|endverbatim}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip
+
+It will be mentioned further if a macro of package {\color{brown}\verbatim font-change|endverbatim} offers {\caps ams} symbols support. The following shows the discussed in action (the character in {\color{red}red} color is from {\caps ams} symbols):
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\obeylines\parindent=0pt\color{brown}\verbatim
+\input amstex % Input AmSTeX
+\UseAMSsymbols % Calls AMS symbols
+$$f:{\color{red}\Bbb R}^3\to R$$
+
+\input font_kp % Call Kp-Fonts
+\UseAMSsymbols % Uses jkpsya and jkpsyb of Kp-Fonts instead of msam and msbm of AMS fonts
+$$f:{\color{red}\Bbb R}\to R$$
+
+\input default-amssymbols % Return to default
+$$f:{\color{red}\Bbb R}^3\to R$$
+|endverbatim}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip
+
+\nopagebreak\ii upon compilation produces:\nopagebreak
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\input font_cm
+$$f:{\color{red}\Bbb R}^3\to R$$
+\input font_kp
+\UseAMSsymbols
+$$f:{\color{red}\Bbb R}^3\to R$$
+\input default-amssymbols
+$$f:{\color{red}\Bbb R}^3\to R$$}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip
+
+
+
+\subsection{Available Weights}
+Some font changing macros of the package {\color{brown}\verbatim font-change|endverbatim} offer light, medium, and bold weights. There are many font families that offer the bold weight variant of the math fonts, but we have not all included such variants as they do not supply a heavier font to produce the contrast. If we type all text in boldface then at places where we would like to get bolder we are be left without an option. The philosophy of {\color{brown}\verbatim font-change|endverbatim} says that to use bold for all text and math we need a heavier typeface available within the type family, which is heavier than the usual bold. Font families Kp-Fonts, Antykwa Toru\'nska, Iwona, and Kurier include such weights and they have been included in {\color{brown}\verbatim font-change|endverbatim}. For instance, macro {\color{brown}\verbatim font_kurier-bold|endverbatim}, which uses boldface as the normal font~(in math and text), uses the heavy weight font as the~boldface.
+
+
+
+\subsection{Changes and warning}The fonts used in these 45 macros are included in \href{http://miktex.org/}{{\caps m{\eightrm i}k}\capstex} and \href{http://www.tug.org/texlive/}{\capstex~{\caps l{\eightrm ive}}} distributions. All these mac\-ros should work smoothly with a full installation of {{\caps m{\eightrm i}k}\capstex} (version 2.9.4503 tested). The macros should work smoothly with \capstex~{\caps l{\eightrm ive}}~2014 too, but \capstex~{\caps l{\eightrm ive}}~2013 does not contain the recent font updates, due to which many macros from the new version of {\color{brown}\verbatim font-change|endverbatim} might not work with \capstex~{\caps l{\eightrm ive}} 2013 or earlier. But this should not be a big issue as the installation disk of \capstex~{\caps l{\eightrm ive}} 2013 contains the older version of {\color{brown}\verbatim font-change|endverbatim}, which has older font names. Many macros of {\color{brown}\verbatim font-change|endverbatim} use {\verbatim inconsolata|endverbatim} font as the typewriter font. The font was {\verbatim rm-inconsolata|endverbatim} in version 2010.1 of {\color{brown}\verbatim font-change|endverbatim}. The new version of {\verbatim inconsolata|endverbatim}, which has been updated in {\caps m{\eightrm i}k}\capstex}~2.9.4503, does not contain any font named {\verbatim rm-inconsolata|endverbatim}. Therefore in {\color{brown}\verbatim font-change|endverbatim}~(version 2013.1), we have chosen another {\verbatim inconsolata|endverbatim} font called {\verbatim ly1-zi4r-1|endverbatim}, which is the same or at least looks just the same like {\verbatim rm-inconsolata|endverbatim}. Some other changes in names of fonts have been too, e.g. in Libertine fonts. If the user, who has a complete installation of {{\caps m{\eightrm i}k}\capstex} or TeXLive, is encountered with missing font issues when using {\color{brown}\verbatim font-change|endverbatim}, then it is recommended to use an older or newer version of {\color{brown}\verbatim font-change|endverbatim}.
+
+\footline{\centerline{\foliofont\folio}}
+
+
+These 45~font changing macros have worked successfully with plain~\capstex, and a combination of plain~\capstex\ and other formats based on plain~\capstex, e.g., \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/amstex.html}{\amstex} and~\href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/eplain.html}{eplain}. The macros work smoothly with \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pdftex.html}{pdf\capstex} and \href{http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=xetex}{\capsxetex} too. Please note that these macros do not work with \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/latex.html}{\capslatex}, pdf\capslatex\hfuzz2pt, or \capsxelatex.
+
+\hfuzz1pt
+If we are typesetting our document in English with any mathematics, then using these macros should be trouble free. They might demur when we try to type letters like \l, esp.\ when using typefaces like {\slbf slanted boldface\/} or {\caps Caps}. These are issues of missing glyphs and encoding. In the current typeface (Charter, regular roman, {\verbatim mdbchr7t|endverbatim}), {\color{brown}\verbatim\l|endverbatim} produces \l, {\color{brown}\verbatim\slbf \l|endverbatim} produces {\slbf \l}, but {\color{brown}\verbatim\caps\l|endverbatim} produces~{\caps \l}.
+
+
+
+
+
+Sans-serif fonts do not have {\it italics}\emdash they only have {\sl slanted\/} glyphs. To make the font changing macro files more consistent, both italics and slanted commands, e.g., {\color{brown}\verbatim\it|endverbatim} and {\color{brown}\verbatim\sl|endverbatim}, produce {\sl slanted} typefaces in case of sans-serif fonts and in those fonts that do not have distinct italic and slanted glyphs. Displayed further are samples exhibiting the change of \capstex's text and math fonts using macros of {\color{brown}\verbatim font-change|endverbatim}. All the fonts used in any macro of {\color{brown}\verbatim font-change|endverbatim} are also listed in this~document.
+
+It is hoped that these macros work well and do not raise compatibility issues but it can not be promised. There is no warranty. If the user find any bugs, or has suggestions or complaints, please email them to~me.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% Macros %%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\section{\sixteenbf\fontss Charter}{Charter}
+\sample
+\ii The Charter font is declared by typing {\color{brown}\verbatim\input font_charter|endverbatim}. The font family uses fonts from the \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathdesign-charter.html}{mdbch} family, which corresponds to \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/charter.html}{Bitstream Charter} text fonts. This family is a part of Paul Pichaureau's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathdesign.html}{MathDesign} project. The \href{http://new.myfonts.com/fonts/bitstream/charter-bt-pro/}{Charter font} was originally designed by Matthew Carter for Bitstream Inc.\ in 1987. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_charter|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil mdbchr7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil mdbchb7t &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mdbchri7m &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil md-chr7y &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil mdbchbi7t &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil mdbchr7v &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil mdbchbo7t &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil mdbchri7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil mdbchrfc8t &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil mdbchro7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil mdbchbfc8t &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+
+\input font_utopia \fontss
+\section{\sixteenbf\fontss Utopia}{Utopia}
+\sample
+\ii The Utopia font is declared by typing {\color{brown}\verbatim\input font_utopia|endverbatim}. The font family uses most of its fonts from the \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathdesign-utopia.html}{mdput} family, which corresponds to \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/utopia.html}{Adobe Utopia} text fonts. This family is a part of Paul Pichaureau's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathdesign.html}{MathDesign}~project. The font family is very complete and includes the math fonts too. For inter-letter spacing reasons, macro {\color{brown}\verbatim font_utopia.tex|endverbatim} uses math italic font and math symbols font from Michel Bovani's \href{http://www.ctan.org/tex-archive/fonts/fourier-GUT/}{fourier} package. The \href{http://new.myfonts.com/fonts/adobe/utopia/}{Utopia font} was originally designed by Robert Slimbach for Adobe in~1989.
+
+Math italic~(\verbatim mdputri7m|endverbatim) and math symbols~(\verbatim md-utr7y|endverbatim) from the \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathdesign-utopia.html}{mdput} family can also be used. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_utopia|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil mdputr7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil mdputb7t &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil futmii &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil futsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil mdputbi7t &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil mdputr7v &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil mdputbo7t &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil mdputri7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil mdputrfc8t &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil mdputro7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil mdputbfc8t &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_century \fontss
+\section{\sixteenbf\fontss New Century Schoolbook}{New Century Schoolbook}
+\sample
+\ii The New Century Schoolbook font is declared by typing {\color{brown}\verbatim\input font_century|endverbatim}. The font family \NoBlackBoxes uses fonts from the \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/tex-gyre-schola.html}{TeX Gyre Schola} family, which corresponds to \href{http://store1.adobe.com/cfusion/store/html/index.cfm?store=OLS-US&event=displayFontPackage&code=1240}
+{Adobe New Century Schoolbook} text~fonts. The \href{http://new.myfonts.com/fonts/adobe/new-century-schoolbook/}{Century Schoolbook} font was created by Morris Fuller Benton between 1918 and~1921.
+
+\BlackBoxes
+The macro uses math italic~(fncmii) and math symbols~(fncsy) from Michael Zedler's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/fouriernc.html}{fouriernc} package. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_century|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes\eightrm\fontss
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-qcsr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-qcsb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil fncmii &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil fncsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-qsbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil cmex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil pncbo7t &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-qcsri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil rm-qcsr-sc &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil pncro7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil rm-qcsb-sc &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_palatino \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Palatino}{Palatino}
+\sample
+\ii The Palatino font is declared by typing {\color{brown}\verbatim\input font_palatino|endverbatim}. The font family uses fonts from Young Ryu's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pxfonts.html}{pxfonts} package, which corresponds to \href{http://www.myfonts.com/fonts/urw/palladio/}
+{{\caps urw++} Palladio} text fonts designed by Herman Zapf. The {\caps urw++} Palladio font is based on the \href{http://new.myfonts.com/fonts/adobe/palatino/}{Palatino font} which was originally\break designed by Hermann Zapf for the Stempel foundry in 1950. The fonts of this macro provide their own {\caps ams} symbols. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_palatino|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil pxr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil pxb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil pxmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil pxsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil pxbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil pxex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil pxbsl &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil pxi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil pxsc &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil pxsl &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil pxbsc &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+\bs\ii Matching {\caps ams} symbols: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+\input font_pagella \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Pagella}{Pagella}
+\sample
+\ii The Pagella font is declared by typing {\color{brown}\verbatim\input font_pagella|endverbatim}. Most of text is typeset using fonts from \href{http://www.gust.org.pl/projects/e-foundry/tex-gyre/pagella}{\capstex~Gyre Pagella} package and most math typesetting uses Diego Puga's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathpazo.html}{mathpazo} package, and some text~(slanted fonts) and some math~({\caps ams} symbols) is from Young Ryu's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pxfonts.html}{pxfonts}\emdash all of these correspond to \href{http://www.myfonts.com/fonts/urw/palladio/}
+{{\caps urw++} Palladio} text fonts designed by Herman Zapf. The {\caps urw++} Palladio font is based on the \href{http://new.myfonts.com/fonts/adobe/palatino/}{Palatino font} which was originally designed by Hermann Zapf for the Stempel foundry in 1950. The \capstex~Gyre \href{http://www.gust.org.pl/projects/e-foundry/tex-gyre/pagella}{Pagella} fonts can be said to be a bit more refined version of the Palatino fonts and they also have the ff ligature, which is missing in \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pxfonts.html}{pxfonts} or other Palatino-based fonts. The fonts of this macro provide their own {\caps ams} symbols. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_pagella|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-qplr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-qplb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil zplmr7m &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil zplmr7y &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-qplbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil zplmr7v &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil pxbsl &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-qplri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil rm-qplr-sc &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil pxsl &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil rm-qplb-sc &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+\bs\ii Matching {\caps ams} symbols: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_times \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Times}{Times}
+\sample
+\ii The Times font is declared by typing {\color{brown}\verbatim\input font_times|endverbatim}. The font family uses fonts from Young Ryu's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/txfonts.html}{txfonts} package, which corresponds to \href{http://new.myfonts.com/fonts/adobe/times/}{Adobe Times} text fonts. The \href{http://new.myfonts.com/fonts/adobe/times/}{Times font} was designed in 1931 by Stanley Morison at Monotype Corp. The fonts of this macro provide their own {\caps ams} symbols. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_times|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil txr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil txb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil txmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil txtt &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil txsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil txbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil txex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil txbsl &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil txi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil txsc &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil txsl &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil txbsc &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+\bs\ii Matching {\caps ams} symbols: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+\input font_bookman \fontss
+\section{\sixteenbf\fontss Bookman Font}{Bookman Font}
+\sample
+\ii The Bookman font is declared by typing {\color{brown}\verbatim\input font_bookman|endverbatim}. The font family uses fonts from Jackowski and Nowacki's (\capstex\ Gyre) \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/tex-gyre-bonum.html}{bonum} family, and Antonis Tsolomitis' \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kerkis.html}{kerkis} package; both these packages correspond to \href{http://new.myfonts.com/fonts/adobe/itc-bookman/}{ITC Bookman} text fonts. The math symbols and extension characters are taken from Young Ryu's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/txfonts.html}{txfonts} package. The \href{http://new.myfonts.com/fonts/adobe/itc-bookman/}{Bookman} font was originally designed by Alexander Phemister in 1860 for the Miller \& Richard foundry in Scotland. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_bookman|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-qbkr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-qbkb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil kmath8r &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil txtt &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil txsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-qbkbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil txex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil pbkdo7t &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-qbkri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil rm-qbkr-sc &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil pbklo7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil rm-qbkb-sc &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_kp \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Kp-Fonts}{Kp-Fonts}
+\sample
+\ii Kp-Fonts are declared by typing {\color{brown}\verbatim\input font_kp|endverbatim}. The font family uses fonts from Chris\-tophe \hfuzz4pt Caignaert's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kpfonts.html}{Kp-Fonts} family. The fonts of this macro provide their own {\caps ams} symbols. Details of this \capstex\ macro are given in the table~below.
+\bs\hfuzz=1pt
+\hfil{Font assignment in {\color{brown}\verbatim font_kp|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil jkpmn7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil jkpbn7t &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil jkpmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil jkpttmn7t &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil jkpsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil jkpbit7t &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil jkpex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil jkpbsl7t &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil jkpmit7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil jkpmsc7t &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil jkpmsl7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil jkpbsc7t &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+\bs\ii Matching {\caps ams} symbols: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+\input font_kp-light \fontss
+\UseAMSsymbols
+\section{{\sixteenbf\fontss Kp}-{\sixteenslbf Light}}{Kp-Light}
+\sample
+\ii Kp-{\sl Light\/} fonts are declared by typing {\color{brown}\verbatim\input font_kp-light|endverbatim}. The font family uses fonts from Christophe Caignaert's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kpfonts.html}{Kp-Fonts} family. This is the light version of Kp-Fonts. The difference between the medium~(regular) and light versions is visible in the text {\sl color} and of course, upon magnification of characters. The {\sl light\/} option, which certainly saves the printer tones, is claimed by the author of Kp-Fonts to be better on print than display. The fonts of this macro provide their own {\caps ams} symbols. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_kp-light|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil jkplmn7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil jkplbn7t &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil jkplmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil jkpttmn7t &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil jkplsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil jkplbit7t &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil jkpex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil jkplbsl7t &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil jkplmit7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil jkplmsc7t &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil jkplmsl7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil jkplbsc7t &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+\bs\ii Matching {\caps ams} symbols: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+
+\input font_antt \fontss
+\section{\sixteenbf\fontss Antykwa Toru\'nska}{Antykwa Torunska}
+\sample
+\ii The Antykwa Toru\'nska font is declared by typing {\color{brown}\verbatim\input font_antt|endverbatim}. The font family uses fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} package, which corresponds to Zygfryd Gardzielewski's \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska} text fonts. Zygfryd Gardzielewski designed Antykwa Toru\'nska in 1960 for Grafmasz typefoundry in Warsaw. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke (\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_antt|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-anttr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-anttb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-anttri &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-anttrz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-anttbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-anttr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-anttbi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-anttri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-anttrcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-anttri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil rx-anttbcap &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_antt-light \fontss
+\section{{\sixteenbf\fontss Antykwa Toru\'nska}-{\sixteenslbf Light}}{Antykwa Torunska-Light}
+\sample
+\ii The Antykwa Toru\'nska-{\sl Light} font is declared by typing {\color{brown}\verbatim\input font_antt-light|endverbatim}. The font family uses light and medium weight fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} package, which corresponds to Zygfryd Gardzielewski's \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska} text fonts. Zygfryd Gardzielewski designed Antykwa Toru\'nska in 1960 for Grafmasz typefoundry in Warsaw. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_antt-light|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-anttl &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-anttm &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-anttli &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-anttlz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-anttmi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-anttl &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-anttmi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-anttli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-anttlcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-anttli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-anttmcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+\input font_antt-medium \fontss
+\section{{\sixteenbf\fontss Antykwa Toru\'nska}-{\sixteenslbf Medium}}{Antykwa Torunska-Medium}
+\sample
+\ii The Antykwa Toru\'nska-{\sl Medium} font is declared by typing {\color{brown}\verbatim\input font_antt-medium|endverbatim}. The font family uses medium and bold weight fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} package, which corresponds to Zygfryd Gardzielewski's \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska} text fonts. Zygfryd Gardzie\-lewski designed Antykwa Toru\'nska in 1960 for Grafmasz typefoundry in Warsaw. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_antt-medium|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-anttm &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-anttb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-anttmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-anttmz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-anttbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-anttm &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-anttbi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-anttmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-anttmcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-anttmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-anttbcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_antt-condensed \fontss
+\section{{\sixteenbf\fontss Antykwa Toru\'nska}-{\sixteenslbf Condensed}}{Antykwa Torunska-Condensed}
+\sample
+\ii The Antykwa Toru\'nska-{\sl Condensed} font is declared by typing {\color{brown}\verbatim\input font_antt-condensed|endverbatim}. The font family uses condensed width regular and bold weight fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} package, which corresponds to Zygfryd Gardzielewski's \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska} text fonts. Zygfryd Gardzie\-lewski designed Antykwa Toru\'nska in 1960 for Grafmasz typefoundry in Warsaw. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_antt-condensed|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-anttcr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-anttcb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-anttcri &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-anttcrz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-anttcbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-anttcr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-anttcbi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-anttcri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-anttcrcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-anttcri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-anttcbcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_antt-condensed-light \fontss
+\section{{\sixteenbf\fontss Antykwa Toru\'nska}-{\sixteenslbf Condensed Light}}{Antykwa Torunska-Condensed Light}
+\sample
+\ii Antykwa Toru\'nska-{\sl Condensed Light} font is declared by typing {\color{brown}\verbatim\input font_antt-condensed-light|endverbatim}. The font family uses condensed width light and medium weight fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} package, which corresponds to Zygfryd Gardzielewski's \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska} text fonts. Zygfryd Gardzie\-lewski designed Antykwa Toru\'nska in 1960 for Grafmasz typefoundry in Warsaw. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_antt-condensed-light|endverbatim}~macro}\hfil
+
+ % Antykwa Toru?ska-Light
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-anttcl &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-anttcm &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-anttcli &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-anttclz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-anttcmi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-anttcl &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-anttcmi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-anttcli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-anttclcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-anttcli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-anttcmcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_antt-condensed-medium \fontss
+\section{{\sixteenbf\fontss Antykwa Toru\'nska}-{\sixteenslbf Condensed Medium}}{Antykwa Torunska-Condensed Medium}
+\sample
+\ii The Antykwa Toru\'nska-{\sl Condensed Medium} font can be used in \capstex\ documents after typing\break {\color{brown}\verbatim\input font_antt-condensed-medium|endverbatim}. The font family uses condensed width medium and bold weight fonts from J.\,M.\,Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} package, which corresponds to Zygfryd Gardzielewski's \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska} text fonts. Zygfryd Gardzie\-lewski designed Antykwa Toru\'nska in 1960 for Grafmasz typefoundry in Warsaw. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_antt-condensed-medium|endverbatim}~macro}\hfil
+
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-anttcm &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-anttcb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-anttcmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-anttcmz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-anttcbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-anttcm &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-anttcbi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-anttcmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-anttcmcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-anttcmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-anttcbcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_iwona \fontss
+\section{\sixteenbf\fontss Iwona}{Iwona}
+\sample
+\ii The Iwona font is declared by typing {\color{brown}\verbatim\input font_iwona|endverbatim}. The font family uses fonts from J.\;M.\break Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_iwona|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-iwonar &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-iwonab &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-iwonari &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-iwonarz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-iwonabi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-iwonar &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-iwonabi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-iwonari &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-iwonarcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-iwonari &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-iwonabcap &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+
+\input font_iwona-light \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Light}}{Iwona-Light}
+\sample
+\ii The Iwona-{\sl Light\/} font is declared by typing {\color{brown}\verbatim\input font_iwona-light|endverbatim}. The font family uses light and bold weight Iwona fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_iwona-light|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-iwonal &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-iwonam &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-iwonali &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-iwonalz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-iwonami &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-iwonal &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-iwonami &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-iwonali &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-iwonalcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-iwonali &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-iwonamcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+\input font_iwona-medium \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Medium}}{Iwona-Medium}
+\sample
+\ii The Iwona-{\sl Medium\/} font is declared by typing {\color{brown}\verbatim\input font_iwona-medium|endverbatim}. The font family uses\break medium and heavy weight Iwona fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_iwona-medium|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-iwonam &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-iwonah &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-iwonami &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-iwonamz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-iwonahi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-iwonam &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-iwonahi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-iwonami &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-iwonamcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-iwonami &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-iwonahcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+\input font_iwona-bold \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Bold}}{Iwona-Bold}
+\sample
+\ii The Iwona-{\sl Bold\/} font is declared by typing {\color{brown}\verbatim\input font_iwona-bold|endverbatim}. The font family uses bold and heavy weight Iwona fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_iwona-medium|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-iwonab &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-iwonah &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-iwonabi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-iwonabz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-iwonahi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-iwonab &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-iwonahi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-iwonabi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-iwonabcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-iwonabi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-iwonahcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+\input font_iwona-condensed \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Condensed}}{Iwona-Condensed}
+\sample
+\ii The Iwona-{\sl Condensed\/} font is declared by typing {\color{brown}\verbatim\input font_iwona-condensed|endverbatim}. The font family uses condensed width regular and bold weight Iwona fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_iwona-condensed|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-iwonacr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-iwonacb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-iwonacri &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-iwonacrz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-iwonacbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-iwonacr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-iwonacbi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-iwonacri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-iwonacrcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-iwonacri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-iwonacbcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+\input font_iwona-condensed-light \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Condensed-Light}}{Iwona-Condensed-Light}
+\sample
+\ii The Iwona-{\sl Condensed-Light\/} font is declared by typing {\color{brown}\verbatim\input font_iwona-condensed-light|endverbatim}. The font family uses condensed width light and medium weight Iwona fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_iwona-condensed-light|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-iwonacl &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-iwonacm &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-iwonacli &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-iwonaclz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-iwonacmi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-iwonacl &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-iwonacmi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-iwonacli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-iwonaclcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-iwonacli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-iwonacmcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_iwona-condensed-medium \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Condensed-Medium}}{Iwona-Condensed-Medium}
+\sample
+\ii The Iwona-{\sl Condensed-Medium\/} font is declared by typing {\color{brown}\verbatim\input font_iwona-condensed-medium|endverbatim}. The font family uses condensed width medium and heavy weight Iwona fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_iwona-condensed-medium|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-iwonacm &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-iwonach &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-iwonacmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-iwonacmz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-iwonachi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-iwonacm &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-iwonachi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-iwonacmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-iwonacmcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-iwonacmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-iwonachcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+\input font_iwona-condensed-bold \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Condensed-Bold}}{Iwona-Condensed-Bold}
+\sample
+\ii The Iwona-{\sl Condensed-Bold\/} font is declared by typing {\color{brown}\verbatim\input font_iwona-condensed-bold|endverbatim}. The font\break family uses condensed width bold and heavy weight Iwona fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_iwona-condensed-bold|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-iwonacb &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-iwonach &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-iwonacbi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-iwonacbz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-iwonachi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-iwonacb &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-iwonachi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-iwonacbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-iwonacbcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-iwonacbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-iwonachcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+\input font_kurier \fontss
+\section{\sixteenbf\fontss Kurier}{Kurier}
+\sample
+\ii The Kurier font is declared by typing {\color{brown}\verbatim\input font_kurier|endverbatim}. The font family uses fonts from J.\;M.\ Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. The Kurier font is very similar to Iwona font; Kurier is a bit extended and has ink traps. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_kurier|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-kurierr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-kurierb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-kurierri &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-kurierrz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-kurierbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-kurierr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-kurierbi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-kurierri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-kurierrcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-kurierri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-kurierbcap &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_kurier-light \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Light}}{Kurier-Light}
+\sample
+\ii The Kurier-{\sl Light\/} font is declared by typing {\color{brown}\verbatim\input font_kurier-light|endverbatim}. The font family uses light and medium weight Kurier fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. The Kurier font is very similar to Iwona font; Kurier is a bit extended and has ink traps. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_kurier-light|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-kurierl &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-kurierm &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-kurierli &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-kurierlz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-kuriermi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-kurierl &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-kuriermi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-kurierli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-kurierlcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-kurierli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-kuriermcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+\input font_kurier-medium \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Medium}}{Kurier-Medium}
+\sample
+\ii The Kurier-{\sl Medium\/} font is declared by typing {\color{brown}\verbatim\input font_kurier-medium|endverbatim}. The font family uses medium and heavy weight Kurier fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. The Kurier font is very similar to Iwona font; Kurier is a bit extended and has ink traps. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_kurier-medium|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-kurierm &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-kurierh &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-kuriermi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-kuriermz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-kurierhi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-kurierm &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-kurierhi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-kuriermi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-kuriermcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-kuriermi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-kurierhcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+\input font_kurier-bold \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Bold}}{Kurier-Bold}
+\sample
+\ii The Kurier-{\sl Bold\/} font is declared by typing {\color{brown}\verbatim\input font_kurier-bold|endverbatim}. The font family uses bold and heavy weight Kurier fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. The Kurier font is very similar to Iwona font; Kurier is a bit extended and has ink traps. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_kurier-medium|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-kurierb &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-kurierh &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-kurierbi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-kurierbz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-kurierhi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-kurierb &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-kurierhi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-kurierbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-kurierbcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-kurierbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-kurierhcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+\input font_kurier-condensed \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Condensed}}{Kurier-Condensed}
+\sample
+\ii The Kurier-{\sl Condensed\/} font is declared by typing {\color{brown}\verbatim\input font_kurier-condensed|endverbatim}. The font family uses condensed width regular and bold weight Kurier fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. The Kurier font is very similar to Iwona font; Kurier is a bit extended and has ink traps. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_kurier-condensed|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-kuriercr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-kuriercb &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-kuriercri &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-kuriercrz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-kuriercbi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-kuriercr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-kuriercbi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-kuriercri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-kuriercrcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-kuriercri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-kuriercbcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+\input font_kurier-condensed-light \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Condensed-Light}}{Kurier-Condensed-Light}
+\sample
+\ii The Kurier-{\sl Condensed-Light\/} font is declared by typing {\color{brown}\verbatim\input font_kurier-condensed-light|endverbatim}. The font family uses condensed width light and medium weight Kurier fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. The Kurier font is very similar to Iwona font; Kurier is a bit extended and has ink traps. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_kurier-condensed-light|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-kuriercl &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-kuriercm &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-kuriercli &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-kurierclz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-kuriercmi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-kuriercl &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-kuriercmi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-kuriercli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-kurierclcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-kuriercli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-kuriercmcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_kurier-condensed-medium \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Condensed-Medium}}{Kurier-Condensed-Medium}
+\sample
+\ii The Kurier-{\sl Condensed-Medium\/} font is declared by typing {\color{brown}\verbatim\input font_kurier-condensed-medium|endverbatim}. The font family uses condensed width medium and heavy weight Kurier fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. The Kurier font is very similar to Iwona font; Kurier is a bit extended and has ink traps. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_kurier-condensed-medium|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-kuriercm &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-kurierch &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-kuriercmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-kuriercmz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-kurierchi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-kuriercm &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-kurierchi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-kuriercmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-kuriercmcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-kuriercmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-kurierchcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+\input font_kurier-condensed-bold \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Condensed-Bold}}{Kurier-Condensed-Bold}
+\sample
+\ii The Kurier-{\sl Condensed-Bold\/} font is declared by typing {\color{brown}\verbatim\input font_kurier-condensed-bold|endverbatim}. The font family uses condensed width bold and heavy weight Kurier fonts from J.\;M.\;Nowacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} package, which corresponds to Ma\lstroke{}gorzata Budyta's text fonts. The Kurier font is very similar to Iwona font; Kurier is a bit extended and has ink traps. L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default plain \capstex\ control statements {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_kurier-condensed-bold|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-kuriercb &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-kurierch &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil mi-kuriercbi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil sy-kuriercbz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-kurierchi &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-kuriercb &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-kurierchi &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-kuriercbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil qx-kuriercbcap &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-kuriercbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil qx-kurierchcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_arev \fontss
+\section{\sixteenbf\fontss Arev}{Arev}
+\sample
+\ii The Arev font is declared by typing {\color{brown}\verbatim\input font_arev|endverbatim}. The font family uses fonts from S.\;G.\; Hartke's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/arev.html}{arev} package, which corresponds to \href{http://www.fontsquirrel.com/fonts/Bitstream-Vera-Sans}{Bitstream Vera Sans} text fonts. \href{http://www.gnome.org/fonts/}{Bitstream Vera} font was designed by Jim Lyles. Details of this {\eightrm\TeX} macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_arev|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil zavmr7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil zavmb7t &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil zavmri7m &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil fvmr8t &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil zavmr7y &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil favbi8t &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-kurierr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil favbi8t &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil favri8t &\strut\vrule\kern1pt\vrule\strut\hfil No caps &\strut\vrule\strut\hfil \emdash &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil favri8t &\strut\vrule\kern1pt\vrule\strut\hfil No caps in bold &\strut\vrule\strut\hfil \emdash &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_cmbright \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Computer Modern Bright}{Computer Modern Bright}
+\sample
+\ii The Computer Modern Bright font is declared by typing {\color{brown}\verbatim\input font_cmbright|endverbatim}. The font family uses fonts from Walter Schmidt's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/cmbright.html}{cmbright} package, which corresponds to Donald Knuth's Computer Modern Sans Serif text fonts. Computer Modern Bright fonts are lighter than Knuth's Computer Modern Sans Serif fonts. The fonts of this macro provide their own {\eightrm AMS} symbols. Details of this {\eightrm\TeX} macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_cmbright|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil cmbr10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil cmbrbx10 &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil cmbrmi10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil cmbrsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-lmssbo10 &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil ex-kurierr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-lmssbo10 &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil cmbrsl10 &\strut\vrule\kern1pt\vrule\strut\hfil No caps &\strut\vrule\strut\hfil \emdash &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil cmbrsl10 &\strut\vrule\kern1pt\vrule\strut\hfil No caps in bold &\strut\vrule\strut\hfil \emdash &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+\bs\ii Matching {\eightrm AMS} symbols: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_epigrafica_euler \fontss
+\section{\sixteenbf\fontss Epigrafica with Euler}{Epigrafica with Euler}
+\sample
+\ii This macro enables us to type text in Epigrafica font and math in Euler font. The macro is declared by typing {\color{brown}\verbatim\input font_epigrafica_euler|endverbatim}. The macro typesets text in fonts from Antonis Tsolomitis's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/epigrafica.html}{epigrafica} package (based on Hermann Zapf's \href{http://new.myfonts.com/fonts/adobe/optima/}{Optima} text font) and math in Walter Schmidt's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/eulervm.html}{Euler-VM} fonts (based on Hermann Zapf's Euler and Knuth's CM fonts). Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_epigrafica_euler|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil epigrafican8r &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil epigraficab8r &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil eurm10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil epigraficabi8r &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil euex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil epigraficabi8r &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil epigraficai8r &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil epigraficac8r &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil epigraficai8r &\strut\vrule\kern1pt\vrule\strut\hfil No caps in bold &\strut\vrule\strut\hfil \emdash &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_epigrafica_palatino \fontss
+\section{\sixteenbf\fontss Epigrafica with Palatino}{Epigrafica with Palatino}
+\sample
+\ii This macro enables us to type text in Epigrafica font and math in PX~Fonts. The macro is declared by typing {\color{brown}\verbatim\input font_epigrafica_palatino|endverbatim}. The macro typesets text in fonts from Antonis Tsolomitis's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/epigrafica.html}{epigrafica} package (based on Hermann Zapf's \href{http://new.myfonts.com/fonts/adobe/optima/}{Optima} text font) and math in Young Ryu's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pxfonts.html}{pxfonts} package (which corresponds to \href{http://www.adobe.com/type/browser/html/readmes/PalatinoStdReadMe.html#A2}
+{Adobe Palatino} text fonts). Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_epigrafica_palatino|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil epigrafican8r &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil epigraficab8r &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil pxmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil pxsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil epigraficabi8r &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil pxex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil epigraficabi8r &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil epigraficai8r &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil epigraficac8r &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil epigraficai8r &\strut\vrule\kern1pt\vrule\strut\hfil No caps in bold &\strut\vrule\strut\hfil \emdash &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+\input font_antp_euler \fontss
+\section{\sixteenbf\fontss Antykwa P\'o\char'252tawskiego with Euler}{Antykwa Poltawskiego with Euler}
+\sample
+\ii This macro enables us to type text in Antykwa P\'o\lstroke{}tawskiego font and math in Euler font. The macro is declared by typing {\color{brown}\verbatim\input font_antp_euler|endverbatim}. The macro typesets text in fonts from J.\;M.\;No\-wacki's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antp.html}{antp} package (based on Polish typographer, Adam P\'o\lstroke{}tawski's \href{http://nowacki.strefa.pl/poltawski-e.html}{Antykwa P\'o\lstroke{}tawskiego} text fonts) and math in Walter Schmidt's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/eulervm.html}{Euler-VM} fonts (based on Hermann Zapf's Euler and Knuth's CM fonts). L with stroke~(\Lstroke) is displayed by {\color{brown}\verbatim\Lstroke|endverbatim} and l with stroke~(\lstroke) is displayed by {\color{brown}\verbatim\lstroke|endverbatim}. When this macro is in use the default {\eightrm \TeX} control statement {\color{brown}\verbatim\L|endverbatim} or {\color{brown}\verbatim\l|endverbatim} do not work. Details of this {\eightrm \TeX} macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_antp_euler|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil rm-antpr10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil rm-antpb10 &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil eurm10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil rm-antpbi10 &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil euex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil rm-antpbi10 &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil rm-antpri10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil rm-antpr10-sc &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil rm-antpri10 &\strut\vrule\kern1pt\vrule\strut\hfil\eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil rm-antpb10-sc &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_bera_concrete \fontss
+\section{\sixteenbf\fontss Bera Serif with Concrete}{Bera Serif with Concrete}
+\sample
+\ii This macro enables us to type text in Bera serif and math in Concrete. The macro is declared by typing {\color{brown}\verbatim\input font_bera_concrete|endverbatim}. The macro typesets text in Bera serif fonts from Walter Schmidt's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/bera.html}{bera} package (based on \href{http://www.fontsquirrel.com/fonts/Bitstream-Vera-Serif?q[term]=bitstream+vera&q[search_check]=Y}{Bitstream Vera serif} font designed by Jim Lyles of Bitstream Inc.) and math is typeset using in Jackowski, Ry\char'242ko and Bzyl's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/cc-pl.html}{cc-pl} package (based on Knuth's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/concrete.html}{Concrete Roman} fonts). Details of this {\eightrm \TeX} macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_bera_concrete|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil fver8t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil fveb8t &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil pcmi10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil fvmr8t &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil cmex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil No caps &\strut\vrule\strut\hfil \emdash &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil No caps in bold &\strut\vrule\strut\hfil \emdash &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_bera_euler \fontss
+\section{\sixteenbf\fontss Bera Serif with Euler}{Bera Serif with Euler}
+\sample
+\ii This macro enables us to type text in Bera serif and math in Euler. The macro is declared by typing {\color{brown}\verbatim\input font_bera_euler|endverbatim}. The macro typesets text in Bera serif fonts from Walter Schmidt's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/bera.html}{bera} package (based on \href{http://www.fontsquirrel.com/fonts/Bitstream-Vera-Serif?q[term]=bitstream+vera&q[search_check]=Y}{Bitstream Vera serif} font designed by Jim Lyles of Bitstream Inc.) and math in Walter Schmidt's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/eulervm.html}{Euler-VM} fonts (based on Hermann Zapf's Euler and Knuth's CM fonts). Details of this {\eightrm \TeX} macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_bera_euler|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil fver8t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil fveb8t &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil eurm10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil fvmr8t &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil euex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil No caps &\strut\vrule\strut\hfil \emdash &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil No caps in bold &\strut\vrule\strut\hfil \emdash &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_bera_fnc \fontss
+\section{\sixteenbf\fontss Bera Serif with Fouriernc}{Bera Serif with Fouriernc}
+\sample
+\ii This macro enables us to type text in Bera serif and math in Fouriernc (originally used with New Century). The macro is declared by typing {\color{brown}\verbatim\input font_bera_fnc|endverbatim}. The macro typesets text in Bera serif fonts from Walter Schmidt's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/bera.html}{bera} package (based on \href{http://www.fontsquirrel.com/fonts/Bitstream-Vera-Serif?q[term]=bitstream+vera&q[search_check]=Y}{Bitstream Vera serif} font designed by Jim Lyles of Bitstream Inc.) and math using in Michael Zedler's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/fouriernc.html}{fouriernc} package. Details of this {\eightrm \TeX} macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_bera_fnc|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil fver8t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil fveb8t &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil fncmii &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil fvmr8t &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil fncsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil cmex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil No caps &\strut\vrule\strut\hfil \emdash &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil No caps in bold &\strut\vrule\strut\hfil \emdash &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_artemisia_euler \fontss
+\section{\sixteenbf\fontss Artemisia with Euler}{Artemisia with Euler}
+\sample
+\ii This macro enables us to type text in GFS Artemisia and math in Euler. The macro is declared by typing {\color{brown}\verbatim\input font_artemisia_euler|endverbatim}. The macro typesets text in Antonis Tsolomitis, George D.\ Matthiopoulos and The Greek Font Society's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/gfsartemisia.html}{GFS Artemisia fonts} and math in Walter Schmidt's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/eulervm.html}{Euler-VM} fonts (based on Hermann Zapf's Euler and Knuth's CM fonts). Details of this {\eightrm \TeX} macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_artemisia_euler|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil artemisiarg8a &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil artemisiab8a &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil zeurm10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil zeusm10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil artemisiabi8a &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil zeuex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil artemisiabo8a &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil artemisiai8a &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil artemisiasc8a &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil artemisiao8a &\strut\vrule\kern1pt\vrule\strut\hfil No caps in bold &\strut\vrule\strut\hfil \emdash &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_libertine_kp \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Libertine with Kp-Fonts}{Libertine with Kp-Fonts}
+\sample
+\ii This macro enables us to type text in Linux-Libertine and math in Kp-Fonts. The macro is declared by typing {\color{brown}\verbatim\input font_libertine_kp|endverbatim}. The macro typesets text in Michael Niedermair's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/libertine.html}{Linux-Libertine} font and math in Chris\-tophe Caignaert's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kpfonts.html}{Kp-Fonts}. The fonts of this macro provide their own {\caps ams} symbols. Details of this {\eightrm \TeX} macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_libertine_kp|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil LinLibertineT-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil LinLibertineTZ-lf-ot1 &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil jkpmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil jkpsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil jkpex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil LinLibertineT-lf-sc-ot1 &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil LinLibertineTZ-lf-sc-ot1 &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+\bs\ii Matching {\eightrm AMS} symbols: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+\input font_libertine_palatino \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Libertine with Palatino}{Libertine with Palatino}
+\sample
+\ii This macro enables us to type text in Linux-Libertine and math in PX~Fonts. The macro is declared by typing {\color{brown}\verbatim\input font_libertine_palatino|endverbatim}. The macro typesets text in Michael Niedermair's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/libertine.html}{Linux\-Liber\-tine} font and math in Young Ryu's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pxfonts.html}{pxfonts}, which corresponds to \href{http://www.myfonts.com/fonts/urw/palladio/}
+{{\caps urw++} Palladio} text fonts designed by Herman Zapf. The {\caps urw++} Palladio font is based on the \href{http://new.myfonts.com/fonts/adobe/palatino/}{Palatino font} which was originally designed by Hermann Zapf for the Stempel foundry in 1950. The fonts of this macro provide their own {\caps ams} symbols. Details of this {\eightrm \TeX} macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_libertine_palatino|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil LinLibertineT-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil LinLibertineTZ-lf-ot1 &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil pxmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil pxsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil pxex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil LinLibertineT-lf-sc-ot1 &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil LinLibertineTZ-lf-sc-ot1 &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+\bs\ii Matching {\eightrm AMS} symbols: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+\input font_libertine_times \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Libertine with Times}{Libertine with Times}
+\sample
+\ii This macro enables us to type text in Linux Libertine and math in TX~Fonts. The macro is declared by typing {\color{brown}\verbatim\input font_libertine_times|endverbatim}. The macro typesets text in Michael Niedermair's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/libertine.html}{Linux\-Libertine} font and math in Young Ryu's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/txfonts.html}{txfonts}, which corresponds to \href{http://new.myfonts.com/fonts/adobe/times/}{Adobe Times} text fonts. The fonts of this macro provide their own {\caps ams} symbols. Details of this {\eightrm \TeX} macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_libertine_times|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil LinLibertineT-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil LinLibertineTZ-lf-ot1 &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil txmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil txsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil txex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil LinLibertineT-lf-sc-ot1 &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Caps in Boldface &\strut\vrule\strut\hfil LinLibertineTZ-lf-sc-ot1 &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+\bs\ii Matching {\eightrm AMS} symbols: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_concrete \fontss
+\section{\fourteenrm Concrete}{Concrete}
+
+{\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+\noindent\underbar{\rm Euler Formula}: The Euler formula, also known as {\rm Euler identity}, states
+$$e^{\imath x} =\cos(x) + \imath \sin(x), $$
+where $\imath$~is the {\sl imaginary unit}.
+
+The Euler formula can be expanded as a series:
+$$\eqalign {e^{\imath x}
+&= \sum_{n=0}^{\infty} {(\imath x)^n\over{n!}}\cr
+&= \sum_{n=0}^{\infty}{(-1)^{n}x^{2n}\over (2n)!} + \imath\sum_1^{\infty}{(-1)^{n-1}x^{2n-1}\over(2n-1)!}\cr
+&= \cos(x) + \imath\sin(x).\cr}$$
+\bigskip\bigskip
+\noindent\underbar{\rm Cauchy Integral Theorem}: If $f(z)$ is analytic and its partial derivatives are continuous throughout some simply connected region~$R$,~then
+$$\oint_\gamma f(z)\,dz = 0$$
+for any closed contour~$\gamma$ completely contained in~$R$.\vskip2mm
+}\vrule}\hrule\BlackBoxes\bigskip\bigskip}
+
+\ii This macro enables us to type text and math in Donald Knuth's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/concrete.html}{Concrete} fonts. The macro is declared by typing {\color{brown}\verbatim\input font_concrete|endverbatim}. The macro uses Jackowski, Ry\'cko and Bzyl's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/cc-pl.html}{cc-pl} package which is based on Knuth's \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/concrete.html}{Concrete Roman} fonts. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_concrete|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil pcr10 &\strut\vrule\kern1pt\vrule\strut\hfil No boldface text &\strut\vrule\strut\hfil \emdash &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil pcmi10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil No italic boldface text &\strut\vrule\strut\hfil \emdash &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil cmex10 &\strut\vrule\kern1pt\vrule\strut\hfil No slanted boldface text &\strut\vrule\strut\hfil \emdash &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil pcti10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil pccsc10 &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil pcsl10 &\strut\vrule\kern1pt\vrule\strut\hfil No caps in bold &\strut\vrule\strut\hfil \emdash &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+\input font_cm \fontss
+\section{\sixteenbf\fontss Computer Modern}{Computer Modern}
+\sample
+\ii This macro enables us to type text in Computer Modern font (serif). Though \capstex\ typesets documents in Donald Knuth's Computer Modern fonts by default, this macro is being supplied so that the user can use the different sizes as discussed in this document and in case the main font of any \capstex\ document is other than Computer Modern then by using this macro we can set the font to Computer Modern in some group. The macro is declared by typing {\color{brown}\verbatim\input font_cm|endverbatim}. Details of this \capstex\ macro are given in the table~below.
+\bs
+\hfil{Font assignment in {\color{brown}\verbatim font_cm|endverbatim}~macro}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Typeface} &\strut\vrule\strut\hfil \textcolor{blue}{ Font name} &\cr \hrule
+\+\hfil \eightrm Roman text &\strut\vrule\strut\hfil cmr10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Boldface text &\strut\vrule\strut\hfil cmbx10 &\cr \hrule
+\+\hfil \eighti Math italic &\strut\vrule\strut\hfil cmmi10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Typewriter text &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Math symbols &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Italic boldface text &\strut\vrule\strut\hfil cmbxti10 &\cr \hrule
+\+\hfil \eightrm Math extension &\strut\vrule\strut\hfil cmex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Slanted boldface text &\strut\vrule\strut\hfil cmbxsl10 &\cr \hrule
+\+\hfil \eightit Italic text &\strut\vrule\strut\hfil cmti10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Caps &\strut\vrule\strut\hfil cmcsc10 &\cr \hrule
+\+\hfil \eightsl Slanted text &\strut\vrule\strut\hfil cmsl10 &\strut\vrule\kern1pt\vrule\strut\hfil No caps in Boldface &\strut\vrule\strut\hfil \emdash &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+%%%%%%%%%% Typefaces and Sizes %%%%%%%%%%
+\input font_charter \fontss
+\section{Typefaces and Sizes}{Typefaces and Sizes}
+
+\ii Given below are various typefaces and sizes that our macros offer.\bs\hrule\kern1pt\hrule\bs
+
+
+{\obeylines
+\rightline{Roman}\nopagebreak
+{\twentyrm \fontss This text is in 20\,pt size.}
+{\eighteenrm \fontss This text is in 18\,pt size.}
+{\sixteenrm \fontss This text is in 16\,pt size.}
+{\fourteenrm \fontss This text is in 14\,pt size.}
+{\twelverm \fontss This text is in 12\,pt size.}
+{\rm \fontss This text is in 10\,pt size.}
+{\ninerm \fontss This text is in 9\,pt size.}
+{\eightrm \fontss This text is in 8\,pt size.}
+{\sevenrm \fontss This text is in 7\,pt size.}
+{\sixrm \fontss This text is in 6\,pt size.}
+{\fiverm \fontss This text is in 5\,pt size.}
+\
+
+\rightline{Italic}\nopagebreak
+{\twentyit \fontss This text is in 20\,pt size.}
+{\eighteenit \fontss This text is in 18\,pt size.}
+{\sixteenit \fontss This text is in 16\,pt size.}
+{\fourteenit \fontss This text is in 14\,pt size.}
+{\twelveit \fontss This text is in 12\,pt size.}
+{\it \fontss This text is in 10\,pt size.}
+{\nineit \fontss This text is in 9\,pt size.}
+{\eightit \fontss This text is in 8\,pt size.}
+{\sevenit \fontss This text is in 7\,pt size.}
+{\sixit \fontss This text is in 6\,pt size.}
+{\fiveit \fontss This text is in 5\,pt size.}
+\
+
+\rightline{Slanted}\nopagebreak
+{\twentysl \fontss This text is in 20\,pt size.}
+{\eighteensl \fontss This text is in 18\,pt size.}
+{\sixteensl \fontss This text is in 16\,pt size.}
+{\fourteensl \fontss This text is in 14\,pt size.}
+{\twelvesl \fontss This text is in 12\,pt size.}
+{\sl \fontss This text is in 10\,pt size.}
+{\ninesl \fontss This text is in 9\,pt size.}
+{\eightsl \fontss This text is in 8\,pt size.}
+{\sevensl \fontss This text is in 7\,pt size.}
+{\sixsl \fontss This text is in 6\,pt size.}
+{\fivesl \fontss This text is in 5\,pt size.}
+\
+
+\newpage
+\rightline{Boldface}\nopagebreak
+{\twentybf \fontss This text is in 20\,pt size.}
+{\eighteenbf \fontss This text is in 18\,pt size.}
+{\sixteenbf \fontss This text is in 16\,pt size.}
+{\fourteenbf \fontss This text is in 14\,pt size.}
+{\twelvebf \fontss This text is in 12\,pt size.}
+{\bf \fontss This text is in 10\,pt size.}
+{\ninebf \fontss This text is in 9\,pt size.}
+{\eightbf \fontss This text is in 8\,pt size.}
+{\sevenbf \fontss This text is in 7\,pt size.}
+{\sixbf \fontss This text is in 6\,pt size.}
+{\fivebf \fontss This text is in 5\,pt size.}
+\
+
+\rightline{Italic boldface}\nopagebreak
+{\twentyitbf \fontss This text is in 20\,pt size.}
+{\eighteenitbf \fontss This text is in 18\,pt size.}
+{\sixteenitbf \fontss This text is in 16\,pt size.}
+{\fourteenitbf \fontss This text is in 14\,pt size.}
+{\twelveitbf \fontss This text is in 12\,pt size.}
+{\itbf \fontss This text is in 10\,pt size.}
+{\nineitbf \fontss This text is in 9\,pt size.}
+{\eightitbf \fontss This text is in 8\,pt size.}
+{\sevenitbf \fontss This text is in 7\,pt size.}
+{\sixitbf \fontss This text is in 6\,pt size.}
+{\fiveitbf \fontss This text is in 5\,pt size.}
+\
+
+\rightline{Slanted boldface}\nopagebreak
+{\twentyslbf \fontss This text is in 20\,pt size.}
+{\eighteenslbf \fontss This text is in 18\,pt size.}
+{\sixteenslbf \fontss This text is in 16\,pt size.}
+{\fourteenslbf \fontss This text is in 14\,pt size.}
+{\twelveslbf \fontss This text is in 12\,pt size.}
+{\slbf \fontss This is 10 \,pt slanted boldface.}
+{\nineslbf \fontss This text is in 9\,pt size.}
+{\eightslbf \fontss This text is in 8\,pt size.}
+{\sevenslbf \fontss This text is in 7\,pt size.}
+{\sixslbf \fontss This text is in 6\,pt size.}
+{\fiveslbf \fontss This text is in 5\,pt size.}
+\
+
+\rightline{Caps}\nopagebreak
+{\twentycaps \fontss This text is in 20\,pt size.}
+{\eighteencaps \fontss This text is in 18\,pt size.}
+{\sixteencaps \fontss This text is in 16\,pt size.}
+{\fourteencaps \fontss This text is in 14\,pt size.}
+{\twelvecaps \fontss This text is in 12\,pt size.}
+{\caps \fontss This text is in 10\,pt size.}
+{\ninecaps \fontss This text is in 9\,pt size.}
+{\eightcaps \fontss This text is in 8\,pt size.}
+{\sevencaps \fontss This text is in 7\,pt size.}
+{\sixcaps \fontss This text is in 6\,pt size.}
+{\fivecaps \fontss This text is in 5\,pt size.}
+
+\
+
+\rightline{Caps in boldface}\nopagebreak
+{\twentycapsbf \fontss This text is in 20\,pt size.}
+{\eighteencapsbf \fontss This text is in 18\,pt size.}
+{\sixteencapsbf \fontss This text is in 16\,pt size.}
+{\fourteencapsbf \fontss This text is in 14\,pt size.}
+{\twelvecapsbf \fontss This text is in 12\,pt size.}
+{\capsbf \fontss This text is in 10\,pt size.}
+{\ninecapsbf \fontss This text is in 9\,pt size.}
+{\eightcapsbf \fontss This text is in 8\,pt size.}
+{\sevencapsbf \fontss This text is in 7\,pt size.}
+{\sixcapsbf \fontss This text is in 6\,pt size.}
+{\fivecapsbf \fontss This text is in 5\,pt size.}
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%% Inter-Line and Inter-Word Spacing %%%%%%%%%%
+\section{Inter-Line and Inter-Word Spacing}{Inter-Line and Inter-Word Spacing}
+
+\ii As typefaces are very dear to typographic style, so is their arrangement. Of course, the value of the meaning and purpose of text, which holds even if sentences have been scribbled, is beyond comparison, but it is good to arrange good text in a good way. This part of our discussion deals with two salient features of typeset text arrangement\emdash inter-line and inter-word~spacing.
+
+If the text font in \capstex\ is changed, the inter-line and inter-word spacing is not changed accordingly. This is not such a problem if we declare the new font at the same size as the preceding one. But if the new font is declared at a considerably larger or smaller size, the typesetting might not be aesthetically~elegant.
+
+We deal with the inter-line and inter-word spacing problem first-hand by starting with an example. Then an ``acceptable'' solution to the spacing problem has been elaborated. The solution is not perfect but it is handy and a passable compromise. Then we move towards theoretical aspects of spacing. The discussion is fairly brief and can act as a good starting point for re-evaluating the ``space problem''. When it comes to word spacing, the best guide is our own experience. If we try to justify text~(12\,pt) in triple columns on an A4 page, then we are likely to face some problems. Narrower the column, sterner the justification. We will not deliberate on microtypography\emdash a distinctive approach that devotes much to spacing issues and can be used with~pdf\capstex. Curious readers are referred to these three works: \cite{zapf_microtypography}, \cite{thanh_microtypographic}, and~\cite{text_justification}.
+
+
+\subsection{Example}A sample \capstex\ source file as shown below:
+
+\bigskip\hrule\vbox{\parindent=0pt\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\obeylines\parindent=0pt\color{brown}\verbatim
+\parindent=0pt
+\input font_epigrafica_euler % the font size is 10pt
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.
+\medskip
+
+\sixrm % changes the font size to 6pt
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.
+\medskip
+
+\eighteenrm % changes the font size to 18pt
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.|endverbatim}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip
+
+\nopagebreak\ii after compilation should produce something like this:\nopagebreak
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\parindent=0pt
+\input font_epigrafica_euler
+% the font size is 10pt
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.
+\medskip
+\sixrm % changes the font size to 6pt
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.
+\medskip
+\eighteenrm % changes the font size to 18pt
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+
+
+\ii In the output we can notice that both inter-line and inter-word spacing are quite fine when the font size is 10\,pt. In the 6\,pt text the inter-line space is too much and and the inter-word space is more then needed. In the text at 18\,pt both inter-line and inter-word spacing are less then adequate. This is because \capstex\ is still working according to the default space values, which are declared for 10\,pt font size. To tackle this, \capstex\ offers two very useful primitive control statements~(\cite{knuth_texbook}, pp.\;76, 78). These~are:\ms
+{\color{brown}\verbatim \spaceskip|endverbatim} to control the inter-word space,
+
+{\color{brown}\verbatim \baselineskip|endverbatim} to control the inter-line space.
+
+
+
+
+\definexref{solution}{solution}{}
+\subsection{An Easy Solution}Here I~am stating a technique that I use to confront spacing problems when using different fonts at different sizes. Let us make a new definition called~{\color{brown}\verbatim \fontspacing|endverbatim}.\ms
+
+\ii {\color{brown}\verbatim\def\fontspacing{\baselineskip=2.8ex plus0pt minus0pt
+ \spaceskip=0.333333em plus0.122222em minus0.0999999em}|endverbatim}\sk
+ \def\fontspacing{\baselineskip=2.8ex plus0pt minus0pt
+ \spaceskip=0.333333em plus0.122222em minus0.0999999em}
+
+\ii The units, {\sl ex\/} and {\sl em\/} are relative~(\cite{knuth_texbook}, pp.\;60). This makes our definition more~general.\ms
+
+{\sl em\/} is the width of a ``quad'' in the current font,
+
+{\sl ex\/} is the ``x-height'' of the current font.\sk
+
+\ii Declaring {\color{brown}\verbatim \fontspacing|endverbatim} would set our inter-line space to 2.8ex~(=~12.05553\,pt in case of font {\verbatim cmr10|endverbatim} at 10\,pt) with no {\sl stretchability\/}~(given after {\sl plus\/}) or {\sl shrinkability}~(given after {\sl minus\/}). Also {\color{brown}\verbatim \fontspacing|endverbatim} would set our inter-word space to 0.333333\,em, with 0.122222\,em of stretchability and 0.0999999\,em of shrinkability allowed. In case of font {\verbatim cmr10|endverbatim}, these values (default) are 3.33333\,pt, 1.66666\,pt, and 1.11111\,pt, respectively.
+
+Let us try to use {\color{brown}\verbatim \fontspacing|endverbatim} in the example given at the beginning of this chapter. A sample \capstex\ source file as given here:
+
+
+\newpage
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\obeylines\parindent=0pt\color{brown}
+\verbatim
+\parindent=0pt
+\input font_epigrafica_euler % the font size is 10pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.
+\medskip
+\sixrm % changes the font size to 6pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.
+\medskip
+\eighteenrm % changes the font size to 18pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.|endverbatim}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip
+
+
+\nopagebreak\ii after compilation should produce something like this:\nopagebreak
+
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\parindent=0pt
+\input font_epigrafica_euler % the font size is 10pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.
+\medskip
+\sixrm % changes the font size to 6pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.
+\medskip
+\eighteenrm % changes the font size to 18pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Inter-line and inter-word spacing are very important parameters of
+typesetting. A text typeset in a beautiful typeface but `bad'
+inter-line and inter\-word spacing does not look beautiful. Check
+the spacing between lines of the paragraph, and words of a line.}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+
+By using the control primitives {\color{brown}\verbatim \spaceskip|endverbatim} and {\color{brown}\verbatim \baselineskip|endverbatim} we get the desired spacing and these can be declared almost anywhere. For more details on spacing, please refer~to~\cite{knuth_texbook}.
+
+
+\subsection{Ideal Spacing?}It is a well-known fact that inter-line and inter-word spacing are vital aspects of good typography. Inter-line space is also referred to as {\sl leading}, {\sl line space}, {\sl interlinear space}, and {\sl interline space}. Inter-word space is also known as {\sl word space} and {\sl interword space}. What are the ``best'' values for inter-line and inter-word space? For sure there is no one-line answer to this question. It is subjective; what might be the ``best'' for someone, may look to ``poor'' someone~else.
+
+It can be noted that spacing is certainly dependent on the size of typesetting font. Fonts at larger sizes have different spacing requirements than font at normal or smaller sizes. Also, spacing (inter-line or inter-word) is not directly or inversely proportional to font-size, though it can serve as a good approximation and in our \ref{solution} we had used the proportionality concept. Different typefaces have different spacing demands. The medium of representation also influences spacing values\emdash text on paper is different from text on computer screens or projected slides. Spacing requirements vary if text is a single line and is meant to pass the eye in a glance, e.g., file names in a list, or if it is for continued reading, e.g., this~paragraph.
+
+Let us streamline our discussion by considering the most likely case, i.e.\ normal text; we find it in books, novels, and magazines. In this case the text is designed for continued reading. Even in this case, for a particular font, spacing requisites depend on the width of the text. A text that runs 15\,cm wide should be typeset with different spacing parameters than some text that runs only 6\,cm, e.g., in a column of a multiple-column page. But this is for some other time. For now we focus on the general case\emdash the case of continued normal text, which is mostly in 10\endash 14\,pt. From this point we will discuss inter-line and inter-word space one at a~time.
+
+\subsubsection{Inter-Word Space}
+We commence with \href{http://www.linotype.com/794/inhonorofthe100thbirthdayofjantschichold.html}{Jan Tschichold}'s text composition rules which are constituents of \href{http://openlibrary.org/books/OL19449256M/Penguin_composition_rules.}{The Penguin Composition Rules}, which are a compilation of Tschichold's ideas. They can be found \href{http://ronin-group.org/misc_etext_tschichold.html}{here}. On text composition it is mentioned:
+\sk{\sl
+\itemitem{1.}All text composition should be as closely word-spaced as possible. As a rule, the spacing should be about a middle space or the thickness of an `i' in the type size used.\sk
+\itemitem{2.}Wide spaces should be strictly avoided. Words may be freely broken whenever necessary to void wide spacing, as breaking words is less harmful to the appearance of the page than too much space between words.\sk
+\itemitem{3.}All major punctuation marks\emdash full point, colon, and semicolon\emdash should be followed by the same spacing as is used throughout the rest of the line.\ms}
+
+\ii In this game there are no rigid rules. \href{http://www.typotheque.com/authors/robert_bringhurst}{Robert Bringhurst} writes in his influential book~(\cite{elements_typographic}):
+\quote{For a normal text face in a normal text size, a typical value for the word space is a quarter of an em which can be written M/4. A quarter of an em is typically about the same as, or slightly more than, the set-width of the letter~t.}
+
+\ii The optimum~(without stretching or shrinking) inter-word space in \capstex's default regular font (\hfuzz4pt{\verbatim cmr10|endverbatim} at 10\,pt) is 3.33333\,pt. The width of letter `i' of {\verbatim cmr10|endverbatim} at 10\,pt is 2.77779\,pt and of letter `t' is 3.8889\,pt. One quarter of an em of {\verbatim cmr10|endverbatim} at 10\,pt is 2.5\,pt. A small manipulation in inter-word space, its stretchability or shrinkability, can lead to quite apparent changes.
+
+\hfuzz1pt
+
+Ideally inter-word spacing should be constant in the whole text but in justified text this is almost impossible to attain. The amount of stretching and shrinking of inter-word space and hyphenation of words has its limits. Some people would agree with Tschichold and opt for more hyphenation and less flexible inter-word space to maintain better page color while others would say that excessive hyphenation hinders readability and they would set wider and flexible inter-word space that might lead to rivers. Over the years the inter-word space in text has increased or maybe it is too language dependent or the lack of paper was the issue\emdash compare the inter-word space in \href{http://burton.byu.edu/Bible\%20Site/Gutenberg.htm}{Gutenberg's Bible}, hallmark of excellent typography, and book~\cite{knuth_texbook}, a book typeset with typo\-gra\-phic elegance.
+
+In book~\cite{knuth_texbook}, Knuth instructed \capstex\ to give some extra space after periods, commas, question and exclamation marks, colons and semicolons. By default plain~\capstex\ would do this unless we use the control sequence {\color{brown}\verbatim \frenchspacing|endverbatim}. Tschichold urges not to give such extra space. In this document, I have used {\color{brown}\verbatim \frenchspacing|endverbatim} as the typeset text seemed to have even color without white blocks or rivers. But when I write a scientific report or thesis, which contains mathematics, symbols, variables, etc., I prefer Knuth's way which puts extra space after punctuation\emdash I think it makes text more readable and easier to~understand. In multiple columns with normal size text on an A4 or letter size page, my experience suggests that extra space after punctuation leads to rivers and blocks of~white.
+
+Different fonts demand different inter-word space. Bitstream Charter, the current typeface, can bear and looks better with stiffer and lesser inter-word space than Computer Modern. In case we desire prime typography then we should set inter-word space according to the font in~use.
+
+Book~\cite{elements_typographic} mentions a `reasonable' value of inter-word space with stretch and shrink values. When translated into \capstex's language, it becomes {\color{brown}\verbatim \spaceskip=0.25em plus0.08em minus0.05em|endverbatim}. Try it to find out how good it is. Does it fill the page with black boxes? What effect does it have on hyphenation? What if multiple columns are~used?
+
+Our discussion on inter-word space concludes with the statement: {\sl There are no ideal or perfect or best inter-word space parameters}. We are the judge of our own work and refinement in judgement comes with experience, so let's see what's~coming.
+
+\subsubsection{Inter-Line Space}
+Managing inter-line space is usually easy, unless we encounter a club or widow line. In case of normal size text, the inter-line space is usually 0\endash 4\,pt more than the typeface size in points. The regular font this document is {\verbatim mdbchr7t|endverbatim} at 10\,pt, with an inter-line space of {\tt\the\baselineskip}, and for the global magnification, {\verbatim \magnification=1100|endverbatim} has been~used.
+
+On a page, say A4 size, for any particular font, it is acceptable to have lesser inter-line space when using multiple columns. The eye does not loose track of the line and is at ease in stepping down to the next line when the column width is less, e.g., about~6\,cm. In the realm of inter-line spacing there are challenges like grid typesetting and widow lines but we will not discuss them here. \TeX's instruction, {\color{brown}\verbatim \baselineskip|endverbatim}, we have already discussed and more can be found in \cite{knuth_texbook} and~\cite{against_widows}.
+
+
+
+%%%%%%%%%% Acknowledgements %%%%%%%%%%
+\section{Acknowledgements}{Acknowledgements}
+
+\bs
+
+\ii I wholeheartedly thank Donald~E.\;Knuth for giving us \capstex\emdash the best typesetting program till date, which has succeeded the test of time. Also, I~am grateful to dear \capstex\ users who have contributed to make \capstex\ better by giving more freedom to its free feature. The designers of fonts and packages that I have used are a few of those dear \capstex\ users. I~am grateful to Petr Habala for introducing me to \capstex. I~am beholden to my family for their indispensable love and support. I thank my wife, Daphne, for participating in discussions on fonts and for her understanding. There are so many factors that I~am not able to take into account that in the end but above all, I say, ``Thank you~{\dev :}.''
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%% References %%%%%%%%%%
+\section{References\raise3mm\hbox{\bf 2}}{References}
+
+\nocite{habala_amstex}\nocite{knuth_texbook}\nocite{fonts_tex_latex}\nocite{elements_typographic}
+
+\bibliography{C:/bib}
+
+\bibliographystyle{ieeetran}
+
+
+\vskip7.5cm\hrule width 5.70truecm\kern2mm\eightrm\fontss
+\hbox{ \raise1.2mm\hbox{\ \ \ 2}\ \; The reader has been referred to most of the references (they have not been listed on this page) via hyperlinks}
+\hbox{\ \ \ \ \ \ \ \ provided in this {\caps pdf} document.}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\special{pdf: docinfo << /Author (Amit Raj Dhawan)
+/Title (Macros to Change Text fonts & Math fonts in TeX)
+/Creator(XeTeX: Based on TeX---The Genius of Knuth)
+/Subject(Text and Math Fonts in TeX)
+/Keywords(TeX, free, fonts, math font, text, maths font, font-change, Charter, Utopia, Century, Palatino, Bookman, Times, Euler, Bera, Arev, Vera, Iwona, Kurier, Kp-Fonts, Antykwa Torunska, Libertine, Epigrafica, Computer Modern Bright, CM Bright, Computer Modern, Concrete, macro, macros)>>}
+
+\special{pdf: docview <</PageMode /UseOutlines>> }
+
+
+
+
+\bye
diff --git a/macros/plain/contrib/font-change/doc/font-change_FRENCH.pdf b/macros/plain/contrib/font-change/doc/font-change_FRENCH.pdf
new file mode 100644
index 0000000000..4665b5d796
--- /dev/null
+++ b/macros/plain/contrib/font-change/doc/font-change_FRENCH.pdf
Binary files differ
diff --git a/macros/plain/contrib/font-change/doc/font-change_FRENCH.tex b/macros/plain/contrib/font-change/doc/font-change_FRENCH.tex
new file mode 100644
index 0000000000..45b24ddfc7
--- /dev/null
+++ b/macros/plain/contrib/font-change/doc/font-change_FRENCH.tex
@@ -0,0 +1,2213 @@
+% The author of this work is Daphne Parramon-Dhawan.
+% This is a translation of the documentation of package font-change.
+% This work was released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+%%%%%%%%% Fonts %%%%%%%%%%
+\font\webomints=WebOMintsGd at40pt
+\font\titlefont=artemisiarg8a at40pt
+\font\titleone=mdputr7t at18pt
+\font\titletwo=mdputri7t at18pt
+\font\sectionfont=rm-kurierh at18pt
+\font\subsectionfont=rm-kurierb at14pt
+\font\subsubsectionfont=rm-kurierb at12pt
+\font\sansrm=rm-kurierl at10pt
+\font\foliofont=mdbchr7t at9pt
+\font\amstexfont=cmsy10 at7.5pt
+\font\dev=dvng10 scaled \magstep1
+\font\letterone=RoyalIn at36pt
+
+
+%%%%%%%%%% Packages %%%%%%%%%%
+%%% Eplain
+\input eplain % Add Eplain before AmSTeX
+\beginpackages
+\usepackage{url}
+\usepackage{color}
+\usepackage{graphicx}
+\endpackages
+\enablehyperlinks[dvipdfm] % Enables hyperlinks using Eplain
+%\hlopts{colormodel=named,color=Black} % Produces links in black color
+%% Color
+\definecolor{brown}{rgb}{.7,.2,.2}
+
+
+%%% AmSTeX
+\input amstex
+\UseAMSsymbols
+
+\catcode`@=12
+
+%%% eps files
+\input epsf % Includes files like pictures and figures in eps format
+
+
+
+
+%%%%%%%%%% Page characteristics %%%%%%%%%%
+\magnification=1120
+\parindent=20pt
+\parfillskip=\parindent plus1fil
+\everypar{\looseness=-1}
+\headline{} \footline{}
+\vsize=24truecm
+\hoffset-2.9mm
+\settabs 20 \columns
+\exhyphenpenalty10000 % stops TeX to break words at dashes
+\hyphenpenalty200
+
+
+
+%%%%%%%%%% Definitions %%%%%%%%%%
+\def\bs{\bigskip}%
+\def\ms{\medskip}%
+\def\sk{\smallskip}%
+\def\cl{\centerline}%
+\def\ii{\noindent}%
+\def\pic#1#2#3{\bigskip\cl{\epsfxsize#1\epsfbox{#2.eps}}\par\cl{\eightrm #3}}%
+\def\amstex{{\amstexfont A\kern-.1667em\lower.5ex\hbox{M}\kern-.125em S}-\capstex}%
+\def\xetex{X\lower0.5ex\hbox{\kern-0.11em\reflectbox{E}}\kern-0.165em\TeX}%
+\def\latex{L\setbox0=\hbox{\sc A}\kern-0.5766\wd0\raise0.41ex\hbox{\sc A}\setbox1=\hbox{T}\kern-.177\wd1\TeX}%
+\def\xelatex{X\lower0.5ex\hbox{\kern-0.11em\reflectbox{E}}\kern-0.13em\latex}%
+\def\capstex{{\caps t\kern-.122em\lower.38ex\hbox{e}\kern-.11em x}}%
+\def\capslatex{{\caps l\setbox0=\hbox{\sevencaps a}\kern-0.5888\wd0{\raise0.33ex\hbox{\sevencaps a}}\setbox1=\hbox{t}\kern-.2\wd1\capstex}}%
+\def\capsxetex{{\caps x\lower0.38ex\hbox{\kern-0.1em\reflectbox{e}}\kern-0.13em\capstex}}%
+\def\capsxelatex{{\caps x\lower0.38ex\hbox{\kern-0.1em\reflectbox{e}}\kern-0.122em\capslatex}}%
+\def\fontss{\baselineskip=2.7ex plus0pt minus0pt%
+\spaceskip=0.29em plus0.14em minus0.14em}%
+\def\footnote#1{\numberedfootnote{\hskip-7mm\hbox to 20cm{\vtop{\hangindent\parindent\hangafter1\eightrm\fontss #1}}}}%
+\def\quote#1{\sk\leftskip10mm{\sl\noindent #1}\sk \leftskip0mm\rightskip0mm}%
+\def\emdash{\hbox{\kern0.15em---\kern0.15em}\relax}%
+\def\endash{\hbox{\kern0.15em--\kern0.15em}\relax}%
+
+
+\def\sample{\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+\noindent{\bf Formule D'Euler} : La formule d'Euler, aussi connue sous le nom d'{\bf identit\'e d'Euler}, nous dit que
+$$e^{\imath x} =\cos(x) + \imath \sin(x), $$
+o\`u $\imath$~est {\sl l'unit\'e imaginaire}.
+
+On peut \'etendre la formule d'Euler \`a une s\'erie
+$$\eqalign {e^{\imath x}
+&= \sum_{n=0}^{\infty} {(\imath x)^n\over{n!}}\cr
+&= \sum_{n=0}^{\infty}{(-1)^{n}x^{2n}\over (2n)!} + \imath\sum_1^{\infty}{(-1)^{n-1}x^{2n-1}\over(2n-1)!}\cr
+&= \cos(x) + \imath\sin(x).\cr}$$
+
+\bigskip\bigskip
+\noindent{\bf Th\'eor\`eme Int\'egral de Cauchy~:} Si $f(z)$ est analytique et ses d\'eriv\'ees partielles continues sur une r\'egion~$R$ simplement connexe,~alors
+$$\oint_\gamma f(z)\,dz = 0$$
+pour tout lacet rectifiable~$\gamma$ contenu int\'egralement dans~$R$.\vskip2mm
+}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+%\input mathcharacters
+}%
+
+
+\def\sampleansi{\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+\noindent{\bf Formule D'Euler} : La formule d'Euler, aussi connue sous le nom d'{\bf identité d'Euler}, nous dit que
+$$e^{\imath x} =\cos(x) + \imath \sin(x), $$
+où $\imath$~est {\sl l'unité imaginaire}.
+
+On peut étendre la formule d'Euler à une série
+$$\eqalign {e^{\imath x}
+&= \sum_{n=0}^{\infty} {(\imath x)^n\over{n!}}\cr
+&= \sum_{n=0}^{\infty}{(-1)^{n}x^{2n}\over (2n)!} + \imath\sum_1^{\infty}{(-1)^{n-1}x^{2n-1}\over(2n-1)!}\cr
+&= \cos(x) + \imath\sin(x).\cr}$$
+
+\bigskip\bigskip
+\noindent{\bf Théorème Intégral de Cauchy}: Si $f(z)$ est analytique et ses dérivées partielles continues sur une région~$R$ simplement connexe,~alors
+$$\oint_\gamma f(z)\,dz = 0$$
+pour tout lacet rectifiable~$\gamma$ contenu intégralement dans~$R$.\vskip2mm
+}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+%\input mathcharacters
+}%
+
+
+\def\samplebera{\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+\noindent{\bf Formule D'Euler} : La formule d'Euler, aussi connue sous le nom d'{\bf identité d'Euler}, nous dit que
+$$e^{\imath x} =\cos(x) + \imath \sin(x), $$
+où $\imath$~est {\sl l'unité imaginaire}.
+
+On peut étendre la formule d'Euler à une série
+$$\eqalign {e^{\imath x}
+&= \sum_{n=0}^{\infty} {(\imath x)^n\over{n!}}\cr
+&= \sum_{n=0}^{\infty}{(-1)^{n}x^{2n}\over (2n)!} + \imath\sum_1^{\infty}{(-1)^{n-1}x^{2n-1}\over(2n-1)!}\cr
+&= \cos(x) + \imath\sin(x).\cr}$$
+
+\bigskip\bigskip
+\noindent{\bf Th\'eor\`eme Int\'egral de Cauchy}: Si $f(z)$ est analytique et ses dérivées partielles continues sur une région~$R$ simplement connexe,~alors
+$$\oint_\gamma f(z)\,dz = 0$$
+pour tout lacet rectifiable~$\gamma$ contenu intégralement dans~$R$.\vskip2mm
+}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+%\input mathcharacters
+}%
+
+%%%%%%%%%% Chapter, Section %%%%%%%%%%
+\newcount\sectionno\sectionno=0 % For sections
+\newcount\subsectionno\subsectionno=0 % For subsections
+\newcount\subsubsectionno\subsubsectionno=0 % For subsubsections
+\definecolor{sectioncolor}{rgb}{0.22,0.38,0.62}
+% NOTE: No two cross-references should be the same. This will cause chaos. In other words, no two chapters can have the same "label name"
+
+\def\section#1#2{\newpage
+{\definexref{#2}{#2}{}}
+{\writetocentry{section}{\refs{#2}}}
+{\special{pdf: outline 1 << /Title (#2)/F 0 /Dest [@thispage /FitH @ypos ] >> }}
+\subsectionno=0 % For subsections
+\centerline{\textcolor{sectioncolor}{\sectionfont\fontss #1}}
+\nopagebreak\bigskip\nopagebreak\noindent}
+
+\def\subsection#1#2{
+{\definexref{#2}{#2}{}}
+{\writetocentry{subsection}{\kern5mm\refs{#2}}}
+{\special{pdf: outline 2 << /Title (#2)/F 0 /Dest [@thispage /FitH @ypos ] >> }}
+\bigskip\bigskip\medskip\goodbreak
+{\global\advance\subsectionno by 1
+ \noindent{\textcolor{sectioncolor}{\subsectionfont\fontss #1}}}
+\nopagebreak\medskip\nopagebreak\noindent}
+
+\def\subsubsection#1{
+{\definexref{#1}{#1}{}}
+{\writetocentry{subsubsection}{\kern5mm\refs{#1}}}
+{\special{pdf: outline 2 << /Title (#1)/F 0 /Dest [@thispage /FitH @ypos ] >> }}
+\bigskip\bigskip\medskip\goodbreak
+{\global\advance\subsubsectionno by 1
+ \noindent{\textcolor{sectioncolor}{\subsubsectionfont\fontss #1}}}
+\nopagebreak\medskip\nopagebreak\noindent}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_charter
+\fontss % font change and spacing
+\frenchspacing
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%% Cover %%%%%%%%%%
+{\special{pdf: outline 1 << /Title (Cover)/F 0 /Dest [@thispage /FitH @ypos ] >> }}
+{\centerline{{\color{brown}\webomints\char'160}\hskip8mm\titlefont\color{sectioncolor} font-change\hskip8mm{\color{brown}\webomints\char'161}}\bs
+\centerline{{\color{brown}\webomints\char'125\char'126}}
+\bs
+\centerline{Version \ 2015.2}
+\bs\bs
+{\color{sectioncolor}\titleone\fontss
+\centerline{Macros utiles pour modifier les polices}
+\centerline{de texte et de maths en \TeX}\kern3mm
+\centerline{{\titleone 45}{\titletwo\fontss \ Variantes esth\'etiques}}}
+\vskip2cm
+\centerline{\color{brown}\webomints \char'063}
+\vskip2cm
+\centerline{\twelvebf\fontss Amit Raj Dhawan}\sk
+\centerline{\href{mailto:amitrajdhawan@gmail.com}{\sansrm amitrajdhawan\@gmail.com}}\bs
+\centerline{Traduit par {\twelvebf\fontss Daphne Parramon-Dhawan}}\ms
+\centerline{\rm 2 Septembre 2015}
+
+\vskip4cm
+
+% Licence
+\hrule\kern1pt\hrule\sk
+\ii{\epsfxsize2cm\epsfbox{by-sa.eps}}
+\vskip-7mm
+\vbox{\leftskip3cm\parindent=0pt\eightrm\fontss Ce travail a \'et\'e publi\'e sous la licence \href{http://creativecommons.org/licenses/by-sa/3.0/}{\eightbf Creative Commons Attribution-Share Alike 3.0 Unported License}, le 19 Juillet 2010.
+
+Vous \^etes donc libres de {\eightitbf Partager\/} (de copier, distribuer et/ou de transmettre ce travail) et de {\eightitbf Modifier\/} (d'adapter ce document) pourvu que vous suiviez les lignes directrices {\eightitbf d'Attribution\/} et de {\eightitbf Partage \`a l'Identique\/}. Pour le texte complet de la licence, vous pouvez aller sur le site~:
+\href{http://creativecommons.org/licenses/by-sa/3.0/legalcode}{\eightrm http://creativecommons.org/licenses/by-sa/3.0/legalcode}.}\leftskip0cm
+\sk\hrule\kern1pt\hrule
+
+\BlackBoxes
+
+
+
+
+
+
+%%%%%%%%% Quote %%%%%%%%%%%%
+{%\input font_artemisia_euler
+
+\fourteenit \fontss
+\
+
+\vskip1cm
+\cl{\webomints\char'064}
+\vskip2cm
+
+\leftskip1cm \rightskip4cm
+
+\raggedright
+\ii Quand j'arrive \`a ma destination, plus que de r\'ealiser que j'ai atteint mon but, je suis occup\'e \`a me rem\'emorer les d\'etails de mon voyage. Et il m'appara\^\i t, encore et encore~: ``Le trajet n'est-il pas la vraie concr\'etisation de l'objectif ?'' De cette mani\`ere, m\^eme si je manque {\sixteencaps le} but, j'aurai au moins atteint {\sixteencaps un} but.
+
+
+}
+\leftskip0cm \rightskip0cm
+
+
+
+
+
+
+
+%%%%%%%%%% Contents %%%%%%%%%%
+\newpage\pageno=-3\footline{\centerline{\foliofont\folio}}
+{\special{pdf: outline 1 << /Title (Contents)/F 0 /Dest [@thispage /FitH @ypos ] >> }}
+\cl{\textcolor{sectioncolor}{\sectionfont Table des Mati\`eres}}
+
+
+{\parskip0pt\bs\bs
+\readtocfile}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%% Introduction %%%%%%%%%%
+\section{Introduction}{Introduction}
+\pageno=1
+
+
+\hbox{\letterone \TeX\ }\vskip-14.5mm\ii \hangindent2.6cm\hangafter-3 typographie les documents dans les polices d'\'ecriture Computer Modern par d\'efaut.\footnote{La plupart des utilisateurs (j'en fait partie) utilise les termes {\eightit police}, {\eightit police de caract\`eres\/}, {\eightit fonte}, {\eightit police d'\'ecriture\/} ou encore {\eightit famille de polices...} comme synonymes. Dans ce manuel nous avons \'evit\'e ces distinctions.} Les polices Computer Modern de Knuth sont tr\`es \'el\'egantes mais de temps \`a autre nous cherchons tous un peu de changement. Bon nombre d'entre nous souhaiterait avoir un rendu de nos documents \capstex\ dans d'autres fontes que Computer Modern. Au niveau utilisateur, il est ais\'e de changer la police du {\sl mode texte} de \capstex\ (autrement dit la police texte), et il existe de nombreuses polices gratuites aux multiples styles de caract\`eres tels que {\rm romain}, {\bf gras}, {\it italique}, {\sl pench\'e}, {\itbf gras italique}, {\slbf gras pench\'e}, {\caps petites capitales}, {\capsbf petites capitales en gras}, etc. La difficult\'e est de changer les polices math\'ematiques dans les documents \capstex\. Ceci est principalement d\^u au manque de fontes math\'ematiques pour \capstex. Une autre raison est que changer de police en {\sl mode maths\/} n'est pas aussi simple que de la changer en {\sl mode texte}. Pour \capslatex\, beaucoup de packages peuvent servir \`a changer la police (texte et math) en une commande. Mais pour \capstex, je n'ai pas pu trouver de mani\`ere simple pour changer la fonte dans le document, \`a la fois pour le texte et l'\'ecriture math\'ematique. Le fait d'utiliser une police en {\sl mode texte\/} et une autre en {\sl mode maths\/} peut g\^acher le rendu du document. Il est bien s\^ur d\'esirable d'obtenir le texte et les \'ecritures math\'ematiques dans la m\^eme police; un texte en police New Century et des maths en Computer Modern ne vont pas bien ensemble. Certaines combinaisons, comme nous le verrons plus loin, marchent pourtant bien.
+
+Etre en mesure de choisir entre plusieurs fontes est plut\^ot avantageux. Les polices Computer Modern rendent tr\`es bien sur papier, particuli\`erement sur les impressions jet d'encre, mais ont l'air relativement fines sur les \'ecrans d'ordinateurs (LCD) et dans une moindre mesure sur les impressions laser. Pour les diaporamas, la plupart des gens pr\'ef\`ere les caract\`eres sans s\'erif qui sont relativement plus ``lourds''. L'id\'ee de changer, en une seule commande, \`a la fois les polices math\'ematiques et la totalit\'e d'une famille de polices qui comprend des styles vari\'es comme le gras, l'italique, etc., a engendr\'e la motivation n\'ecessaire \`a l'accomplissement de cette t\^ache. Pour ce faire, j'ai \'ecrit 45~macros \capstex\ qui ordonnent \`a \capstex\ de typographier les documents dans les polices appel\'ees par ces macros. Tout au long de ce document, l'utilisation des 45 macros mentionn\'ees a \'et\'e expos\'ee. Chacune de ces macros change les fontes dans le document de mani\`ere globale, mais peut \'egalement \^etre utilis\'ee localement, par exemple \`a l'int\'erieur d'un groupe. D\'esormais, un document \capstex, normalement produit en Computer Modern, peut \^etre produit en 45 autres variantes. Ces fichiers macro sont facilement compr\'ehensibles et peuvent \^etre modifi\'es si besoin. Chaque macro a diff\'erents caract\`eres d\'eclar\'es en tailles 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, et 20\,pt.
+
+Afin de montrer nos 45~macros de changement de fonte en action, nous avons \'ecrit un texte \'echantillon 45 fois mais dans des polices diff\'erentes. Les polices/familles de police invoqu\'ees par ces macros ont presque tous les glyphes contenus dans la famille Computer Modern. En g\'en\'eral, ces polices contiennent plus de glyphes que Computer Modern. Pour voir tous les glyphes pr\'esents dans une police, vous pouvez utiliser \href{https://www.ctan.org/pkg/fontchart?lang=en}{l'outil en ligne} de Werner Lemberg. Dans quelques cas, par exemple pour la police Epigrafica normal~(\verbatim epigrafican8r|endverbatim), il manque des symboles importants comme $\Gamma$ and~$\Theta$. Notre macro prend cela en charge; l'utilisateur ne doit pas s'en soucier \`a moins qu'il ne demande \`a~\capstex\ quelque chose de tr\`es inhabituel.
+
+
+
+\subsection{Utilisation}{Utilisation}Ces macros ont \'et\'e rassembl\'ees dans un package appel\'e {\color{brown}\verbatim font-change|endverbatim} qui est inclus dans les distributions {\caps m{\eightrm i}k}\capstex\ et \capstex~{\caps l{\eightrm ive}}. Le package peut aussi \^etre t\'el\'echarg\'e sur \href{http://www.ctan.org/tex-archive/macros/plain/contrib/font-change/}{\caps ctan}. Si l'installation \capstex\ contient d\'ej\`a le package {\color{brown}\verbatim font-change|endverbatim}, il peut \^etre utilis\'e d\`es \`a pr\'esent, pour mettre en forme n'importe quel document en police Charter par exemple. Il suffit d'\'ecrire la commande {\color{brown}\verbatim \input font_charter|endverbatim} dans le fichier source. Bien s\^ur, pour pouvoir utiliser les macros de font-change, l'installation \capstex\ doit contenir les polices en question. Au cas o\`u {\color{brown}\verbatim font-change|endverbatim} n'est pas install\'e sur le syst\`eme de l'utilisateur et celui-ci n'a pas envie de le faire, on peut t\'el\'echarger le package sur internet et suivre la proc\'edure ci-dessous. Pour conna\^\i tre toutes les options disponibles et voir les macros en action, veuillez lire la suite.
+
+Supposons qu'on veuille typographier un document \capstex\ document en police Charter. Pour ce faire, il faut copier le fichier macro \capstex\ {\color{brown}\verbatim font_charter.tex|endverbatim} dans le dossier contenant le fichier source \capstex\. Apr\`es avoir ouvert ce fichier source dans l'\'editeur, il faudra y \'ecrire la commande {\color{brown}\verbatim \input font_charter|endverbatim}. Ceci changera la police du document en police Charter \`a partir de l'endroit o\`u la commande {\color{brown}\verbatim \input font_charter|endverbatim} a \'et\'e d\'eclar\'ee. Il est possible de d\'eclarer {\color{brown}\verbatim \input font_charter|endverbatim} dans un groupe ferm\'e~: ({\color{brown}\verbatim {\input font_charter ... }|endverbatim}) afin de changer la police de caract\`eres en Charter dans tout le groupe, pourvu qu'il n'y ait pas d'autre appel \`a font-change dans ce groupe ou dans un de ses sous-groupes.
+
+Une autre mani\`ere d'utiliser les fichiers macros est de les mettre dans un dossier, nomm\'e par exemple ``font-change'', dans un endroit du disque (par exemple \`a la racine de ``C''), et ensuite d'invoquer ces fichiers dans le fichier source \capstex\. Pour utiliser la police Charter, il faudra \'ecrire la commande suivante (qui pr\'ecise juste la localisation du fichier dans l'arborescence syst\`eme) {\color{brown}\verbatim \input C:/font-change/font_charter|endverbatim}. Si les fichiers macros ont \'et\'e plac\'es dans un dossier dont le nom contient des espaces (par exemple ``font change''), il faudra alors \'ecrire naturellement la commande avec les espaces correspondants~: {\color{brown}\verbatim \input "C:/font change/font_charter"|endverbatim}.
+
+Le changement complet de la police se fera \`a la taille \capstex\ par d\'efaut, \`a savoir (10\,pt), bien que l'on puisse utiliser les polices texte et maths \`a des tailles plus petites et plus grandes via de petites manipulations du fichier macro.
+
+\goodbreak Les commandes de contr\^ole typographique \capstex\ basiques \sk
+{\obeylines\leftskip1cm
+{\color{brown}\verbatim\rm|endverbatim} \dots {\rm romain}
+{\color{brown}\verbatim\it|endverbatim} \dots {\it italique}
+{\color{brown}\verbatim\bf|endverbatim} \dots {\bf gras}
+{\color{brown}\verbatim\sl|endverbatim} \dots {\sl pench\'e}
+{\color{brown}\verbatim\tt|endverbatim} \dots {\tt machine \`a \'ecrire}
+\leftskip0cm}\sk
+
+\ii gardent leur signification habituelle. Tous les fichiers macro que ce {\caps pdf} mentionne incluent les cinq options ci-dessus. De plus, la plupart des fichiers macro ont \'egalement d'autres options utiles. Ce sont:\sk
+{\obeylines\leftskip1cm
+{\color{brown}\verbatim\itbf|endverbatim} \dots {\itbf gras italique}
+{\color{brown}\verbatim\slbf|endverbatim} \dots {\slbf gras pench\'e}
+{\color{brown}\verbatim\caps|endverbatim} \dots {\caps petites capitales}
+{\color{brown}\verbatim\capsbf|endverbatim} \dots {\capsbf petites capitales en gras}
+\leftskip0cm}\ms
+
+En {\sl mode texte}, les styles mentionn\'es ci-dessus peuvent \^etre utilis\'es en taille 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, et 20\,pt. Ceci est obtenu en tapant la taille (nombre en anglais) en toutes lettres entre un backslash~($\backslash$) et le mot qui d\'eclare le style de caract\`eres \`a utiliser. Par exemple, si nous voulions typographier un texte en gras \`a~14\,pt nous n'aurions qu'\`a utiliser la commande de contr\^ole suivante {\color{brown}\verbatim \fourteenbf|endverbatim}.
+
+
+
+
+
+\newpage\subsection{Exemple}{Exemple}Voici un exemple de fichier source \capstex~:
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\obeylines\parindent=0pt\color{brown}\verbatim
+\parindent=0pt
+\input C:/font-change/font_cm
+Voici la {\bf police Computer Modern}. La {\twelveslbf fonction Gamma\/}
+est d\'efinie comme suit~:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$
+
+\input C:/font-change/font_charter
+Voici la {\bf police Charter}. La {\twelveslbf fonction Gamma\/}
+est d\'efinie comme suit~:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$
+
+{ % d\'ebut du groupe
+\input C:/font-change/font_century
+Voici la {\bf police New Century Schoolbook}. La {\twelveslbf fonction Gamma\/}
+est d\'efinie comme suit~:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$
+} % fin du groupe
+
+Nous revoil\`a en police Charter.|endverbatim}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+
+
+
+
+\nopagebreak\ii qui nous donnera, apr\`es compilation~:\nopagebreak
+
+
+
+
+\bigskip\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\parindent=0pt
+\input font_cm \fontss
+Voici la {\bf police Computer Modern}. La {\twelveslbf fonction Gamma\/} est d\'efinie comme suit~:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$
+
+\input font_charter \fontss
+Voici la {\bf police Charter}. La {\twelveslbf fonction Gamma\/} est d\'efinie comme suit~:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$
+
+{\input font_century \fontss
+Voici la {\bf police New Century}. La {\twelveslbf fonction Gamma\/} est d\'efinie comme suit~:
+$$\Gamma(z) \equiv \int_0^\infty t^{z-1} e^{-t} dt.$$}
+
+Nous revoil\`a en police Charter.}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+
+
+\subsection{Symboles AMS}{Symboles AMS}Certaines polices d'\'ecriture, comme par exemple Kp-Fonts, supportent les symboles {\caps ams}. Les polices {\verbatim msam|endverbatim} et {\verbatim msbm|endverbatim} de la collection {\caps ams} contiennent ces symboles. Les lettres ajour\'ees~($\Bbb A, \Bbb B, \Bbb C, \Bbb R, \dots$) font partie des symboles {\caps ams}. Si vous utilisez \amstex, avec le style preprint (pr\'e-impression) ou que la commande \amstex\ {\color{brown}\verbatim \UseAMSsymbols|endverbatim} a d\'ej\`a \'et\'e d\'eclar\'ee, vous pourrez alors utiliser les symboles {\caps ams} avec certaines macros {\color{brown}\verbatim font-change|endverbatim} en d\'eclarant {\color{brown}\verbatim \UseAMSsymbols|endverbatim} {\bf \`a nouveau} apr\`es l'instruction d'appel \`a la macro. Nous allons voir un exemple de cette impl\'ementation dans un petit moment.
+
+Si vous avez utilis\'e les instructions {\color{brown}\verbatim \loadmsam|endverbatim} ou {\color{brown}\verbatim \loadmsbm|endverbatim} de \amstex, vous pourrez les utiliser {\bf \`a nouveau} apr\`es avoir d\'eclar\'e la macro {\color{brown}\verbatim font-change|endverbatim} afin d'obtenir les r\'esultats d\'esir\'es. La s\'equence de contr\^ole {\color{brown}\verbatim \UseAMSsymbols|endverbatim} reprend les instructions {\color{brown}\verbatim \loadmsam|endverbatim} et {\color{brown}\verbatim \loadmsbm|endverbatim}.
+
+Pour revenir aux polices {\caps ams} par d\'efaut ({\verbatim msam|endverbatim} et {\verbatim msbm|endverbatim}), il faudra entrer le fichier macro {\color{brown}\verbatim default-amssymbols.tex|endverbatim} en \'ecrivant la commande {\color{brown}\verbatim \input default-amssymbols|endverbatim} dans le fichier source. Ce petit fichier contient seulement ces deux d\'efinitions~:
+
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\obeylines\parindent=0pt\color{brown}\verbatim
+\def\loadmsam{\font\tenmsa=msam10 \font\sevenmsa=msam7 \font\fivemsa=msam5
+\fam\msafam
+\textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa
+\scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\loadmsam
+%
+\def\loadmsbm{\font\tenmsb=msbm10 \font\sevenmsb=msbm7 \font\fivemsb=msbm5
+\fam\msbfam
+\textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb
+\scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\loadmsbm
+|endverbatim}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip
+
+Il sera pr\'ecis\'e plus loin pour chaque macro du package {\color{brown}\verbatim font-change|endverbatim} si celle-ci supporte les symboles {\caps ams}. Ci-dessous la pr\'esentation de ce qui a \'et\'e discut\'e (le caract\`ere en {\color{red}rouge} provient des symboles {\caps ams})~:
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\obeylines\parindent=0pt\color{brown}\verbatim
+\input amstex % Charge AmSTeX
+\UseAMSsymbols % Invoque les symboles AMS
+$$f:{\color{red}\Bbb R}^3\to R$$
+
+\input font_kp % Invoque Kp-Fonts
+\UseAMSsymbols % Utilise jkpsya et jkpsyb de Kp-Fonts \`a la place de msam et msbm des polices AMS
+$$f:{\color{red}\Bbb R}\to R$$
+
+\input default-amssymbols % Revient au d\'efaut
+$$f:{\color{red}\Bbb R}^3\to R$$
+|endverbatim}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip
+
+\nopagebreak\ii produit apr\`es compilation~:\nopagebreak
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\input font_cm
+$$f:{\color{red}\Bbb R}^3\to R$$
+\input font_kp
+\UseAMSsymbols
+$$f:{\color{red}\Bbb R}^3\to R$$
+\input default-amssymbols
+$$f:{\color{red}\Bbb R}^3\to R$$}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip
+
+
+
+\subsection{Graisses disponibles}{Graisses disponibles}
+Certaines macros de changement de police d'\'ecriture du package {\color{brown}\verbatim font-change|endverbatim} proposent des graisses l\'eg\`eres, moyennes et grasses. De nombreuses familles de police offrent la variante grasse des fontes math\'ematiques, mais nous n'avons pas toujours inclus certaines variantes qui ne fournissaient pas une police assez \'epaisse pour rendre le contraste. En tapant tout le texte en gras, si \`a certains endroits nous voulons mettre encore plus de gras, nous serons coinc\'es. La philosophie de {\color{brown}\verbatim font-change|endverbatim} dit que pour mettre en gras tout le texte et les maths, il faut trouver une police plus \'epaisse parmi la famille de polices utilis\'ee, encore plus grasse que le gras habituel. Les familles de fontes Kp-Fonts, Antykwa Toru\'nska, Iwona, et Kurier incluent de telles \'epaisseurs et font partie de {\color{brown}\verbatim font-change|endverbatim}. Par exemple, la macro {\color{brown}\verbatim font_kurier-bold|endverbatim}, qui utilise un style gras pour sa police normale (en maths et texte), prend une police poids lourd pour le style gras.
+
+
+
+\subsection{Mises \`a jour et avertissement}{Mises a jour et avertissement}Les polices utilis\'ees dans ces 45 macros sont incluses dans les distributions \href{http://miktex.org/}{{\caps m{\eightrm i}k}\capstex} et \href{http://www.tug.org/texlive/}{\capstex~{\caps l{\eightrm ive}}}. Toutes ces macros devraient marcher sans probl\`eme avec une installation compl\`ete de {{\caps m{\eightrm i}k}\capstex} (version 2.9.4503 test\'ee). Les macros devraient aussi fonctionner avec \capstex~{\caps l{\eightrm ive}}~2014, mais \capstex~{\caps l{\eightrm ive}}~2013 ne contient pas les mises \`a jour r\'ecentes de police, et donc plusieurs macros de la nouvelle version de {\color{brown}\verbatim font-change|endverbatim} pourraient ne pas fonctionner avec \capstex~{\caps l{\eightrm ive}} 2013 ou ant\'erieur. Mais cela ne devrait pas \^etre un gros probl\`eme puisque le disque d'installation de \capstex~{\caps l{\eightrm ive}} 2013 contient une version plus ancienne de {\color{brown}\verbatim font-change|endverbatim}, qui a les anciens noms de polices. De nombreuses macros de {\color{brown}\verbatim font-change|endverbatim} utilisent la police {\verbatim inconsolata|endverbatim} pour les caract\`eres machine \`a \'ecrire. La police s'appelait {\verbatim rm-inconsolata|endverbatim} en version 2010.1 de {\color{brown}\verbatim font-change|endverbatim}. La nouvelle version de {\verbatim inconsolata|endverbatim}, qui a \'et\'e mise \`a jour en {\caps m{\eightrm i}k}\capstex}~2.9.4503, ne contient aucune police appel\'ee {\verbatim rm-inconsolata|endverbatim}. Ainsi, en {\color{brown}\verbatim font-change|endverbatim}~(version 2013.1), nous avons choisi une autre police {\verbatim inconsolata|endverbatim} nomm\'ee {\verbatim ly1-zi4r-1|endverbatim}, qui est identique, ou tout du moins, semble identique, \`a {\verbatim rm-inconsolata|endverbatim}. Il y a eu aussi d'autres changements dans les noms des polices, par exemple pour les polices Libertine. Si des probl\`emes de police manquante sont rencontr\'es en utilisant {\color{brown}\verbatim font-change|endverbatim}, avec une installation compl\`ete de {{\caps m{\eightrm i}k}\capstex} ou de TeXLive, il est recommand\'e d'utiliser un version soit plus ancienne, soit plus r\'ecente de {\color{brown}\verbatim font-change|endverbatim}.
+
+\footline{\centerline{\foliofont\folio}}
+
+
+Ces 45 macros de changement de police ont bien fonctionn\'e avec plain~\capstex, ainsi qu'avec une combinaison de plain~\capstex\ et d'autres formats bas\'es sur plain~\capstex, par exemple~ \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/amstex.html}{\amstex} et~\href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/eplain.html}{eplain}. Les macros marchent parfaitement avec \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pdftex.html}{pdf\capstex} et \href{http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=xetex}{\capsxetex} \'egalement. Veuillez noter que ces macros ne fonctionnent pas avec \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/latex.html}{\capslatex}, pdf\capslatex\hfuzz2pt, ou \capsxelatex.
+
+\hfuzz1pt
+La composition d'un texte en anglais ou en fran\c cais avec des math\'ematiques ne devrait pas poser probl\`eme, \`a part peut-\^etre si des lettres comme \l~ sont utilis\'ees, surtout avec des caract\`eres en {\slbf gras pench\'e\/} ou {\caps petites capitales}. Ce sont des questions de glyphes manquants et d'encodage. Dans la police courante (Charter, romain r\'egulier, {\verbatim mdbchr7t|endverbatim}), {\color{brown}\verbatim\l|endverbatim} produit \l, {\color{brown}\verbatim\slbf \l|endverbatim} produit {\slbf \l}, mais {\color{brown}\verbatim\caps\l|endverbatim} produit~{\caps \l}.
+
+
+
+
+
+Les polices sans s\'erif ne proposent pas de caract\`eres {\it italiques} mais seulement {\sl pench\'es\/}. Pour rendre les fichiers macros de {\color{brown}\verbatim font-change|endverbatim} plus coh\'erents, les commandes pour l'italique et le pench\'e (par exemple~: {\color{brown}\verbatim\it|endverbatim} et {\color{brown}\verbatim\sl|endverbatim}), produisent des caract\`eres {\sl pench\'es} dans le cas des polices sans s\'erif et de celles ne disposant pas de glyphes distincts pour l'italique et le pench\'e. Nous montrerons plus loin des exemples de changement des polices texte et maths de \capstex\ utilisant les macros de {\color{brown}\verbatim font-change|endverbatim}. Toutes les polices utilis\'ees dans ces macros sont aussi list\'ees dans ce document.
+
+
+Ces macros ont \'et\'e con\c{c}ues \`a l'origine pour des utilisateurs de langue anglaise. Compte tenu des capacit\'es de \TeX, elles peuvent \^etre utiles pour composer en d'autres langages \'egalement, mais certaines polices contenues dans {\color{brown}\verbatim font-change|endverbatim} peuvent ne pas fonctionner pour toutes les langues (\`a cause du rendu des accents et caract\`eres sp\'eciaux). Nous avons remarqu\'e que pour ce document, qui est en langue franç\c{c}aise, les accents ne sont pas, ou mal, plac\'es sur certaines fontes de type pench\'e ou machine \`a \'ecrire. Cela concerne les polices Arev (page 38), Epigrafica (pages 40 \`a 41), Bera (pages 43 \`a 45), Artemisia (page 46), et Libertine (pages 47 \`a 49).
+
+
+Nous esp\'erons que ces macros fonctionnent bien, sans probl\`eme de compatibilit\'e, mais nous ne pouvons rien promettre. Il n'y a pas de garantie. Si l'utilisateur trouve un d\'efaut, ou pour toute autre remarque, merci de m'envoyer un email.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% Macros %%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\section{\sixteenbf\fontss Charter}{Charter}
+\sample
+\ii La police Charter est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_charter|endverbatim}. Cette famille de polices utilise des fontes de la famille \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathdesign-charter.html}{mdbch}, correspondant aux polices texte \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/charter.html}{Bitstream Charter}. Cette famille fait partie du projet \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathdesign.html}{MathDesign} de Paul Pichaureau. Les caract\`eres \href{http://new.myfonts.com/fonts/bitstream/charter-bt-pro/}{Charter} ont \'et\'e con\c cus \`a l'origine par Matthew Carter pour Bitstream Inc.\ en 1987. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_charter|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil mdbchr7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil mdbchb7t &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mdbchri7m &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecrire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil md-chr7y &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil mdbchbi7t &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil mdbchr7v &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil mdbchbo7t &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil mdbchri7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil mdbchrfc8t &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil mdbchro7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil mdbchbfc8t &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+
+\input font_utopia \fontss
+\section{\sixteenbf\fontss Utopia}{Utopia}
+\sample
+\ii La police Utopia est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_utopia|endverbatim}. Cette famille de polices utilise pour la plupart les fontes de la famille \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathdesign-utopia.html}{mdput}, ce qui correspond aux polices de texte \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/utopia.html}{Adobe Utopia}. Cette famille fait parte du projet \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathdesign.html}{MathDesign}~de Paul Pichaureau. Elle est tr\`es compl\`ete et inclut les polices math\'ematiques \'egalemement. Pour des raisons d'espacement interlettre, la macro {\color{brown}\verbatim font_utopia.tex|endverbatim} utilise la fonte maths italique et la fonte symboles math\'ematique du package \href{http://www.ctan.org/tex-archive/fonts/fourier-GUT/}{fourier} de Michel Bovani. La \href{http://new.myfonts.com/fonts/adobe/utopia/}{police Utopia} a \'et\'e con\c cue \`a l'origine par Robert Slimbach pour Adobe en~1989.
+
+Les fontes maths italique~(\verbatim mdputri7m|endverbatim) et symboles math\'ematiques~(\verbatim md-utr7y|endverbatim) de la famille \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathdesign-utopia.html}{mdput} peuvent \^etre aussi utilis\'ees. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_utopia|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil mdputr7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil mdputb7t &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil futmii &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecrire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil futsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil mdputbi7t &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil mdputr7v &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil mdputbo7t &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil mdputri7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil mdputrfc8t &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil mdputro7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil mdputbfc8t &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_century \fontss
+\section{\sixteenbf\fontss New Century Schoolbook}{New Century Schoolbook}
+\sample
+\ii La police New Century Schoolbook est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_century|endverbatim}. Cette famille de polices utilise des fontes de la famille \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/tex-gyre-schola.html}{TeX Gyre Schola}, ce qui correspond aux polices de texte \href{http://store1.adobe.com/cfusion/store/html/index.cfm?store=OLS-US&event=displayFontPackage&code=1240}
+{Adobe New Century Schoolbook}. La police \href{http://new.myfonts.com/fonts/adobe/new-century-schoolbook/}{Century Schoolbook} a \'et\'e cr\'ee par Morris Fuller Benton entre 1918 et~1921.
+
+\BlackBoxes
+La macro utilise l'italique math\'ematique~(fncmii) et les symboles maths~(fncsy) du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/fouriernc.html}{fouriernc} de Michael Zedler. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_century|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes\eightrm\fontss
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-qcsr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-qcsb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil fncmii &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecrire &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil fncsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-qsbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil cmex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil pncbo7t &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-qcsri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil rm-qcsr-sc &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil pncro7t &\strut\vrule\kern1pt\vrule\strut\hfil \sevencapsbf Petites capitales en gras &\strut\vrule\strut\hfil rm-qcsb-sc &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_palatino \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Palatino}{Palatino}
+\sample
+\ii La police Palatino est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_palatino|endverbatim}. Cette famille de polices utilise les fontes du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pxfonts.html}{pxfonts} de Young Ryu, correspondant aux polices texte \href{http://www.myfonts.com/fonts/urw/palladio/}
+{{\caps urw++} Palladio} dessin\'ees par Herman Zapf. La police Palladio {\caps urw++} est bas\'ee sur la \href{http://new.myfonts.com/fonts/adobe/palatino/}{police Palatino} qui avait \'et\'e con\c cue \`a l'origine par Hermann Zapf pour la fonderie Stempel en 1950. Les polices de cette macro fournissent leurs propres symboles {\caps ams}. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_palatino|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil pxr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil pxb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil pxmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecrire &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil pxsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil pxbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil pxex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil pxbsl &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil pxi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil pxsc &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil pxsl &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil pxbsc &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+\bs\ii Symboles {\caps ams} associ\'es~: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+\input font_pagella \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Pagella}{Pagella}
+\sample
+\ii La police Pagella est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_pagella|endverbatim}. La plupart du texte est typographi\'e en utilisant des polices du package \href{http://www.gust.org.pl/projects/e-foundry/tex-gyre/pagella}{\capstex~Gyre Pagella}, et en utilisant le package de Diego Puga \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/mathpazo.html}{mathpazo} pour les math\'ematiques. Certains styles~(polices pench\'ees) et maths~(symboles {\caps ams}) proviennent de \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pxfonts.html}{pxfonts} de Young Ryu (toutes ces polices correspondent aux polices texte \href{http://www.myfonts.com/fonts/urw/palladio/}{{\caps urw++} Palladio} cr\'e\'ees par Herman Zapf). La police {\caps urw++} Palladio font est bas\'ee sur la \href{http://new.myfonts.com/fonts/adobe/palatino/}{police Palatino} qui avait \'et\'e con\c cue \`a l'origine par Hermann Zapf pour la fonderie Stempel en 1950. On peut dire que les polices \capstex~Gyre \href{http://www.gust.org.pl/projects/e-foundry/tex-gyre/pagella}{Pagella} sont une version un peu plus raffin\'ee des polices Palatino; elles proposent \'egalement la ligature ff, ce qui manque dans les polices \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pxfonts.html}{pxfonts} ou autres polices bas\'ees sur Palatino. Les polices de cette macro fournissent leurs propres symboles {\caps ams}. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_pagella|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-qplr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-qplb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil zplmr7m &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecrire &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil zplmr7y &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-qplbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil zplmr7v &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil pxbsl &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-qplri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil rm-qplr-sc &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil pxsl &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil rm-qplb-sc &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+\bs\ii Symboles {\caps ams} associ\'es~: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_times \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Times}{Times}
+\sample
+\ii La police Times est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_times|endverbatim}. Cette famille de polices utilise des polices du package de Young Ryu \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/txfonts.html}{txfonts}, ce qui correspond aux polices de texte \href{http://new.myfonts.com/fonts/adobe/times/}{Adobe Times}. La police \href{http://new.myfonts.com/fonts/adobe/times/}{Times} a \'et\'e cr\'e\'ee en 1931 par Stanley Morison de Monotype Corp. Les polices de cette macro fournissent leurs propres symboles {\caps ams}. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_times|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil txr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil txb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil txmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecrire &\strut\vrule\strut\hfil txtt &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil txsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil txbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil txex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil txbsl &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil txi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil txsc &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil txsl &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil txbsc &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+\bs\ii Symboles {\caps ams} associ\'es~: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+\input font_bookman \fontss
+\section{\sixteenbf\fontss Bookman}{Bookman}
+\sample
+\ii La police Bookman est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_bookman|endverbatim}. Cette famille de polices utilise des polices (\capstex\ Gyre) \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/tex-gyre-bonum.html}{bonum} de Jackowski et Nowacki, et du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kerkis.html}{kerkis} d'Antonis Tsolomitis; ces deux packages correspondent aux polices texte \href{http://new.myfonts.com/fonts/adobe/itc-bookman/}{ITC Bookman}. Les symboles math\'ematiques et caract\`eres d'extension sont issus du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/txfonts.html}{txfonts} de Young Ryu. La police \href{http://new.myfonts.com/fonts/adobe/itc-bookman/}{Bookman} a \'et\'e con\c cue \`a l'origine par Alexander Phemister en 1860, pour la fonderie Miller \& Richard (Ecosse). Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_bookman|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-qbkr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-qbkb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil kmath8r &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecrire &\strut\vrule\strut\hfil txtt &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil txsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-qbkbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil txex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil pbkdo7t &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-qbkri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil rm-qbkr-sc &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil pbklo7t &\strut\vrule\kern1pt\vrule\strut\hfil \sevencapsbf Petites capitales en gras &\strut\vrule\strut\hfil rm-qbkb-sc &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_kp \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Kp-Fonts}{Kp-Fonts}
+\sample
+\ii Kp-Fonts est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_kp|endverbatim}. Cette famille de fontes utilise des polices de la famille \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kpfonts.html}{Kp-Fonts} de Chris\-tophe \hfuzz4pt Caignaert. Les polices de cette macro fournissent leurs propres symboles {\caps ams}. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs\hfuzz=1pt
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_kp|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil jkpmn7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil jkpbn7t &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil jkpmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecrire &\strut\vrule\strut\hfil jkpttmn7t &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil jkpsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil jkpbit7t &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil jkpex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil jkpbsl7t &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil jkpmit7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil jkpmsc7t &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil jkpmsl7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil jkpbsc7t &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+\bs\ii Symboles {\caps ams} associ\'es~: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+\input font_kp-light \fontss
+\UseAMSsymbols
+\section{{\sixteenbf\fontss Kp}-{\sixteenslbf Light}}{Kp-Light}
+\sample
+\ii Le polices Kp-{\sl Light\/} sont d\'eclar\'ees en entrant l'instruction {\color{brown}\verbatim\input font_kp-light|endverbatim}. Cette famille de fontes utilise des polices de la famille \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kpfonts.html}{Kp-Fonts} de Christophe Caignaert. C'est la version l\'eg\`ere de Kp-Fonts. La diff\'erence entre les versions moyenne~(normal) et l\'eg\`ere est visible dans la {\sl couleur} du texte et, bien s\^ur, lorsque l'on agrandi les caract\`eres. D'apr\`es les auteurs de Kp-Fonts, l'option {\sl l\'eg\`ere\/}, qui fait r\'ealiser des \'economies au niveau de l'impression, devrait mieux rendre imprim\'ee que sur \'ecran. Les polices de cette macro fournissent leurs propres symboles {\caps ams}. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_kp-light|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil jkplmn7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil jkplbn7t &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil jkplmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecrire &\strut\vrule\strut\hfil jkpttmn7t &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil jkplsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil jkplbit7t &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil jkpex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil jkplbsl7t &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil jkplmit7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil jkplmsc7t &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil jkplmsl7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil jkplbsc7t &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+\bs\ii Symboles {\caps ams} associ\'es~: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+\input font_antt \fontss
+\section{\sixteenbf\fontss Antykwa Toru\'nska}{Antykwa Torunska}
+\sample
+\ii La police Antykwa Toru\'nska est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_antt|endverbatim}. Cette famille de fontes utilise des polices du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} de J.\;M.\;Nowacki, correspondant aux polices texte de Zygfryd Gardzielewski \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska}. Zygfryd Gardzielewski a \'elabor\'e Antykwa Toru\'nska en 1960 pour la fonderie Grafmasz \`a Varsovie. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_antt|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-anttr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-anttb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-anttri &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-anttrz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-anttbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-anttr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-anttbi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-anttri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-anttrcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-anttri &\strut\vrule\kern1pt\vrule\strut\hfil \sevencapsbf Petites capitales en gras &\strut\vrule\strut\hfil rx-anttbcap &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_antt-light \fontss
+\section{{\sixteenbf\fontss Antykwa Toru\'nska}-{\sixteenslbf Light}}{Antykwa Torunska-Light}
+\sample
+\ii La police Antykwa Toru\'nska-{\sl Light\/} est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_antt-light|endverbatim}. Cette famille de fontes utilise les polices de graisses l\'eg\`ere et moyenne du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} de J.\;M.\;Nowacki, correspondant aux polices texte de Zygfryd Gardzielewski \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska}. Zygfryd Gardzielewski a \'elabor\'e Antykwa Toru\'nska en 1960 pour la fonderie Grafmasz \`a Varsovie. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_antt-light|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-anttl &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-anttm &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-anttli &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-anttlz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-anttmi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-anttl &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-anttmi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-anttli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-anttlcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-anttli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-anttmcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+\input font_antt-medium \fontss
+\section{{\sixteenbf\fontss Antykwa Toru\'nska}-{\sixteenslbf Medium}}{Antykwa Torunska-Medium}
+\sample
+\ii La police Antykwa Toru\'nska-{\sl Medium} est d\'eclar\'ee en entrant l'instruction\break {\color{brown}\verbatim\input font_antt-medium|endverbatim}. Cette famille de fontes utilise les polices de graisses moyenne et gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} de J.\;M.\;Nowacki, correspondant aux polices texte de Zygfryd Gardzielewski \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska}. Zygfryd Gardzielewski a \'elabor\'e Antykwa Toru\'nska en 1960 pour la fonderie Grafmasz \`a Varsovie. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_antt-medium|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-anttm &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-anttb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-anttmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-anttmz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-anttbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-anttm &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-anttbi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-anttmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-anttmcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-anttmi &\strut\vrule\kern1pt\vrule\strut\hfil \sevencapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-anttbcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_antt-condensed \fontss
+\section{{\sixteenbf\fontss Antykwa Toru\'nska}-{\sixteenslbf Condensed}}{Antykwa Torunska-Condensed}
+\sample
+\ii La police Antykwa Toru\'nska-{\sl Condensed\/} est d\'eclar\'ee en entrant l'instruction\break {\color{brown}\verbatim\input font_antt-condensed|endverbatim}. Cette famille de fontes utilise les polices de largeur condens\'ee et graisses normal et gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} de J.\;M.\;Nowacki, correspondant aux polices texte de Zygfryd Gardzielewski \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska}. Zygfryd Gardzielewski a \'elabor\'e Antykwa Toru\'nska en 1960 pour la fonderie Grafmasz \`a Varsovie. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_antt-condensed|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-anttcr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-anttcb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-anttcri &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-anttcrz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-anttcbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-anttcr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-anttcbi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-anttcri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-anttcrcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-anttcri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-anttcbcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_antt-condensed-light \fontss
+\section{{\sixteenbf\fontss Antykwa Toru\'nska}-{\sixteenslbf Condensed Light}}{Antykwa Torunska-Condensed Light}
+\sample
+\ii La police Antykwa Toru\'nska-{\sl Condensed Light\/} est d\'eclar\'ee en entrant l'instruction\break {\color{brown}\verbatim\input font_antt-condensed-light|endverbatim}. Cette famille de fontes utilise les polices de largeur condens\'ee et graisses l\'eg\`ere et moyenne du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} de J.\;M.\;Nowacki, correspondant aux polices texte de Zygfryd Gardzielewski \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska}. Zygfryd Gardzielewski a \'elabor\'e Antykwa Toru\'nska en 1960 pour la fonderie Grafmasz \`a Varsovie. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_antt-condensed-light|endverbatim}}\hfil
+
+ % Antykwa Toru?ska-Light
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-anttcl &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-anttcm &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-anttcli &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-anttclz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-anttcmi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-anttcl &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-anttcmi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-anttcli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-anttclcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-anttcli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-anttcmcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_antt-condensed-medium \fontss
+\section{{\sixteenbf\fontss Antykwa Toru\'nska}-{\sixteenslbf Condensed Medium}}{Antykwa Torunska-Condensed Medium}
+\sample
+\ii La police Antykwa Toru\'nska-{\sl Condensed Medium\/} peut \^etre uilis\'ee dans les documents \capstex\ apr\`es avoir tap\'e l'instruction {\color{brown}\verbatim\input font_antt-condensed-medium|endverbatim}. Cette famille de fontes utilise les polices de largeur condens\'ee et graisses moyenne et gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antt.html}{antt} de J.\;M.\;Nowacki, correspondant aux polices texte de Zygfryd Gardzielewski \href{http://nowacki.strefa.pl/torunska-e.html}{Antykwa Toru\'nska}. Zygfryd Gardzielewski a \'elabor\'e Antykwa Toru\'nska en 1960 pour la fonderie Grafmasz \`a Varsovie. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_antt-condensed-medium|endverbatim}}\hfil
+
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-anttcm &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-anttcb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-anttcmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-anttcmz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-anttcbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-anttcm &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-anttcbi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-anttcmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-anttcmcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-anttcmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-anttcbcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_iwona \fontss
+\section{\sixteenbf\fontss Iwona}{Iwona}
+\sample
+\ii La police Iwona est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_iwona|endverbatim}. Cette famille de fontes utilise des polices du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} de J.\;M. Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_iwona|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-iwonar &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-iwonab &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-iwonari &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-iwonarz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-iwonabi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-iwonar &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-iwonabi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-iwonari &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-iwonarcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-iwonari &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-iwonabcap &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+
+\input font_iwona-light \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Light}}{Iwona-Light}
+\sample
+\ii La police Iwona-{\sl Light\/} est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_iwona-light|endverbatim}. Cette famille de fontes utilise les polices Iwona de graisses l\'eg\`ere et gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} de J.\;M. Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_iwona-light|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-iwonal &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-iwonam &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-iwonali &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-iwonalz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-iwonami &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-iwonal &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-iwonami &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-iwonali &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-iwonalcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-iwonali &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-iwonamcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+\input font_iwona-medium \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Medium}}{Iwona-Medium}
+\sample
+\ii La police Iwona-{\sl Medium\/} est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_iwona-medium|endverbatim}. Cette famille de fontes utilise les polices Iwona de graisses moyenne et gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} de J.\;M. Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_iwona-medium|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-iwonam &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-iwonah &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-iwonami &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-iwonamz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-iwonahi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-iwonam &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-iwonahi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-iwonami &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-iwonamcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-iwonami &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-iwonahcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+\input font_iwona-bold \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Bold}}{Iwona-Bold}
+\sample
+\ii La police Iwona-{\sl Bold\/} est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_iwona-bold|endverbatim}. Cette famille de fontes utilise les fontes grasses Iwona du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} de J.\;M. Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_iwona-medium|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-iwonab &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-iwonah &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-iwonabi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-iwonabz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-iwonahi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-iwonab &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-iwonahi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-iwonabi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-iwonabcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-iwonabi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-iwonahcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+\input font_iwona-condensed \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Condensed}}{Iwona-Condensed}
+\sample
+\ii La police Iwona-{\sl Condensed\/} est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_iwona-condensed|endverbatim}. Cette famille de fontes utilise les polices Iwona en largeur condens\'ee et styles gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} de J.\;M. Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_iwona-condensed|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-iwonacr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-iwonacb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-iwonacri &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-iwonacrz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-iwonacbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-iwonacr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-iwonacbi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-iwonacri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-iwonacrcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-iwonacri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-iwonacbcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+\input font_iwona-condensed-light \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Condensed Light}}{Iwona-Condensed Light}
+\sample
+\ii La police Iwona-{\sl Condensed Light\/} est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_iwona-condensed-light|endverbatim}. Cette famille de fontes utilise les polices Iwona en largeur condens\'ee et graisses moyenne et l\'eg\`ere du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} de J.\;M. Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_iwona-condensed-light|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-iwonacl &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-iwonacm &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-iwonacli &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-iwonaclz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-iwonacmi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-iwonacl &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-iwonacmi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-iwonacli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-iwonaclcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-iwonacli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-iwonacmcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_iwona-condensed-medium \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Condensed Medium}}{Iwona-Condensed Medium}
+\sample
+\ii La police Iwona-{\sl Condensed Medium\/} est d\'eclar\'ee en entrant l'instruction\newline {\color{brown}\verbatim\input font_iwona-condensed-medium|endverbatim}. Cette famille de fontes utilise les polices Iwona en largeur condens\'ee et graisses moyenne et gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} de J.\;M. Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_iwona-condensed-medium|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-iwonacm &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-iwonach &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-iwonacmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-iwonacmz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-iwonachi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-iwonacm &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-iwonachi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-iwonacmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-iwonacmcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-iwonacmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-iwonachcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+\input font_iwona-condensed-bold \fontss
+\section{\sixteenbf\fontss Iwona-{\sixteenslbf Condensed Bold}}{Iwona-Condensed Bold}
+\sample
+\ii La police Iwona-{\sl Condensed Bold\/} est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_iwona-condensed-bold|endverbatim}. Cette famille de fontes utilise les polices Iwona en largeur condens\'ee et styles gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/iwona.html}{iwona} de J.\;M. Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_iwona-condensed-bold|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-iwonacb &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-iwonach &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-iwonacbi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-iwonacbz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-iwonachi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-iwonacb &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-iwonachi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-iwonacbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-iwonacbcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-iwonacbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-iwonachcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+\input font_kurier \fontss
+\section{\sixteenbf\fontss Kurier}{Kurier}
+\sample
+\ii La police Kurier est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_kurier|endverbatim}. Cette famille de fontes utilise des polices du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} de J.\;M.\ Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. La police Kurier est tr\`es similaire \`a la police Iwona; Kurier est un peu plus \'etendue et comporte des pi\`eges d'encre ({\it ink traps}). On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_kurier|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-kurierr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-kurierb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-kurierri &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-kurierrz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-kurierbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-kurierr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-kurierbi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-kurierri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-kurierrcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-kurierri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-kurierbcap &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_kurier-light \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Light}}{Kurier-Light}
+\sample
+\ii La police Kurier-{\sl Light\/} est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_kurier-light|endverbatim}. Cette famille de fontes utilise les polices Kurier en graisses l\'eg\`ere et moyenne du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} de J.\;M.\;Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. La police Kurier est tr\`es similaire \`a la police Iwona; Kurier est un peu plus \'etendue et comporte des pi\`eges d'encre ({\it ink traps}). On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_kurier-light|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-kurierl &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-kurierm &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-kurierli &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-kurierlz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-kuriermi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-kurierl &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-kuriermi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-kurierli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-kurierlcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-kurierli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-kuriermcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+\input font_kurier-medium \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Medium}}{Kurier-Medium}
+\sample
+\ii La police Kurier-{\sl Medium\/} est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_kurier-medium|endverbatim}. Cette famille de fontes utilise les polices Kurier en graisses moyenne et gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} de J.\;M.\;Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. La police Kurier est tr\`es similaire \`a la police Iwona; Kurier est un peu plus \'etendue et comporte des pi\`eges d'encre ({\it ink traps}). On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_kurier-medium|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-kurierm &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-kurierh &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-kuriermi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-kuriermz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-kurierhi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-kurierm &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-kurierhi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-kuriermi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-kuriermcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-kuriermi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-kurierhcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+\input font_kurier-bold \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Bold}}{Kurier-Bold}
+\sample
+\ii La police Kurier-{\sl Bold\/} est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_kurier-bold|endverbatim}. Cette famille de fontes utilise les polices Kurier en styles gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} de J.\;M.\;Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. La police Kurier est tr\`es similaire \`a la police Iwona; Kurier est un peu plus \'etendue et comporte des pi\`eges d'encre ({\it ink traps}). On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_kurier-medium|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-kurierb &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-kurierh &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-kurierbi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-kurierbz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-kurierhi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-kurierb &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-kurierhi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-kurierbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-kurierbcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-kurierbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-kurierhcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+\input font_kurier-condensed \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Condensed}}{Kurier-Condensed}
+\sample
+\ii La police Kurier-{\sl Condensed\/} est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_kurier-condensed|endverbatim}. Cette famille de fontes utilise les polices Kurier de largeur condens\'ee en graisses normal et gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} de J.\;M.\;Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. La police Kurier est tr\`es similaire \`a la police Iwona; Kurier est un peu plus \'etendue et comporte des pi\`eges d'encre ({\it ink traps}). On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_kurier-condensed|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-kuriercr &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-kuriercb &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-kuriercri &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-kuriercrz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-kuriercbi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-kuriercr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-kuriercbi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-kuriercri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-kuriercrcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-kuriercri &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-kuriercbcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+\input font_kurier-condensed-light \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Condensed Light}}{Kurier-Condensed Light}
+\sample
+\ii La police Kurier-{\sl Condensed Light\/} est d\'eclar\'ee en entrant l'instruction\newline {\color{brown}\verbatim\input font_kurier-condensed-light|endverbatim}. Cette famille de fontes utilise les polices Kurier de largeur condens\'ee en graisses l\'eg\`ere et moyenne du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} de J.\;M.\;Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. La police Kurier est tr\`es similaire \`a la police Iwona; Kurier est un peu plus \'etendue et comporte des pi\`eges d'encre ({\it ink traps}). On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_kurier-condensed-light|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-kuriercl &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-kuriercm &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-kuriercli &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-kurierclz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-kuriercmi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-kuriercl &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-kuriercmi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-kuriercli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-kurierclcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-kuriercli &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-kuriercmcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_kurier-condensed-medium \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Condensed Medium}}{Kurier-Condensed Medium}
+\sample
+\ii La police Kurier-{\sl Condensed Medium\/} est d\'eclar\'ee en entrant l'instruction\newline {\color{brown}\verbatim\input font_kurier-condensed-medium|endverbatim}. Cette famille de fontes utilise les polices Kurier de largeur condens\'ee en graisses moyenne et gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} de J.\;M.\;Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. La police Kurier est tr\`es similaire \`a la police Iwona; Kurier est un peu plus \'etendue et comporte des pi\`eges d'encre ({\it ink traps}). On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_kurier-condensed-medium|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-kuriercm &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-kurierch &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-kuriercmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-kuriercmz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-kurierchi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-kuriercm &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-kurierchi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-kuriercmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-kuriercmcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-kuriercmi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-kurierchcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+\input font_kurier-condensed-bold \fontss
+\section{\sixteenbf\fontss Kurier-{\sixteenslbf Condensed Bold}}{Kurier-Condensed Bold}
+\sample
+\ii La police Kurier-{\sl Condensed Bold\/} est d\'eclar\'ee en entrant l'instruction\newline {\color{brown}\verbatim\input font_kurier-condensed-bold|endverbatim}. Cette famille de fontes utilise les polices Kurier de largeur condens\'ee et styles gras du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kurier.html}{kurier} de J.\;M.\;Nowacki, correspondant aux polices texte de Ma\lstroke{}gorzata Budyta. La police Kurier est tr\`es similaire \`a la police Iwona; Kurier est un peu plus \'etendue et comporte des pi\`eges d'encre ({\it ink traps}). On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_kurier-condensed-bold|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-kuriercb &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-kurierch &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil mi-kuriercbi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil sy-kuriercbz &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-kurierchi &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-kuriercb &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-kurierchi &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-kuriercbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil qx-kuriercbcap &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-kuriercbi &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil qx-kurierchcap &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_arev \fontss
+\section{\sixteenbf\fontss Arev}{Arev}
+\sample
+\ii La police Arev est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_arev|endverbatim}. Cette famille de fontes utilise des polices du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/arev.html}{arev} de S.\;G.\; Hartke, correspondant aux polices texte \href{http://www.fontsquirrel.com/fonts/Bitstream-Vera-Sans}{Bitstream Vera Sans}. La police \href{http://www.gnome.org/fonts/}{Bitstream Vera} a \'et\'e cr\'e\'ee par Jim Lyles. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_arev|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil zavmr7t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil zavmb7t &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil zavmri7m &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil fvmr8t &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil zavmr7y &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil favbi8t &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-kurierr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil favbi8t &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil favri8t &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales &\strut\vrule\strut\hfil \emdash &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil favri8t &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales en gras &\strut\vrule\strut\hfil \emdash &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_cmbright \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Computer Modern Bright}{Computer Modern Bright}
+\sample
+\ii La police Computer Modern Bright est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_cmbright|endverbatim}. Cette famille de fontes utilise des polices du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/cmbright.html}{cmbright} de Walter Schmidt, correspondant aux polices texte Computer Modern Sans Serif de Donald Knuth. Les polices Computer Modern Bright sont plus l\'eg\`eres que les polices Computer Modern Sans Serif. Les polices de cette macro fournissent leurs propres symboles {\eightrm AMS}. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_cmbright|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil cmbr10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil cmbrbx10 &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil cmbrmi10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil cmbrsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-lmssbo10 &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil ex-kurierr &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-lmssbo10 &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil cmbrsl10 &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil cmbrsl10 &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales en gras &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+\bs\ii Symboles {\eightrm AMS} associ\'es~: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_epigrafica_euler \fontss
+\section{\sixteenbf\fontss Epigrafica avec Euler}{Epigrafica avec Euler}
+\sample
+\ii Cette macro nous permet de taper du texte dans la police Epigrafica et des maths dans la police Euler. La macro est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_epigrafica_euler|endverbatim}. Celle-ci typographie le texte dans les fontes du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/epigrafica.html}{epigrafica} de Antonis Tsolomitis (bas\'e sur la police texte \href{http://new.myfonts.com/fonts/adobe/optima/}{Optima} d'Hermann Zapf) et les maths dans les fontes \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/eulervm.html}{Euler-VM} de Walter Schmidt (bas\'e sur la police Euler d'Hermann Zapf et la police CM de Knuth). Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_epigrafica_euler|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil epigrafican8r &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil epigraficab8r &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil eurm10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil epigraficabi8r &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil euex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil epigraficabi8r &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil epigraficai8r &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil epigraficac8r &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil epigraficai8r &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales en gras &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_epigrafica_palatino \fontss
+\section{\sixteenbf\fontss Epigrafica with Palatino}{Epigrafica avec Palatino}
+\sample
+\ii Cette macro nous permet de taper du texte dans la police Epigrafica et des maths dans la police PX. La macro est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_epigrafica_palatino|endverbatim}. Celle-ci typographie le texte dans les fontes du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/epigrafica.html}{epigrafica} de Antonis Tsolomitis (bas\'e sur la police texte \href{http://new.myfonts.com/fonts/adobe/optima/}{Optima} d'Hermann Zapf) et les maths dans les fontes du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pxfonts.html}{pxfonts} de Young Ryu (correspondant aux polices texte \href{http://www.adobe.com/type/browser/html/readmes/PalatinoStdReadMe.html#A2}
+{Adobe Palatino}). Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_epigrafica_palatino|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil epigrafican8r &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil epigraficab8r &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil pxmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil pxsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil epigraficabi8r &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil pxex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil epigraficabi8r &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil epigraficai8r &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil epigraficac8r &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil epigraficai8r &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales en gras &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+\input font_antp_euler \fontss
+\section{\sixteenbf\fontss Antykwa P\'o\char'252tawskiego avec Euler}{Antykwa Poltawskiego avec Euler}
+\sample
+\ii Cette macro nous permet de taper du texte dans la police Antykwa P\'o\lstroke{}tawskiego et des maths dans la police Euler. Elle est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_antp_euler|endverbatim}. Celle-ci typographie le texte dans les fontes du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/antp.html}{antp} de J.\;M.\;No\-wacki (bas\'e sur les polices de texte \href{http://nowacki.strefa.pl/poltawski-e.html}{Antykwa P\'o\lstroke{}tawskiego} du typographe polonais Adam P\'o\lstroke{}tawski) et les math\'ematiques dans les fontes de Walter Schmidt \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/eulervm.html}{Euler-VM} (bas\'e sur la police Euler d'Hermann Zapf et la police CM de Knuth). On obtient un L barr\'e~(\Lstroke) avec la commande {\color{brown}\verbatim\Lstroke|endverbatim} et un l barr\'e (\lstroke) avec la commande {\color{brown}\verbatim\lstroke|endverbatim}. Pendant l'utilisation de cette macro, les commandes par d\'efaut de plain \capstex\ {\color{brown}\verbatim\L|endverbatim} ou {\color{brown}\verbatim\l|endverbatim} ne marchent pas. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_antp_euler|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil rm-antpr10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil rm-antpb10 &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil eurm10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil rm-antpbi10 &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil euex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil rm-antpbi10 &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil rm-antpri10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil rm-antpr10-sc &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil rm-antpri10 &\strut\vrule\kern1pt\vrule\strut\hfil\eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil rm-antpb10-sc &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_bera_concrete \fontss
+\section{\sixteenbf\fontss Bera Serif avec Concrete}{Bera Serif avec Concrete}
+\samplebera
+\ii Cette macro nous permet de taper du texte dans la police Bera serif et des maths avec Concrete. La macro est déclarée en entrant l'instruction {\color{brown}\verbatim\input font_bera_concrete|endverbatim}. Celle-ci typographie le texte dans les fontes Bera serif du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/bera.html}{bera} de Walter Schmidt (basé sur la police \href{http://www.fontsquirrel.com/fonts/Bitstream-Vera-Serif?q[term]=bitstream+vera&q[search_check]=Y}{Bitstream Vera serif} dessinée par Jim Lyles de Bitstream Inc.) et les parties mathématiques sont typographiées en utilisant le package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/cc-pl.html}{cc-pl} de Jackowski, Ry\char'242ko et Bzyl (basé sur les polices de Knuth \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/concrete.html}{Concrete Roman}). Des détails sur cette macro sont donnés dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_bera_concrete|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil fver8t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil fveb8t &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil pcmi10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil fvmr8t &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil cmex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales en gras &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_bera_euler \fontss
+\section{\sixteenbf\fontss Bera Serif avec Euler}{Bera Serif avec Euler}
+\sample
+\ii Cette macro nous permet de taper du texte dans la police Bera serif et des maths avec Euler. La macro est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_bera_euler|endverbatim}. Celle-ci typographie le texte dans les fontes Bera serif du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/bera.html}{bera} de Walter Schmidt (bas\'e sur la police \href{http://www.fontsquirrel.com/fonts/Bitstream-Vera-Serif?q[term]=bitstream+vera&q[search_check]=Y}{Bitstream Vera serif} dessin\'ee par Jim Lyles de Bitstream Inc.) et les maths dans les fontes \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/eulervm.html}{Euler-VM} de Walter Schmidt (bas\'e sur la police Euler d'Hermann Zapf et la police CM de Knuth). Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_bera_euler|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil fver8t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil fveb8t &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil eurm10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil fvmr8t &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil euex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales en gras &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+\input font_bera_fnc \fontss
+\section{\sixteenbf\fontss Bera Serif avec Fouriernc}{Bera Serif avec Fouriernc}
+\sample
+\ii Cette macro nous permet de taper du texte dans la police Bera serif et des math\'ematiques avec Fouriernc (utilis\'ee \`a l'origine avec New Century). La macro est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_bera_fnc|endverbatim}. Celle-ci typographie le texte dans les fontes Bera serif du package \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/bera.html}{bera} de Walter Schmidt (bas\'e sur la police \href{http://www.fontsquirrel.com/fonts/Bitstream-Vera-Serif?q[term]=bitstream+vera&q[search_check]=Y}{Bitstream Vera serif} dessin\'ee par Jim Lyles de Bitstream Inc.) et les maths dans les fontes \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/fouriernc.html}{fouriernc} de Michael Zedler. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_bera_fnc|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil fver8t &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil fveb8t &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil fncmii &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil fvmr8t &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil fncsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil cmex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil fvebo8t &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil fvero8t &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales en gras &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+\input font_artemisia_euler \fontss
+\section{\sixteenbf\fontss Artemisia avec Euler}{Artemisia avec Euler}
+\sampleansi
+\ii Cette macro nous permet de taper du texte dans la police GFS Artemisia et des maths avec Euler. La macro est déclarée en entrant l'instruction {\color{brown}\verbatim\input font_artemisia_euler|endverbatim}. Celle-ci typographie le texte dans les fontes d'Antonis Tsolomitis, George D.\ Matthiopoulos et de The Greek Font Society \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/gfsartemisia.html}{GFS Artemisia fonts}, et les maths dans les fontes \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/eulervm.html}{Euler-VM} de Walter Schmidt (basé sur la police Euler d'Hermann Zapf et la police CM de Knuth). Des détails sur cette macro sont donnés dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_artemisia_euler|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil artemisiarg8a &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil artemisiab8a &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil zeurm10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil zeusm10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil artemisiabi8a &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil zeuex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil artemisiabo8a &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil artemisiai8a &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil artemisiasc8a &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil artemisiao8a &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales en gras &\strut\vrule\strut\hfil \emdash &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_libertine_kp \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Libertine avec Kp-Fonts}{Libertine avec Kp-Fonts}
+\sampleansi
+\ii Cette macro nous permet de taper du texte dans la police Linux-Libertine et des maths dans les polices Kp-Fonts. La macro est déclarée en entrant l'instruction {\color{brown}\verbatim\input font_libertine_kp|endverbatim}. Celle-ci typographie le texte dans les fontes \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/libertine.html}{Linux-Libertine} de Michael Niedermair et les maths dans celles de Chris\-tophe Caignaert, \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/kpfonts.html}{Kp-Fonts}. Les polices de cette macro fournissent leurs propres symboles {\caps ams}. Des détails sur cette macro sont donnés dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_libertine_kp|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil LinLibertineT-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil LinLibertineTZ-lf-ot1 &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil jkpmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil jkpsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil jkpex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil LinLibertineT-lf-sc-ot1 &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil LinLibertineTZ-lf-sc-ot1 &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+\bs\ii Symboles {\eightrm AMS} associ\'es~: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+\input font_libertine_palatino \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Libertine avec Palatino}{Libertine avec Palatino}
+\sampleansi
+\ii Cette macro nous permet de taper du texte dans la police Linux-Libertine et des maths dans les fontes PX. Elle est déclarée en entrant l'instruction {\color{brown}\verbatim\input font_libertine_palatino|endverbatim}. Celle-ci typographie le texte dans les fontes \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/libertine.html}{Linux-Libertine} de Michael Niedermair et les maths dans celles de Young Ryu, \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/pxfonts.html}{pxfonts}, correspondant aux polices texte \href{http://www.myfonts.com/fonts/urw/palladio/}
+{{\caps urw++} Palladio} dessinées par Herman Zapf. La police Palladio {\caps urw++} est basée sur la \href{http://new.myfonts.com/fonts/adobe/palatino/}{police Palatino} qui avait été conçue à l'origine par Hermann Zapf pour la fonderie Stempel en 1950. Les polices de cette macro fournissent leurs propres symboles {\caps ams}. Des détails sur cette macro sont donnés dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_libertine_palatino|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil LinLibertineT-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil LinLibertineTZ-lf-ot1 &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil pxmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil ly1-zi4r-1 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil pxsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil pxex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil LinLibertineT-lf-sc-ot1 &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil LinLibertineTZ-lf-sc-ot1 &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+\bs\ii Symboles {\eightrm AMS} associ\'es~: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+\input font_libertine_times \fontss
+\UseAMSsymbols
+\section{\sixteenbf\fontss Libertine avec Times}{Libertine avec Times}
+\sampleansi
+\ii Cette macro nous permet de taper du texte dans la police Linux Libertine et des maths dans les fontes TX. La macro est déclarée en entrant l'instruction {\color{brown}\verbatim\input font_libertine_times|endverbatim}. Celle-ci typographie le texte dans les fontes \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/libertine.html}{Linux-Libertine} de Michael Niedermair et les maths dans celles de Young Ryu, \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/txfonts.html}{txfonts}, correspondant aux polices texte \href{http://new.myfonts.com/fonts/adobe/times/}{Adobe Times}. Les polices de cette macro fournissent leurs propres symboles {\caps ams}. Des détails sur cette macro sont donnés dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_libertine_times|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss
+
+\+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil LinLibertineT-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil LinLibertineTZ-lf-ot1 &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil txmi &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil txsy &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil txex &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil LinLibertineTZI-lf-ot1 &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil LinLibertineT-lf-sc-ot1 &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil LinLibertineTI-lf-ot1 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcapsbf Petites capitales en gras &\strut\vrule\strut\hfil LinLibertineTZ-lf-sc-ot1 &\cr \hrule
+
+ }\vrule}}\hrule}\hfil}
+
+ \BlackBoxes
+
+\bs\ii Symboles {\eightrm AMS} associ\'es~: \circledR \ \yen \ $\blacksquare \ \approxeq \ \eqslantgtr \ \curlyeqprec \ \curlyeqsucc \ \preccurlyeq \ \leqq \ \leqslant \ \lessgtr \ \nless \ \nleq \ \nleqslant \ \Bbb R \ \Bbb E \ \Bbb C \ \dots$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\input font_concrete \fontss
+\section{\fourteenrm Concrete}{Concrete}
+
+
+{\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+\noindent\underbar{Formule D'Euler}: La formule d'Euler, aussi connue sous le nom d'{identit\'e d'Euler}, nous dit que~:
+$$e^{\imath x} =\cos(x) + \imath \sin(x), $$
+o\`u $\imath$~est {\sl l'unit\'e imaginaire}.
+
+On peut \'etendre la formule d'Euler \`a une s\'erie~:
+$$\eqalign {e^{\imath x}
+&= \sum_{n=0}^{\infty} {(\imath x)^n\over{n!}}\cr
+&= \sum_{n=0}^{\infty}{(-1)^{n}x^{2n}\over (2n)!} + \imath\sum_1^{\infty}{(-1)^{n-1}x^{2n-1}\over(2n-1)!}\cr
+&= \cos(x) + \imath\sin(x).\cr}$$
+
+\bigskip\bigskip
+\noindent\underbar{Th\'eor\`eme Int\'egral de Cauchy}: Si $f(z)$ est analytique et ses d\'eriv\'ees partielles continues sur une r\'egion~$R$ simplement connexe,~alors~:
+$$\oint_\gamma f(z)\,dz = 0$$
+pour tout lacet rectifiable~$\gamma$ contenu int\'egralement dans~$R$.\vskip2mm
+}\vrule}\hrule\BlackBoxes\bigskip\bigskip}
+
+\ii Cette macro nous permet de taper du texte et des maths dans la police \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/concrete.html}{Concrete} de Donald Knuth. Cette macro est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_concrete|endverbatim}. La macro utilise le package de Jackowski, Ry\'cko et Bzyl \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/cc-pl.html}{cc-pl}, qui est bas\'e sur la police de Knuth, \href{http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/concrete.html}{Concrete Roman}. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_concrete|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil pcr10 &\strut\vrule\kern1pt\vrule\strut\hfil Gras &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil pcmi10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil Gras italique &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil cmex10 &\strut\vrule\kern1pt\vrule\strut\hfil Gras pench\'e &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil pcti10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil pccsc10 &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil pcsl10 &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales en gras &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+\input font_cm \fontss
+\section{\sixteenbf\fontss Computer Modern}{Computer Modern}
+\sample
+\ii Cette macro nous permet de taper du texte dans la police Computer Modern (s\'erif). Bien que \capstex\ produit des documents par d\'efaut dans les polices Computer Modern de Donald Knuth, cette macro est fournie pour que l'utilisateur puisse utiliser les diff\'erentes tailles comme mentionn\'e dans ce document, et au cas o\`u la police principale de n'importe quel document \capstex\ document est autre que Computer Modern (ainsi, en utilisant cette macro, on peut changer la police en Computer Modern dans un groupe). La macro est d\'eclar\'ee en entrant l'instruction {\color{brown}\verbatim\input font_cm|endverbatim}. Des d\'etails sur cette macro sont donn\'es dans le tableau ci-dessous.
+\bs
+\hfil{Affectation de fonte pour la macro {\color{brown}\verbatim font_cm|endverbatim}}\hfil
+
+{\parindent=0pt\settabs4\columns\hfil\vbox{\hrule\hbox{\vrule\hbox{\vbox{\kern1pt\hrule\NoBlackBoxes \eightrm\fontss \+\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\strut\vrule\kern1pt\vrule\strut\hfil \textcolor{blue}{ Style} &\strut\vrule\strut\hfil \textcolor{blue}{ Nom de la fonte} &\cr \hrule
+\+\hfil \eightrm Romain &\strut\vrule\strut\hfil cmr10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightbf Gras &\strut\vrule\strut\hfil cmbx10 &\cr \hrule
+\+\hfil \eighti Maths italique &\strut\vrule\strut\hfil cmmi10 &\strut\vrule\kern1pt\vrule\strut\hfil \eighttt Machine \`a \'ecire &\strut\vrule\strut\hfil cmtt10 &\cr \hrule
+\+\hfil \eightrm Symboles maths &\strut\vrule\strut\hfil cmsy10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightitbf Gras italique &\strut\vrule\strut\hfil cmbxti10 &\cr \hrule
+\+\hfil \eightrm Extension maths &\strut\vrule\strut\hfil cmex10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightslbf Gras pench\'e &\strut\vrule\strut\hfil cmbxsl10 &\cr \hrule
+\+\hfil \eightit Italique &\strut\vrule\strut\hfil cmti10 &\strut\vrule\kern1pt\vrule\strut\hfil \eightcaps Petites capitales &\strut\vrule\strut\hfil cmcsc10 &\cr \hrule
+\+\hfil \eightsl Pench\'e &\strut\vrule\strut\hfil cmsl10 &\strut\vrule\kern1pt\vrule\strut\hfil Petites capitales en gras &\strut\vrule\strut\hfil Non disponible &\cr \hrule
+}\vrule}}\hrule}\hfil}
+
+\BlackBoxes
+
+
+
+
+
+
+
+
+
+%%%%%%%%%% Styles et Tailles %%%%%%%%%%
+\input font_charter \fontss
+\section{Typefaces and Sizes}{Styles et Tailles}
+
+\ii Sont montr\'es ci-dessous diff\'erents styles et tailles propos\'es par mes macros. \bs\hrule\kern1pt\hrule\bs
+
+
+{\obeylines
+\rightline{Romain}\nopagebreak
+{\twentyrm \fontss Ce texte est en taille 20\,pt.}
+{\eighteenrm \fontss Ce texte est en taille 18\,pt.}
+{\sixteenrm \fontss Ce texte est en taille 16\,pt.}
+{\fourteenrm \fontss Ce texte est en taille 14\,pt.}
+{\twelverm \fontss Ce texte est en taille 12\,pt.}
+{\rm \fontss Ce texte est en taille 10\,pt.}
+{\ninerm \fontss Ce texte est en taille 9\,pt.}
+{\eightrm \fontss Ce texte est en taille 8\,pt.}
+{\sevenrm \fontss Ce texte est en taille 7\,pt.}
+{\sixrm \fontss Ce texte est en taille 6\,pt.}
+{\fiverm \fontss Ce texte est en taille 5\,pt.}
+\
+
+\rightline{Italique}\nopagebreak
+{\twentyit \fontss Ce texte est en taille 20\,pt.}
+{\eighteenit \fontss Ce texte est en taille 18\,pt.}
+{\sixteenit \fontss Ce texte est en taille 16\,pt.}
+{\fourteenit \fontss Ce texte est en taille 14\,pt.}
+{\twelveit \fontss Ce texte est en taille 12\,pt.}
+{\it \fontss Ce texte est en taille 10\,pt.}
+{\nineit \fontss Ce texte est en taille 9\,pt.}
+{\eightit \fontss Ce texte est en taille 8\,pt.}
+{\sevenit \fontss Ce texte est en taille 7\,pt.}
+{\sixit \fontss Ce texte est en taille 6\,pt.}
+{\fiveit \fontss Ce texte est en taille 5\,pt.}
+\
+
+\rightline{Pench\'e}\nopagebreak
+{\twentysl \fontss Ce texte est en taille 20\,pt.}
+{\eighteensl \fontss Ce texte est en taille 18\,pt.}
+{\sixteensl \fontss Ce texte est en taille 16\,pt.}
+{\fourteensl \fontss Ce texte est en taille 14\,pt.}
+{\twelvesl \fontss Ce texte est en taille 12\,pt.}
+{\sl \fontss Ce texte est en taille 10\,pt.}
+{\ninesl \fontss Ce texte est en taille 9\,pt.}
+{\eightsl \fontss Ce texte est en taille 8\,pt.}
+{\sevensl \fontss Ce texte est en taille 7\,pt.}
+{\sixsl \fontss Ce texte est en taille 6\,pt.}
+{\fivesl \fontss Ce texte est en taille 5\,pt.}
+\
+
+\newpage
+\rightline{Gras}\nopagebreak
+{\twentybf \fontss Ce texte est en taille 20\,pt.}
+{\eighteenbf \fontss Ce texte est en taille 18\,pt.}
+{\sixteenbf \fontss Ce texte est en taille 16\,pt.}
+{\fourteenbf \fontss Ce texte est en taille 14\,pt.}
+{\twelvebf \fontss Ce texte est en taille 12\,pt.}
+{\bf \fontss Ce texte est en taille 10\,pt.}
+{\ninebf \fontss Ce texte est en taille 9\,pt.}
+{\eightbf \fontss Ce texte est en taille 8\,pt.}
+{\sevenbf \fontss Ce texte est en taille 7\,pt.}
+{\sixbf \fontss Ce texte est en taille 6\,pt.}
+{\fivebf \fontss Ce texte est en taille 5\,pt.}
+\
+
+\rightline{Gras italique}\nopagebreak
+{\twentyitbf \fontss Ce texte est en taille 20\,pt.}
+{\eighteenitbf \fontss Ce texte est en taille 18\,pt.}
+{\sixteenitbf \fontss Ce texte est en taille 16\,pt.}
+{\fourteenitbf \fontss Ce texte est en taille 14\,pt.}
+{\twelveitbf \fontss Ce texte est en taille 12\,pt.}
+{\itbf \fontss Ce texte est en taille 10\,pt.}
+{\nineitbf \fontss Ce texte est en taille 9\,pt.}
+{\eightitbf \fontss Ce texte est en taille 8\,pt.}
+{\sevenitbf \fontss Ce texte est en taille 7\,pt.}
+{\sixitbf \fontss Ce texte est en taille 6\,pt.}
+{\fiveitbf \fontss Ce texte est en taille 5\,pt.}
+\
+
+\rightline{Gras pench\'e}\nopagebreak
+{\twentyslbf \fontss Ce texte est en taille 20\,pt.}
+{\eighteenslbf \fontss Ce texte est en taille 18\,pt.}
+{\sixteenslbf \fontss Ce texte est en taille 16\,pt.}
+{\fourteenslbf \fontss Ce texte est en taille 14\,pt.}
+{\twelveslbf \fontss Ce texte est en taille 12\,pt.}
+{\slbf \fontss Ce texte est en taille 10\,pt.}
+{\nineslbf \fontss Ce texte est en taille 9\,pt.}
+{\eightslbf \fontss Ce texte est en taille 8\,pt.}
+{\sevenslbf \fontss Ce texte est en taille 7\,pt.}
+{\sixslbf \fontss Ce texte est en taille 6\,pt.}
+{\fiveslbf \fontss Ce texte est en taille 5\,pt.}
+\
+
+\rightline{Petites capitales}\nopagebreak
+{\twentycaps \fontss Ce texte est en taille 20\,pt.}
+{\eighteencaps \fontss Ce texte est en taille 18\,pt.}
+{\sixteencaps \fontss Ce texte est en taille 16\,pt.}
+{\fourteencaps \fontss Ce texte est en taille 14\,pt.}
+{\twelvecaps \fontss Ce texte est en taille 12\,pt.}
+{\caps \fontss Ce texte est en taille 10\,pt.}
+{\ninecaps \fontss Ce texte est en taille 9\,pt.}
+{\eightcaps \fontss Ce texte est en taille 8\,pt.}
+{\sevencaps \fontss Ce texte est en taille 7\,pt.}
+{\sixcaps \fontss Ce texte est en taille 6\,pt.}
+{\fivecaps \fontss Ce texte est en taille 5\,pt.}
+
+\
+
+\rightline{Petites capitales en gras}\nopagebreak
+{\twentycapsbf \fontss Ce texte est en taille 20\,pt.}
+{\eighteencapsbf \fontss Ce texte est en taille 18\,pt.}
+{\sixteencapsbf \fontss Ce texte est en taille 16\,pt.}
+{\fourteencapsbf \fontss Ce texte est en taille 14\,pt.}
+{\twelvecapsbf \fontss Ce texte est en taille 112\,pt.}
+{\capsbf \fontss Ce texte est en taille 10\,pt.}
+{\ninecapsbf \fontss Ce texte est en taille 9\,pt.}
+{\eightcapsbf \fontss Ce texte est en taille 8\,pt.}
+{\sevencapsbf \fontss Ce texte est en taille 7\,pt.}
+{\sixcapsbf \fontss Ce texte est en taille 6\,pt.}
+{\fivecapsbf \fontss Ce texte est en taille 5\,pt.}
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%% Espacement Interligne et Intermot %%%%%%%%%%
+\section{Espacement Interligne et Intermot}{Espacement Interligne et Intermot}
+
+\ii Les caract\`eres \'etant chers au style typographique, leur arrangement l'est aussi. Bien s\^ur, la valeur de la signification et de l'utilit\'e du texte, qui tient m\^eme si les phrases ont \'et\'e gribouill\'ees, n'a pas de comparaison, mais il est de bon ton d'arranger un texte d'une jolie mani\`ere. Cette partie traite de deux caract\'eristiques pro\'eminentes dans la composition de texte, l'espacement interligne et intermot.
+
+Si l'on change la police texte \capstex, l'espacement interligne et intermot n'est pas modifi\'e en cons\'equence. Ce n'est pas un gros probl\`eme si on d\'eclare une nouvelle police \`a la m\^eme taille que la pr\'ec\'edente. Mais si la nouvelle police est d\'eclar\'ee \`a une taille consid\'erablement inf\'erieure ou sup\'erieure, la composition ne sera probablement pas (esth\'etiquement) \'el\'egante.
+
+Examinons ces probl\`emes d'espacement en commen\c cant par un exemple. Ensuite, une solution ``acceptable'' pour ce probl\`eme sera pr\'esent\'ee. Celle-ci n'est pas parfaite, mais elle est pratique et c'est un compromis tol\'erable. Puis nous nous dirigerons vers les aspects plus th\'eoriques de l'espacement. La discussion, plut\^ot br\`eve, pourra agir comme point de d\'epart dans la r\'e-\'evaluation de ``probl\`emes d'espace''. En ce qui concerne l'espacement des mots, le meilleur guide est l'exp\-\'erience. En essayant de justifier du texte~(12\,pt) dans des colonnes triples sur une page A4, on s'expose certainement \`a quelques difficult\'es. Plus la colonne est \'etroite, et plus la justification est s\'ev\`ere. Nous n'allons pas d\'elib\'erer sur des histoires de microtypographie (une approche distinctive qui traite beaucoup de probl\`emes d'espacement et qui peut \^etre utilis\'ee avec~pdf\capstex\ ). Les lecteurs curieux pourront se r\'ef\'erer \`a ces trois ouvrages~:~\cite{zapf_microtypography}, \cite{thanh_microtypographic}, et~\cite{text_justification}.
+
+
+\subsection{Exemple}{Exemple}Un \'echantillon de fichier source \capstex\, montr\'e ci-dessous\dots
+
+\bigskip\hrule\vbox{\parindent=0pt\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\obeylines\parindent=0pt\color{brown}\verbatim
+\parindent=0pt
+\input font_century % la taille de la police est de 10pt
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.
+\medskip
+
+\sixrm % modifie la taille de police en 6pt
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.
+\medskip
+
+\eighteenrm % modifie la taille de police en 18pt
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.|endverbatim}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip
+
+\nopagebreak\ii produira apr\`es compilation le r\'esultat suivant~: \nopagebreak
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\parindent=0pt
+\input font_century
+% la taille de la police est de 10pt
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.
+\medskip
+\sixrm % modifie la taille de police en 6pt
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.
+\medskip
+\eighteenrm % modifie la taille de police en 18pt
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+
+
+\ii Au final, on remarque que les espacements interligne et intermot sont ad\'equats lorsque la taille de la police est de 10\,pt. Dans un texte en 6\,pt, l'espace interligne est trop important et l'espace intermot plus grand que n\'ecessaire. Dans un texte en 18\,pt, \`a la fois l'espace interligne et l'espace intermot sont moindres. C'est parce que \capstex\ fonctionne encore avec les valeurs d'espacement par d\'efaut, qui sont d\'eclar\'ees pour des tailles de police de 10\,pt. Pour y rem\'edier, \capstex\ offre deux primitives de contr\^ole tr\`es utiles~(\cite{knuth_texbook}, pages~76 et 78), qui sont~:\ms
+{\color{brown}\verbatim \spaceskip|endverbatim} pour contr\^oler l'espace intermot, et
+
+{\color{brown}\verbatim \baselineskip|endverbatim} pour contr\^oler l'espace interligne.
+
+
+
+
+\definexref{solution}{solution}{}
+\subsection{Une Solution Ais\'ee}{Une Solution Aisee}Ici je pr\'esente une technique que j'utilise pour r\'esoudre des probl\`emes d'espacement quand j'utilise diff\'erentes polices \`a diff\'erentes tailles. Ecrivons une nouvelle d\'efinition appel\'ee~{\color{brown}\verbatim \fontspacing|endverbatim}.\ms
+
+\ii {\color{brown}\verbatim\def\fontspacing{\baselineskip=2.8ex plus0pt minus0pt
+ \spaceskip=0.333333em plus0.122222em minus0.0999999em}|endverbatim}\sk
+ \def\fontspacing{\baselineskip=2.8ex plus0pt minus0pt
+ \spaceskip=0.333333em plus0.122222em minus0.0999999em}
+
+\ii Les unit\'es {\sl ex\/} et {\sl em\/} sont relatives~(\cite{knuth_texbook}, page~60). Cela rend notre d\'efinition plus g\'en\'erale.\ms
+
+{\sl em\/} est la largeur d'un cadratin (caract\`ere carr\'e dont la chasse et le corps ont la m\^eme
+valeur) dans la police courante,
+
+{\sl ex\/} est la hauteur d'x (hauteur des bas de casse) de la police courante.\sk
+
+\ii D\'eclarer {\color{brown}\verbatim \fontspacing|endverbatim} va fixer notre espace interligne \`a 2.8ex~(=~12.05553\,pt si la police {\verbatim cmr10|endverbatim} \`a 10\,pt est utilis\'ee), sans aucune {\sl \'etirabilit\'e\/}~(donn\'e apr\`es {\sl plus\/}) ou {\sl contractibilit\'e}~(donn\'e apr\`es {\sl minus\/}). {\color{brown}\verbatim \fontspacing|endverbatim} fixe \'egalement l'espace intermot \`a 0.333333\,em, avec 0.122222\,em d'\'etirabilit\'e et 0.0999999\,em de contractibilit\'e autoris\'ees. Pour la police {\verbatim cmr10|endverbatim}, ces valeurs (d\'efaut) sont 3.33333\,pt, 1.66666\,pt, et 1.11111\,pt, respectivement.
+
+Essayons d'utiliser {\color{brown}\verbatim \fontspacing|endverbatim} dans l'exemple donn\'e au d\'ebut de ce chapitre. Ci-dessous un exemple de source \capstex~:
+
+
+\newpage
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\obeylines\parindent=0pt\color{brown}
+\verbatim
+\parindent=0pt
+\input font_century % the font size is 10pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.
+\medskip
+\sixrm % changes the font size to 6pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.
+\medskip
+\eighteenrm % changes the font size to 18pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.|endverbatim}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip
+
+
+\nopagebreak\ii \nopagebreak\ii produira apr\`es compilation le r\'esultat suivant~:\nopagebreak
+
+
+\bigskip\hrule\vbox{\noindent\vrule\NoBlackBoxes\vbox{\vskip2mm\leftskip7mm\rightskip7mm
+{\parindent=0pt
+\input font_century % the font size is 10pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.
+\medskip
+\sixrm % changes the font size to 6pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.
+\medskip
+\eighteenrm % changes the font size to 18pt
+\fontspacing % \baselineskip and \spaceskip are set accordingly
+Les espacements interligne et intermot sont d'importants param\`etres de composition. Un texte compos\'e avec de jolis caract\`eres mais avec un ``mauvais'' espacement interligne et intermot ne pla\^\i t pas \`a l'\oe il. Attention \`a l'espace entre les lignes d'un paragraphe, et entre les mots d'une ligne.}
+\vskip2mm}\vrule}\hrule\BlackBoxes\bigskip\bigskip
+
+En utilisant les primitives de contr\^ole {\color{brown}\verbatim \spaceskip|endverbatim} et {\color{brown}\verbatim \baselineskip|endverbatim}, qui peuvent \^etre d\'eclar\'ees presque n'importe o\`u, nous obtenons l'espacement d\'esir\'e. Pour plus de d\'etails sur l'espacement, vous pouvez vous r\'ef\'erer \`a~\cite{knuth_texbook}.
+
+
+\subsection{Espacement id\'eal ?}{Espacement ideal ?}C'est un fait bien connu que les espacements interligne et intermot sont des aspects essentiels d'une bonne typographie. On appelle aussi l'espace interligne {\sl interlignage}, {\sl espace ligne}, ou encore {\sl espace interlin\'eaire}. L'espace intermot est aussi connu sous le nom d'{\sl espace mot}, ou {\sl interlettrage}. Quelles sont les ``meilleures'' valeurs pour les espaces interligne et intermot ? Bien s\^ur, il n'existe pas de r\'eponse en une ligne \`a cette question. C'est subjectif; ce qui est optimal pour l'un para\^\i tra mauvais pour l'autre.
+
+On peut d\'ej\`a noter que l'espacement est certainement d\'ependent de la taille de la fonte. Des fontes de taille plus \'elev\'ees demandent un espacement diff\'erent de celles de tailles moyennes ou de tailles plus petites. Aussi, l'espacement (interligne et intermot) n'est pas directement ou inversement proportionnel \`a la taille des caract\`eres, bien que cela peuve servir de bonne approximation; dans notre \ref{solution} nous avons utilis\'e ce concept de proportionnalit\'e. Diff\'erents styles de caract\`eres auront besoin d'espacements diff\'erents. Le support de repr\'esentation influe aussi les valeurs d'espacement (un texte sur du papier est bien diff\'erent d'un texte sur un \'ecran d'ordinateur ou d'un diaporama projet\'e). Les exigences d'espacement varient si le texte est sur une seule ligne et sera lu en un coup d'\oe il (tels que les listes de noms), ou si la lecture est continue (tel que ce paragraphe).
+
+Recentrons la discussion en ne consid\'erant que le cas le plus courant, c'est-\`a-dire le texte normal; celui des livres, romans et magazines. Dans ce cas, le texte est con\c cu pour une lecture continue. M\^eme dans ce cas, pour une police donn\'ee, les exigences en terme d'espacement d\'ependent de la largeur du texte. Un texte de largeur 15\,cm devra \^etre typographi\'e avec diff\'erents param\`etres d'espacement qu'un texte de seulement 6\,cm de largeur, par exemple pour une colonne dans une page multicolonne. Mais ceci est pour une autre fois. Pour l'instant, nous allons nous concentrer sur le cas g\'en\'eral (du texte normal et continu, principalement en taille 10 \`a 14\,pt), et ainsi traiter s\'epar\'ement de l'espace interligne et de l'espace intermot.
+
+\subsubsection{Espace Intermot}
+Commen\c cons avec les r\`egles de composition de texte de \href{http://www.linotype.com/794/inhonorofthe100thbirthdayofjantschichold.html}{Jan Tschichold}, qui font partie des
+\href{http://openlibrary.org/books/OL19449256M/Penguin_composition_rules.}{R\`egles de composition des livres Penguin Books}, compilation des id\'ees de Tschichold. On peut les trouver \href{http://ronin-group.org/misc_etext_tschichold.html}{ici}. Il est mentionn\'e que, pour la composition d'un texte~:
+\sk{\sl
+\itemitem{1.}Toute composition de texte devra avoir des mots aussi rapproch\'es que possible. Comme r\`egle, l'espacement devrait \^etre un espace moyen ou l'\'epaisseur du i dans la taille de texte utilis\'ee.\sk
+\itemitem{2.}De larges espaces devront \^etre strictement \'evit\'es. Les mots seront coup\'es librement lorsque n\'ecessaire afin d'\'eviter de grands espaces, puisque la c\'esure fait moins de d\'eg\^ats dans l'apparence de la page que trop d'espace entre les mots.\sk
+\itemitem{3.}Toute ponctuation majeure du texte (point, virgule, point-virgule et double point) devra \^etre suivie par le m\^eme espacement que celui utilis\'e sur le reste de la ligne.\ms}
+
+\ii Il n'y a pas de r\`egles du jeu rigides. \href{http://www.typotheque.com/authors/robert_bringhurst}{Robert Bringhurst} \'ecrit, dans son livre influent~(\cite{elements_typographic}):
+\quote{Pour un texte normal dans une taille normale, la valeur typique pour l'espace intermot est un quart d'em, ce qu'on peut \'ecrire M/4. Un quart d'em est g\'en\'eralement identique \`a, ou l\'eg\`erement plus que, la largeur de la lettre t.}
+
+\ii L'espace intermot optimal~(sans \'etirement ou contraction) dans la police r\'eguli\`ere \capstex\ par d\'efaut (\hfuzz4pt{\verbatim cmr10|endverbatim} en 10\,pt) est de 3.33333\,pt. La largeur de la lettre i de {\verbatim cmr10|endverbatim} en 10\,pt est de 2.77779\,pt et celle de la lettre t est de 3.8889\,pt. Un quart d'em de {\verbatim cmr10|endverbatim} en 10\,pt est de 2.5\,pt. Une petite manipulation de l'espace intermot, de son \'etirabilit\'e ou contractibilit\'e, peuvent conduire \`a des changements plut\^ot apparents.
+
+\hfuzz1pt
+
+Id\'ealement, l'espacement intermot devrait \^etre constant tout au long du texte, ce qui est impossible d'obtenir avec un texte justifi\'e. L'\'etirement et la contraction de l'espace intermot ainsi que la c\'esure des mots ont leurs limites. Certains seraient d'accord avec Tschichold et opteraient pour plus de c\'esures et un espace intermot moins flexible pour maintenir une meilleure coloration de page, alors que d'autres diraient qu'un nombre de c\'esures excessif emp\^eche de lire correctement, et mettraient ainsi en place un espacement intermot plus large et flexible, ce qui pourrait conduire \`a des rivi\`eres. Au fil des ans, l'espace intermot s'est \'elargi, ou peut-\^etre qu'il est trop d\'ependent du langage, ou encore le manque de papier \'etait un probl\`eme par le pass\'e~: comparez l'espace intermot dans \href{http://burton.byu.edu/Bible\%20Site/Gutenberg.htm}{La Bible de Gutenberg}, connue pour son excellente typographie, et le livre de Knuth~\cite{knuth_texbook}, ouvrage typographi\'e avec \'el\'egance.
+
+Dans ce livre~\cite{knuth_texbook}, Knuth demande \`a \capstex\ de mettre plus d'espace apr\`es les points, les virgules, les points-virgules, les doubles points, les points d'interrogation et d'exclamation. Plain~\capstex\ le ferait par d\'efaut sauf si la commande {\color{brown}\verbatim \frenchspacing|endverbatim} \'etait donn\'ee. Tschichold pr\'econise au contraire de ne pas donner autant d'espace suppl\'ementaire. Dans ce document, j'ai utilis\'e la commande {\color{brown}\verbatim \frenchspacing|endverbatim} car le texte mis en forme semblait ainsi avoir une coloration uniforme sans blocs blancs ou rivi\`eres. Mais quand j'\'ecris un rapport scientifique ou une th\`ese, qui contiennent des math\'ematiques, symboles, variables, etc., je pr\'ef\`ere la mani\`ere de Knuth, qui donne plus d'espace apr\`es la ponctuation (je pense que cela rend le texte plus lisible et plus facile \`a comprendre). Pour des colonnes multiples avec une taille de texte normale sur du A4 ou une feuille taille lettre, mon exp\'erience sugg\`ere que l'espace suppl\'ementaire apr\`es la ponctuation conduit \`a des rivi\`eres et des blocs blancs.
+
+Diff\'erentes polices n\'ecessitent diff\'erents espaces intermot. Bitstream Charter, la police actuel\-le\-ment utilis\'ee, peut supporter un espacement intermot moindre et plus rigide (et donne m\^eme un meilleur rendu) que la police Computer Modern. Pour une typographie ``au top'', il faudra modifier l'espacement intermot en fonction de l'usage de telle ou telle police.
+
+Le livre ~\cite{elements_typographic} mentionne une valeur ``raisonnable'' de l'espace intermot, accompagn\'ee de valeurs \'etir\'ees et r\'etr\'ecies. Traduit en langage \capstex, cela devient~: {\color{brown}\verbatim \spaceskip=0.25em plus0.08em minus0.05em|endverbatim}. Essayez-les pour voir les diff\'erents effets. Cela remplit-il la page de bo\^\i tes noires ? Quel effet sur la c\'esure ? Et si l'on utilise des colonnes multiples ?
+
+Notre discussion sur l'espace intermot se conclut avec la phrase~: {\sl Il n'y a pas de param\`etres id\'eaux ou parfaits ou meilleurs que d'autres pour l'espacement intermot}. Nous sommes juges de notre propre travail, et raffiner sa capacit\'e de jugement vient avec l'exp\'erience, donc allons voir ce qui suit.
+
+\subsubsection{Espace Interligne}
+Il est normalement facile de g\'erer l'espace interligne, sauf si la ligne est veuve (club line). Pour du texte de taille normale, l'espace interligne a g\'en\'eralement 0\endash 4\,pt de plus que la taille des caract\`eres en points. Ce document est principalement en police {\verbatim mdbchr7t|endverbatim} en 10\,pt, avec un espace interligne de {\tt\the\baselineskip}, et, pour le grossissement global, j'ai utilis\'e {\verbatim \magnification=1100|endverbatim}.
+
+Sur une page, disons A4, et pour n'importe quelle police, on peut accepter d'avoir un espace interligne plus restreint lorsqu'on utilise des colonnes multiples. Le regard ne perd pas la ligne et il est ais\'e de sauter \`a la ligne suivante lorsque la largeur de la colonne est moindre, par exemple environ~6\,cm. Plusieurs d\'efis tels que la composition de grilles ou les lignes veuves ponctuent le domaine de l'espacement interligne, mais nous n'allons pas en parler ici. Quant \`a l'instruction \TeX\ {\color{brown}\verbatim \baselineskip|endverbatim}, nous en avons d\'ej\`a touch\'e un mot, et pour en savoir plus, vous pouvez vous r\'ef\'erer \`a \cite{knuth_texbook} et~\cite{against_widows}.
+
+
+
+%%%%%%%%%% Remerciements %%%%%%%%%%
+\section{Remerciements}{Remerciements}
+
+\bs
+
+\ii Je remercie Donald~E.\;Knuth du fond du c\oe ur de nous avoir donn\'e \capstex, le meilleur programme de mise en forme \`a ce jour, et qui a r\'eussi \`a l'\'epreuve du temps. J'\'eprouve \'egalement de la gratitude envers nos chers utilisateurs \capstex\ qui ont contribu\'e \`a l'am\'elioration de \capstex\ en donnant plus de latitude \`a ses fonctionalit\'es libres. Les concepteurs des polices et packages que j'ai utilis\'es font partie de ces chers utilisateurs. Je suis reconnaissant envers Petr Habala pour m'avoir initi\'e \`a \capstex; \`a ma famille pour leur amour et soutien indispensable. Je remercie ma femme, Daphne, pour avoir particip\'e aux discussions sur la typographie et pour sa compr\'ehension. Il y a tellement de facteurs que je suis incapable de prendre en compte qu'\`a la fin, mais par dessus tout, je dis~: ``Merci~{\dev~:}.''
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%% R\'ef\'erences %%%%%%%%%%
+\section{R\'ef\'erences\raise3mm\hbox{\bf 2}}{References}
+
+\nocite{habala_amstex}\nocite{knuth_texbook}\nocite{fonts_tex_latex}\nocite{elements_typographic}
+
+\bibliography{C:/bib}
+
+\bibliographystyle{ieeetran}
+
+
+\vskip7.5cm\hrule width 5.70truecm\kern2mm\eightrm\fontss
+\hbox{ \raise1.2mm\hbox{\ \ \ 2}\ \; Le lecteur a \'et\'e renvoy\'e \`a la plupart des r\'ef\'erences (non list\'ees sur cette page) par des hyperliens}
+\hbox{\ \ \ \ \ \ \ \ donn\'es dans ce document {\caps pdf}.}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\special{pdf: docinfo << /Author (Daphne Parramon-Dhawan)
+/Title (Macros de changement des polices Texte et Maths en TeX)
+/Creator(XeTeX: Bas\'e sur TeX---Le G\'enie de Knuth)
+/Subject(Polices Texte et Maths en TeX)
+/Keywords(TeX, gratuit, polices, fontes, typographie, fonte math\'ematique, texte, polices math\'ematiques, font-change, Charter, Utopia, Century, Palatino, Bookman, Times, Euler, Bera, Arev, Vera, Iwona, Kurier, Kp-Fonts, Antykwa Torunska, Libertine, Epigrafica, Computer Modern Bright, CM Bright, Computer Modern, Concrete, macro, macros)>>}
+
+\special{pdf: docview <</PageMode /UseOutlines>> }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\bye
+
+
+
+
+
+
+
diff --git a/macros/plain/contrib/font-change/tex/macros/default-amssymbols.tex b/macros/plain/contrib/font-change/tex/macros/default-amssymbols.tex
new file mode 100644
index 0000000000..ed7b376e4a
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/default-amssymbols.tex
@@ -0,0 +1,15 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+\def\loadmsam{\font\tenmsa=msam10 \font\sevenmsa=msam7 \font\fivemsa=msam5
+\fam\msafam \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa
+\global\let\loadmsam\empty}%
+\loadmsam
+%
+\def\loadmsbm{\font\tenmsb=msbm10 \font\sevenmsb=msbm7 \font\fivemsb=msbm5
+\fam\msbfam \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb
+\global\let\loadmsbm\empty}%
+\loadmsbm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_antp_euler.tex b/macros/plain/contrib/font-change/tex/macros/font_antp_euler.tex
new file mode 100644
index 0000000000..bd93d40ce8
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_antp_euler.tex
@@ -0,0 +1,226 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-antpr10 at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-antpr10 at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-antpr10 at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-antpr10 at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-antpr12 \fzzozznzzt}%
+\font\tenrm= rm-antpr10
+\def\ninerm{\font\fzzozznzzt= rm-antpr10 at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-antpr8 \fzzozznzzt}%
+\font\sevenrm= rm-antpr10 at7pt
+\def\sixrm{\font\fzzozznzzt= rm-antpr6 \fzzozznzzt}%
+\font\fiverm= rm-antpr10 at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= zeurm10 at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= zeurm10 at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= zeurm10 at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= zeurm10 at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= zeurm10 at12pt \fzzozznzzt}%
+\font\teni= zeurm10
+\def\ninei{\font\fzzozznzzt= zeurm10 at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= zeurm10 at8pt \fzzozznzzt}%
+\font\seveni= zeurm7
+\def\sixi{\font\fzzozznzzt= zeurm10 at6pt \fzzozznzzt}%
+\font\fivei= zeurm5
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= zeusm10 at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=zeusm10 at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= zeusm10 at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=zeusm10 at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= zeusm10 at12pt \fzzozznzzt}%
+\font\tensy= zeusm10
+\def\ninesy{\font\fzzozznzzt= zeusm10 at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= zeusm10 at8pt \fzzozznzzt}%
+\font\sevensy= zeusm7
+\def\sixsy{\font\fzzozznzzt= zeusm10 at6pt \fzzozznzzt}%
+\font\fivesy= zeusm5
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= zeuex10 at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=zeuex10 at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= zeuex10 at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=zeuex10 at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= zeuex10 at12pt \fzzozznzzt}%
+\font\tenex= zeuex10
+\def\nineex{\font\fzzozznzzt= zeuex10 at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= zeuex10 at8pt \fzzozznzzt}%
+\font\sevenex= zeuex10 at7pt
+\def\sixex{\font\fzzozznzzt= zeuex10 at6pt \fzzozznzzt}%
+\font\fiveex= zeuex10 at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-antpri10 at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-antpri10 at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-antpri10 at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-antpri10 at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-antpri12 \fzzozznzzt}%
+\font\tenit= rm-antpri10
+\def\nineit{\font\fzzozznzzt= rm-antpri10 at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-antpri8 \fzzozznzzt}%
+\font\sevenit= rm-antpri10 at7pt
+\def\sixit{\font\fzzozznzzt= rm-antpri6 \fzzozznzzt}%
+\font\fiveit= rm-antpri10 at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-antpri10 at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-antpri10 at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-antpri10 at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-antpri10 at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-antpri12 \fzzozznzzt}%
+\font\tensl= rm-antpri10
+\def\ninesl{\font\fzzozznzzt= rm-antpri10 at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-antpri8 \fzzozznzzt}%
+\font\sevensl= rm-antpri10 at7pt
+\def\sixsl{\font\fzzozznzzt= rm-antpri6 \fzzozznzzt}%
+\font\fivesl= rm-antpri10 at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-antpb10 at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-antpb10 at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-antpb10 at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-antpb10 at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-antpb12 \fzzozznzzt}%
+\font\tenbf= rm-antpb10
+\def\ninebf{\font\fzzozznzzt= rm-antpb10 at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-antpb8 \fzzozznzzt}%
+\font\sevenbf= rm-antpb10 at7pt
+\def\sixbf{\font\fzzozznzzt= rm-antpb6 \fzzozznzzt}%
+\font\fivebf= rm-antpb10 at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= cmtt10 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= cmtt10 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= cmtt10 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=cmtt10 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= cmtt10 at12pt \fzzozznzzt}%
+\font\tentt= cmtt10
+\def\ninett{\font\fzzozznzzt= cmtt9 \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= cmtt8 \fzzozznzzt}%
+\font\seventt= cmtt10 at7pt
+\def\sixtt{\font\fzzozznzzt= cmtt10 at6pt \fzzozznzzt}%
+\font\fivett= cmtt10 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-antpbi10 at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-antpbi10 at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-antpbi10 at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-antpbi10 at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-antpbi12 \fzzozznzzt}%
+\font\itbf= rm-antpbi10
+\def\nineitbf{\font\fzzozznzzt= rm-antpbi10 at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-antpbi8 \fzzozznzzt}%
+\font\sevenitbf= rm-antpbi10 at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-antpbi6 \fzzozznzzt}%
+\font\fiveitbf= rm-antpbi10 at5pt
+%
+% slanted boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-antpbi10 at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-antpbi10 at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-antpbi10 at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-antpbi10 at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-antpbi12 \fzzozznzzt}%
+\font\itbf= rm-antpbi10
+\def\nineitbf{\font\fzzozznzzt= rm-antpbi10 at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-antpbi8 \fzzozznzzt}%
+\font\sevenitbf= rm-antpbi10 at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-antpbi6 \fzzozznzzt}%
+\font\fiveitbf= rm-antpbi10 at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-antpr10-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-antpr10-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-antpr10-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-antpr10-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-antpr12-sc \fzzozznzzt}%
+\font\caps= rm-antpr10-sc
+\def\ninecaps{\font\fzzozznzzt= rm-antpr10-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-antpr8-sc \fzzozznzzt}%
+\font\sevencaps= rm-antpr10-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-antpr6-sc \fzzozznzzt}%
+\font\fivecaps= rm-antpr10-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-antpb10-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-antpb10-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-antpb10-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-antpb10-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= rm-antpb12-sc \fzzozznzzt}%
+\font\capsbf= rm-antpb10-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-antpb10-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-antpb8-sc \fzzozznzzt}%
+\font\sevencapsbf= rm-antpb10-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-antpb6-sc \fzzozznzzt}%
+\font\fivecapsbf= rm-antpb10-sc at5pt
+%
+\mathchardef\Gamma="7100
+\mathchardef\Delta="7101
+\mathchardef\Theta="7102
+\mathchardef\Lambda="7103
+\mathchardef\Xi="7104
+\mathchardef\Pi="7105
+\mathchardef\Sigma="7106
+\mathchardef\Upsilon="7107
+\mathchardef\Phi="7108
+\mathchardef\Psi="7109
+\mathchardef\Omega="710A
+\mathchardef\varrho="711A
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_antt-condensed-light.tex b/macros/plain/contrib/font-change/tex/macros/font_antt-condensed-light.tex
new file mode 100644
index 0000000000..246957379e
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_antt-condensed-light.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% The "antt" family has other versions like "condensed", "light", etc. Stick to rm-???????
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-anttcl at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-anttcl at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-anttcl at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-anttcl at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-anttcl at12pt \fzzozznzzt}%
+\font\tenrm= rm-anttcl
+\def\ninerm{\font\fzzozznzzt= rm-anttcl at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-anttcl at8pt \fzzozznzzt}%
+\font\sevenrm= rm-anttcl at7pt
+\def\sixrm{\font\fzzozznzzt= rm-anttcl at6pt \fzzozznzzt}%
+\font\fiverm= rm-anttcl at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-anttcli at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-anttcli at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-anttcli at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-anttcli at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-anttcli at12pt \fzzozznzzt}%
+\font\teni= mi-anttcli
+\def\ninei{\font\fzzozznzzt= mi-anttcli at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-anttcli at8pt \fzzozznzzt}%
+\font\seveni= mi-anttcli at7pt
+\def\sixi{\font\fzzozznzzt= mi-anttcli at6pt \fzzozznzzt}%
+\font\fivei= mi-anttcli at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-anttclz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-anttclz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-anttclz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-anttclz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-anttclz at12pt \fzzozznzzt}%
+\font\tensy= sy-anttclz
+\def\ninesy{\font\fzzozznzzt= sy-anttclz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-anttclz at8pt \fzzozznzzt}%
+\font\sevensy= sy-anttclz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-anttclz at6pt \fzzozznzzt}%
+\font\fivesy= sy-anttclz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-anttcl at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-anttcl at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-anttcl at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-anttcl at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-anttcl at12pt \fzzozznzzt}%
+\font\tenex= ex-anttcl
+\def\nineex{\font\fzzozznzzt= ex-anttcl at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-anttcl at8pt \fzzozznzzt}%
+\font\sevenex= ex-anttcl at7pt
+\def\sixex{\font\fzzozznzzt= ex-anttcl at6pt \fzzozznzzt}%
+\font\fiveex= ex-anttcl at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-anttcli at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-anttcli at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-anttcli at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-anttcli at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-anttcli at12pt \fzzozznzzt}%
+\font\tenit= rm-anttcli
+\def\nineit{\font\fzzozznzzt= rm-anttcli at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-anttcli at8pt \fzzozznzzt}%
+\font\sevenit= rm-anttcli at7pt
+\def\sixit{\font\fzzozznzzt= rm-anttcli at6pt \fzzozznzzt}%
+\font\fiveit= rm-anttcli at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-anttcli at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-anttcli at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-anttcli at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-anttcli at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-anttcli at12pt \fzzozznzzt}%
+\font\tensl= rm-anttcli %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-anttcli at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-anttcli at8pt \fzzozznzzt}%
+\font\sevensl= rm-anttcli at7pt
+\def\sixsl{\font\fzzozznzzt= rm-anttcli at6pt \fzzozznzzt}%
+\font\fivesl= rm-anttcli at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-anttcm at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-anttcm at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-anttcm at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-anttcm at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-anttcm at12pt \fzzozznzzt}%
+\font\tenbf= rm-anttcm
+\def\ninebf{\font\fzzozznzzt= rm-anttcm at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-anttcm at8pt \fzzozznzzt}%
+\font\sevenbf= rm-anttcm at7pt
+\def\sixbf{\font\fzzozznzzt= rm-anttcm at6pt \fzzozznzzt}%
+\font\fivebf= rm-anttcm at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-anttcmi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-anttcmi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-anttcmi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-anttcmi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-anttcmi at12pt \fzzozznzzt}%
+\font\itbf= rm-anttcmi
+\def\nineitbf{\font\fzzozznzzt= rm-anttcmi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-anttcmi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-anttcmi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-anttcmi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-anttcmi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-anttcmi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-anttcmi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-anttcmi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-anttcmi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-anttcmi at12pt \fzzozznzzt}%
+\font\slbf= rm-anttcmi
+\def\nineslbf{\font\fzzozznzzt= rm-anttcmi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-anttcmi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-anttcmi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-anttcmi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-anttcmi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= qx-anttclcap at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= qx-anttclcap at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= qx-anttclcap at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= qx-anttclcap at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= qx-anttclcap at12pt \fzzozznzzt}%
+\font\caps= qx-anttclcap
+\def\ninecaps{\font\fzzozznzzt= qx-anttclcap at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= qx-anttclcap at8pt \fzzozznzzt}%
+\font\sevencaps= qx-anttclcap at7pt
+\def\sixcaps{\font\fzzozznzzt= qx-anttclcap at6pt \fzzozznzzt}%
+\font\fivecaps= qx-anttclcap at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= qx-anttcmcap at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= qx-anttcmcap at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= qx-anttcmcap at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= qx-anttcmcap at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== qx-anttcmcap at12pt \fzzozznzzt}%
+\font\capsbf= qx-anttcmcap
+\def\ninecapsbf{\font\fzzozznzzt= qx-anttcmcap at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= qx-anttcmcap at8pt \fzzozznzzt}%
+\font\sevencapsbf= qx-anttcmcap at7pt
+\def\sixcapsbf{\font\fzzozznzzt= qx-anttcmcap at6pt \fzzozznzzt}%
+\font\fivecapsbf= qx-anttcmcap at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_antt-condensed-medium.tex b/macros/plain/contrib/font-change/tex/macros/font_antt-condensed-medium.tex
new file mode 100644
index 0000000000..63f69b36ab
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_antt-condensed-medium.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% The "antt" family has other versions like "condensed", "light", etc. Stick to rm-???????
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-anttcm at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-anttcm at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-anttcm at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-anttcm at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-anttcm at12pt \fzzozznzzt}%
+\font\tenrm= rm-anttcm
+\def\ninerm{\font\fzzozznzzt= rm-anttcm at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-anttcm at8pt \fzzozznzzt}%
+\font\sevenrm= rm-anttcm at7pt
+\def\sixrm{\font\fzzozznzzt= rm-anttcm at6pt \fzzozznzzt}%
+\font\fiverm= rm-anttcm at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-anttcmi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-anttcmi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-anttcmi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-anttcmi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-anttcmi at12pt \fzzozznzzt}%
+\font\teni= mi-anttcmi
+\def\ninei{\font\fzzozznzzt= mi-anttcmi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-anttcmi at8pt \fzzozznzzt}%
+\font\seveni= mi-anttcmi at7pt
+\def\sixi{\font\fzzozznzzt= mi-anttcmi at6pt \fzzozznzzt}%
+\font\fivei= mi-anttcmi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-anttcmz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-anttcmz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-anttcmz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-anttcmz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-anttcmz at12pt \fzzozznzzt}%
+\font\tensy= sy-anttcmz
+\def\ninesy{\font\fzzozznzzt= sy-anttcmz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-anttcmz at8pt \fzzozznzzt}%
+\font\sevensy= sy-anttcmz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-anttcmz at6pt \fzzozznzzt}%
+\font\fivesy= sy-anttcmz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-anttcm at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-anttcm at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-anttcm at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-anttcm at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-anttcm at12pt \fzzozznzzt}%
+\font\tenex= ex-anttcm
+\def\nineex{\font\fzzozznzzt= ex-anttcm at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-anttcm at8pt \fzzozznzzt}%
+\font\sevenex= ex-anttcm at7pt
+\def\sixex{\font\fzzozznzzt= ex-anttcm at6pt \fzzozznzzt}%
+\font\fiveex= ex-anttcm at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-anttcmi at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-anttcmi at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-anttcmi at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-anttcmi at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-anttcmi at12pt \fzzozznzzt}%
+\font\tenit= rm-anttcmi
+\def\nineit{\font\fzzozznzzt= rm-anttcmi at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-anttcmi at8pt \fzzozznzzt}%
+\font\sevenit= rm-anttcmi at7pt
+\def\sixit{\font\fzzozznzzt= rm-anttcmi at6pt \fzzozznzzt}%
+\font\fiveit= rm-anttcmi at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-anttcmi at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-anttcmi at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-anttcmi at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-anttcmi at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-anttcmi at12pt \fzzozznzzt}%
+\font\tensl= rm-anttcmi %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-anttcmi at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-anttcmi at8pt \fzzozznzzt}%
+\font\sevensl= rm-anttcmi at7pt
+\def\sixsl{\font\fzzozznzzt= rm-anttcmi at6pt \fzzozznzzt}%
+\font\fivesl= rm-anttcmi at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-anttcb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-anttcb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-anttcb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-anttcb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-anttcb at12pt \fzzozznzzt}%
+\font\tenbf= rm-anttcb
+\def\ninebf{\font\fzzozznzzt= rm-anttcb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-anttcb at8pt \fzzozznzzt}%
+\font\sevenbf= rm-anttcb at7pt
+\def\sixbf{\font\fzzozznzzt= rm-anttcb at6pt \fzzozznzzt}%
+\font\fivebf= rm-anttcb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-anttcbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-anttcbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-anttcbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-anttcbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-anttcbi at12pt \fzzozznzzt}%
+\font\itbf= rm-anttcbi
+\def\nineitbf{\font\fzzozznzzt= rm-anttcbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-anttcbi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-anttcbi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-anttcbi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-anttcbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-anttcbi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-anttcbi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-anttcbi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-anttcbi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-anttcbi at12pt \fzzozznzzt}%
+\font\slbf= rm-anttcbi
+\def\nineslbf{\font\fzzozznzzt= rm-anttcbi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-anttcbi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-anttcbi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-anttcbi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-anttcbi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= qx-anttcmcap at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= qx-anttcmcap at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= qx-anttcmcap at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= qx-anttcmcap at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= qx-anttcmcap at12pt \fzzozznzzt}%
+\font\caps= qx-anttcmcap
+\def\ninecaps{\font\fzzozznzzt= qx-anttcmcap at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= qx-anttcmcap at8pt \fzzozznzzt}%
+\font\sevencaps= qx-anttcmcap at7pt
+\def\sixcaps{\font\fzzozznzzt= qx-anttcmcap at6pt \fzzozznzzt}%
+\font\fivecaps= qx-anttcmcap at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= qx-anttcbcap at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= qx-anttcbcap at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= qx-anttcbcap at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= qx-anttcbcap at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== qx-anttcbcap at12pt \fzzozznzzt}%
+\font\capsbf= qx-anttcbcap
+\def\ninecapsbf{\font\fzzozznzzt= qx-anttcbcap at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= qx-anttcbcap at8pt \fzzozznzzt}%
+\font\sevencapsbf= qx-anttcbcap at7pt
+\def\sixcapsbf{\font\fzzozznzzt= qx-anttcbcap at6pt \fzzozznzzt}%
+\font\fivecapsbf= qx-anttcbcap at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_antt-condensed.tex b/macros/plain/contrib/font-change/tex/macros/font_antt-condensed.tex
new file mode 100644
index 0000000000..6bac160e8f
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_antt-condensed.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% The "antt" family has other versions like "condensed", "light", etc. Stick to rm-???????
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-anttcr at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-anttcr at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-anttcr at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-anttcr at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-anttcr at12pt \fzzozznzzt}%
+\font\tenrm= rm-anttcr
+\def\ninerm{\font\fzzozznzzt= rm-anttcr at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-anttcr at8pt \fzzozznzzt}%
+\font\sevenrm= rm-anttcr at7pt
+\def\sixrm{\font\fzzozznzzt= rm-anttcr at6pt \fzzozznzzt}%
+\font\fiverm= rm-anttcr at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-anttcri at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-anttcri at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-anttcri at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-anttcri at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-anttcri at12pt \fzzozznzzt}%
+\font\teni= mi-anttcri
+\def\ninei{\font\fzzozznzzt= mi-anttcri at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-anttcri at8pt \fzzozznzzt}%
+\font\seveni= mi-anttcri at7pt
+\def\sixi{\font\fzzozznzzt= mi-anttcri at6pt \fzzozznzzt}%
+\font\fivei= mi-anttcri at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-anttcrz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-anttcrz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-anttcrz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-anttcrz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-anttcrz at12pt \fzzozznzzt}%
+\font\tensy= sy-anttcrz
+\def\ninesy{\font\fzzozznzzt= sy-anttcrz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-anttcrz at8pt \fzzozznzzt}%
+\font\sevensy= sy-anttcrz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-anttcrz at6pt \fzzozznzzt}%
+\font\fivesy= sy-anttcrz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-anttcr at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-anttcr at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-anttcr at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-anttcr at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-anttcr at12pt \fzzozznzzt}%
+\font\tenex= ex-anttcr
+\def\nineex{\font\fzzozznzzt= ex-anttcr at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-anttcr at8pt \fzzozznzzt}%
+\font\sevenex= ex-anttcr at7pt
+\def\sixex{\font\fzzozznzzt= ex-anttcr at6pt \fzzozznzzt}%
+\font\fiveex= ex-anttcr at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-anttcri at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-anttcri at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-anttcri at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-anttcri at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-anttcri at12pt \fzzozznzzt}%
+\font\tenit= rm-anttcri
+\def\nineit{\font\fzzozznzzt= rm-anttcri at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-anttcri at8pt \fzzozznzzt}%
+\font\sevenit= rm-anttcri at7pt
+\def\sixit{\font\fzzozznzzt= rm-anttcri at6pt \fzzozznzzt}%
+\font\fiveit= rm-anttcri at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-anttcri at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-anttcri at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-anttcri at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-anttcri at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-anttcri at12pt \fzzozznzzt}%
+\font\tensl= rm-anttcri %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-anttcri at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-anttcri at8pt \fzzozznzzt}%
+\font\sevensl= rm-anttcri at7pt
+\def\sixsl{\font\fzzozznzzt= rm-anttcri at6pt \fzzozznzzt}%
+\font\fivesl= rm-anttcri at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-anttcb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-anttcb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-anttcb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-anttcb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-anttcb at12pt \fzzozznzzt}%
+\font\tenbf= rm-anttcb
+\def\ninebf{\font\fzzozznzzt= rm-anttcb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-anttcb at8pt \fzzozznzzt}%
+\font\sevenbf= rm-anttcb at7pt
+\def\sixbf{\font\fzzozznzzt= rm-anttcb at6pt \fzzozznzzt}%
+\font\fivebf= rm-anttcb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-anttcbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-anttcbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-anttcbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-anttcbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-anttcbi at12pt \fzzozznzzt}%
+\font\itbf= rm-anttcbi
+\def\nineitbf{\font\fzzozznzzt= rm-anttcbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-anttcbi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-anttcbi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-anttcbi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-anttcbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-anttcbi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-anttcbi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-anttcbi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-anttcbi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-anttcbi at12pt \fzzozznzzt}%
+\font\slbf= rm-anttcbi
+\def\nineslbf{\font\fzzozznzzt= rm-anttcbi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-anttcbi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-anttcbi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-anttcbi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-anttcbi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= qx-anttcrcap at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= qx-anttcrcap at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= qx-anttcrcap at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= qx-anttcrcap at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= qx-anttcrcap at12pt \fzzozznzzt}%
+\font\caps= qx-anttcrcap
+\def\ninecaps{\font\fzzozznzzt= qx-anttcrcap at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= qx-anttcrcap at8pt \fzzozznzzt}%
+\font\sevencaps= qx-anttcrcap at7pt
+\def\sixcaps{\font\fzzozznzzt= qx-anttcrcap at6pt \fzzozznzzt}%
+\font\fivecaps= qx-anttcrcap at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= qx-anttcbcap at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= qx-anttcbcap at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= qx-anttcbcap at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= qx-anttcbcap at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== qx-anttcbcap at12pt \fzzozznzzt}%
+\font\capsbf= qx-anttcbcap
+\def\ninecapsbf{\font\fzzozznzzt= qx-anttcbcap at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= qx-anttcbcap at8pt \fzzozznzzt}%
+\font\sevencapsbf= qx-anttcbcap at7pt
+\def\sixcapsbf{\font\fzzozznzzt= qx-anttcbcap at6pt \fzzozznzzt}%
+\font\fivecapsbf= qx-anttcbcap at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_antt-light.tex b/macros/plain/contrib/font-change/tex/macros/font_antt-light.tex
new file mode 100644
index 0000000000..47124efbcb
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_antt-light.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% The "antt" family has other versions like "condensed", "light", etc. Stick to rm-???????
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-anttl at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-anttl at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-anttl at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-anttl at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-anttl at12pt \fzzozznzzt}%
+\font\tenrm= rm-anttl
+\def\ninerm{\font\fzzozznzzt= rm-anttl at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-anttl at8pt \fzzozznzzt}%
+\font\sevenrm= rm-anttl at7pt
+\def\sixrm{\font\fzzozznzzt= rm-anttl at6pt \fzzozznzzt}%
+\font\fiverm= rm-anttl at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-anttli at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-anttli at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-anttli at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-anttli at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-anttli at12pt \fzzozznzzt}%
+\font\teni= mi-anttli
+\def\ninei{\font\fzzozznzzt= mi-anttli at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-anttli at8pt \fzzozznzzt}%
+\font\seveni= mi-anttli at7pt
+\def\sixi{\font\fzzozznzzt= mi-anttli at6pt \fzzozznzzt}%
+\font\fivei= mi-anttli at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-anttlz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-anttlz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-anttlz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-anttlz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-anttlz at12pt \fzzozznzzt}%
+\font\tensy= sy-anttlz
+\def\ninesy{\font\fzzozznzzt= sy-anttlz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-anttlz at8pt \fzzozznzzt}%
+\font\sevensy= sy-anttlz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-anttlz at6pt \fzzozznzzt}%
+\font\fivesy= sy-anttlz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-anttl at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-anttl at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-anttl at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-anttl at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-anttl at12pt \fzzozznzzt}%
+\font\tenex= ex-anttl
+\def\nineex{\font\fzzozznzzt= ex-anttl at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-anttl at8pt \fzzozznzzt}%
+\font\sevenex= ex-anttl at7pt
+\def\sixex{\font\fzzozznzzt= ex-anttl at6pt \fzzozznzzt}%
+\font\fiveex= ex-anttl at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-anttli at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-anttli at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-anttli at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-anttli at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-anttli at12pt \fzzozznzzt}%
+\font\tenit= rm-anttli
+\def\nineit{\font\fzzozznzzt= rm-anttli at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-anttli at8pt \fzzozznzzt}%
+\font\sevenit= rm-anttli at7pt
+\def\sixit{\font\fzzozznzzt= rm-anttli at6pt \fzzozznzzt}%
+\font\fiveit= rm-anttli at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-anttli at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-anttli at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-anttli at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-anttli at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-anttli at12pt \fzzozznzzt}%
+\font\tensl= rm-anttli %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-anttli at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-anttli at8pt \fzzozznzzt}%
+\font\sevensl= rm-anttli at7pt
+\def\sixsl{\font\fzzozznzzt= rm-anttli at6pt \fzzozznzzt}%
+\font\fivesl= rm-anttli at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-anttm at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-anttm at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-anttm at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-anttm at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-anttm at12pt \fzzozznzzt}%
+\font\tenbf= rm-anttm
+\def\ninebf{\font\fzzozznzzt= rm-anttm at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-anttm at8pt \fzzozznzzt}%
+\font\sevenbf= rm-anttm at7pt
+\def\sixbf{\font\fzzozznzzt= rm-anttm at6pt \fzzozznzzt}%
+\font\fivebf= rm-anttm at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-anttmi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-anttmi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-anttmi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-anttmi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-anttmi at12pt \fzzozznzzt}%
+\font\itbf= rm-anttmi
+\def\nineitbf{\font\fzzozznzzt= rm-anttmi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-anttmi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-anttmi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-anttmi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-anttmi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-anttmi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-anttmi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-anttmi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-anttmi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-anttmi at12pt \fzzozznzzt}%
+\font\slbf= rm-anttmi
+\def\nineslbf{\font\fzzozznzzt= rm-anttmi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-anttmi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-anttmi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-anttmi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-anttmi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= qx-anttlcap at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= qx-anttlcap at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= qx-anttlcap at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= qx-anttlcap at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= qx-anttlcap at12pt \fzzozznzzt}%
+\font\caps= qx-anttlcap
+\def\ninecaps{\font\fzzozznzzt= qx-anttlcap at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= qx-anttlcap at8pt \fzzozznzzt}%
+\font\sevencaps= qx-anttlcap at7pt
+\def\sixcaps{\font\fzzozznzzt= qx-anttlcap at6pt \fzzozznzzt}%
+\font\fivecaps= qx-anttlcap at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= qx-anttmcap at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= qx-anttmcap at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= qx-anttmcap at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= qx-anttmcap at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== qx-anttmcap at12pt \fzzozznzzt}%
+\font\capsbf= qx-anttmcap
+\def\ninecapsbf{\font\fzzozznzzt= qx-anttmcap at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= qx-anttmcap at8pt \fzzozznzzt}%
+\font\sevencapsbf= qx-anttmcap at7pt
+\def\sixcapsbf{\font\fzzozznzzt= qx-anttmcap at6pt \fzzozznzzt}%
+\font\fivecapsbf= qx-anttmcap at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_antt-medium.tex b/macros/plain/contrib/font-change/tex/macros/font_antt-medium.tex
new file mode 100644
index 0000000000..94d6facfc1
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_antt-medium.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% The "antt" family has other versions like "condensed", "light", etc. Stick to rm-???????
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-anttm at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-anttm at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-anttm at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-anttm at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-anttm at12pt \fzzozznzzt}%
+\font\tenrm= rm-anttm
+\def\ninerm{\font\fzzozznzzt= rm-anttm at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-anttm at8pt \fzzozznzzt}%
+\font\sevenrm= rm-anttm at7pt
+\def\sixrm{\font\fzzozznzzt= rm-anttm at6pt \fzzozznzzt}%
+\font\fiverm= rm-anttm at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-anttmi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-anttmi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-anttmi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-anttmi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-anttmi at12pt \fzzozznzzt}%
+\font\teni= mi-anttmi
+\def\ninei{\font\fzzozznzzt= mi-anttmi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-anttmi at8pt \fzzozznzzt}%
+\font\seveni= mi-anttmi at7pt
+\def\sixi{\font\fzzozznzzt= mi-anttmi at6pt \fzzozznzzt}%
+\font\fivei= mi-anttmi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-anttmz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-anttmz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-anttmz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-anttmz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-anttmz at12pt \fzzozznzzt}%
+\font\tensy= sy-anttmz
+\def\ninesy{\font\fzzozznzzt= sy-anttmz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-anttmz at8pt \fzzozznzzt}%
+\font\sevensy= sy-anttmz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-anttmz at6pt \fzzozznzzt}%
+\font\fivesy= sy-anttmz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-anttm at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-anttm at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-anttm at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-anttm at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-anttm at12pt \fzzozznzzt}%
+\font\tenex= ex-anttm
+\def\nineex{\font\fzzozznzzt= ex-anttm at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-anttm at8pt \fzzozznzzt}%
+\font\sevenex= ex-anttm at7pt
+\def\sixex{\font\fzzozznzzt= ex-anttm at6pt \fzzozznzzt}%
+\font\fiveex= ex-anttm at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-anttmi at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-anttmi at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-anttmi at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-anttmi at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-anttmi at12pt \fzzozznzzt}%
+\font\tenit= rm-anttmi
+\def\nineit{\font\fzzozznzzt= rm-anttmi at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-anttmi at8pt \fzzozznzzt}%
+\font\sevenit= rm-anttmi at7pt
+\def\sixit{\font\fzzozznzzt= rm-anttmi at6pt \fzzozznzzt}%
+\font\fiveit= rm-anttmi at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-anttmi at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-anttmi at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-anttmi at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-anttmi at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-anttmi at12pt \fzzozznzzt}%
+\font\tensl= rm-anttmi %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-anttmi at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-anttmi at8pt \fzzozznzzt}%
+\font\sevensl= rm-anttmi at7pt
+\def\sixsl{\font\fzzozznzzt= rm-anttmi at6pt \fzzozznzzt}%
+\font\fivesl= rm-anttmi at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-anttb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-anttb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-anttb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-anttb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-anttb at12pt \fzzozznzzt}%
+\font\tenbf= rm-anttb
+\def\ninebf{\font\fzzozznzzt= rm-anttb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-anttb at8pt \fzzozznzzt}%
+\font\sevenbf= rm-anttb at7pt
+\def\sixbf{\font\fzzozznzzt= rm-anttb at6pt \fzzozznzzt}%
+\font\fivebf= rm-anttb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-anttbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-anttbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-anttbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-anttbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-anttbi at12pt \fzzozznzzt}%
+\font\itbf= rm-anttbi
+\def\nineitbf{\font\fzzozznzzt= rm-anttbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-anttbi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-anttbi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-anttbi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-anttbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-anttbi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-anttbi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-anttbi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-anttbi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-anttbi at12pt \fzzozznzzt}%
+\font\slbf= rm-anttbi
+\def\nineslbf{\font\fzzozznzzt= rm-anttbi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-anttbi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-anttbi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-anttbi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-anttbi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= qx-anttmcap at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= qx-anttmcap at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= qx-anttmcap at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= qx-anttmcap at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= qx-anttmcap at12pt \fzzozznzzt}%
+\font\caps= qx-anttmcap
+\def\ninecaps{\font\fzzozznzzt= qx-anttmcap at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= qx-anttmcap at8pt \fzzozznzzt}%
+\font\sevencaps= qx-anttmcap at7pt
+\def\sixcaps{\font\fzzozznzzt= qx-anttmcap at6pt \fzzozznzzt}%
+\font\fivecaps= qx-anttmcap at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= qx-anttbcap at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= qx-anttbcap at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= qx-anttbcap at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= qx-anttbcap at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== qx-anttbcap at12pt \fzzozznzzt}%
+\font\capsbf= qx-anttbcap
+\def\ninecapsbf{\font\fzzozznzzt= qx-anttbcap at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= qx-anttbcap at8pt \fzzozznzzt}%
+\font\sevencapsbf= qx-anttbcap at7pt
+\def\sixcapsbf{\font\fzzozznzzt= qx-anttbcap at6pt \fzzozznzzt}%
+\font\fivecapsbf= qx-anttbcap at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_antt.tex b/macros/plain/contrib/font-change/tex/macros/font_antt.tex
new file mode 100644
index 0000000000..ffb6884246
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_antt.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% The "antt" family has other versions like "condensed", "light", etc. Stick to rm-???????
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-anttr at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-anttr at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-anttr at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-anttr at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-anttr at12pt \fzzozznzzt}%
+\font\tenrm= rm-anttr
+\def\ninerm{\font\fzzozznzzt= rm-anttr at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-anttr at8pt \fzzozznzzt}%
+\font\sevenrm= rm-anttr at7pt
+\def\sixrm{\font\fzzozznzzt= rm-anttr at6pt \fzzozznzzt}%
+\font\fiverm= rm-anttr at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-anttri at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-anttri at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-anttri at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-anttri at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-anttri at12pt \fzzozznzzt}%
+\font\teni= mi-anttri
+\def\ninei{\font\fzzozznzzt= mi-anttri at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-anttri at8pt \fzzozznzzt}%
+\font\seveni= mi-anttri at7pt
+\def\sixi{\font\fzzozznzzt= mi-anttri at6pt \fzzozznzzt}%
+\font\fivei= mi-anttri at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-anttrz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-anttrz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-anttrz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-anttrz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-anttrz at12pt \fzzozznzzt}%
+\font\tensy= sy-anttrz
+\def\ninesy{\font\fzzozznzzt= sy-anttrz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-anttrz at8pt \fzzozznzzt}%
+\font\sevensy= sy-anttrz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-anttrz at6pt \fzzozznzzt}%
+\font\fivesy= sy-anttrz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-anttr at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-anttr at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-anttr at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-anttr at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-anttr at12pt \fzzozznzzt}%
+\font\tenex= ex-anttr
+\def\nineex{\font\fzzozznzzt= ex-anttr at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-anttr at8pt \fzzozznzzt}%
+\font\sevenex= ex-anttr at7pt
+\def\sixex{\font\fzzozznzzt= ex-anttr at6pt \fzzozznzzt}%
+\font\fiveex= ex-anttr at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-anttri at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-anttri at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-anttri at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-anttri at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-anttri at12pt \fzzozznzzt}%
+\font\tenit= rm-anttri
+\def\nineit{\font\fzzozznzzt= rm-anttri at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-anttri at8pt \fzzozznzzt}%
+\font\sevenit= rm-anttri at7pt
+\def\sixit{\font\fzzozznzzt= rm-anttri at6pt \fzzozznzzt}%
+\font\fiveit= rm-anttri at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-anttri at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-anttri at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-anttri at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-anttri at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-anttri at12pt \fzzozznzzt}%
+\font\tensl= rm-anttri %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-anttri at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-anttri at8pt \fzzozznzzt}%
+\font\sevensl= rm-anttri at7pt
+\def\sixsl{\font\fzzozznzzt= rm-anttri at6pt \fzzozznzzt}%
+\font\fivesl= rm-anttri at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-anttb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-anttb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-anttb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-anttb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-anttb at12pt \fzzozznzzt}%
+\font\tenbf= rm-anttb
+\def\ninebf{\font\fzzozznzzt= rm-anttb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-anttb at8pt \fzzozznzzt}%
+\font\sevenbf= rm-anttb at7pt
+\def\sixbf{\font\fzzozznzzt= rm-anttb at6pt \fzzozznzzt}%
+\font\fivebf= rm-anttb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-anttbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-anttbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-anttbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-anttbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-anttbi at12pt \fzzozznzzt}%
+\font\itbf= rm-anttbi
+\def\nineitbf{\font\fzzozznzzt= rm-anttbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-anttbi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-anttbi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-anttbi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-anttbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-anttbi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-anttbi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-anttbi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-anttbi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-anttbi at12pt \fzzozznzzt}%
+\font\slbf= rm-anttbi
+\def\nineslbf{\font\fzzozznzzt= rm-anttbi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-anttbi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-anttbi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-anttbi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-anttbi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= qx-anttrcap at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= qx-anttrcap at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= qx-anttrcap at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= qx-anttrcap at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= qx-anttrcap at12pt \fzzozznzzt}%
+\font\caps= qx-anttrcap
+\def\ninecaps{\font\fzzozznzzt= qx-anttrcap at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= qx-anttrcap at8pt \fzzozznzzt}%
+\font\sevencaps= qx-anttrcap at7pt
+\def\sixcaps{\font\fzzozznzzt= qx-anttrcap at6pt \fzzozznzzt}%
+\font\fivecaps= qx-anttrcap at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= qx-anttbcap at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= qx-anttbcap at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= qx-anttbcap at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= qx-anttbcap at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== qx-anttbcap at12pt \fzzozznzzt}%
+\font\capsbf= qx-anttbcap
+\def\ninecapsbf{\font\fzzozznzzt= qx-anttbcap at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= qx-anttbcap at8pt \fzzozznzzt}%
+\font\sevencapsbf= qx-anttbcap at7pt
+\def\sixcapsbf{\font\fzzozznzzt= qx-anttbcap at6pt \fzzozznzzt}%
+\font\fivecapsbf= qx-anttbcap at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_arev.tex b/macros/plain/contrib/font-change/tex/macros/font_arev.tex
new file mode 100644
index 0000000000..1893347045
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_arev.tex
@@ -0,0 +1,185 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=zavmr7t at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=zavmr7t at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= zavmr7t at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=zavmr7t at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= zavmr7t at12pt \fzzozznzzt}%
+\font\tenrm= zavmr7t % Arev "favr8t" has --- (emdash) but no \Delta etc.
+\def\ninerm{\font\fzzozznzzt= zavmr7t at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= zavmr7t at8pt \fzzozznzzt}%
+\font\sevenrm= zavmr7t at7pt
+\def\sixrm{\font\fzzozznzzt= zavmr7t at6pt \fzzozznzzt}%
+\font\fiverm= zavmr7t at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= zavmri7m at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= zavmri7m at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= zavmri7m at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= zavmri7m at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= zavmri7m at12pt \fzzozznzzt}%
+\font\teni= zavmri7m
+\def\ninei{\font\fzzozznzzt= zavmri7m at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= zavmri7m at8pt \fzzozznzzt}%
+\font\seveni= zavmri7m at7pt
+\def\sixi{\font\fzzozznzzt= zavmri7m at6pt \fzzozznzzt}%
+\font\fivei= zavmri7m at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= zavmr7y at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=zavmr7y at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= zavmr7y at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=zavmr7y at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= zavmr7y at12pt \fzzozznzzt}%
+\font\tensy= zavmr7y
+\def\ninesy{\font\fzzozznzzt= zavmr7y at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= zavmr7y at8pt \fzzozznzzt}%
+\font\sevensy= zavmr7y at7pt
+\def\sixsy{\font\fzzozznzzt= zavmr7y at6pt \fzzozznzzt}%
+\font\fivesy= zavmr7y at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-kurierr at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-kurierr at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-kurierr at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-kurierr at14pt \fzzozznzzt}%
+\font\twelveex= ex-kurierr at12pt
+\def\tenex{\font\fzzozznzzt= ex-kurierr \fzzozznzzt}%
+\font\nineex= ex-kurierr at9pt
+\def\eightex{\font\fzzozznzzt= ex-kurierr at8pt \fzzozznzzt}%
+\font\sevenex= ex-kurierr at7pt
+\def\sixex{\font\fzzozznzzt= ex-kurierr at6pt \fzzozznzzt}%
+\def\fiveex{\font\fzzozznzzt= ex-kurierr at5pt \fzzozznzzt}%
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= favri8t at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=favri8t at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= favri8t at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= favri8t at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= favri8t at12pt \fzzozznzzt}%
+\font\tenit= favri8t
+\def\nineit{\font\fzzozznzzt= favri8t at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= favri8t at8pt \fzzozznzzt}%
+\font\sevenit= favri8t at7pt
+\def\sixit{\font\fzzozznzzt= favri8t at6pt \fzzozznzzt}%
+\font\fiveit= favri8t at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= favri8t at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=favri8t at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= favri8t at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= favri8t at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= favri8t at12pt \fzzozznzzt}%
+\font\tensl= favri8t
+\def\ninesl{\font\fzzozznzzt= favri8t at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= favri8t at8pt \fzzozznzzt}%
+\font\sevensl= favri8t at7pt
+\def\sixsl{\font\fzzozznzzt= favri8t at6pt \fzzozznzzt}%
+\font\fivesl= favri8t at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= zavmb7t at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= zavmb7t at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= zavmb7t at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= zavmb7t at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= zavmb7t at12pt \fzzozznzzt}%
+\font\tenbf= zavmb7t
+\def\ninebf{\font\fzzozznzzt= zavmb7t at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= zavmb7t at8pt \fzzozznzzt}%
+\font\sevenbf= zavmb7t at7pt
+\def\sixbf{\font\fzzozznzzt= zavmb7t at6pt \fzzozznzzt}%
+\font\fivebf= zavmb7t at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= fvmr8t at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= fvmr8t at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= fvmr8t at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=fvmr8t at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= fvmr8t at12pt \fzzozznzzt}%
+\font\tentt= fvmr8t
+\def\ninett{\font\fzzozznzzt= fvmr8t at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= fvmr8t at8pt \fzzozznzzt}%
+\font\seventt= fvmr8t at7pt
+\def\sixtt{\font\fzzozznzzt= fvmr8t at6pt \fzzozznzzt}%
+\font\fivett= fvmr8t at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\twelveex
+\scriptfont3=\nineex
+\scriptscriptfont3=\sevenex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= favbi8t at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= favbi8t at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= favbi8t at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= favbi8t at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= favbi8t at12pt \fzzozznzzt}%
+\font\itbf= favbi8t
+\def\nineitbf{\font\fzzozznzzt= favbi8t at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= favbi8t at8pt \fzzozznzzt}%
+\font\sevenitbf= favbi8t at7pt
+\def\sixitbf{\font\fzzozznzzt= favbi8t at6pt \fzzozznzzt}%
+\font\fiveitbf= favbi8t at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= favbi8t at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= favbi8t at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= favbi8t at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= favbi8t at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= favbi8t at12pt \fzzozznzzt}%
+\font\slbf= favbi8t
+\def\nineslbf{\font\fzzozznzzt= favbi8t at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= favbi8t at8pt \fzzozznzzt}%
+\font\sevenslbf= favbi8t at7pt
+\def\sixslbf{\font\fzzozznzzt= favbi8t at6pt \fzzozznzzt}%
+\font\fiveslbf= favbi8t at5pt
+%
+% caps
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_artemisia_euler.tex b/macros/plain/contrib/font-change/tex/macros/font_artemisia_euler.tex
new file mode 100644
index 0000000000..4c6ebb27de
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_artemisia_euler.tex
@@ -0,0 +1,216 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% The "antt" family has other versions like "condensed", "light", etc. Stick to rm-???????
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=artemisiarg8a at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=artemisiarg8a at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= artemisiarg8a at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=artemisiarg8a at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= artemisiarg8a at12pt \fzzozznzzt}%
+\font\tenrm= artemisiarg8a
+\def\ninerm{\font\fzzozznzzt= artemisiarg8a at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= artemisiarg8a at8pt \fzzozznzzt}%
+\font\sevenrm= artemisiarg8a at7pt
+\def\sixrm{\font\fzzozznzzt= artemisiarg8a at6pt \fzzozznzzt}%
+\font\fiverm= artemisiarg8a at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= zeurm10 at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= zeurm10 at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= zeurm10 at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= zeurm10 at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= zeurm10 at12pt \fzzozznzzt}%
+\font\teni= zeurm10 at10.5pt% Linear scaling by 1.05
+\def\ninei{\font\fzzozznzzt= zeurm10 at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= zeurm10 at8pt \fzzozznzzt}%
+\font\seveni= zeurm7 at7.35pt% Linear scaling by 1.05
+\def\sixi{\font\fzzozznzzt= zeurm10 at6pt \fzzozznzzt}%
+\font\fivei= zeurm5 at5.25pt% Linear scaling by 1.05
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= zeusm10 at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=zeusm10 at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= zeusm10 at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=zeusm10 at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= zeusm10 at12pt \fzzozznzzt}%
+\font\tensy= zeusm10 at10.5pt% Linear scaling by 1.05
+\def\ninesy{\font\fzzozznzzt= zeusm10 at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= zeusm10 at8pt \fzzozznzzt}%
+\font\sevensy= zeusm7 at7.35pt% Linear scaling by 1.05
+\def\sixsy{\font\fzzozznzzt= zeusm10 at6pt \fzzozznzzt}%
+\font\fivesy= zeusm5 at5.25pt% Linear scaling by 1.05
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= zeuex10 at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=zeuex10 at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= zeuex10 at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=zeuex10 at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= zeuex10 at12pt \fzzozznzzt}%
+\font\tenex= zeuex10 at10.5pt% Linear scaling by 1.05
+\def\nineex{\font\fzzozznzzt= zeuex10 at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= zeuex10 at8pt \fzzozznzzt}%
+\font\sevenex= zeuex10 at7.35pt% Linear scaling by 1.05
+\def\sixex{\font\fzzozznzzt= zeuex10 at6pt \fzzozznzzt}%
+\font\fiveex= zeuex10 at5.25pt% Linear scaling by 1.05
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= artemisiai8a at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=artemisiai8a at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= artemisiai8a at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= artemisiai8a at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= artemisiai8a at12pt \fzzozznzzt}%
+\font\tenit= artemisiai8a
+\def\nineit{\font\fzzozznzzt= artemisiai8a at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= artemisiai8a at8pt \fzzozznzzt}%
+\font\sevenit= artemisiai8a at7pt
+\def\sixit{\font\fzzozznzzt= artemisiai8a at6pt \fzzozznzzt}%
+\font\fiveit= artemisiai8a at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= artemisiao8a at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=artemisiao8a at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= artemisiao8a at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= artemisiao8a at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= artemisiao8a at12pt \fzzozznzzt}%
+\font\tensl= artemisiao8a %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= artemisiao8a at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= artemisiao8a at8pt \fzzozznzzt}%
+\font\sevensl= artemisiao8a at7pt
+\def\sixsl{\font\fzzozznzzt= artemisiao8a at6pt \fzzozznzzt}%
+\font\fivesl= artemisiao8a at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= artemisiab8a at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= artemisiab8a at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= artemisiab8a at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= artemisiab8a at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= artemisiab8a at12pt \fzzozznzzt}%
+\font\tenbf= artemisiab8a
+\def\ninebf{\font\fzzozznzzt= artemisiab8a at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= artemisiab8a at8pt \fzzozznzzt}%
+\font\sevenbf= artemisiab8a at7pt
+\def\sixbf{\font\fzzozznzzt= artemisiab8a at6pt \fzzozznzzt}%
+\font\fivebf= artemisiab8a at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= artemisiabi8a at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= artemisiabi8a at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= artemisiabi8a at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= artemisiabi8a at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= artemisiabi8a at12pt \fzzozznzzt}%
+\font\itbf= artemisiabi8a
+\def\nineitbf{\font\fzzozznzzt= artemisiabi8a at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= artemisiabi8a at8pt \fzzozznzzt}%
+\font\sevenitbf= artemisiabi8a at7pt
+\def\sixitbf{\font\fzzozznzzt= artemisiabi8a at6pt \fzzozznzzt}%
+\font\fiveitbf= artemisiabi8a at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= artemisiabo8a at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= artemisiabo8a at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= artemisiabo8a at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= artemisiabo8a at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= artemisiabo8a at12pt \fzzozznzzt}%
+\font\slbf= artemisiabo8a
+\def\nineslbf{\font\fzzozznzzt= artemisiabo8a at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= artemisiabo8a at8pt \fzzozznzzt}%
+\font\sevenslbf= artemisiabo8a at7pt
+\def\sixslbf{\font\fzzozznzzt= artemisiabo8a at6pt \fzzozznzzt}%
+\font\fiveslbf= artemisiabo8a at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= artemisiasc8a at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= artemisiasc8a at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= artemisiasc8a at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= artemisiasc8a at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= artemisiasc8a at12pt \fzzozznzzt}%
+\font\caps= artemisiasc8a
+\def\ninecaps{\font\fzzozznzzt= artemisiasc8a at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= artemisiasc8a at8pt \fzzozznzzt}%
+\font\sevencaps= artemisiasc8a at7pt
+\def\sixcaps{\font\fzzozznzzt= artemisiasc8a at6pt \fzzozznzzt}%
+\font\fivecaps= artemisiasc8a at5pt
+%
+% No caps in boldface
+%
+\mathchardef\Gamma="7100
+\mathchardef\Delta="7101
+\mathchardef\Theta="7102
+\mathchardef\Lambda="7103
+\mathchardef\Xi="7104
+\mathchardef\Pi="7105
+\mathchardef\Sigma="7106
+\mathchardef\Upsilon="7107
+%
+\mathchardef\Phi="7108
+\mathchardef\Psi="7109
+\mathchardef\Omega="710A
+%
+\mathchardef\varrho="711A
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_bera_concrete.tex b/macros/plain/contrib/font-change/tex/macros/font_bera_concrete.tex
new file mode 100644
index 0000000000..8d36bf36fd
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_bera_concrete.tex
@@ -0,0 +1,214 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=fver8t at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=fver8t at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= fver8t at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=fver8t at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= fver8t at12pt \fzzozznzzt}%
+\font\tenrm= fver8t
+\def\ninerm{\font\fzzozznzzt= fver8t at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= fver8t at8pt \fzzozznzzt}%
+\font\sevenrm= fver8t at7pt
+\def\sixrm{\font\fzzozznzzt= fver8t at6pt \fzzozznzzt}%
+\font\fiverm= fver8t at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= pcmi10 at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= pcmi10 at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= pcmi10 at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= pcmi10 at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= pcmi10 at12pt \fzzozznzzt}%
+\font\eleveni= pcmi10 at11pt
+\def\teni{\font\fzzozznzzt= pcmi10 \fzzozznzzt}% xccmi10 original but bitmap
+\def\ninei{\font\fzzozznzzt= pcmi10 at9pt \fzzozznzzt}%
+\font\eighti= pcmi10 at8pt
+\def\seveni{\font\fzzozznzzt=pcmi10 at7pt \fzzozznzzt}% xccmi7 original but bitmap
+\font\sixi= pcmi10 at6pt
+\def\fivei{\font\fzzozznzzt= pcmi10 at5pt \fzzozznzzt}% xccmi5 original but bitmap
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= cmsy10 at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=cmsy10 at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= cmsy10 at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=cmsy10 at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= cmsy10 at12pt \fzzozznzzt}%
+\font\elevensy= cmsy10 at11pt
+\def\tensy{\font\fzzozznzzt= cmsy10 \fzzozznzzt}% xccsy10 original but bitmap
+\def\ninesy{\font\fzzozznzzt= cmsy10 at9pt \fzzozznzzt}%
+\font\eightsy= cmsy10 at8pt
+\def\sevensy{\font\fzzozznzzt=cmsy10 at7pt \fzzozznzzt}% xccmi7 original but bitmap
+\font\sixsy= cmsy10 at6pt
+\def\fivesy{\font\fzzozznzzt= cmsy10 at5pt \fzzozznzzt}% xccsy5 original but bitmap
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= cmex10 at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=cmex10 at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= cmex10 at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=cmex10 at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= cmex10 at12pt \fzzozznzzt}%
+\font\elevenex= cmex10 at11pt
+\def\tenex{\font\fzzozznzzt= cmex10 \fzzozznzzt}%
+\def\nineex{\font\fzzozznzzt= cmex10 at9pt \fzzozznzzt}%
+\font\eightex= cmex10 at8pt
+\def\sevenex{\font\fzzozznzzt=cmex10 at7pt \fzzozznzzt}%
+\font\sixex= cmex10 at6pt
+\def\fiveex{\font\fzzozznzzt= cmex10 at5pt \fzzozznzzt}%
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= fvero8t at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=fvero8t at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= fvero8t at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= fvero8t at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= fvero8t at12pt \fzzozznzzt}%
+\font\tenit= fvero8t
+\def\nineit{\font\fzzozznzzt= fvero8t at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= fvero8t at8pt \fzzozznzzt}%
+\font\sevenit= fvero8t at7pt
+\def\sixit{\font\fzzozznzzt= fvero8t at6pt \fzzozznzzt}%
+\font\fiveit= fvero8t at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= fvero8t at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=fvero8t at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= fvero8t at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= fvero8t at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= fvero8t at12pt \fzzozznzzt}%
+\font\tensl= fvero8t
+\def\ninesl{\font\fzzozznzzt= fvero8t at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= fvero8t at8pt \fzzozznzzt}%
+\font\sevensl= fvero8t at7pt
+\def\sixsl{\font\fzzozznzzt= fvero8t at6pt \fzzozznzzt}%
+\font\fivesl= fvero8t at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= fveb8t at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= fveb8t at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= fveb8t at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= fveb8t at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= fveb8t at12pt \fzzozznzzt}%
+\font\tenbf= fveb8t
+\def\ninebf{\font\fzzozznzzt= fveb8t at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= fveb8t at8pt \fzzozznzzt}%
+\font\sevenbf= fveb8t at7pt
+\def\sixbf{\font\fzzozznzzt= fveb8t at6pt \fzzozznzzt}%
+\font\fivebf= fveb8t at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= fvmr8t at18.8pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= fvmr8t at16.92pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= fvmr8t at15.04pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=fvmr8t at13.16pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= fvmr8t at11.28pt \fzzozznzzt}%
+\font\tentt= fvmr8t at9.4pt% Linear scaling by a factor of 0.94
+\def\ninett{\font\fzzozznzzt= fvmr8t at8.46pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= fvmr8t at7.52pt \fzzozznzzt}%
+\font\seventt= fvmr8t at6.58pt
+\def\sixtt{\font\fzzozznzzt= fvmr8t at5.64pt \fzzozznzzt}%
+\font\fivett= fvmr8t at4.7pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\eleveni
+\scriptfont1=\eighti
+\scriptscriptfont1=\sixi
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\elevensy
+\scriptfont2=\eightsy
+\scriptscriptfont2=\sixsy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\elevenex
+\scriptfont3=\eightex
+\scriptscriptfont3=\sixex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= fvebo8t at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= fvebo8t at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= fvebo8t at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= fvebo8t at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= fvebo8t at12pt \fzzozznzzt}%
+\font\itbf= fvebo8t
+\def\nineitbf{\font\fzzozznzzt= fvebo8t at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= fvebo8t at8pt \fzzozznzzt}%
+\font\sevenitbf= fvebo8t at7pt
+\def\sixitbf{\font\fzzozznzzt= fvebo8t at6pt \fzzozznzzt}%
+\font\fiveitbf= fvebo8t at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= fvebo8t at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= fvebo8t at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= fvebo8t at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= fvebo8t at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= fvebo8t at12pt \fzzozznzzt}%
+\font\slbf= fvebo8t
+\def\nineslbf{\font\fzzozznzzt= fvebo8t at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= fvebo8t at8pt \fzzozznzzt}%
+\font\sevenslbf= fvebo8t at7pt
+\def\sixslbf{\font\fzzozznzzt= fvebo8t at6pt \fzzozznzzt}%
+\font\fiveslbf= fvebo8t at5pt
+%
+% no caps
+%
+% no caps bold
+%
+% Some missing glyphs
+\font\tenmiss=pcr10 at11pt
+\font\sevenmiss=pcr10 at8pt
+\font\fivemiss=pcr10 at6pt
+%
+\newfam\misscharfam
+\textfont\misscharfam=\tenmiss
+\scriptfont\misscharfam=\sevenmiss
+\scriptscriptfont\misscharfam=\fivemiss
+%
+\def\Gamma{{\fam=\misscharfam \mathchar"7800}}%
+\def\Delta{{\fam=\misscharfam \mathchar"7801}}%
+\def\Theta{{\fam=\misscharfam \mathchar"7802}}%
+\def\Lambda{{\fam=\misscharfam \mathchar"7803}}%
+\def\Xi{{\fam=\misscharfam \mathchar"7804}}%
+\def\Pi{{\fam=\misscharfam \mathchar"7805}}%
+\def\Sigma{{\fam=\misscharfam \mathchar"7806}}%
+\def\Upsilon{{\fam=\misscharfam \mathchar"7807}}%
+\def\Phi{{\fam=\misscharfam \mathchar"7808}}%
+\def\Psi{{\fam=\misscharfam \mathchar"7809}}%
+\def\Omega{{\fam=\misscharfam \mathchar"780A}}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_bera_euler.tex b/macros/plain/contrib/font-change/tex/macros/font_bera_euler.tex
new file mode 100644
index 0000000000..8895a5b71a
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_bera_euler.tex
@@ -0,0 +1,206 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=fver8t at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=fver8t at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= fver8t at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=fver8t at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= fver8t at12pt \fzzozznzzt}%
+\font\tenrm= fver8t
+\def\ninerm{\font\fzzozznzzt= fver8t at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= fver8t at8pt \fzzozznzzt}%
+\font\sevenrm= fver8t at7pt
+\def\sixrm{\font\fzzozznzzt= fver8t at6pt \fzzozznzzt}%
+\font\fiverm= fver8t at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= zeurm10 at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= zeurm10 at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= zeurm10 at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= zeurm10 at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= zeurm10 at12pt \fzzozznzzt}%
+\font\eleveni= zeurm10 at11pt
+\def\teni{\font\fzzozznzzt= zeurm10 \fzzozznzzt}%
+\def\ninei{\font\fzzozznzzt= zeurm10 at9pt \fzzozznzzt}%
+\font\eighti= zeurm10 at8pt
+\def\seveni{\font\fzzozznzzt= zeurm7 \fzzozznzzt}%
+\font\sixi= zeurm10 at6pt
+\def\fivei{\font\fzzozznzzt= zeurm5 \fzzozznzzt}%
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= zeusm10 at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=zeusm10 at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= zeusm10 at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=zeusm10 at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= zeusm10 at12pt \fzzozznzzt}%
+\font\elevensy= zeusm10 at11pt
+\def\tensy{\font\fzzozznzzt= zeusm10 \fzzozznzzt}%
+\def\ninesy{\font\fzzozznzzt= zeusm10 at9pt \fzzozznzzt}%
+\font\eightsy= zeusm10 at8pt
+\def\sevensy{\font\fzzozznzzt= zeusm7 \fzzozznzzt}%
+\font\sixsy= zeusm10 at6pt
+\def\fivesy{\font\fzzozznzzt= zeusm5 \fzzozznzzt}%
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= zeuex10 at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=zeuex10 at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= zeuex10 at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=zeuex10 at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= zeuex10 at12pt \fzzozznzzt}%
+\font\elevenex= zeuex10 at11pt
+\def\tenex{\font\fzzozznzzt= zeuex10 \fzzozznzzt}%
+\def\nineex{\font\fzzozznzzt= zeuex10 at9pt \fzzozznzzt}%
+\font\eightex= zeuex10 at8pt
+\def\sevenex{\font\fzzozznzzt= zeuex7 \fzzozznzzt}%
+\font\sixex= zeuex10 at6pt
+\def\fiveex{\font\fzzozznzzt= zeuex5 \fzzozznzzt}%
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= fvero8t at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=fvero8t at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= fvero8t at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= fvero8t at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= fvero8t at12pt \fzzozznzzt}%
+\font\tenit= fvero8t
+\def\nineit{\font\fzzozznzzt= fvero8t at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= fvero8t at8pt \fzzozznzzt}%
+\font\sevenit= fvero8t at7pt
+\def\sixit{\font\fzzozznzzt= fvero8t at6pt \fzzozznzzt}%
+\font\fiveit= fvero8t at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= fvero8t at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=fvero8t at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= fvero8t at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= fvero8t at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= fvero8t at12pt \fzzozznzzt}%
+\font\tensl= fvero8t
+\def\ninesl{\font\fzzozznzzt= fvero8t at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= fvero8t at8pt \fzzozznzzt}%
+\font\sevensl= fvero8t at7pt
+\def\sixsl{\font\fzzozznzzt= fvero8t at6pt \fzzozznzzt}%
+\font\fivesl= fvero8t at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= fveb8t at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= fveb8t at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= fveb8t at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= fveb8t at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= fveb8t at12pt \fzzozznzzt}%
+\font\tenbf= fveb8t
+\def\ninebf{\font\fzzozznzzt= fveb8t at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= fveb8t at8pt \fzzozznzzt}%
+\font\sevenbf= fveb8t at7pt
+\def\sixbf{\font\fzzozznzzt= fveb8t at6pt \fzzozznzzt}%
+\font\fivebf= fveb8t at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= fvmr8t at18.8pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= fvmr8t at16.92pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= fvmr8t at15.04pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=fvmr8t at13.16pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= fvmr8t at11.28pt \fzzozznzzt}%
+\font\tentt= fvmr8t at9.4pt% Linear scaling by a factor of 0.94
+\def\ninett{\font\fzzozznzzt= fvmr8t at8.46pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= fvmr8t at7.52pt \fzzozznzzt}%
+\font\seventt= fvmr8t at6.58pt
+\def\sixtt{\font\fzzozznzzt= fvmr8t at5.64pt \fzzozznzzt}%
+\font\fivett= fvmr8t at4.7pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\eleveni
+\scriptfont1=\eighti
+\scriptscriptfont1=\sixi
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\elevensy
+\scriptfont2=\eightsy
+\scriptscriptfont2=\sixsy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\elevenex
+\scriptfont3=\eightex
+\scriptscriptfont3=\sixex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= fvebo8t at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= fvebo8t at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= fvebo8t at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= fvebo8t at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= fvebo8t at12pt \fzzozznzzt}%
+\font\itbf= fvebo8t
+\def\nineitbf{\font\fzzozznzzt= fvebo8t at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= fvebo8t at8pt \fzzozznzzt}%
+\font\sevenitbf= fvebo8t at7pt
+\def\sixitbf{\font\fzzozznzzt= fvebo8t at6pt \fzzozznzzt}%
+\font\fiveitbf= fvebo8t at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= fvebo8t at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= fvebo8t at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= fvebo8t at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= fvebo8t at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= fvebo8t at12pt \fzzozznzzt}%
+\font\slbf= fvebo8t
+\def\nineslbf{\font\fzzozznzzt= fvebo8t at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= fvebo8t at8pt \fzzozznzzt}%
+\font\sevenslbf= fvebo8t at7pt
+\def\sixslbf{\font\fzzozznzzt= fvebo8t at6pt \fzzozznzzt}%
+\font\fiveslbf= fvebo8t at5pt
+%
+% no caps
+%
+% no caps bold
+%
+\mathchardef\Gamma="7100
+\mathchardef\Delta="7101
+\mathchardef\Theta="7102
+\mathchardef\Lambda="7103
+\mathchardef\Xi="7104
+\mathchardef\Pi="7105
+\mathchardef\Sigma="7106
+\mathchardef\Upsilon="7107
+%
+\mathchardef\Phi="7108
+\mathchardef\Psi="7109
+\mathchardef\Omega="710A
+%
+\mathchardef\varrho="711A
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_bera_fnc.tex b/macros/plain/contrib/font-change/tex/macros/font_bera_fnc.tex
new file mode 100644
index 0000000000..8a8d76c73f
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_bera_fnc.tex
@@ -0,0 +1,214 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=fver8t at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=fver8t at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= fver8t at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=fver8t at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= fver8t at12pt \fzzozznzzt}%
+\font\tenrm= fver8t
+\def\ninerm{\font\fzzozznzzt= fver8t at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= fver8t at8pt \fzzozznzzt}%
+\font\sevenrm= fver8t at7pt
+\def\sixrm{\font\fzzozznzzt= fver8t at6pt \fzzozznzzt}%
+\font\fiverm= fver8t at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= fncmii at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= fncmii at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= fncmii at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= fncmii at14pt \fzzozznzzt}%
+\font\twelvei= fncmii at12pt
+\def\eleveni{\font\fzzozznzzt= fncmii at11pt \fzzozznzzt}%
+\def\teni{\font\fzzozznzzt= fncmii \fzzozznzzt}%
+\def\ninei{\font\fzzozznzzt= fncmii at9pt \fzzozznzzt}%
+\font\eighti= fncmii at8pt
+\def\seveni{\font\fzzozznzzt= fncmii at7pt \fzzozznzzt}%
+\font\sixi= fncmii at6pt
+\def\fivei{\font\fzzozznzzt= fncmii at5pt \fzzozznzzt}%
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= fncsy at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=fncsy at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= fncsy at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=fncsy at14pt \fzzozznzzt}%
+\font\twelvesy= fncsy at12pt
+\def\elevensy{\font\fzzozznzzt= fncsy at11pt \fzzozznzzt}%
+\def\tensy{\font\fzzozznzzt= fncsy \fzzozznzzt}%
+\def\ninesy{\font\fzzozznzzt= fncsy at9pt \fzzozznzzt}%
+\font\eightsy= fncsy at8pt
+\def\sevensy{\font\fzzozznzzt= fncsy at7pt \fzzozznzzt}%
+\font\sixsy= fncsy at6pt
+\def\fivesy{\font\fzzozznzzt= fncsy at5pt \fzzozznzzt}%
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= cmex10 at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=cmex10 at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= cmex10 at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=cmex10 at14pt \fzzozznzzt}%
+\font\twelveex= cmex10 at12pt
+\def\elevenex{\font\fzzozznzzt= cmex10 at11pt \fzzozznzzt}%
+\def\tenex{\font\fzzozznzzt= cmex10 \fzzozznzzt}%
+\def\nineex{\font\fzzozznzzt= cmex10 at9pt \fzzozznzzt}%
+\font\eightex= cmex10 at8pt
+\def\sevenex{\font\fzzozznzzt= cmex7 \fzzozznzzt}%
+\font\sixex= cmex10 at6pt
+\def\fiveex{\font\fzzozznzzt= cmex5 \fzzozznzzt}%
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= fvero8t at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=fvero8t at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= fvero8t at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= fvero8t at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= fvero8t at12pt \fzzozznzzt}%
+\font\tenit= fvero8t
+\def\nineit{\font\fzzozznzzt= fvero8t at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= fvero8t at8pt \fzzozznzzt}%
+\font\sevenit= fvero8t at7pt
+\def\sixit{\font\fzzozznzzt= fvero8t at6pt \fzzozznzzt}%
+\font\fiveit= fvero8t at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= fvero8t at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=fvero8t at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= fvero8t at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= fvero8t at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= fvero8t at12pt \fzzozznzzt}%
+\font\tensl= fvero8t
+\def\ninesl{\font\fzzozznzzt= fvero8t at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= fvero8t at8pt \fzzozznzzt}%
+\font\sevensl= fvero8t at7pt
+\def\sixsl{\font\fzzozznzzt= fvero8t at6pt \fzzozznzzt}%
+\font\fivesl= fvero8t at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= fveb8t at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= fveb8t at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= fveb8t at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= fveb8t at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= fveb8t at12pt \fzzozznzzt}%
+\font\tenbf= fveb8t
+\def\ninebf{\font\fzzozznzzt= fveb8t at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= fveb8t at8pt \fzzozznzzt}%
+\font\sevenbf= fveb8t at7pt
+\def\sixbf{\font\fzzozznzzt= fveb8t at6pt \fzzozznzzt}%
+\font\fivebf= fveb8t at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= fvmr8t at18.8pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= fvmr8t at16.92pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= fvmr8t at15.04pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=fvmr8t at13.16pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= fvmr8t at11.28pt \fzzozznzzt}%
+\font\tentt= fvmr8t at9.4pt% Linear scaling by a factor of 0.94
+\def\ninett{\font\fzzozznzzt= fvmr8t at8.46pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= fvmr8t at7.52pt \fzzozznzzt}%
+\font\seventt= fvmr8t at6.58pt
+\def\sixtt{\font\fzzozznzzt= fvmr8t at5.64pt \fzzozznzzt}%
+\font\fivett= fvmr8t at4.7pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\twelvei
+\scriptfont1=\eighti
+\scriptscriptfont1=\sixi
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\twelvesy
+\scriptfont2=\eightsy
+\scriptscriptfont2=\sixsy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\twelveex
+\scriptfont3=\eightex
+\scriptscriptfont3=\sixex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= fvebo8t at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= fvebo8t at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= fvebo8t at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= fvebo8t at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= fvebo8t at12pt \fzzozznzzt}%
+\font\itbf= fvebo8t
+\def\nineitbf{\font\fzzozznzzt= fvebo8t at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= fvebo8t at8pt \fzzozznzzt}%
+\font\sevenitbf= fvebo8t at7pt
+\def\sixitbf{\font\fzzozznzzt= fvebo8t at6pt \fzzozznzzt}%
+\font\fiveitbf= fvebo8t at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= fvebo8t at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= fvebo8t at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= fvebo8t at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= fvebo8t at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= fvebo8t at12pt \fzzozznzzt}%
+\font\slbf= fvebo8t
+\def\nineslbf{\font\fzzozznzzt= fvebo8t at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= fvebo8t at8pt \fzzozznzzt}%
+\font\sevenslbf= fvebo8t at7pt
+\def\sixslbf{\font\fzzozznzzt= fvebo8t at6pt \fzzozznzzt}%
+\font\fiveslbf= fvebo8t at5pt
+%
+% no caps
+%
+% no caps bold
+%
+% Some missing glyphs
+\font\tenmiss=fncmi at12pt
+\font\sevenmiss=fncmi at8pt
+\font\fivemiss=fncmi at6pt
+%
+\newfam\misscharfam
+\textfont\misscharfam=\tenmiss
+\scriptfont\misscharfam=\sevenmiss
+\scriptscriptfont\misscharfam=\fivemiss
+%
+\def\Gamma{{\fam=\misscharfam \mathchar"7800}}%
+\def\Delta{{\fam=\misscharfam \mathchar"7801}}%
+\def\Theta{{\fam=\misscharfam \mathchar"7802}}%
+\def\Lambda{{\fam=\misscharfam \mathchar"7803}}%
+\def\Xi{{\fam=\misscharfam \mathchar"7804}}%
+\def\Pi{{\fam=\misscharfam \mathchar"7805}}%
+\def\Sigma{{\fam=\misscharfam \mathchar"7806}}%
+\def\Upsilon{{\fam=\misscharfam \mathchar"7807}}%
+\def\Phi{{\fam=\misscharfam \mathchar"7808}}%
+\def\Psi{{\fam=\misscharfam \mathchar"7809}}%
+\def\Omega{{\fam=\misscharfam \mathchar"780A}}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_bookman.tex b/macros/plain/contrib/font-change/tex/macros/font_bookman.tex
new file mode 100644
index 0000000000..a6a9fd8067
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_bookman.tex
@@ -0,0 +1,212 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-qbkr at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-qbkr at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-qbkr at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-qbkr at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-qbkr at12pt \fzzozznzzt}%
+\font\tenrm= rm-qbkr % Adobe's "pbkl8r" doesn't have \Delta, Kerkis "k8r" doesn't have \Delta, emdash
+\def\ninerm{\font\fzzozznzzt= rm-qbkr at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-qbkr at8pt \fzzozznzzt}%
+\font\sevenrm= rm-qbkr at7pt
+\def\sixrm{\font\fzzozznzzt= rm-qbkr at6pt \fzzozznzzt}%
+\font\fiverm= rm-qbkr at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= kmath8r at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= kmath8r at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= kmath8r at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= kmath8r at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= kmath8r at12pt \fzzozznzzt}%
+\font\teni= kmath8r
+\def\ninei{\font\fzzozznzzt= kmath8r at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= kmath8r at8pt \fzzozznzzt}%
+\font\seveni= kmath8r at7pt
+\def\sixi{\font\fzzozznzzt= kmath8r at6pt \fzzozznzzt}%
+\font\fivei= kmath8r at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= txsy at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=txsy at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= txsy at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=txsy at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= txsy at12pt \fzzozznzzt}%
+\font\elevensy= txsy at11pt
+\font\tensy= txsy% Kerkis symbol font, ktsy8r, does not seem to work.
+\def\ninesy{\font\fzzozznzzt= txsy at9pt \fzzozznzzt}%
+\font\eightsy= txsy at8pt
+\font\sevensy= txsy at7pt
+\font\sixsy= txsy at6pt
+\font\fivesy= txsy at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= txex at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=txex at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= txex at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=txex at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= txex at12pt \fzzozznzzt}%
+\font\elevenex= txex at11pt
+\font\tenex= txex
+\def\nineex{\font\fzzozznzzt= txex at9pt \fzzozznzzt}%
+\font\eightex= txex at8pt
+\font\sevenex= txex at7pt
+\font\sixex= txex at6pt
+\font\fiveex= txex at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-qbkri at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-qbkri at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-qbkri at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-qbkri at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-qbkri at12pt \fzzozznzzt}%
+\font\tenit= rm-qbkri
+\def\nineit{\font\fzzozznzzt= rm-qbkri at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-qbkri at8pt \fzzozznzzt}%
+\font\sevenit= rm-qbkri at7pt
+\def\sixit{\font\fzzozznzzt= rm-qbkri at6pt \fzzozznzzt}%
+\font\fiveit= rm-qbkri at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= pbklo7t at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=pbklo7t at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= pbklo7t at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= pbklo7t at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= pbklo7t at12pt \fzzozznzzt}%
+\font\tensl= pbklo7t
+\def\ninesl{\font\fzzozznzzt= pbklo7t at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= pbklo7t at8pt \fzzozznzzt}%
+\font\sevensl= pbklo7t at7pt
+\def\sixsl{\font\fzzozznzzt= pbklo7t at6pt \fzzozznzzt}%
+\font\fivesl= pbklo7t at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-qbkb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-qbkb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-qbkb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-qbkb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-qbkb at12pt \fzzozznzzt}%
+\font\tenbf= rm-qbkb
+\def\ninebf{\font\fzzozznzzt= rm-qbkb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-qbkb at8pt \fzzozznzzt}%
+\font\sevenbf= rm-qbkb at7pt
+\def\sixbf{\font\fzzozznzzt= rm-qbkb at6pt \fzzozznzzt}%
+\font\fivebf= rm-qbkb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= txtt at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= txtt at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= txtt at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=txtt at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= txtt at12pt \fzzozznzzt}%
+\font\tentt= txtt
+\def\ninett{\font\fzzozznzzt= txtt at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= txtt at8pt \fzzozznzzt}%
+\font\seventt= txtt at7pt
+\def\sixtt{\font\fzzozznzzt= txtt at6pt \fzzozznzzt}%
+\font\fivett= txtt at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\elevensy
+\scriptfont2=\eightsy
+\scriptscriptfont2=\sixsy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\elevenex
+\scriptfont3=\eightex
+\scriptscriptfont3=\sixex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-qbkbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-qbkbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-qbkbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-qbkbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-qbkbi at12pt \fzzozznzzt}%
+\font\itbf= rm-qbkbi
+\def\nineitbf{\font\fzzozznzzt= rm-qbkbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-qbkbi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-qbkbi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-qbkbi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-qbkbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= pbkdo7t at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= pbkdo7t at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= pbkdo7t at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= pbkdo7t at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= pbkdo7t at12pt \fzzozznzzt}%
+\font\slbf= pbkdo7t
+\def\nineslbf{\font\fzzozznzzt= pbkdo7t at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= pbkdo7t at8pt \fzzozznzzt}%
+\font\sevenslbf= pbkdo7t at7pt
+\def\sixslbf{\font\fzzozznzzt= pbkdo7t at6pt \fzzozznzzt}%
+\font\fiveslbf= pbkdo7t at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-qbkr-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-qbkr-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-qbkr-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-qbkr-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-qbkr-sc at12pt \fzzozznzzt}%
+\font\caps= rm-qbkr-sc
+\def\ninecaps{\font\fzzozznzzt= rm-qbkr-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-qbkr-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-qbkr-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-qbkr-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-qbkr-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-qbkb-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-qbkb-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-qbkb-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-qbkb-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= rm-qbkb-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-qbkb-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-qbkb-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-qbkb-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-qbkb-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-qbkb-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-qbkb-sc at5pt
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_century.tex b/macros/plain/contrib/font-change/tex/macros/font_century.tex
new file mode 100644
index 0000000000..0683d48fcb
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_century.tex
@@ -0,0 +1,210 @@
+% The author of this work is Amit Raj Dhawan%
+% This work has been released under%
+% Creative Commons Attribution-Share Alike 3.0 Unported License%
+% on July 19, 2010. For details visit:%
+% http://creativecommons.org/licenses/by-sa/3.0/
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-qcsr at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-qcsr at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-qcsr at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-qcsr at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-qcsr at12pt \fzzozznzzt}%
+\font\tenrm= rm-qcsr
+\def\ninerm{\font\fzzozznzzt= rm-qcsr at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-qcsr at8pt \fzzozznzzt}%
+\font\sevenrm= rm-qcsr at7pt
+\def\sixrm{\font\fzzozznzzt= rm-qcsr at6pt \fzzozznzzt}%
+\font\fiverm= rm-qcsr at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= fncmii at21.53pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= fncmii at19.38pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= fncmii at17.23pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= fncmii at15.07pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= fncmii at12.92pt \fzzozznzzt}%
+\font\teni= fncmii at10.766pt% To compensate with rm-qcr(i)
+\def\ninei{\font\fzzozznzzt= fncmii at9.67pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= fncmii at8.61pt \fzzozznzzt}%
+\font\seveni= fncmii at7.54pt
+\def\sixi{\font\fzzozznzzt= fncmii at6.46pt \fzzozznzzt}%
+\font\fivei= fncmii at5.38pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= fncsy at21.53pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=fncsy at19.38pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= fncsy at17.23pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=fncsy at15.07pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= fncsy at12.92pt \fzzozznzzt}%
+\font\tensy= fncsy at10.766pt
+\def\ninesy{\font\fzzozznzzt= fncsy at9.67pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= fncsy at8.61pt \fzzozznzzt}%
+\font\sevensy= fncsy at7.54pt
+\def\sixsy{\font\fzzozznzzt= fncsy at6.46pt \fzzozznzzt}%
+\font\fivesy= fncsy at5.38pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= cmex10 at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=cmex10 at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= cmex10 at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=cmex10 at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= cmex10 at12pt \fzzozznzzt}%
+\font\tenex= cmex10
+\def\nineex{\font\fzzozznzzt= cmex9 \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= cmex8 \fzzozznzzt}%
+\font\sevenex= cmex7
+\def\sixex{\font\fzzozznzzt= cmex10 at6pt \fzzozznzzt}%
+\font\fiveex= cmex10 at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-qcsri at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-qcsri at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-qcsri at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-qcsri at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-qcsri at12pt \fzzozznzzt}%
+\font\tenit= rm-qcsri
+\def\nineit{\font\fzzozznzzt= rm-qcsri at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-qcsri at8pt \fzzozznzzt}%
+\font\sevenit= rm-qcsri at7pt
+\def\sixit{\font\fzzozznzzt= rm-qcsri at6pt \fzzozznzzt}%
+\font\fiveit= rm-qcsri at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= pncro7t at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=pncro7t at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= pncro7t at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= pncro7t at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= pncro7t at12pt \fzzozznzzt}%
+\font\tensl= pncro7t
+\def\ninesl{\font\fzzozznzzt= pncro7t at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= pncro7t at8pt \fzzozznzzt}%
+\font\sevensl= pncro7t at7pt
+\def\sixsl{\font\fzzozznzzt= pncro7t at6pt \fzzozznzzt}%
+\font\fivesl= pncro7t at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-qcsb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-qcsb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-qcsb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-qcsb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-qcsb at12pt \fzzozznzzt}%
+\font\tenbf= rm-qcsb
+\def\ninebf{\font\fzzozznzzt= rm-qcsb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-qcsb at8pt \fzzozznzzt}%
+\font\sevenbf= rm-qcsb at7pt
+\def\sixbf{\font\fzzozznzzt= rm-qcsb at6pt \fzzozznzzt}%
+\font\fivebf= rm-qcsb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= cmtt10 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= cmtt10 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= cmtt10 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=cmtt10 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= cmtt10 at12pt \fzzozznzzt}%
+\font\tentt= cmtt10
+\def\ninett{\font\fzzozznzzt= cmtt9 \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= cmtt8 \fzzozznzzt}%
+\font\seventt= cmtt10 at7pt
+\def\sixtt{\font\fzzozznzzt= cmtt10 at6pt \fzzozznzzt}%
+\font\fivett= cmtt10 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-qcsbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-qcsbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-qcsbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-qcsbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-qcsbi at12pt \fzzozznzzt}%
+\font\itbf= rm-qcsbi
+\def\nineitbf{\font\fzzozznzzt= rm-qcsbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-qcsbi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-qcsbi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-qcsbi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-qcsbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= pncbo7t at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= pncbo7t at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= pncbo7t at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= pncbo7t at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= pncbo7t at12pt \fzzozznzzt}%
+\font\slbf= pncbo7t
+\def\nineslbf{\font\fzzozznzzt= pncbo7t at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= pncbo7t at8pt \fzzozznzzt}%
+\font\sevenslbf= pncbo7t at7pt
+\def\sixslbf{\font\fzzozznzzt= pncbo7t at6pt \fzzozznzzt}%
+\font\fiveslbf= pncbo7t at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-qcsr-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-qcsr-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-qcsr-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-qcsr-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-qcsr-sc at12pt \fzzozznzzt}%
+\font\caps= rm-qcsr-sc
+\def\ninecaps{\font\fzzozznzzt= rm-qcsr-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-qcsr-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-qcsr-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-qcsr-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-qcsr-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-qcsb-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-qcsb-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-qcsb-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-qcsb-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= rm-qcsb-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-qcsb-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-qcsb-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-qcsb-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-qcsb-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-qcsb-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-qcsb-sc at5pt
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_charter.tex b/macros/plain/contrib/font-change/tex/macros/font_charter.tex
new file mode 100644
index 0000000000..d772c1d8ff
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_charter.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+% The mathdesign package has AMS symbols (msam & msbm) both in md-chrma but types are not much different than the original msam or msmb,
+% e.g. the black board letters of md-chrma seem to be copies of msmb blackboard letters.
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=mdbchr7t at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=mdbchr7t at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= mdbchr7t at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=mdbchr7t at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= mdbchr7t at12pt \fzzozznzzt}%
+\font\tenrm= mdbchr7t
+\def\ninerm{\font\fzzozznzzt= mdbchr7t at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= mdbchr7t at8pt \fzzozznzzt}%
+\font\sevenrm= mdbchr7t at7pt
+\def\sixrm{\font\fzzozznzzt= mdbchr7t at6pt \fzzozznzzt}%
+\font\fiverm= mdbchr7t at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mdbchri7m at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mdbchri7m at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mdbchri7m at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mdbchri7m at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mdbchri7m at12pt \fzzozznzzt}%
+\font\teni= mdbchri7m
+\def\ninei{\font\fzzozznzzt= mdbchri7m at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mdbchri7m at8pt \fzzozznzzt}%
+\font\seveni= mdbchri7m at7pt
+\def\sixi{\font\fzzozznzzt= mdbchri7m at6pt \fzzozznzzt}%
+\font\fivei= mdbchri7m at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= md-chr7y at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=md-chr7y at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= md-chr7y at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=md-chr7y at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= md-chr7y at12pt \fzzozznzzt}%
+\font\tensy= md-chr7y
+\def\ninesy{\font\fzzozznzzt= md-chr7y at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= md-chr7y at8pt \fzzozznzzt}%
+\font\sevensy= md-chr7y at7pt
+\def\sixsy{\font\fzzozznzzt= md-chr7y at6pt \fzzozznzzt}%
+\font\fivesy= md-chr7y at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= mdbchr7v at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=mdbchr7v at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= mdbchr7v at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=mdbchr7v at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= mdbchr7v at12pt \fzzozznzzt}%
+\font\tenex= mdbchr7v
+\def\nineex{\font\fzzozznzzt= mdbchr7v at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= mdbchr7v at8pt \fzzozznzzt}%
+\font\sevenex= mdbchr7v at7pt
+\def\sixex{\font\fzzozznzzt= mdbchr7v at6pt \fzzozznzzt}%
+\font\fiveex= mdbchr7v at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= mdbchri7t at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=mdbchri7t at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= mdbchri7t at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= mdbchri7t at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= mdbchri7t at12pt \fzzozznzzt}%
+\font\tenit= mdbchri7t
+\def\nineit{\font\fzzozznzzt= mdbchri7t at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= mdbchri7t at8pt \fzzozznzzt}%
+\font\sevenit= mdbchri7t at7pt
+\def\sixit{\font\fzzozznzzt= mdbchri7t at6pt \fzzozznzzt}%
+\font\fiveit= mdbchri7t at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= mdbchro7t at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=mdbchro7t at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= mdbchro7t at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= mdbchro7t at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= mdbchro7t at12pt \fzzozznzzt}%
+\font\tensl= mdbchro7t
+\def\ninesl{\font\fzzozznzzt= mdbchro7t at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= mdbchro7t at8pt \fzzozznzzt}%
+\font\sevensl= mdbchro7t at7pt
+\def\sixsl{\font\fzzozznzzt= mdbchro7t at6pt \fzzozznzzt}%
+\font\fivesl= mdbchro7t at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= mdbchb7t at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= mdbchb7t at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= mdbchb7t at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= mdbchb7t at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= mdbchb7t at12pt \fzzozznzzt}%
+\font\tenbf= mdbchb7t
+\def\ninebf{\font\fzzozznzzt= mdbchb7t at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= mdbchb7t at8pt \fzzozznzzt}%
+\font\sevenbf= mdbchb7t at7pt
+\def\sixbf{\font\fzzozznzzt= mdbchb7t at6pt \fzzozznzzt}%
+\font\fivebf= mdbchb7t at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= mdbchbi7t at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= mdbchbi7t at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= mdbchbi7t at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= mdbchbi7t at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= mdbchbi7t at12pt \fzzozznzzt}%
+\font\itbf= mdbchbi7t
+\def\nineitbf{\font\fzzozznzzt= mdbchbi7t at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= mdbchbi7t at8pt \fzzozznzzt}%
+\font\sevenitbf= mdbchbi7t at7pt
+\def\sixitbf{\font\fzzozznzzt= mdbchbi7t at6pt \fzzozznzzt}%
+\font\fiveitbf= mdbchbi7t at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= mdbchbo7t at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= mdbchbo7t at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= mdbchbo7t at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= mdbchbo7t at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= mdbchbo7t at12pt \fzzozznzzt}%
+\font\slbf= mdbchbo7t
+\def\nineslbf{\font\fzzozznzzt= mdbchbo7t at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= mdbchbo7t at8pt \fzzozznzzt}%
+\font\sevenslbf= mdbchbo7t at7pt
+\def\sixslbf{\font\fzzozznzzt= mdbchbo7t at6pt \fzzozznzzt}%
+\font\fiveslbf= mdbchbo7t at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= mdbchrfc8t at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= mdbchrfc8t at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= mdbchrfc8t at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= mdbchrfc8t at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= mdbchrfc8t at12pt \fzzozznzzt}%
+\font\caps= mdbchrfc8t
+\def\ninecaps{\font\fzzozznzzt= mdbchrfc8t at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= mdbchrfc8t at8pt \fzzozznzzt}%
+\font\sevencaps= mdbchrfc8t at7pt
+\def\sixcaps{\font\fzzozznzzt= mdbchrfc8t at6pt \fzzozznzzt}%
+\font\fivecaps= mdbchrfc8t at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= mdbchbfc8t at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= mdbchbfc8t at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= mdbchbfc8t at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= mdbchbfc8t at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= mdbchbfc8t at12pt \fzzozznzzt}%
+\font\capsbf= mdbchbfc8t
+\def\ninecapsbf{\font\fzzozznzzt= mdbchbfc8t at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= mdbchbfc8t at8pt \fzzozznzzt}%
+\font\sevencapsbf= mdbchbfc8t at7pt
+\def\sixcapsbf{\font\fzzozznzzt= mdbchbfc8t at6pt \fzzozznzzt}%
+\font\fivecapsbf= mdbchbfc8t at5pt
+%
+\fontdimen2\teni=-0.01pt% or \fontdimen2\textfont1 = 0.01pt or -0.01pt or 3pt produce the same effect
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_cm.tex b/macros/plain/contrib/font-change/tex/macros/font_cm.tex
new file mode 100644
index 0000000000..23f4103a7d
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_cm.tex
@@ -0,0 +1,199 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% based on CM package. AMS package has a few more like cmsl7 but not vectors
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=cmr10 at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=cmr10 at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= cmr10 at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=cmr10 at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= cmr12 \fzzozznzzt}%
+\font\tenrm= cmr10
+\def\ninerm{\font\fzzozznzzt= cmr9 \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= cmr8 \fzzozznzzt}%
+\font\sevenrm= cmr7
+\def\sixrm{\font\fzzozznzzt= cmr6 \fzzozznzzt}%
+\font\fiverm= cmr5
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= cmmi10 at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= cmmi10 at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= cmmi10 at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= cmmi10 at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= cmmi12 \fzzozznzzt}%
+\font\teni= cmmi10
+\def\ninei{\font\fzzozznzzt= cmmi9 \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= cmmi8 \fzzozznzzt}%
+\font\seveni= cmmi7
+\def\sixi{\font\fzzozznzzt= cmmi6 \fzzozznzzt}%
+\font\fivei= cmmi5
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= cmsy10 at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=cmsy10 at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= cmsy10 at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=cmsy10 at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= cmsy10 at12pt \fzzozznzzt}%
+\font\tensy= cmsy10
+\def\ninesy{\font\fzzozznzzt= cmsy9 \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= cmsy8 \fzzozznzzt}%
+\font\sevensy= cmsy7
+\def\sixsy{\font\fzzozznzzt= cmsy6 \fzzozznzzt}%
+\font\fivesy= cmsy5
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= cmex10 at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=cmex10 at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= cmex10 at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=cmex10 at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= cmex10 at12pt \fzzozznzzt}%
+\font\tenex= cmex10
+\def\nineex{\font\fzzozznzzt= cmex9 \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= cmex8 \fzzozznzzt}%
+\font\sevenex= cmex7
+\def\sixex{\font\fzzozznzzt= cmex10 at6pt \fzzozznzzt}%
+\font\fiveex= cmex10 at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= cmti10 at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=cmti10 at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= cmti10 at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= cmti10 at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= cmti12 \fzzozznzzt}%
+\font\tenit= cmti10
+\def\nineit{\font\fzzozznzzt= cmti9 \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= cmti8 \fzzozznzzt}%
+\font\sevenit= cmti7
+\def\sixit{\font\fzzozznzzt= cmti10 at6pt \fzzozznzzt}%
+\font\fiveit= cmti10 at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= cmsl10 at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=cmsl10 at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= cmsl10 at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= cmsl10 at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= cmsl12 \fzzozznzzt}%
+\font\tensl= cmsl10
+\def\ninesl{\font\fzzozznzzt= cmsl9 \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= cmsl8 \fzzozznzzt}%
+\font\sevensl= cmsl10 at7pt
+\def\sixsl{\font\fzzozznzzt= cmsl10 at6pt \fzzozznzzt}%
+\font\fivesl= cmsl10 at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= cmbx10 at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= cmbx10 at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= cmbx10 at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= cmbx10 at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= cmbx12 \fzzozznzzt}%
+\font\tenbf= cmbx10
+\def\ninebf{\font\fzzozznzzt= cmbx9 \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= cmbx8 \fzzozznzzt}%
+\font\sevenbf= cmbx7
+\def\sixbf{\font\fzzozznzzt= cmbx6 \fzzozznzzt}%
+\font\fivebf= cmbx5
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= cmtt10 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= cmtt10 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= cmtt10 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=cmtt10 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= cmtt12 \fzzozznzzt}%
+\font\tentt= cmtt10
+\def\ninett{\font\fzzozznzzt= cmtt9 \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= cmtt8 \fzzozznzzt}%
+\font\seventt= cmtt10 at7pt
+\def\sixtt{\font\fzzozznzzt= cmtt10 at6pt \fzzozznzzt}%
+\font\fivett= cmtt10 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= cmbxti10 at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= cmbxti10 at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= cmbxti10 at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= cmbxti10 at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= cmbxti10 at12pt \fzzozznzzt}%
+\font\itbf= cmbxti10
+\def\nineitbf{\font\fzzozznzzt= cmbxti10 at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= cmbxti10 at8pt \fzzozznzzt}%
+\font\sevenitbf= cmbxti10 at7pt
+\def\sixitbf{\font\fzzozznzzt= cmbxti10 at6pt \fzzozznzzt}%
+\font\fiveitbf= cmbxti10 at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= cmbxsl10 at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= cmbxsl10 at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= cmbxsl10 at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= cmbxsl10 at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= cmbxsl10 at12pt \fzzozznzzt}%
+\font\slbf= cmbxsl10
+\def\nineslbf{\font\fzzozznzzt= cmbxsl10 at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= cmbxsl10 at8pt \fzzozznzzt}%
+\font\sevenslbf= cmbxsl10 at7pt
+\def\sixslbf{\font\fzzozznzzt= cmbxsl10 at6pt \fzzozznzzt}%
+\font\fiveslbf= cmbxsl10 at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= cmcsc10 at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= cmcsc10 at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= cmcsc10 at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= cmcsc10 at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= cmcsc10 at12pt \fzzozznzzt}%
+\font\caps= cmcsc10
+\def\ninecaps{\font\fzzozznzzt= cmcsc10 at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= cmcsc10 at8pt \fzzozznzzt}%
+\font\sevencaps= cmcsc10 at7pt
+\def\sixcaps{\font\fzzozznzzt= cmcsc10 at6pt \fzzozznzzt}%
+\font\fivecaps= cmcsc10 at5pt
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_cmbright.tex b/macros/plain/contrib/font-change/tex/macros/font_cmbright.tex
new file mode 100644
index 0000000000..df0ee7999b
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_cmbright.tex
@@ -0,0 +1,190 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=cmbr10 at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=cmbr10 at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= cmbr10 at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=cmbr10 at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= cmbr10 at12pt \fzzozznzzt}%
+\font\tenrm= cmbr10
+\def\ninerm{\font\fzzozznzzt= cmbr10 at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= cmbr10 at8pt \fzzozznzzt}%
+\font\sevenrm= cmbr10 at7pt
+\def\sixrm{\font\fzzozznzzt= cmbr10 at6pt \fzzozznzzt}%
+\font\fiverm= cmbr10 at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= cmbrmi10 at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= cmbrmi10 at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= cmbrmi10 at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= cmbrmi10 at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= cmbrmi10 at12pt \fzzozznzzt}%
+\font\teni= cmbrmi10
+\def\ninei{\font\fzzozznzzt= cmbrmi10 at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= cmbrmi10 at8pt \fzzozznzzt}%
+\font\seveni= cmbrmi10 at7pt
+\def\sixi{\font\fzzozznzzt= cmbrmi10 at6pt \fzzozznzzt}%
+\font\fivei= cmbrmi10 at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= cmbrsy10 at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=cmbrsy10 at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= cmbrsy10 at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=cmbrsy10 at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= cmbrsy10 at12pt \fzzozznzzt}%
+\font\tensy= cmbrsy10
+\def\ninesy{\font\fzzozznzzt= cmbrsy10 at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= cmbrsy10 at8pt \fzzozznzzt}%
+\font\sevensy= cmbrsy10 at7pt
+\def\sixsy{\font\fzzozznzzt= cmbrsy10 at6pt \fzzozznzzt}%
+\font\fivesy= cmbrsy10 at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-iwonar at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-iwonar at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-iwonar at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-iwonar at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-iwonar at12pt \fzzozznzzt}%
+\font\tenex= ex-iwonar
+\def\nineex{\font\fzzozznzzt= ex-iwonar at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-iwonar at8pt \fzzozznzzt}%
+\font\sevenex= ex-iwonar at7pt
+\def\sixex{\font\fzzozznzzt= ex-iwonar at6pt \fzzozznzzt}%
+\font\fiveex= ex-iwonar at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= cmbrsl10 at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=cmbrsl10 at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= cmbrsl10 at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= cmbrsl10 at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= cmbrsl10 at12pt \fzzozznzzt}%
+\font\tenit= cmbrsl10
+\def\nineit{\font\fzzozznzzt= cmbrsl10 at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= cmbrsl10 at8pt \fzzozznzzt}%
+\font\sevenit= cmbrsl10 at7pt
+\def\sixit{\font\fzzozznzzt= cmbrsl10 at6pt \fzzozznzzt}%
+\font\fiveit= cmbrsl10 at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= cmbrsl10 at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=cmbrsl10 at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= cmbrsl10 at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= cmbrsl10 at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= cmbrsl10 at12pt \fzzozznzzt}%
+\font\tensl= cmbrsl10
+\def\ninesl{\font\fzzozznzzt= cmbrsl10 at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= cmbrsl10 at8pt \fzzozznzzt}%
+\font\sevensl= cmbrsl10 at7pt
+\def\sixsl{\font\fzzozznzzt= cmbrsl10 at6pt \fzzozznzzt}%
+\font\fivesl= cmbrsl10 at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= cmbrbx10 at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= cmbrbx10 at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= cmbrbx10 at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= cmbrbx10 at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= cmbrbx10 at12pt \fzzozznzzt}%
+\font\tenbf= cmbrbx10
+\def\ninebf{\font\fzzozznzzt= cmbrbx10 at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= cmbrbx10 at8pt \fzzozznzzt}%
+\font\sevenbf= cmbrbx10 at7pt
+\def\sixbf{\font\fzzozznzzt= cmbrbx10 at6pt \fzzozznzzt}%
+\font\fivebf= cmbrbx10 at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-lmssbo10 at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-lmssbo10 at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-lmssbo10 at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-lmssbo10 at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-lmssbo10 at12pt \fzzozznzzt}%
+\font\itbf= rm-lmssbo10 scaled 1020% \fontdimen2\itbf=3pt got by comparing cmbrbx10 & rm-lmssbx10
+\def\nineitbf{\font\fzzozznzzt= rm-lmssbo10 at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-lmssbo10 scaled 816 \fzzozznzzt}% \fontdimen2\eightitbf=2.5pt
+\font\sevenitbf= rm-lmssbo10 at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-lmssbo10 at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-lmssbo10 at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-lmssbo10 at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-lmssbo10 at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-lmssbo10 at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-lmssbo10 at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-lmssbo10 at12pt \fzzozznzzt}%
+\font\slbf= rm-lmssbo10 scaled 1020 % \fontdimen2\slbf=3pt
+\def\nineslbf{\font\fzzozznzzt= rm-lmssbo10 at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-lmssbo10 scaled 816 \fzzozznzzt}% %\fontdimen2\eightslbf=2.5pt
+\font\sevenslbf= rm-lmssbo10 at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-lmssbo10 at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-lmssbo10 at5pt
+%
+% AMS Symbols
+\def\loadmsam{\font\tenmsa=cmbras10 \font\sevenmsa=cmbras10 at7pt \font\fivemsa=cmbras10 at5pt \fam\msafam \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\def\loadmsbm{\font\tenmsb=cmbrbs10 \font\sevenmsb=cmbrbs10 at7pt \font\fivemsb=cmbrbs10 at5pt \fam\msbfam \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\def\UseAMSsymbols{\loadmsam\loadmsbm}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_concrete.tex b/macros/plain/contrib/font-change/tex/macros/font_concrete.tex
new file mode 100644
index 0000000000..2504ed41b7
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_concrete.tex
@@ -0,0 +1,166 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+% concmath package offers AMS symbols support but the fonts are bitmap.
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=pcr10 at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=pcr10 at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= pcr10 at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=pcr10 at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= pcr10 at12pt \fzzozznzzt}%
+\font\tenrm= pcr10% ccr10 the original but bitmap vnccr10, eoti10 misses \Delta etc.
+\def\ninerm{\font\fzzozznzzt= pcr10 at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= pcr10 at8pt \fzzozznzzt}%
+\font\sevenrm= pcr10 at7pt% There is pcr7 but we use this for consistency
+\def\sixrm{\font\fzzozznzzt= pcr10 at6pt \fzzozznzzt}%
+\font\fiverm= pcr10 at5pt% There is pcr5 but we use this for consistency
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= pcmi10 at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= pcmi10 at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= pcmi10 at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= pcmi10 at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= pcmi10 at12pt \fzzozznzzt}%
+\font\teni= pcmi10% ccmi10 or xccmi10 too but they are bitmap
+\def\ninei{\font\fzzozznzzt= pcmi10 at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= pcmi10 at8pt \fzzozznzzt}%
+\font\seveni= pcmi10 at7pt% xccmi7 original but bitmap
+\def\sixi{\font\fzzozznzzt= pcmi10 at6pt \fzzozznzzt}%
+\font\fivei= pcmi10 at5pt% xccmi5 original but bitmap
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= cmsy10 at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=cmsy10 at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= cmsy10 at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=cmsy10 at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= cmsy10 at12pt \fzzozznzzt}%
+\font\tensy= cmsy10% xccsy10 original but bitmap, and no big difference
+\def\ninesy{\font\fzzozznzzt= cmsy9 \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= cmsy8 \fzzozznzzt}%
+\font\sevensy= cmsy7% xccsy7 original but bitmap, and no big difference
+\def\sixsy{\font\fzzozznzzt= cmsy6 \fzzozznzzt}%
+\font\fivesy= cmsy5% xccsy5 original but bitmap, and no big difference
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= cmex10 at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=cmex10 at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= cmex10 at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=cmex10 at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= cmex10 at12pt \fzzozznzzt}%
+\font\tenex= cmex10% xccex10 original but bitmap, and no big difference
+\def\nineex{\font\fzzozznzzt= cmex9 \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= cmex8 \fzzozznzzt}%
+\font\sevenex= cmex7% xccex7 original but bitmap, and no big difference
+\def\sixex{\font\fzzozznzzt= cmex10 at6pt \fzzozznzzt}%
+\font\fiveex= cmex10 at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= pcti10 at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=pcti10 at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= pcti10 at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= pcti10 at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= pcti10 at12pt \fzzozznzzt}%
+\font\tenit= pcti10% ccti10 original but bitmap
+\def\nineit{\font\fzzozznzzt= pcti10 at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= pcti10 at8pt \fzzozznzzt}%
+\font\sevenit= pcti10 at7pt
+\def\sixit{\font\fzzozznzzt= pcti10 at6pt \fzzozznzzt}%
+\font\fiveit= pcti10 at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= pcsl10 at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=pcsl10 at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= pcsl10 at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= pcsl10 at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= pcsl10 at12pt \fzzozznzzt}%
+\font\tensl= pcsl10% ccsl10
+\def\ninesl{\font\fzzozznzzt= pcsl10 at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= pcsl10 at8pt \fzzozznzzt}%
+\font\sevensl= pcsl10 at7pt
+\def\sixsl{\font\fzzozznzzt= pcsl10 at6pt \fzzozznzzt}%
+\font\fivesl= pcsl10 at5pt
+%
+% no boldface text (Family 6)
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= cmtt10 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= cmtt10 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= cmtt10 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=cmtt10 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= cmtt10 at12pt \fzzozznzzt}%
+\font\tentt= cmtt10
+\def\ninett{\font\fzzozznzzt= cmtt9 \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= cmtt8 \fzzozznzzt}%
+\font\seventt= cmtt10 at7pt
+\def\sixtt{\font\fzzozznzzt= cmtt10 at6pt \fzzozznzzt}%
+\font\fivett= cmtt10 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% no italic boldface
+%
+% no slanted boldface
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= pccsc10 at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= pccsc10 at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= pccsc10 at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= pccsc10 at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= pccsc10 at12pt \fzzozznzzt}%
+\font\caps= pccsc10% vncccsc10
+\def\ninecaps{\font\fzzozznzzt= pccsc10 at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= pccsc10 at8pt \fzzozznzzt}%
+\font\sevencaps= pccsc10 at7pt
+\def\sixcaps{\font\fzzozznzzt= pccsc10 at6pt \fzzozznzzt}%
+\font\fivecaps= pccsc10 at5pt
+%
+% no caps bold
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_epigrafica_euler.tex b/macros/plain/contrib/font-change/tex/macros/font_epigrafica_euler.tex
new file mode 100644
index 0000000000..df96f6e7dd
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_epigrafica_euler.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=epigrafican8r at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=epigrafican8r at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= epigrafican8r at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=epigrafican8r at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= epigrafican8r at12pt \fzzozznzzt}%
+\font\tenrm= epigrafican8r
+\def\ninerm{\font\fzzozznzzt= epigrafican8r at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= epigrafican8r at8pt \fzzozznzzt}%
+\font\sevenrm= epigrafican8r at7pt
+\def\sixrm{\font\fzzozznzzt= epigrafican8r at6pt \fzzozznzzt}%
+\font\fiverm= epigrafican8r at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= zeurm10 at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= zeurm10 at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= zeurm10 at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= zeurm10 at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= zeurm10 at12pt \fzzozznzzt}%
+\font\teni= zeurm10
+\def\ninei{\font\fzzozznzzt= zeurm10 at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= zeurm10 at8pt \fzzozznzzt}%
+\font\seveni= zeurm7
+\def\sixi{\font\fzzozznzzt= zeurm10 at6pt \fzzozznzzt}%
+\font\fivei= zeurm5
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= zeusm10 at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=zeusm10 at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= zeusm10 at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=zeusm10 at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= zeusm10 at12pt \fzzozznzzt}%
+\font\tensy= zeusm10
+\def\ninesy{\font\fzzozznzzt= zeusm10 at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= zeusm10 at8pt \fzzozznzzt}%
+\font\sevensy= zeusm7
+\def\sixsy{\font\fzzozznzzt= zeusm10 at6pt \fzzozznzzt}%
+\font\fivesy= zeusm5
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= zeuex10 at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=zeuex10 at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= zeuex10 at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=zeuex10 at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= zeuex10 at12pt \fzzozznzzt}%
+\font\tenex= zeuex10
+\def\nineex{\font\fzzozznzzt= zeuex10 at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= zeuex10 at8pt \fzzozznzzt}%
+\font\sevenex= zeuex10 at7pt
+\def\sixex{\font\fzzozznzzt= zeuex10 at6pt \fzzozznzzt}%
+\font\fiveex= zeuex10 at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= epigraficai8r at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=epigraficai8r at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= epigraficai8r at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= epigraficai8r at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= epigraficai8r at12pt \fzzozznzzt}%
+\font\tenit= epigraficai8r
+\def\nineit{\font\fzzozznzzt= epigraficai8r at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= epigraficai8r at8pt \fzzozznzzt}%
+\font\sevenit= epigraficai8r at7pt
+\def\sixit{\font\fzzozznzzt= epigraficai8r at6pt \fzzozznzzt}%
+\font\fiveit= epigraficai8r at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= epigraficai8r at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=epigraficai8r at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= epigraficai8r at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= epigraficai8r at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= epigraficai8r at12pt \fzzozznzzt}%
+\font\tensl= epigraficai8r
+\def\ninesl{\font\fzzozznzzt= epigraficai8r at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= epigraficai8r at8pt \fzzozznzzt}%
+\font\sevensl= epigraficai8r at7pt
+\def\sixsl{\font\fzzozznzzt= epigraficai8r at6pt \fzzozznzzt}%
+\font\fivesl= epigraficai8r at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= epigraficab8r at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= epigraficab8r at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= epigraficab8r at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= epigraficab8r at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= epigraficab8r at12pt \fzzozznzzt}%
+\font\tenbf= epigraficab8r
+\def\ninebf{\font\fzzozznzzt= epigraficab8r at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= epigraficab8r at8pt \fzzozznzzt}%
+\font\sevenbf= epigraficab8r at7pt
+\def\sixbf{\font\fzzozznzzt= epigraficab8r at6pt \fzzozznzzt}%
+\font\fivebf= epigraficab8r at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= epigraficabi8r at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= epigraficabi8r at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= epigraficabi8r at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= epigraficabi8r at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= epigraficabi8r at12pt \fzzozznzzt}%
+\font\itbf= epigraficabi8r
+\def\nineitbf{\font\fzzozznzzt= epigraficabi8r at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= epigraficabi8r at8pt \fzzozznzzt}%
+\font\sevenitbf= epigraficabi8r at7pt
+\def\sixitbf{\font\fzzozznzzt= epigraficabi8r at6pt \fzzozznzzt}%
+\font\fiveitbf= epigraficabi8r at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= epigraficabi8r at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= epigraficabi8r at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= epigraficabi8r at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= epigraficabi8r at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= epigraficabi8r at12pt \fzzozznzzt}%
+\font\slbf= epigraficabi8r
+\def\nineslbf{\font\fzzozznzzt= epigraficabi8r at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= epigraficabi8r at8pt \fzzozznzzt}%
+\font\sevenslbf= epigraficabi8r at7pt
+\def\sixslbf{\font\fzzozznzzt= epigraficabi8r at6pt \fzzozznzzt}%
+\font\fiveslbf= epigraficabi8r at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= epigraficac8r at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= epigraficac8r at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= epigraficac8r at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= epigraficac8r at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= epigraficac8r at12pt \fzzozznzzt}%
+\font\caps= epigraficac8r
+\def\ninecaps{\font\fzzozznzzt= epigraficac8r at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= epigraficac8r at8pt \fzzozznzzt}%
+\font\sevencaps= epigraficac8r at7pt
+\def\sixcaps{\font\fzzozznzzt= epigraficac8r at6pt \fzzozznzzt}%
+\font\fivecaps= epigraficac8r at5pt%
+%
+%
+\mathchardef\Gamma="7100
+\mathchardef\Delta="7101
+\mathchardef\Theta="7102
+\mathchardef\Lambda="7103
+\mathchardef\Xi="7104
+\mathchardef\Pi="7105
+\mathchardef\Sigma="7106
+\mathchardef\Upsilon="7107
+%
+\mathchardef\Phi="7108
+\mathchardef\Psi="7109
+\mathchardef\Omega="710A
+%
+\mathchardef\varrho="711A
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_epigrafica_palatino.tex b/macros/plain/contrib/font-change/tex/macros/font_epigrafica_palatino.tex
new file mode 100644
index 0000000000..e0ad7065aa
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_epigrafica_palatino.tex
@@ -0,0 +1,226 @@
+% The author of this work is Amit Raj Dhawan%
+% This work has been released under%
+% Creative Commons Attribution-Share Alike 3.0 Unported License%
+% on July 19, 2010. For details visit:%
+% http://creativecommons.org/licenses/by-sa/3.0/
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=epigrafican8r at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=epigrafican8r at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= epigrafican8r at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=epigrafican8r at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= epigrafican8r at12pt \fzzozznzzt}%
+\font\tenrm= epigrafican8r
+\def\ninerm{\font\fzzozznzzt= epigrafican8r at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= epigrafican8r at8pt \fzzozznzzt}%
+\font\sevenrm= epigrafican8r at7pt
+\def\sixrm{\font\fzzozznzzt= epigrafican8r at6pt \fzzozznzzt}%
+\font\fiverm= epigrafican8r at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= pxmi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= pxmi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= pxmi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= pxmi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= pxmi at12pt \fzzozznzzt}%
+\font\teni= pxmi
+\def\ninei{\font\fzzozznzzt= pxmi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= pxmi at8pt \fzzozznzzt}%
+\font\seveni= pxmi at7pt
+\def\sixi{\font\fzzozznzzt= pxmi at6pt \fzzozznzzt}%
+\font\fivei= pxmi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= pxsy at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=pxsy at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= pxsy at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=pxsy at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= pxsy at12pt \fzzozznzzt}%
+\font\tensy= pxsy
+\def\ninesy{\font\fzzozznzzt= pxsy at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= pxsy at8pt \fzzozznzzt}%
+\font\sevensy= pxsy at7pt
+\def\sixsy{\font\fzzozznzzt= pxsy at6pt \fzzozznzzt}%
+\font\fivesy= pxsy at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= pxex at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=pxex at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= pxex at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=pxex at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= pxex at12pt \fzzozznzzt}%
+\font\tenex= pxex
+\def\nineex{\font\fzzozznzzt= pxex at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= pxex at8pt \fzzozznzzt}%
+\font\sevenex= pxex at7pt
+\def\sixex{\font\fzzozznzzt= pxex at6pt \fzzozznzzt}%
+\font\fiveex= pxex at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= epigraficai8r at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=epigraficai8r at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= epigraficai8r at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= epigraficai8r at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= epigraficai8r at12pt \fzzozznzzt}%
+\font\tenit= epigraficai8r
+\def\nineit{\font\fzzozznzzt= epigraficai8r at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= epigraficai8r at8pt \fzzozznzzt}%
+\font\sevenit= epigraficai8r at7pt
+\def\sixit{\font\fzzozznzzt= epigraficai8r at6pt \fzzozznzzt}%
+\font\fiveit= epigraficai8r at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= epigraficai8r at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=epigraficai8r at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= epigraficai8r at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= epigraficai8r at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= epigraficai8r at12pt \fzzozznzzt}%
+\font\tensl= epigraficai8r
+\def\ninesl{\font\fzzozznzzt= epigraficai8r at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= epigraficai8r at8pt \fzzozznzzt}%
+\font\sevensl= epigraficai8r at7pt
+\def\sixsl{\font\fzzozznzzt= epigraficai8r at6pt \fzzozznzzt}%
+\font\fivesl= epigraficai8r at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= epigraficab8r at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= epigraficab8r at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= epigraficab8r at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= epigraficab8r at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= epigraficab8r at12pt \fzzozznzzt}%
+\font\tenbf= epigraficab8r
+\def\ninebf{\font\fzzozznzzt= epigraficab8r at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= epigraficab8r at8pt \fzzozznzzt}%
+\font\sevenbf= epigraficab8r at7pt
+\def\sixbf{\font\fzzozznzzt= epigraficab8r at6pt \fzzozznzzt}%
+\font\fivebf= epigraficab8r at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= epigraficabi8r at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= epigraficabi8r at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= epigraficabi8r at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= epigraficabi8r at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= epigraficabi8r at12pt \fzzozznzzt}%
+\font\itbf= epigraficabi8r
+\def\nineitbf{\font\fzzozznzzt= epigraficabi8r at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= epigraficabi8r at8pt \fzzozznzzt}%
+\font\sevenitbf= epigraficabi8r at7pt
+\def\sixitbf{\font\fzzozznzzt= epigraficabi8r at6pt \fzzozznzzt}%
+\font\fiveitbf= epigraficabi8r at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= epigraficabi8r at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= epigraficabi8r at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= epigraficabi8r at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= epigraficabi8r at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= epigraficabi8r at12pt \fzzozznzzt}%
+\font\slbf= epigraficabi8r
+\def\nineslbf{\font\fzzozznzzt= epigraficabi8r at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= epigraficabi8r at8pt \fzzozznzzt}%
+\font\sevenslbf= epigraficabi8r at7pt
+\def\sixslbf{\font\fzzozznzzt= epigraficabi8r at6pt \fzzozznzzt}%
+\font\fiveslbf= epigraficabi8r at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= epigraficac8r at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= epigraficac8r at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= epigraficac8r at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= epigraficac8r at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= epigraficac8r at12pt \fzzozznzzt}%
+\font\caps= epigraficac8r
+\def\ninecaps{\font\fzzozznzzt= epigraficac8r at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= epigraficac8r at8pt \fzzozznzzt}%
+\font\sevencaps= epigraficac8r at7pt
+\def\sixcaps{\font\fzzozznzzt= epigraficac8r at6pt \fzzozznzzt}%
+\font\fivecaps= epigraficac8r at5pt%
+%
+%
+% Some missing glyphs
+\font\tenmiss=rm-qplr
+\font\sevenmiss=rm-qplr at7pt
+\font\fivemiss=rm-qplr at5pt
+%
+\newfam\misscharfam
+\textfont\misscharfam=\tenmiss
+\scriptfont\misscharfam=\sevenmiss
+\scriptscriptfont\misscharfam=\fivemiss
+%
+\def\Gamma{{\fam=\misscharfam \mathchar"7800}}%
+\def\Delta{{\fam=\misscharfam \mathchar"7801}}%
+\def\Theta{{\fam=\misscharfam \mathchar"7802}}%
+\def\Lambda{{\fam=\misscharfam \mathchar"7803}}%
+\def\Xi{{\fam=\misscharfam \mathchar"7804}}%
+\def\Pi{{\fam=\misscharfam \mathchar"7805}}%
+\def\Sigma{{\fam=\misscharfam \mathchar"7806}}%
+\def\Upsilon{{\fam=\misscharfam \mathchar"7807}}%
+\def\Phi{{\fam=\misscharfam \mathchar"7808}}%
+\def\Psi{{\fam=\misscharfam \mathchar"7809}}%
+\def\Omega{{\fam=\misscharfam \mathchar"780A}}%
+%
+% AMS Symbols
+\def\loadmsam{\font\tenmsa=pxsya \font\sevenmsa=pxsya at7pt \font\fivemsa=pxsya at5pt \fam\msafam \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\def\loadmsbm{\font\tenmsb=pxsyb \font\sevenmsb=pxsyb at7pt \font\fivemsb=pxsyb at5pt \fam\msbfam \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\def\UseAMSsymbols{\loadmsam\loadmsbm}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_iwona-bold.tex b/macros/plain/contrib/font-change/tex/macros/font_iwona-bold.tex
new file mode 100644
index 0000000000..0e863b386d
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_iwona-bold.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% The "antt" family has other versions like "condensed", "light", etc. Stick to rm-???????
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-iwonab at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-iwonab at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-iwonab at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-iwonab at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-iwonab at12pt \fzzozznzzt}%
+\font\tenrm= rm-iwonab
+\def\ninerm{\font\fzzozznzzt= rm-iwonab at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-iwonab at8pt \fzzozznzzt}%
+\font\sevenrm= rm-iwonab at7pt
+\def\sixrm{\font\fzzozznzzt= rm-iwonab at6pt \fzzozznzzt}%
+\font\fiverm= rm-iwonab at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-iwonabi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-iwonabi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-iwonabi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-iwonabi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-iwonabi at12pt \fzzozznzzt}%
+\font\teni= mi-iwonabi
+\def\ninei{\font\fzzozznzzt= mi-iwonabi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-iwonabi at8pt \fzzozznzzt}%
+\font\seveni= mi-iwonabi at7pt
+\def\sixi{\font\fzzozznzzt= mi-iwonabi at6pt \fzzozznzzt}%
+\font\fivei= mi-iwonabi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-iwonabz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-iwonabz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-iwonabz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-iwonabz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-iwonabz at12pt \fzzozznzzt}%
+\font\tensy= sy-iwonabz
+\def\ninesy{\font\fzzozznzzt= sy-iwonabz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-iwonabz at8pt \fzzozznzzt}%
+\font\sevensy= sy-iwonabz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-iwonabz at6pt \fzzozznzzt}%
+\font\fivesy= sy-iwonabz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-iwonab at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-iwonab at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-iwonab at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-iwonab at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-iwonab at12pt \fzzozznzzt}%
+\font\tenex= ex-iwonab
+\def\nineex{\font\fzzozznzzt= ex-iwonab at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-iwonab at8pt \fzzozznzzt}%
+\font\sevenex= ex-iwonab at7pt
+\def\sixex{\font\fzzozznzzt= ex-iwonab at6pt \fzzozznzzt}%
+\font\fiveex= ex-iwonab at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-iwonabi at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-iwonabi at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-iwonabi at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-iwonabi at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-iwonabi at12pt \fzzozznzzt}%
+\font\tenit= rm-iwonabi
+\def\nineit{\font\fzzozznzzt= rm-iwonabi at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-iwonabi at8pt \fzzozznzzt}%
+\font\sevenit= rm-iwonabi at7pt
+\def\sixit{\font\fzzozznzzt= rm-iwonabi at6pt \fzzozznzzt}%
+\font\fiveit= rm-iwonabi at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-iwonabi at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-iwonabi at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-iwonabi at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-iwonabi at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-iwonabi at12pt \fzzozznzzt}%
+\font\tensl= rm-iwonabi %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-iwonabi at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-iwonabi at8pt \fzzozznzzt}%
+\font\sevensl= rm-iwonabi at7pt
+\def\sixsl{\font\fzzozznzzt= rm-iwonabi at6pt \fzzozznzzt}%
+\font\fivesl= rm-iwonabi at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-iwonah at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-iwonah at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-iwonah at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-iwonah at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-iwonah at12pt \fzzozznzzt}%
+\font\tenbf= rm-iwonah
+\def\ninebf{\font\fzzozznzzt= rm-iwonah at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-iwonah at8pt \fzzozznzzt}%
+\font\sevenbf= rm-iwonah at7pt
+\def\sixbf{\font\fzzozznzzt= rm-iwonah at6pt \fzzozznzzt}%
+\font\fivebf= rm-iwonah at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-iwonahi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-iwonahi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-iwonahi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-iwonahi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-iwonahi at12pt \fzzozznzzt}%
+\font\itbf= rm-iwonahi
+\def\nineitbf{\font\fzzozznzzt= rm-iwonahi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-iwonahi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-iwonahi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-iwonahi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-iwonahi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-iwonahi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-iwonahi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-iwonahi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-iwonahi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-iwonahi at12pt \fzzozznzzt}%
+\font\slbf= rm-iwonahi
+\def\nineslbf{\font\fzzozznzzt= rm-iwonahi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-iwonahi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-iwonahi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-iwonahi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-iwonahi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-iwonab-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-iwonab-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-iwonab-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-iwonab-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-iwonab-sc at12pt \fzzozznzzt}%
+\font\caps= rm-iwonab-sc
+\def\ninecaps{\font\fzzozznzzt= rm-iwonab-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-iwonab-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-iwonab-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-iwonab-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-iwonab-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-iwonah-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-iwonah-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-iwonah-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-iwonah-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-iwonah-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-iwonah-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-iwonah-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-iwonah-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-iwonah-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-iwonah-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-iwonah-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-bold.tex b/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-bold.tex
new file mode 100644
index 0000000000..b0309f042e
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-bold.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% The "antt" family has other versions like "condensed", "light", etc. Stick to rm-???????
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-iwonacb at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-iwonacb at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-iwonacb at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-iwonacb at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-iwonacb at12pt \fzzozznzzt}%
+\font\tenrm= rm-iwonacb
+\def\ninerm{\font\fzzozznzzt= rm-iwonacb at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-iwonacb at8pt \fzzozznzzt}%
+\font\sevenrm= rm-iwonacb at7pt
+\def\sixrm{\font\fzzozznzzt= rm-iwonacb at6pt \fzzozznzzt}%
+\font\fiverm= rm-iwonacb at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-iwonacbi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-iwonacbi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-iwonacbi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-iwonacbi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-iwonacbi at12pt \fzzozznzzt}%
+\font\teni= mi-iwonacbi
+\def\ninei{\font\fzzozznzzt= mi-iwonacbi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-iwonacbi at8pt \fzzozznzzt}%
+\font\seveni= mi-iwonacbi at7pt
+\def\sixi{\font\fzzozznzzt= mi-iwonacbi at6pt \fzzozznzzt}%
+\font\fivei= mi-iwonacbi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-iwonacbz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-iwonacbz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-iwonacbz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-iwonacbz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-iwonacbz at12pt \fzzozznzzt}%
+\font\tensy= sy-iwonacbz
+\def\ninesy{\font\fzzozznzzt= sy-iwonacbz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-iwonacbz at8pt \fzzozznzzt}%
+\font\sevensy= sy-iwonacbz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-iwonacbz at6pt \fzzozznzzt}%
+\font\fivesy= sy-iwonacbz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-iwonacb at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-iwonacb at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-iwonacb at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-iwonacb at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-iwonacb at12pt \fzzozznzzt}%
+\font\tenex= ex-iwonacb
+\def\nineex{\font\fzzozznzzt= ex-iwonacb at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-iwonacb at8pt \fzzozznzzt}%
+\font\sevenex= ex-iwonacb at7pt
+\def\sixex{\font\fzzozznzzt= ex-iwonacb at6pt \fzzozznzzt}%
+\font\fiveex= ex-iwonacb at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-iwonacbi at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-iwonacbi at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-iwonacbi at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-iwonacbi at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-iwonacbi at12pt \fzzozznzzt}%
+\font\tenit= rm-iwonacbi
+\def\nineit{\font\fzzozznzzt= rm-iwonacbi at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-iwonacbi at8pt \fzzozznzzt}%
+\font\sevenit= rm-iwonacbi at7pt
+\def\sixit{\font\fzzozznzzt= rm-iwonacbi at6pt \fzzozznzzt}%
+\font\fiveit= rm-iwonacbi at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-iwonacbi at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-iwonacbi at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-iwonacbi at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-iwonacbi at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-iwonacbi at12pt \fzzozznzzt}%
+\font\tensl= rm-iwonacbi %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-iwonacbi at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-iwonacbi at8pt \fzzozznzzt}%
+\font\sevensl= rm-iwonacbi at7pt
+\def\sixsl{\font\fzzozznzzt= rm-iwonacbi at6pt \fzzozznzzt}%
+\font\fivesl= rm-iwonacbi at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-iwonach at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-iwonach at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-iwonach at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-iwonach at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-iwonach at12pt \fzzozznzzt}%
+\font\tenbf= rm-iwonach
+\def\ninebf{\font\fzzozznzzt= rm-iwonach at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-iwonach at8pt \fzzozznzzt}%
+\font\sevenbf= rm-iwonach at7pt
+\def\sixbf{\font\fzzozznzzt= rm-iwonach at6pt \fzzozznzzt}%
+\font\fivebf= rm-iwonach at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-iwonachi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-iwonachi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-iwonachi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-iwonachi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-iwonachi at12pt \fzzozznzzt}%
+\font\itbf= rm-iwonachi
+\def\nineitbf{\font\fzzozznzzt= rm-iwonachi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-iwonachi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-iwonachi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-iwonachi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-iwonachi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-iwonachi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-iwonachi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-iwonachi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-iwonachi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-iwonachi at12pt \fzzozznzzt}%
+\font\slbf= rm-iwonachi
+\def\nineslbf{\font\fzzozznzzt= rm-iwonachi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-iwonachi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-iwonachi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-iwonachi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-iwonachi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-iwonacb-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-iwonacb-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-iwonacb-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-iwonacb-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-iwonacb-sc at12pt \fzzozznzzt}%
+\font\caps= rm-iwonacb-sc
+\def\ninecaps{\font\fzzozznzzt= rm-iwonacb-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-iwonacb-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-iwonacb-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-iwonacb-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-iwonacb-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-iwonach-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-iwonach-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-iwonach-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-iwonach-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-iwonach-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-iwonach-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-iwonach-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-iwonach-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-iwonach-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-iwonach-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-iwonach-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-light.tex b/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-light.tex
new file mode 100644
index 0000000000..47c44c38b2
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-light.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-iwonacl at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-iwonacl at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-iwonacl at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-iwonacl at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-iwonacl at12pt \fzzozznzzt}%
+\font\tenrm= rm-iwonacl
+\def\ninerm{\font\fzzozznzzt= rm-iwonacl at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-iwonacl at8pt \fzzozznzzt}%
+\font\sevenrm= rm-iwonacl at7pt
+\def\sixrm{\font\fzzozznzzt= rm-iwonacl at6pt \fzzozznzzt}%
+\font\fiverm= rm-iwonacl at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-iwonacli at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-iwonacli at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-iwonacli at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-iwonacli at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-iwonacli at12pt \fzzozznzzt}%
+\font\teni= mi-iwonacli
+\def\ninei{\font\fzzozznzzt= mi-iwonacli at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-iwonacli at8pt \fzzozznzzt}%
+\font\seveni= mi-iwonacli at7pt
+\def\sixi{\font\fzzozznzzt= mi-iwonacli at6pt \fzzozznzzt}%
+\font\fivei= mi-iwonacli at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-iwonaclz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-iwonaclz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-iwonaclz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-iwonaclz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-iwonaclz at12pt \fzzozznzzt}%
+\font\tensy= sy-iwonaclz
+\def\ninesy{\font\fzzozznzzt= sy-iwonaclz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-iwonaclz at8pt \fzzozznzzt}%
+\font\sevensy= sy-iwonaclz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-iwonaclz at6pt \fzzozznzzt}%
+\font\fivesy= sy-iwonaclz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-iwonacl at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-iwonacl at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-iwonacl at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-iwonacl at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-iwonacl at12pt \fzzozznzzt}%
+\font\tenex= ex-iwonacl
+\def\nineex{\font\fzzozznzzt= ex-iwonacl at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-iwonacl at8pt \fzzozznzzt}%
+\font\sevenex= ex-iwonacl at7pt
+\def\sixex{\font\fzzozznzzt= ex-iwonacl at6pt \fzzozznzzt}%
+\font\fiveex= ex-iwonacl at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-iwonacli at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-iwonacli at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-iwonacli at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-iwonacli at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-iwonacli at12pt \fzzozznzzt}%
+\font\tenit= rm-iwonacli
+\def\nineit{\font\fzzozznzzt= rm-iwonacli at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-iwonacli at8pt \fzzozznzzt}%
+\font\sevenit= rm-iwonacli at7pt
+\def\sixit{\font\fzzozznzzt= rm-iwonacli at6pt \fzzozznzzt}%
+\font\fiveit= rm-iwonacli at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-iwonacli at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-iwonacli at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-iwonacli at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-iwonacli at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-iwonacli at12pt \fzzozznzzt}%
+\font\tensl= rm-iwonacli %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-iwonacli at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-iwonacli at8pt \fzzozznzzt}%
+\font\sevensl= rm-iwonacli at7pt
+\def\sixsl{\font\fzzozznzzt= rm-iwonacli at6pt \fzzozznzzt}%
+\font\fivesl= rm-iwonacli at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-iwonacm at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-iwonacm at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-iwonacm at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-iwonacm at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-iwonacm at12pt \fzzozznzzt}%
+\font\tenbf= rm-iwonacm
+\def\ninebf{\font\fzzozznzzt= rm-iwonacm at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-iwonacm at8pt \fzzozznzzt}%
+\font\sevenbf= rm-iwonacm at7pt
+\def\sixbf{\font\fzzozznzzt= rm-iwonacm at6pt \fzzozznzzt}%
+\font\fivebf= rm-iwonacm at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-iwonacmi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-iwonacmi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-iwonacmi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-iwonacmi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-iwonacmi at12pt \fzzozznzzt}%
+\font\itbf= rm-iwonacmi
+\def\nineitbf{\font\fzzozznzzt= rm-iwonacmi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-iwonacmi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-iwonacmi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-iwonacmi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-iwonacmi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-iwonacmi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-iwonacmi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-iwonacmi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-iwonacmi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-iwonacmi at12pt \fzzozznzzt}%
+\font\slbf= rm-iwonacmi
+\def\nineslbf{\font\fzzozznzzt= rm-iwonacmi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-iwonacmi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-iwonacmi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-iwonacmi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-iwonacmi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-iwonacl-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-iwonacl-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-iwonacl-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-iwonacl-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-iwonacl-sc at12pt \fzzozznzzt}%
+\font\caps= rm-iwonacl-sc
+\def\ninecaps{\font\fzzozznzzt= rm-iwonacl-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-iwonacl-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-iwonacl-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-iwonacl-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-iwonacl-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-iwonacm-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-iwonacm-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-iwonacm-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-iwonacm-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-iwonacm-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-iwonacm-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-iwonacm-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-iwonacm-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-iwonacm-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-iwonacm-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-iwonacm-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-medium.tex b/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-medium.tex
new file mode 100644
index 0000000000..1c6e08ad64
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed-medium.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-iwonacm at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-iwonacm at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-iwonacm at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-iwonacm at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-iwonacm at12pt \fzzozznzzt}%
+\font\tenrm= rm-iwonacm
+\def\ninerm{\font\fzzozznzzt= rm-iwonacm at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-iwonacm at8pt \fzzozznzzt}%
+\font\sevenrm= rm-iwonacm at7pt
+\def\sixrm{\font\fzzozznzzt= rm-iwonacm at6pt \fzzozznzzt}%
+\font\fiverm= rm-iwonacm at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-iwonacmi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-iwonacmi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-iwonacmi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-iwonacmi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-iwonacmi at12pt \fzzozznzzt}%
+\font\teni= mi-iwonacmi
+\def\ninei{\font\fzzozznzzt= mi-iwonacmi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-iwonacmi at8pt \fzzozznzzt}%
+\font\seveni= mi-iwonacmi at7pt
+\def\sixi{\font\fzzozznzzt= mi-iwonacmi at6pt \fzzozznzzt}%
+\font\fivei= mi-iwonacmi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-iwonacmz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-iwonacmz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-iwonacmz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-iwonacmz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-iwonacmz at12pt \fzzozznzzt}%
+\font\tensy= sy-iwonacmz
+\def\ninesy{\font\fzzozznzzt= sy-iwonacmz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-iwonacmz at8pt \fzzozznzzt}%
+\font\sevensy= sy-iwonacmz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-iwonacmz at6pt \fzzozznzzt}%
+\font\fivesy= sy-iwonacmz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-iwonacm at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-iwonacm at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-iwonacm at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-iwonacm at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-iwonacm at12pt \fzzozznzzt}%
+\font\tenex= ex-iwonacm
+\def\nineex{\font\fzzozznzzt= ex-iwonacm at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-iwonacm at8pt \fzzozznzzt}%
+\font\sevenex= ex-iwonacm at7pt
+\def\sixex{\font\fzzozznzzt= ex-iwonacm at6pt \fzzozznzzt}%
+\font\fiveex= ex-iwonacm at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-iwonacmi at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-iwonacmi at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-iwonacmi at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-iwonacmi at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-iwonacmi at12pt \fzzozznzzt}%
+\font\tenit= rm-iwonacmi
+\def\nineit{\font\fzzozznzzt= rm-iwonacmi at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-iwonacmi at8pt \fzzozznzzt}%
+\font\sevenit= rm-iwonacmi at7pt
+\def\sixit{\font\fzzozznzzt= rm-iwonacmi at6pt \fzzozznzzt}%
+\font\fiveit= rm-iwonacmi at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-iwonacmi at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-iwonacmi at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-iwonacmi at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-iwonacmi at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-iwonacmi at12pt \fzzozznzzt}%
+\font\tensl= rm-iwonacmi %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-iwonacmi at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-iwonacmi at8pt \fzzozznzzt}%
+\font\sevensl= rm-iwonacmi at7pt
+\def\sixsl{\font\fzzozznzzt= rm-iwonacmi at6pt \fzzozznzzt}%
+\font\fivesl= rm-iwonacmi at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-iwonach at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-iwonach at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-iwonach at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-iwonach at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-iwonach at12pt \fzzozznzzt}%
+\font\tenbf= rm-iwonach
+\def\ninebf{\font\fzzozznzzt= rm-iwonach at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-iwonach at8pt \fzzozznzzt}%
+\font\sevenbf= rm-iwonach at7pt
+\def\sixbf{\font\fzzozznzzt= rm-iwonach at6pt \fzzozznzzt}%
+\font\fivebf= rm-iwonach at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-iwonachi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-iwonachi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-iwonachi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-iwonachi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-iwonachi at12pt \fzzozznzzt}%
+\font\itbf= rm-iwonachi
+\def\nineitbf{\font\fzzozznzzt= rm-iwonachi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-iwonachi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-iwonachi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-iwonachi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-iwonachi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-iwonachi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-iwonachi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-iwonachi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-iwonachi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-iwonachi at12pt \fzzozznzzt}%
+\font\slbf= rm-iwonachi
+\def\nineslbf{\font\fzzozznzzt= rm-iwonachi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-iwonachi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-iwonachi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-iwonachi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-iwonachi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-iwonacm-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-iwonacm-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-iwonacm-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-iwonacm-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-iwonacm-sc at12pt \fzzozznzzt}%
+\font\caps= rm-iwonacm-sc
+\def\ninecaps{\font\fzzozznzzt= rm-iwonacm-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-iwonacm-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-iwonacm-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-iwonacm-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-iwonacm-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-iwonach-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-iwonach-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-iwonach-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-iwonach-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-iwonach-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-iwonach-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-iwonach-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-iwonach-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-iwonach-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-iwonach-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-iwonach-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed.tex b/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed.tex
new file mode 100644
index 0000000000..d1814fe0af
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_iwona-condensed.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% The "antt" family has other versions like "condensed", "light", etc. Stick to rm-???????
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-iwonacr at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-iwonacr at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-iwonacr at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-iwonacr at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-iwonacr at12pt \fzzozznzzt}%
+\font\tenrm= rm-iwonacr
+\def\ninerm{\font\fzzozznzzt= rm-iwonacr at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-iwonacr at8pt \fzzozznzzt}%
+\font\sevenrm= rm-iwonacr at7pt
+\def\sixrm{\font\fzzozznzzt= rm-iwonacr at6pt \fzzozznzzt}%
+\font\fiverm= rm-iwonacr at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-iwonacri at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-iwonacri at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-iwonacri at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-iwonacri at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-iwonacri at12pt \fzzozznzzt}%
+\font\teni= mi-iwonacri
+\def\ninei{\font\fzzozznzzt= mi-iwonacri at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-iwonacri at8pt \fzzozznzzt}%
+\font\seveni= mi-iwonacri at7pt
+\def\sixi{\font\fzzozznzzt= mi-iwonacri at6pt \fzzozznzzt}%
+\font\fivei= mi-iwonacri at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-iwonacrz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-iwonacrz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-iwonacrz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-iwonacrz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-iwonacrz at12pt \fzzozznzzt}%
+\font\tensy= sy-iwonacrz
+\def\ninesy{\font\fzzozznzzt= sy-iwonacrz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-iwonacrz at8pt \fzzozznzzt}%
+\font\sevensy= sy-iwonacrz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-iwonacrz at6pt \fzzozznzzt}%
+\font\fivesy= sy-iwonacrz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-iwonacr at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-iwonacr at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-iwonacr at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-iwonacr at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-iwonacr at12pt \fzzozznzzt}%
+\font\tenex= ex-iwonacr
+\def\nineex{\font\fzzozznzzt= ex-iwonacr at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-iwonacr at8pt \fzzozznzzt}%
+\font\sevenex= ex-iwonacr at7pt
+\def\sixex{\font\fzzozznzzt= ex-iwonacr at6pt \fzzozznzzt}%
+\font\fiveex= ex-iwonacr at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-iwonacri at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-iwonacri at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-iwonacri at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-iwonacri at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-iwonacri at12pt \fzzozznzzt}%
+\font\tenit= rm-iwonacri
+\def\nineit{\font\fzzozznzzt= rm-iwonacri at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-iwonacri at8pt \fzzozznzzt}%
+\font\sevenit= rm-iwonacri at7pt
+\def\sixit{\font\fzzozznzzt= rm-iwonacri at6pt \fzzozznzzt}%
+\font\fiveit= rm-iwonacri at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-iwonacri at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-iwonacri at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-iwonacri at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-iwonacri at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-iwonacri at12pt \fzzozznzzt}%
+\font\tensl= rm-iwonacri %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-iwonacri at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-iwonacri at8pt \fzzozznzzt}%
+\font\sevensl= rm-iwonacri at7pt
+\def\sixsl{\font\fzzozznzzt= rm-iwonacri at6pt \fzzozznzzt}%
+\font\fivesl= rm-iwonacri at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-iwonacb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-iwonacb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-iwonacb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-iwonacb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-iwonacb at12pt \fzzozznzzt}%
+\font\tenbf= rm-iwonacb
+\def\ninebf{\font\fzzozznzzt= rm-iwonacb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-iwonacb at8pt \fzzozznzzt}%
+\font\sevenbf= rm-iwonacb at7pt
+\def\sixbf{\font\fzzozznzzt= rm-iwonacb at6pt \fzzozznzzt}%
+\font\fivebf= rm-iwonacb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-iwonacbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-iwonacbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-iwonacbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-iwonacbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-iwonacbi at12pt \fzzozznzzt}%
+\font\itbf= rm-iwonacbi
+\def\nineitbf{\font\fzzozznzzt= rm-iwonacbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-iwonacbi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-iwonacbi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-iwonacbi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-iwonacbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-iwonacbi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-iwonacbi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-iwonacbi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-iwonacbi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-iwonacbi at12pt \fzzozznzzt}%
+\font\slbf= rm-iwonacbi
+\def\nineslbf{\font\fzzozznzzt= rm-iwonacbi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-iwonacbi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-iwonacbi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-iwonacbi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-iwonacbi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-iwonacr-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-iwonacr-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-iwonacr-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-iwonacr-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-iwonacr-sc at12pt \fzzozznzzt}%
+\font\caps= rm-iwonacr-sc
+\def\ninecaps{\font\fzzozznzzt= rm-iwonacr-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-iwonacr-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-iwonacr-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-iwonacr-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-iwonacr-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-iwonacb-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-iwonacb-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-iwonacb-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-iwonacb-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-iwonacb-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-iwonacb-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-iwonacb-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-iwonacb-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-iwonacb-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-iwonacb-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-iwonacb-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_iwona-light.tex b/macros/plain/contrib/font-change/tex/macros/font_iwona-light.tex
new file mode 100644
index 0000000000..7f16284cb8
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_iwona-light.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-iwonal at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-iwonal at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-iwonal at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-iwonal at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-iwonal at12pt \fzzozznzzt}%
+\font\tenrm= rm-iwonal
+\def\ninerm{\font\fzzozznzzt= rm-iwonal at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-iwonal at8pt \fzzozznzzt}%
+\font\sevenrm= rm-iwonal at7pt
+\def\sixrm{\font\fzzozznzzt= rm-iwonal at6pt \fzzozznzzt}%
+\font\fiverm= rm-iwonal at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-iwonali at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-iwonali at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-iwonali at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-iwonali at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-iwonali at12pt \fzzozznzzt}%
+\font\teni= mi-iwonali
+\def\ninei{\font\fzzozznzzt= mi-iwonali at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-iwonali at8pt \fzzozznzzt}%
+\font\seveni= mi-iwonali at7pt
+\def\sixi{\font\fzzozznzzt= mi-iwonali at6pt \fzzozznzzt}%
+\font\fivei= mi-iwonali at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-iwonalz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-iwonalz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-iwonalz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-iwonalz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-iwonalz at12pt \fzzozznzzt}%
+\font\tensy= sy-iwonalz
+\def\ninesy{\font\fzzozznzzt= sy-iwonalz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-iwonalz at8pt \fzzozznzzt}%
+\font\sevensy= sy-iwonalz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-iwonalz at6pt \fzzozznzzt}%
+\font\fivesy= sy-iwonalz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-iwonal at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-iwonal at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-iwonal at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-iwonal at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-iwonal at12pt \fzzozznzzt}%
+\font\tenex= ex-iwonal
+\def\nineex{\font\fzzozznzzt= ex-iwonal at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-iwonal at8pt \fzzozznzzt}%
+\font\sevenex= ex-iwonal at7pt
+\def\sixex{\font\fzzozznzzt= ex-iwonal at6pt \fzzozznzzt}%
+\font\fiveex= ex-iwonal at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-iwonali at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-iwonali at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-iwonali at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-iwonali at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-iwonali at12pt \fzzozznzzt}%
+\font\tenit= rm-iwonali
+\def\nineit{\font\fzzozznzzt= rm-iwonali at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-iwonali at8pt \fzzozznzzt}%
+\font\sevenit= rm-iwonali at7pt
+\def\sixit{\font\fzzozznzzt= rm-iwonali at6pt \fzzozznzzt}%
+\font\fiveit= rm-iwonali at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-iwonali at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-iwonali at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-iwonali at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-iwonali at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-iwonali at12pt \fzzozznzzt}%
+\font\tensl= rm-iwonali %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-iwonali at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-iwonali at8pt \fzzozznzzt}%
+\font\sevensl= rm-iwonali at7pt
+\def\sixsl{\font\fzzozznzzt= rm-iwonali at6pt \fzzozznzzt}%
+\font\fivesl= rm-iwonali at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-iwonam at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-iwonam at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-iwonam at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-iwonam at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-iwonam at12pt \fzzozznzzt}%
+\font\tenbf= rm-iwonam
+\def\ninebf{\font\fzzozznzzt= rm-iwonam at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-iwonam at8pt \fzzozznzzt}%
+\font\sevenbf= rm-iwonam at7pt
+\def\sixbf{\font\fzzozznzzt= rm-iwonam at6pt \fzzozznzzt}%
+\font\fivebf= rm-iwonam at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-iwonami at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-iwonami at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-iwonami at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-iwonami at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-iwonami at12pt \fzzozznzzt}%
+\font\itbf= rm-iwonami
+\def\nineitbf{\font\fzzozznzzt= rm-iwonami at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-iwonami at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-iwonami at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-iwonami at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-iwonami at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-iwonami at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-iwonami at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-iwonami at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-iwonami at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-iwonami at12pt \fzzozznzzt}%
+\font\slbf= rm-iwonami
+\def\nineslbf{\font\fzzozznzzt= rm-iwonami at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-iwonami at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-iwonami at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-iwonami at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-iwonami at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-iwonal-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-iwonal-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-iwonal-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-iwonal-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-iwonal-sc at12pt \fzzozznzzt}%
+\font\caps= rm-iwonal-sc
+\def\ninecaps{\font\fzzozznzzt= rm-iwonal-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-iwonal-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-iwonal-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-iwonal-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-iwonal-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-iwonam-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-iwonam-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-iwonam-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-iwonam-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-iwonam-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-iwonam-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-iwonam-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-iwonam-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-iwonam-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-iwonam-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-iwonam-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_iwona-medium.tex b/macros/plain/contrib/font-change/tex/macros/font_iwona-medium.tex
new file mode 100644
index 0000000000..ccab6502ef
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_iwona-medium.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-iwonam at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-iwonam at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-iwonam at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-iwonam at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-iwonam at12pt \fzzozznzzt}%
+\font\tenrm= rm-iwonam
+\def\ninerm{\font\fzzozznzzt= rm-iwonam at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-iwonam at8pt \fzzozznzzt}%
+\font\sevenrm= rm-iwonam at7pt
+\def\sixrm{\font\fzzozznzzt= rm-iwonam at6pt \fzzozznzzt}%
+\font\fiverm= rm-iwonam at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-iwonami at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-iwonami at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-iwonami at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-iwonami at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-iwonami at12pt \fzzozznzzt}%
+\font\teni= mi-iwonami
+\def\ninei{\font\fzzozznzzt= mi-iwonami at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-iwonami at8pt \fzzozznzzt}%
+\font\seveni= mi-iwonami at7pt
+\def\sixi{\font\fzzozznzzt= mi-iwonami at6pt \fzzozznzzt}%
+\font\fivei= mi-iwonami at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-iwonamz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-iwonamz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-iwonamz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-iwonamz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-iwonamz at12pt \fzzozznzzt}%
+\font\tensy= sy-iwonamz
+\def\ninesy{\font\fzzozznzzt= sy-iwonamz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-iwonamz at8pt \fzzozznzzt}%
+\font\sevensy= sy-iwonamz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-iwonamz at6pt \fzzozznzzt}%
+\font\fivesy= sy-iwonamz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-iwonam at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-iwonam at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-iwonam at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-iwonam at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-iwonam at12pt \fzzozznzzt}%
+\font\tenex= ex-iwonam
+\def\nineex{\font\fzzozznzzt= ex-iwonam at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-iwonam at8pt \fzzozznzzt}%
+\font\sevenex= ex-iwonam at7pt
+\def\sixex{\font\fzzozznzzt= ex-iwonam at6pt \fzzozznzzt}%
+\font\fiveex= ex-iwonam at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-iwonami at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-iwonami at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-iwonami at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-iwonami at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-iwonami at12pt \fzzozznzzt}%
+\font\tenit= rm-iwonami
+\def\nineit{\font\fzzozznzzt= rm-iwonami at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-iwonami at8pt \fzzozznzzt}%
+\font\sevenit= rm-iwonami at7pt
+\def\sixit{\font\fzzozznzzt= rm-iwonami at6pt \fzzozznzzt}%
+\font\fiveit= rm-iwonami at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-iwonami at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-iwonami at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-iwonami at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-iwonami at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-iwonami at12pt \fzzozznzzt}%
+\font\tensl= rm-iwonami %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-iwonami at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-iwonami at8pt \fzzozznzzt}%
+\font\sevensl= rm-iwonami at7pt
+\def\sixsl{\font\fzzozznzzt= rm-iwonami at6pt \fzzozznzzt}%
+\font\fivesl= rm-iwonami at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-iwonah at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-iwonah at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-iwonah at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-iwonah at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-iwonah at12pt \fzzozznzzt}%
+\font\tenbf= rm-iwonah
+\def\ninebf{\font\fzzozznzzt= rm-iwonah at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-iwonah at8pt \fzzozznzzt}%
+\font\sevenbf= rm-iwonah at7pt
+\def\sixbf{\font\fzzozznzzt= rm-iwonah at6pt \fzzozznzzt}%
+\font\fivebf= rm-iwonah at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-iwonahi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-iwonahi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-iwonahi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-iwonahi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-iwonahi at12pt \fzzozznzzt}%
+\font\itbf= rm-iwonahi
+\def\nineitbf{\font\fzzozznzzt= rm-iwonahi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-iwonahi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-iwonahi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-iwonahi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-iwonahi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-iwonahi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-iwonahi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-iwonahi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-iwonahi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-iwonahi at12pt \fzzozznzzt}%
+\font\slbf= rm-iwonahi
+\def\nineslbf{\font\fzzozznzzt= rm-iwonahi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-iwonahi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-iwonahi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-iwonahi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-iwonahi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-iwonam-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-iwonam-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-iwonam-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-iwonam-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-iwonam-sc at12pt \fzzozznzzt}%
+\font\caps= rm-iwonam-sc
+\def\ninecaps{\font\fzzozznzzt= rm-iwonam-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-iwonam-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-iwonam-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-iwonam-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-iwonam-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-iwonah-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-iwonah-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-iwonah-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-iwonah-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-iwonah-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-iwonah-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-iwonah-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-iwonah-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-iwonah-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-iwonah-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-iwonah-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_iwona.tex b/macros/plain/contrib/font-change/tex/macros/font_iwona.tex
new file mode 100644
index 0000000000..0d279eeba7
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_iwona.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% The "antt" family has other versions like "condensed", "light", etc. Stick to rm-???????
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-iwonar at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-iwonar at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-iwonar at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-iwonar at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-iwonar at12pt \fzzozznzzt}%
+\font\tenrm= rm-iwonar
+\def\ninerm{\font\fzzozznzzt= rm-iwonar at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-iwonar at8pt \fzzozznzzt}%
+\font\sevenrm= rm-iwonar at7pt
+\def\sixrm{\font\fzzozznzzt= rm-iwonar at6pt \fzzozznzzt}%
+\font\fiverm= rm-iwonar at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-iwonari at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-iwonari at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-iwonari at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-iwonari at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-iwonari at12pt \fzzozznzzt}%
+\font\teni= mi-iwonari
+\def\ninei{\font\fzzozznzzt= mi-iwonari at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-iwonari at8pt \fzzozznzzt}%
+\font\seveni= mi-iwonari at7pt
+\def\sixi{\font\fzzozznzzt= mi-iwonari at6pt \fzzozznzzt}%
+\font\fivei= mi-iwonari at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-iwonarz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-iwonarz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-iwonarz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-iwonarz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-iwonarz at12pt \fzzozznzzt}%
+\font\tensy= sy-iwonarz
+\def\ninesy{\font\fzzozznzzt= sy-iwonarz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-iwonarz at8pt \fzzozznzzt}%
+\font\sevensy= sy-iwonarz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-iwonarz at6pt \fzzozznzzt}%
+\font\fivesy= sy-iwonarz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-iwonar at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-iwonar at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-iwonar at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-iwonar at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-iwonar at12pt \fzzozznzzt}%
+\font\tenex= ex-iwonar
+\def\nineex{\font\fzzozznzzt= ex-iwonar at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-iwonar at8pt \fzzozznzzt}%
+\font\sevenex= ex-iwonar at7pt
+\def\sixex{\font\fzzozznzzt= ex-iwonar at6pt \fzzozznzzt}%
+\font\fiveex= ex-iwonar at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-iwonari at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-iwonari at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-iwonari at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-iwonari at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-iwonari at12pt \fzzozznzzt}%
+\font\tenit= rm-iwonari
+\def\nineit{\font\fzzozznzzt= rm-iwonari at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-iwonari at8pt \fzzozznzzt}%
+\font\sevenit= rm-iwonari at7pt
+\def\sixit{\font\fzzozznzzt= rm-iwonari at6pt \fzzozznzzt}%
+\font\fiveit= rm-iwonari at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-iwonari at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-iwonari at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-iwonari at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-iwonari at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-iwonari at12pt \fzzozznzzt}%
+\font\tensl= rm-iwonari %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-iwonari at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-iwonari at8pt \fzzozznzzt}%
+\font\sevensl= rm-iwonari at7pt
+\def\sixsl{\font\fzzozznzzt= rm-iwonari at6pt \fzzozznzzt}%
+\font\fivesl= rm-iwonari at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-iwonab at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-iwonab at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-iwonab at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-iwonab at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-iwonab at12pt \fzzozznzzt}%
+\font\tenbf= rm-iwonab
+\def\ninebf{\font\fzzozznzzt= rm-iwonab at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-iwonab at8pt \fzzozznzzt}%
+\font\sevenbf= rm-iwonab at7pt
+\def\sixbf{\font\fzzozznzzt= rm-iwonab at6pt \fzzozznzzt}%
+\font\fivebf= rm-iwonab at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-iwonabi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-iwonabi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-iwonabi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-iwonabi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-iwonabi at12pt \fzzozznzzt}%
+\font\itbf= rm-iwonabi
+\def\nineitbf{\font\fzzozznzzt= rm-iwonabi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-iwonabi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-iwonabi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-iwonabi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-iwonabi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-iwonabi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-iwonabi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-iwonabi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-iwonabi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-iwonabi at12pt \fzzozznzzt}%
+\font\slbf= rm-iwonabi
+\def\nineslbf{\font\fzzozznzzt= rm-iwonabi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-iwonabi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-iwonabi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-iwonabi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-iwonabi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-iwonar-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-iwonar-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-iwonar-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-iwonar-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-iwonar-sc at12pt \fzzozznzzt}%
+\font\caps= rm-iwonar-sc
+\def\ninecaps{\font\fzzozznzzt= rm-iwonar-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-iwonar-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-iwonar-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-iwonar-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-iwonar-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-iwonab-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-iwonab-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-iwonab-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-iwonab-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-iwonab-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-iwonab-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-iwonab-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-iwonab-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-iwonab-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-iwonab-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-iwonab-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_kp-light.tex b/macros/plain/contrib/font-change/tex/macros/font_kp-light.tex
new file mode 100644
index 0000000000..7fc5633f5a
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_kp-light.tex
@@ -0,0 +1,217 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=jkplmn7t at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=jkplmn7t at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= jkplmn7t at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=jkplmn7t at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= jkplmn7t at12pt \fzzozznzzt}%
+\font\tenrm= jkplmn7t
+\def\ninerm{\font\fzzozznzzt= jkplmn7t at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= jkplmn7t at8pt \fzzozznzzt}%
+\font\sevenrm= jkplmn7t at7pt
+\def\sixrm{\font\fzzozznzzt= jkplmn7t at6pt \fzzozznzzt}%
+\font\fiverm= jkplmn7t at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= jkplmi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= jkplmi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= jkplmi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= jkplmi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= jkplmi at12pt \fzzozznzzt}%
+\font\teni= jkplmi
+\def\ninei{\font\fzzozznzzt= jkplmi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= jkplmi at8pt \fzzozznzzt}%
+\font\seveni= jkplmi at7pt
+\def\sixi{\font\fzzozznzzt= jkplmi at6pt \fzzozznzzt}%
+\font\fivei= jkplmi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= jkplsy at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=jkplsy at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= jkplsy at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=jkplsy at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= jkplsy at12pt \fzzozznzzt}%
+\font\tensy= jkplsy
+\def\ninesy{\font\fzzozznzzt= jkplsy at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= jkplsy at8pt \fzzozznzzt}%
+\font\sevensy= jkplsy at7pt
+\def\sixsy{\font\fzzozznzzt= jkplsy at6pt \fzzozznzzt}%
+\font\fivesy= jkplsy at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= jkplex at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=jkplex at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= jkplex at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=jkplex at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= jkplex at12pt \fzzozznzzt}%
+\font\tenex= jkplex
+\def\nineex{\font\fzzozznzzt= jkplex at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= jkplex at8pt \fzzozznzzt}%
+\font\sevenex= jkplex at7pt
+\def\sixex{\font\fzzozznzzt= jkplex at6pt \fzzozznzzt}%
+\font\fiveex= jkplex at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= jkplmit7t at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=jkplmit7t at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= jkplmit7t at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= jkplmit7t at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= jkplmit7t at12pt \fzzozznzzt}%
+\font\tenit= jkplmit7t
+\def\nineit{\font\fzzozznzzt= jkplmit7t at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= jkplmit7t at8pt \fzzozznzzt}%
+\font\sevenit= jkplmit7t at7pt
+\def\sixit{\font\fzzozznzzt= jkplmit7t at6pt \fzzozznzzt}%
+\font\fiveit= jkplmit7t at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= jkplmsl7t at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=jkplmsl7t at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= jkplmsl7t at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= jkplmsl7t at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= jkplmsl7t at12pt \fzzozznzzt}%
+\font\tensl= jkplmsl7t
+\def\ninesl{\font\fzzozznzzt= jkplmsl7t at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= jkplmsl7t at8pt \fzzozznzzt}%
+\font\sevensl= jkplmsl7t at7pt
+\def\sixsl{\font\fzzozznzzt= jkplmsl7t at6pt \fzzozznzzt}%
+\font\fivesl= jkplmsl7t at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= jkplbn7t at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= jkplbn7t at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= jkplbn7t at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= jkplbn7t at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= jkplbn7t at12pt \fzzozznzzt}%
+\font\tenbf= jkplbn7t
+\def\ninebf{\font\fzzozznzzt= jkplbn7t at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= jkplbn7t at8pt \fzzozznzzt}%
+\font\sevenbf= jkplbn7t at7pt
+\def\sixbf{\font\fzzozznzzt= jkplbn7t at6pt \fzzozznzzt}%
+\font\fivebf= jkplbn7t at5pt
+%
+% typewriter text (Family 7)
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= jkpttmn7t at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= jkpttmn7t at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= jkpttmn7t at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=jkpttmn7t at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= jkpttmn7t at12pt \fzzozznzzt}%
+\font\tentt= jkpttmn7t
+\def\ninett{\font\fzzozznzzt= jkpttmn7t at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= jkpttmn7t at8pt \fzzozznzzt}%
+\font\seventt= jkpttmn7t at7pt
+\def\sixtt{\font\fzzozznzzt= jkpttmn7t at6pt \fzzozznzzt}%
+\font\fivett= jkpttmn7t at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit \spaceskip0.533em plus0.1em minus0.1em}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= jkplbit7t at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= jkplbit7t at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= jkplbit7t at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= jkplbit7t at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= jkplbit7t at12pt \fzzozznzzt}%
+\font\itbf= jkplbit7t
+\def\nineitbf{\font\fzzozznzzt= jkplbit7t at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= jkplbit7t at8pt \fzzozznzzt}%
+\font\sevenitbf= jkplbit7t at7pt
+\def\sixitbf{\font\fzzozznzzt= jkplbit7t at6pt \fzzozznzzt}%
+\font\fiveitbf= jkplbit7t at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= jkplbsl7t at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= jkplbsl7t at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= jkplbsl7t at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= jkplbsl7t at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= jkplbsl7t at12pt \fzzozznzzt}%
+\font\slbf= jkplbsl7t
+\def\nineslbf{\font\fzzozznzzt= jkplbsl7t at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= jkplbsl7t at8pt \fzzozznzzt}%
+\font\sevenslbf= jkplbsl7t at7pt
+\def\sixslbf{\font\fzzozznzzt= jkplbsl7t at6pt \fzzozznzzt}%
+\font\fiveslbf= jkplbsl7t at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= jkplmsc7t at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= jkplmsc7t at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= jkplmsc7t at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= jkplmsc7t at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= jkplmsc7t at12pt \fzzozznzzt}%
+\font\caps= jkplmsc7t
+\def\ninecaps{\font\fzzozznzzt= jkplmsc7t at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= jkplmsc7t at8pt \fzzozznzzt}%
+\font\sevencaps= jkplmsc7t at7pt
+\def\sixcaps{\font\fzzozznzzt= jkplmsc7t at6pt \fzzozznzzt}%
+\font\fivecaps= jkplmsc7t at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= jkplbsc7t at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= jkplbsc7t at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= jkplbsc7t at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= jkplbsc7t at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= jkplbsc7t at12pt \fzzozznzzt}%
+\font\capsbf= jkplbsc7t
+\def\ninecapsbf{\font\fzzozznzzt= jkplbsc7t at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= jkplbsc7t at8pt \fzzozznzzt}%
+\font\sevencapsbf= jkplbsc7t at7pt
+\def\sixcapsbf{\font\fzzozznzzt= jkplbsc7t at6pt \fzzozznzzt}%
+\font\fivecapsbf= jkplbsc7t at5pt
+%
+% AMS Symbols
+\def\loadmsam{\font\tenmsa=jkpsya \font\sevenmsa=jkpsya at7pt \font\fivemsa=jkpsya at5pt \fam\msafam \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\def\loadmsbm{\font\tenmsb=jkplsyb \font\sevenmsb=jkplsyb at7pt \font\fivemsb=jkplsyb at5pt \fam\msbfam \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\def\UseAMSsymbols{\loadmsam\loadmsbm}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_kp.tex b/macros/plain/contrib/font-change/tex/macros/font_kp.tex
new file mode 100644
index 0000000000..4c9447d7c6
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_kp.tex
@@ -0,0 +1,216 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=jkpmn7t at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=jkpmn7t at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= jkpmn7t at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=jkpmn7t at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= jkpmn7t at12pt \fzzozznzzt}%
+\font\tenrm= jkpmn7t
+\def\ninerm{\font\fzzozznzzt= jkpmn7t at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= jkpmn7t at8pt \fzzozznzzt}%
+\font\sevenrm= jkpmn7t at7pt
+\def\sixrm{\font\fzzozznzzt= jkpmn7t at6pt \fzzozznzzt}%
+\font\fiverm= jkpmn7t at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= jkpmi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= jkpmi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= jkpmi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= jkpmi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= jkpmi at12pt \fzzozznzzt}%
+\font\teni= jkpmi
+\def\ninei{\font\fzzozznzzt= jkpmi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= jkpmi at8pt \fzzozznzzt}%
+\font\seveni= jkpmi at7pt
+\def\sixi{\font\fzzozznzzt= jkpmi at6pt \fzzozznzzt}%
+\font\fivei= jkpmi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= jkpsy at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=jkpsy at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= jkpsy at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=jkpsy at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= jkpsy at12pt \fzzozznzzt}%
+\font\tensy= jkpsy
+\def\ninesy{\font\fzzozznzzt= jkpsy at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= jkpsy at8pt \fzzozznzzt}%
+\font\sevensy= jkpsy at7pt
+\def\sixsy{\font\fzzozznzzt= jkpsy at6pt \fzzozznzzt}%
+\font\fivesy= jkpsy at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= jkpex at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=jkpex at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= jkpex at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=jkpex at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= jkpex at12pt \fzzozznzzt}%
+\font\tenex= jkpex
+\def\nineex{\font\fzzozznzzt= jkpex at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= jkpex at8pt \fzzozznzzt}%
+\font\sevenex= jkpex at7pt
+\def\sixex{\font\fzzozznzzt= jkpex at6pt \fzzozznzzt}%
+\font\fiveex= jkpex at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= jkpmit7t at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=jkpmit7t at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= jkpmit7t at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= jkpmit7t at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= jkpmit7t at12pt \fzzozznzzt}%
+\font\tenit= jkpmit7t
+\def\nineit{\font\fzzozznzzt= jkpmit7t at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= jkpmit7t at8pt \fzzozznzzt}%
+\font\sevenit= jkpmit7t at7pt
+\def\sixit{\font\fzzozznzzt= jkpmit7t at6pt \fzzozznzzt}%
+\font\fiveit= jkpmit7t at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= jkpmsl7t at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=jkpmsl7t at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= jkpmsl7t at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= jkpmsl7t at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= jkpmsl7t at12pt \fzzozznzzt}%
+\font\tensl= jkpmsl7t
+\def\ninesl{\font\fzzozznzzt= jkpmsl7t at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= jkpmsl7t at8pt \fzzozznzzt}%
+\font\sevensl= jkpmsl7t at7pt
+\def\sixsl{\font\fzzozznzzt= jkpmsl7t at6pt \fzzozznzzt}%
+\font\fivesl= jkpmsl7t at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= jkpbn7t at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= jkpbn7t at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= jkpbn7t at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= jkpbn7t at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= jkpbn7t at12pt \fzzozznzzt}%
+\font\tenbf= jkpbn7t
+\def\ninebf{\font\fzzozznzzt= jkpbn7t at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= jkpbn7t at8pt \fzzozznzzt}%
+\font\sevenbf= jkpbn7t at7pt
+\def\sixbf{\font\fzzozznzzt= jkpbn7t at6pt \fzzozznzzt}%
+\font\fivebf= jkpbn7t at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= jkpttmn7t at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= jkpttmn7t at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= jkpttmn7t at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=jkpttmn7t at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= jkpttmn7t at12pt \fzzozznzzt}%
+\font\tentt= jkpttmn7t
+\def\ninett{\font\fzzozznzzt= jkpttmn7t at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= jkpttmn7t at8pt \fzzozznzzt}%
+\font\seventt= jkpttmn7t at7pt
+\def\sixtt{\font\fzzozznzzt= jkpttmn7t at6pt \fzzozznzzt}%
+\font\fivett= jkpttmn7t at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt \spaceskip0.533em plus0.1em minus0.1em}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= jkpbit7t at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= jkpbit7t at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= jkpbit7t at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= jkpbit7t at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= jkpbit7t at12pt \fzzozznzzt}%
+\font\itbf= jkpbit7t
+\def\nineitbf{\font\fzzozznzzt= jkpbit7t at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= jkpbit7t at8pt \fzzozznzzt}%
+\font\sevenitbf= jkpbit7t at7pt
+\def\sixitbf{\font\fzzozznzzt= jkpbit7t at6pt \fzzozznzzt}%
+\font\fiveitbf= jkpbit7t at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= jkpbsl7t at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= jkpbsl7t at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= jkpbsl7t at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= jkpbsl7t at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= jkpbsl7t at12pt \fzzozznzzt}%
+\font\slbf= jkpbsl7t
+\def\nineslbf{\font\fzzozznzzt= jkpbsl7t at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= jkpbsl7t at8pt \fzzozznzzt}%
+\font\sevenslbf= jkpbsl7t at7pt
+\def\sixslbf{\font\fzzozznzzt= jkpbsl7t at6pt \fzzozznzzt}%
+\font\fiveslbf= jkpbsl7t at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= jkpmsc7t at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= jkpmsc7t at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= jkpmsc7t at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= jkpmsc7t at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= jkpmsc7t at12pt \fzzozznzzt}%
+\font\caps= jkpmsc7t
+\def\ninecaps{\font\fzzozznzzt= jkpmsc7t at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= jkpmsc7t at8pt \fzzozznzzt}%
+\font\sevencaps= jkpmsc7t at7pt
+\def\sixcaps{\font\fzzozznzzt= jkpmsc7t at6pt \fzzozznzzt}%
+\font\fivecaps= jkpmsc7t at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= jkpbsc7t at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= jkpbsc7t at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= jkpbsc7t at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= jkpbsc7t at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= jkpbsc7t at12pt \fzzozznzzt}%
+\font\capsbf= jkpbsc7t
+\def\ninecapsbf{\font\fzzozznzzt= jkpbsc7t at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= jkpbsc7t at8pt \fzzozznzzt}%
+\font\sevencapsbf= jkpbsc7t at7pt
+\def\sixcapsbf{\font\fzzozznzzt= jkpbsc7t at6pt \fzzozznzzt}%
+\font\fivecapsbf= jkpbsc7t at5pt
+%
+% AMS Symbols
+\def\loadmsam{\font\tenmsa=jkpsya \font\sevenmsa=jkpsya at7pt \font\fivemsa=jkpsya at5pt \fam\msafam \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\def\loadmsbm{\font\tenmsb=jkpsyb \font\sevenmsb=jkpsyb at7pt \font\fivemsb=jkpsyb at5pt \fam\msbfam \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\def\UseAMSsymbols{\loadmsam\loadmsbm}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_kurier-bold.tex b/macros/plain/contrib/font-change/tex/macros/font_kurier-bold.tex
new file mode 100644
index 0000000000..c1e4ff975d
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_kurier-bold.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-kurierb at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-kurierb at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-kurierb at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-kurierb at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-kurierb at12pt \fzzozznzzt}%
+\font\tenrm= rm-kurierb
+\def\ninerm{\font\fzzozznzzt= rm-kurierb at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-kurierb at8pt \fzzozznzzt}%
+\font\sevenrm= rm-kurierb at7pt
+\def\sixrm{\font\fzzozznzzt= rm-kurierb at6pt \fzzozznzzt}%
+\font\fiverm= rm-kurierb at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-kurierbi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-kurierbi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-kurierbi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-kurierbi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-kurierbi at12pt \fzzozznzzt}%
+\font\teni= mi-kurierbi
+\def\ninei{\font\fzzozznzzt= mi-kurierbi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-kurierbi at8pt \fzzozznzzt}%
+\font\seveni= mi-kurierbi at7pt
+\def\sixi{\font\fzzozznzzt= mi-kurierbi at6pt \fzzozznzzt}%
+\font\fivei= mi-kurierbi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-kurierbz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-kurierbz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-kurierbz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-kurierbz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-kurierbz at12pt \fzzozznzzt}%
+\font\tensy= sy-kurierbz
+\def\ninesy{\font\fzzozznzzt= sy-kurierbz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-kurierbz at8pt \fzzozznzzt}%
+\font\sevensy= sy-kurierbz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-kurierbz at6pt \fzzozznzzt}%
+\font\fivesy= sy-kurierbz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-kurierb at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-kurierb at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-kurierb at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-kurierb at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-kurierb at12pt \fzzozznzzt}%
+\font\tenex= ex-kurierb
+\def\nineex{\font\fzzozznzzt= ex-kurierb at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-kurierb at8pt \fzzozznzzt}%
+\font\sevenex= ex-kurierb at7pt
+\def\sixex{\font\fzzozznzzt= ex-kurierb at6pt \fzzozznzzt}%
+\font\fiveex= ex-kurierb at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-kurierbi at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-kurierbi at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-kurierbi at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-kurierbi at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-kurierbi at12pt \fzzozznzzt}%
+\font\tenit= rm-kurierbi
+\def\nineit{\font\fzzozznzzt= rm-kurierbi at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-kurierbi at8pt \fzzozznzzt}%
+\font\sevenit= rm-kurierbi at7pt
+\def\sixit{\font\fzzozznzzt= rm-kurierbi at6pt \fzzozznzzt}%
+\font\fiveit= rm-kurierbi at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-kurierbi at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-kurierbi at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-kurierbi at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-kurierbi at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-kurierbi at12pt \fzzozznzzt}%
+\font\tensl= rm-kurierbi %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-kurierbi at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-kurierbi at8pt \fzzozznzzt}%
+\font\sevensl= rm-kurierbi at7pt
+\def\sixsl{\font\fzzozznzzt= rm-kurierbi at6pt \fzzozznzzt}%
+\font\fivesl= rm-kurierbi at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-kurierh at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-kurierh at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-kurierh at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-kurierh at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-kurierh at12pt \fzzozznzzt}%
+\font\tenbf= rm-kurierh
+\def\ninebf{\font\fzzozznzzt= rm-kurierh at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-kurierh at8pt \fzzozznzzt}%
+\font\sevenbf= rm-kurierh at7pt
+\def\sixbf{\font\fzzozznzzt= rm-kurierh at6pt \fzzozznzzt}%
+\font\fivebf= rm-kurierh at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-kurierhi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-kurierhi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-kurierhi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-kurierhi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-kurierhi at12pt \fzzozznzzt}%
+\font\itbf= rm-kurierhi
+\def\nineitbf{\font\fzzozznzzt= rm-kurierhi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-kurierhi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-kurierhi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-kurierhi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-kurierhi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-kurierhi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-kurierhi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-kurierhi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-kurierhi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-kurierhi at12pt \fzzozznzzt}%
+\font\slbf= rm-kurierhi
+\def\nineslbf{\font\fzzozznzzt= rm-kurierhi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-kurierhi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-kurierhi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-kurierhi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-kurierhi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-kurierb-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-kurierb-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-kurierb-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-kurierb-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-kurierb-sc at12pt \fzzozznzzt}%
+\font\caps= rm-kurierb-sc
+\def\ninecaps{\font\fzzozznzzt= rm-kurierb-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-kurierb-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-kurierb-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-kurierb-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-kurierb-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-kurierh-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-kurierh-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-kurierh-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-kurierh-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-kurierh-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-kurierh-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-kurierh-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-kurierh-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-kurierh-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-kurierh-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-kurierh-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-bold.tex b/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-bold.tex
new file mode 100644
index 0000000000..30c7118be4
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-bold.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-kuriercb at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-kuriercb at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-kuriercb at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-kuriercb at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-kuriercb at12pt \fzzozznzzt}%
+\font\tenrm= rm-kuriercb
+\def\ninerm{\font\fzzozznzzt= rm-kuriercb at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-kuriercb at8pt \fzzozznzzt}%
+\font\sevenrm= rm-kuriercb at7pt
+\def\sixrm{\font\fzzozznzzt= rm-kuriercb at6pt \fzzozznzzt}%
+\font\fiverm= rm-kuriercb at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-kuriercbi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-kuriercbi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-kuriercbi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-kuriercbi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-kuriercbi at12pt \fzzozznzzt}%
+\font\teni= mi-kuriercbi
+\def\ninei{\font\fzzozznzzt= mi-kuriercbi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-kuriercbi at8pt \fzzozznzzt}%
+\font\seveni= mi-kuriercbi at7pt
+\def\sixi{\font\fzzozznzzt= mi-kuriercbi at6pt \fzzozznzzt}%
+\font\fivei= mi-kuriercbi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-kuriercbz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-kuriercbz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-kuriercbz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-kuriercbz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-kuriercbz at12pt \fzzozznzzt}%
+\font\tensy= sy-kuriercbz
+\def\ninesy{\font\fzzozznzzt= sy-kuriercbz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-kuriercbz at8pt \fzzozznzzt}%
+\font\sevensy= sy-kuriercbz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-kuriercbz at6pt \fzzozznzzt}%
+\font\fivesy= sy-kuriercbz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-kuriercb at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-kuriercb at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-kuriercb at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-kuriercb at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-kuriercb at12pt \fzzozznzzt}%
+\font\tenex= ex-kuriercb
+\def\nineex{\font\fzzozznzzt= ex-kuriercb at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-kuriercb at8pt \fzzozznzzt}%
+\font\sevenex= ex-kuriercb at7pt
+\def\sixex{\font\fzzozznzzt= ex-kuriercb at6pt \fzzozznzzt}%
+\font\fiveex= ex-kuriercb at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-kuriercbi at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-kuriercbi at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-kuriercbi at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-kuriercbi at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-kuriercbi at12pt \fzzozznzzt}%
+\font\tenit= rm-kuriercbi
+\def\nineit{\font\fzzozznzzt= rm-kuriercbi at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-kuriercbi at8pt \fzzozznzzt}%
+\font\sevenit= rm-kuriercbi at7pt
+\def\sixit{\font\fzzozznzzt= rm-kuriercbi at6pt \fzzozznzzt}%
+\font\fiveit= rm-kuriercbi at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-kuriercbi at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-kuriercbi at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-kuriercbi at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-kuriercbi at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-kuriercbi at12pt \fzzozznzzt}%
+\font\tensl= rm-kuriercbi %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-kuriercbi at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-kuriercbi at8pt \fzzozznzzt}%
+\font\sevensl= rm-kuriercbi at7pt
+\def\sixsl{\font\fzzozznzzt= rm-kuriercbi at6pt \fzzozznzzt}%
+\font\fivesl= rm-kuriercbi at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-kurierch at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-kurierch at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-kurierch at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-kurierch at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-kurierch at12pt \fzzozznzzt}%
+\font\tenbf= rm-kurierch
+\def\ninebf{\font\fzzozznzzt= rm-kurierch at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-kurierch at8pt \fzzozznzzt}%
+\font\sevenbf= rm-kurierch at7pt
+\def\sixbf{\font\fzzozznzzt= rm-kurierch at6pt \fzzozznzzt}%
+\font\fivebf= rm-kurierch at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-kurierchi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-kurierchi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-kurierchi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-kurierchi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-kurierchi at12pt \fzzozznzzt}%
+\font\itbf= rm-kurierchi
+\def\nineitbf{\font\fzzozznzzt= rm-kurierchi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-kurierchi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-kurierchi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-kurierchi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-kurierchi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-kurierchi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-kurierchi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-kurierchi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-kurierchi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-kurierchi at12pt \fzzozznzzt}%
+\font\slbf= rm-kurierchi
+\def\nineslbf{\font\fzzozznzzt= rm-kurierchi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-kurierchi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-kurierchi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-kurierchi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-kurierchi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-kuriercb-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-kuriercb-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-kuriercb-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-kuriercb-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-kuriercb-sc at12pt \fzzozznzzt}%
+\font\caps= rm-kuriercb-sc
+\def\ninecaps{\font\fzzozznzzt= rm-kuriercb-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-kuriercb-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-kuriercb-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-kuriercb-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-kuriercb-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-kurierch-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-kurierch-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-kurierch-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-kurierch-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-kurierch-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-kurierch-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-kurierch-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-kurierch-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-kurierch-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-kurierch-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-kurierch-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-light.tex b/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-light.tex
new file mode 100644
index 0000000000..37a42b8bfb
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-light.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-kuriercl at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-kuriercl at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-kuriercl at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-kuriercl at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-kuriercl at12pt \fzzozznzzt}%
+\font\tenrm= rm-kuriercl
+\def\ninerm{\font\fzzozznzzt= rm-kuriercl at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-kuriercl at8pt \fzzozznzzt}%
+\font\sevenrm= rm-kuriercl at7pt
+\def\sixrm{\font\fzzozznzzt= rm-kuriercl at6pt \fzzozznzzt}%
+\font\fiverm= rm-kuriercl at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-kuriercli at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-kuriercli at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-kuriercli at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-kuriercli at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-kuriercli at12pt \fzzozznzzt}%
+\font\teni= mi-kuriercli
+\def\ninei{\font\fzzozznzzt= mi-kuriercli at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-kuriercli at8pt \fzzozznzzt}%
+\font\seveni= mi-kuriercli at7pt
+\def\sixi{\font\fzzozznzzt= mi-kuriercli at6pt \fzzozznzzt}%
+\font\fivei= mi-kuriercli at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-kurierclz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-kurierclz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-kurierclz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-kurierclz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-kurierclz at12pt \fzzozznzzt}%
+\font\tensy= sy-kurierclz
+\def\ninesy{\font\fzzozznzzt= sy-kurierclz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-kurierclz at8pt \fzzozznzzt}%
+\font\sevensy= sy-kurierclz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-kurierclz at6pt \fzzozznzzt}%
+\font\fivesy= sy-kurierclz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-kuriercl at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-kuriercl at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-kuriercl at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-kuriercl at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-kuriercl at12pt \fzzozznzzt}%
+\font\tenex= ex-kuriercl
+\def\nineex{\font\fzzozznzzt= ex-kuriercl at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-kuriercl at8pt \fzzozznzzt}%
+\font\sevenex= ex-kuriercl at7pt
+\def\sixex{\font\fzzozznzzt= ex-kuriercl at6pt \fzzozznzzt}%
+\font\fiveex= ex-kuriercl at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-kuriercli at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-kuriercli at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-kuriercli at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-kuriercli at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-kuriercli at12pt \fzzozznzzt}%
+\font\tenit= rm-kuriercli
+\def\nineit{\font\fzzozznzzt= rm-kuriercli at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-kuriercli at8pt \fzzozznzzt}%
+\font\sevenit= rm-kuriercli at7pt
+\def\sixit{\font\fzzozznzzt= rm-kuriercli at6pt \fzzozznzzt}%
+\font\fiveit= rm-kuriercli at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-kuriercli at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-kuriercli at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-kuriercli at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-kuriercli at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-kuriercli at12pt \fzzozznzzt}%
+\font\tensl= rm-kuriercli %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-kuriercli at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-kuriercli at8pt \fzzozznzzt}%
+\font\sevensl= rm-kuriercli at7pt
+\def\sixsl{\font\fzzozznzzt= rm-kuriercli at6pt \fzzozznzzt}%
+\font\fivesl= rm-kuriercli at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-kuriercm at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-kuriercm at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-kuriercm at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-kuriercm at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-kuriercm at12pt \fzzozznzzt}%
+\font\tenbf= rm-kuriercm
+\def\ninebf{\font\fzzozznzzt= rm-kuriercm at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-kuriercm at8pt \fzzozznzzt}%
+\font\sevenbf= rm-kuriercm at7pt
+\def\sixbf{\font\fzzozznzzt= rm-kuriercm at6pt \fzzozznzzt}%
+\font\fivebf= rm-kuriercm at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-kuriercmi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-kuriercmi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-kuriercmi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-kuriercmi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-kuriercmi at12pt \fzzozznzzt}%
+\font\itbf= rm-kuriercmi
+\def\nineitbf{\font\fzzozznzzt= rm-kuriercmi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-kuriercmi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-kuriercmi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-kuriercmi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-kuriercmi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-kuriercmi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-kuriercmi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-kuriercmi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-kuriercmi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-kuriercmi at12pt \fzzozznzzt}%
+\font\slbf= rm-kuriercmi
+\def\nineslbf{\font\fzzozznzzt= rm-kuriercmi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-kuriercmi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-kuriercmi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-kuriercmi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-kuriercmi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-kuriercl-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-kuriercl-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-kuriercl-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-kuriercl-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-kuriercl-sc at12pt \fzzozznzzt}%
+\font\caps= rm-kuriercl-sc
+\def\ninecaps{\font\fzzozznzzt= rm-kuriercl-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-kuriercl-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-kuriercl-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-kuriercl-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-kuriercl-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-kuriercm-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-kuriercm-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-kuriercm-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-kuriercm-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-kuriercm-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-kuriercm-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-kuriercm-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-kuriercm-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-kuriercm-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-kuriercm-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-kuriercm-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-medium.tex b/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-medium.tex
new file mode 100644
index 0000000000..217784beac
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed-medium.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-kuriercm at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-kuriercm at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-kuriercm at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-kuriercm at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-kuriercm at12pt \fzzozznzzt}%
+\font\tenrm= rm-kuriercm
+\def\ninerm{\font\fzzozznzzt= rm-kuriercm at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-kuriercm at8pt \fzzozznzzt}%
+\font\sevenrm= rm-kuriercm at7pt
+\def\sixrm{\font\fzzozznzzt= rm-kuriercm at6pt \fzzozznzzt}%
+\font\fiverm= rm-kuriercm at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-kuriercmi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-kuriercmi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-kuriercmi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-kuriercmi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-kuriercmi at12pt \fzzozznzzt}%
+\font\teni= mi-kuriercmi
+\def\ninei{\font\fzzozznzzt= mi-kuriercmi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-kuriercmi at8pt \fzzozznzzt}%
+\font\seveni= mi-kuriercmi at7pt
+\def\sixi{\font\fzzozznzzt= mi-kuriercmi at6pt \fzzozznzzt}%
+\font\fivei= mi-kuriercmi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-kuriercmz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-kuriercmz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-kuriercmz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-kuriercmz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-kuriercmz at12pt \fzzozznzzt}%
+\font\tensy= sy-kuriercmz
+\def\ninesy{\font\fzzozznzzt= sy-kuriercmz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-kuriercmz at8pt \fzzozznzzt}%
+\font\sevensy= sy-kuriercmz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-kuriercmz at6pt \fzzozznzzt}%
+\font\fivesy= sy-kuriercmz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-kuriercm at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-kuriercm at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-kuriercm at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-kuriercm at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-kuriercm at12pt \fzzozznzzt}%
+\font\tenex= ex-kuriercm
+\def\nineex{\font\fzzozznzzt= ex-kuriercm at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-kuriercm at8pt \fzzozznzzt}%
+\font\sevenex= ex-kuriercm at7pt
+\def\sixex{\font\fzzozznzzt= ex-kuriercm at6pt \fzzozznzzt}%
+\font\fiveex= ex-kuriercm at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-kuriercmi at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-kuriercmi at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-kuriercmi at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-kuriercmi at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-kuriercmi at12pt \fzzozznzzt}%
+\font\tenit= rm-kuriercmi
+\def\nineit{\font\fzzozznzzt= rm-kuriercmi at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-kuriercmi at8pt \fzzozznzzt}%
+\font\sevenit= rm-kuriercmi at7pt
+\def\sixit{\font\fzzozznzzt= rm-kuriercmi at6pt \fzzozznzzt}%
+\font\fiveit= rm-kuriercmi at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-kuriercmi at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-kuriercmi at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-kuriercmi at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-kuriercmi at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-kuriercmi at12pt \fzzozznzzt}%
+\font\tensl= rm-kuriercmi %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-kuriercmi at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-kuriercmi at8pt \fzzozznzzt}%
+\font\sevensl= rm-kuriercmi at7pt
+\def\sixsl{\font\fzzozznzzt= rm-kuriercmi at6pt \fzzozznzzt}%
+\font\fivesl= rm-kuriercmi at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-kurierch at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-kurierch at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-kurierch at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-kurierch at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-kurierch at12pt \fzzozznzzt}%
+\font\tenbf= rm-kurierch
+\def\ninebf{\font\fzzozznzzt= rm-kurierch at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-kurierch at8pt \fzzozznzzt}%
+\font\sevenbf= rm-kurierch at7pt
+\def\sixbf{\font\fzzozznzzt= rm-kurierch at6pt \fzzozznzzt}%
+\font\fivebf= rm-kurierch at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-kurierchi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-kurierchi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-kurierchi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-kurierchi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-kurierchi at12pt \fzzozznzzt}%
+\font\itbf= rm-kurierchi
+\def\nineitbf{\font\fzzozznzzt= rm-kurierchi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-kurierchi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-kurierchi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-kurierchi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-kurierchi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-kurierchi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-kurierchi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-kurierchi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-kurierchi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-kurierchi at12pt \fzzozznzzt}%
+\font\slbf= rm-kurierchi
+\def\nineslbf{\font\fzzozznzzt= rm-kurierchi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-kurierchi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-kurierchi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-kurierchi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-kurierchi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-kuriercm-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-kuriercm-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-kuriercm-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-kuriercm-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-kuriercm-sc at12pt \fzzozznzzt}%
+\font\caps= rm-kuriercm-sc
+\def\ninecaps{\font\fzzozznzzt= rm-kuriercm-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-kuriercm-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-kuriercm-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-kuriercm-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-kuriercm-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-kurierch-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-kurierch-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-kurierch-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-kurierch-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-kurierch-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-kurierch-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-kurierch-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-kurierch-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-kurierch-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-kurierch-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-kurierch-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed.tex b/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed.tex
new file mode 100644
index 0000000000..8adcfcd54e
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_kurier-condensed.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-kuriercr at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-kuriercr at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-kuriercr at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-kuriercr at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-kuriercr at12pt \fzzozznzzt}%
+\font\tenrm= rm-kuriercr
+\def\ninerm{\font\fzzozznzzt= rm-kuriercr at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-kuriercr at8pt \fzzozznzzt}%
+\font\sevenrm= rm-kuriercr at7pt
+\def\sixrm{\font\fzzozznzzt= rm-kuriercr at6pt \fzzozznzzt}%
+\font\fiverm= rm-kuriercr at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-kuriercri at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-kuriercri at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-kuriercri at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-kuriercri at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-kuriercri at12pt \fzzozznzzt}%
+\font\teni= mi-kuriercri
+\def\ninei{\font\fzzozznzzt= mi-kuriercri at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-kuriercri at8pt \fzzozznzzt}%
+\font\seveni= mi-kuriercri at7pt
+\def\sixi{\font\fzzozznzzt= mi-kuriercri at6pt \fzzozznzzt}%
+\font\fivei= mi-kuriercri at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-kuriercrz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-kuriercrz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-kuriercrz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-kuriercrz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-kuriercrz at12pt \fzzozznzzt}%
+\font\tensy= sy-kuriercrz
+\def\ninesy{\font\fzzozznzzt= sy-kuriercrz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-kuriercrz at8pt \fzzozznzzt}%
+\font\sevensy= sy-kuriercrz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-kuriercrz at6pt \fzzozznzzt}%
+\font\fivesy= sy-kuriercrz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-kuriercr at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-kuriercr at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-kuriercr at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-kuriercr at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-kuriercr at12pt \fzzozznzzt}%
+\font\tenex= ex-kuriercr
+\def\nineex{\font\fzzozznzzt= ex-kuriercr at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-kuriercr at8pt \fzzozznzzt}%
+\font\sevenex= ex-kuriercr at7pt
+\def\sixex{\font\fzzozznzzt= ex-kuriercr at6pt \fzzozznzzt}%
+\font\fiveex= ex-kuriercr at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-kuriercri at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-kuriercri at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-kuriercri at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-kuriercri at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-kuriercri at12pt \fzzozznzzt}%
+\font\tenit= rm-kuriercri
+\def\nineit{\font\fzzozznzzt= rm-kuriercri at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-kuriercri at8pt \fzzozznzzt}%
+\font\sevenit= rm-kuriercri at7pt
+\def\sixit{\font\fzzozznzzt= rm-kuriercri at6pt \fzzozznzzt}%
+\font\fiveit= rm-kuriercri at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-kuriercri at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-kuriercri at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-kuriercri at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-kuriercri at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-kuriercri at12pt \fzzozznzzt}%
+\font\tensl= rm-kuriercri %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-kuriercri at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-kuriercri at8pt \fzzozznzzt}%
+\font\sevensl= rm-kuriercri at7pt
+\def\sixsl{\font\fzzozznzzt= rm-kuriercri at6pt \fzzozznzzt}%
+\font\fivesl= rm-kuriercri at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-kuriercb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-kuriercb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-kuriercb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-kuriercb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-kuriercb at12pt \fzzozznzzt}%
+\font\tenbf= rm-kuriercb
+\def\ninebf{\font\fzzozznzzt= rm-kuriercb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-kuriercb at8pt \fzzozznzzt}%
+\font\sevenbf= rm-kuriercb at7pt
+\def\sixbf{\font\fzzozznzzt= rm-kuriercb at6pt \fzzozznzzt}%
+\font\fivebf= rm-kuriercb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-kuriercbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-kuriercbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-kuriercbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-kuriercbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-kuriercbi at12pt \fzzozznzzt}%
+\font\itbf= rm-kuriercbi
+\def\nineitbf{\font\fzzozznzzt= rm-kuriercbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-kuriercbi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-kuriercbi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-kuriercbi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-kuriercbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-kuriercbi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-kuriercbi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-kuriercbi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-kuriercbi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-kuriercbi at12pt \fzzozznzzt}%
+\font\slbf= rm-kuriercbi
+\def\nineslbf{\font\fzzozznzzt= rm-kuriercbi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-kuriercbi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-kuriercbi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-kuriercbi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-kuriercbi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-kuriercr-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-kuriercr-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-kuriercr-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-kuriercr-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-kuriercr-sc at12pt \fzzozznzzt}%
+\font\caps= rm-kuriercr-sc
+\def\ninecaps{\font\fzzozznzzt= rm-kuriercr-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-kuriercr-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-kuriercr-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-kuriercr-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-kuriercr-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-kuriercb-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-kuriercb-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-kuriercb-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-kuriercb-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-kuriercb-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-kuriercb-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-kuriercb-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-kuriercb-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-kuriercb-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-kuriercb-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-kuriercb-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_kurier-light.tex b/macros/plain/contrib/font-change/tex/macros/font_kurier-light.tex
new file mode 100644
index 0000000000..2d493af713
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_kurier-light.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-kurierl at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-kurierl at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-kurierl at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-kurierl at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-kurierl at12pt \fzzozznzzt}%
+\font\tenrm= rm-kurierl
+\def\ninerm{\font\fzzozznzzt= rm-kurierl at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-kurierl at8pt \fzzozznzzt}%
+\font\sevenrm= rm-kurierl at7pt
+\def\sixrm{\font\fzzozznzzt= rm-kurierl at6pt \fzzozznzzt}%
+\font\fiverm= rm-kurierl at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-kurierli at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-kurierli at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-kurierli at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-kurierli at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-kurierli at12pt \fzzozznzzt}%
+\font\teni= mi-kurierli
+\def\ninei{\font\fzzozznzzt= mi-kurierli at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-kurierli at8pt \fzzozznzzt}%
+\font\seveni= mi-kurierli at7pt
+\def\sixi{\font\fzzozznzzt= mi-kurierli at6pt \fzzozznzzt}%
+\font\fivei= mi-kurierli at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-kurierlz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-kurierlz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-kurierlz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-kurierlz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-kurierlz at12pt \fzzozznzzt}%
+\font\tensy= sy-kurierlz
+\def\ninesy{\font\fzzozznzzt= sy-kurierlz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-kurierlz at8pt \fzzozznzzt}%
+\font\sevensy= sy-kurierlz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-kurierlz at6pt \fzzozznzzt}%
+\font\fivesy= sy-kurierlz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-kurierl at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-kurierl at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-kurierl at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-kurierl at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-kurierl at12pt \fzzozznzzt}%
+\font\tenex= ex-kurierl
+\def\nineex{\font\fzzozznzzt= ex-kurierl at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-kurierl at8pt \fzzozznzzt}%
+\font\sevenex= ex-kurierl at7pt
+\def\sixex{\font\fzzozznzzt= ex-kurierl at6pt \fzzozznzzt}%
+\font\fiveex= ex-kurierl at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-kurierli at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-kurierli at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-kurierli at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-kurierli at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-kurierli at12pt \fzzozznzzt}%
+\font\tenit= rm-kurierli
+\def\nineit{\font\fzzozznzzt= rm-kurierli at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-kurierli at8pt \fzzozznzzt}%
+\font\sevenit= rm-kurierli at7pt
+\def\sixit{\font\fzzozznzzt= rm-kurierli at6pt \fzzozznzzt}%
+\font\fiveit= rm-kurierli at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-kurierli at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-kurierli at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-kurierli at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-kurierli at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-kurierli at12pt \fzzozznzzt}%
+\font\tensl= rm-kurierli %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-kurierli at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-kurierli at8pt \fzzozznzzt}%
+\font\sevensl= rm-kurierli at7pt
+\def\sixsl{\font\fzzozznzzt= rm-kurierli at6pt \fzzozznzzt}%
+\font\fivesl= rm-kurierli at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-kurierm at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-kurierm at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-kurierm at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-kurierm at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-kurierm at12pt \fzzozznzzt}%
+\font\tenbf= rm-kurierm
+\def\ninebf{\font\fzzozznzzt= rm-kurierm at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-kurierm at8pt \fzzozznzzt}%
+\font\sevenbf= rm-kurierm at7pt
+\def\sixbf{\font\fzzozznzzt= rm-kurierm at6pt \fzzozznzzt}%
+\font\fivebf= rm-kurierm at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-kuriermi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-kuriermi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-kuriermi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-kuriermi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-kuriermi at12pt \fzzozznzzt}%
+\font\itbf= rm-kuriermi
+\def\nineitbf{\font\fzzozznzzt= rm-kuriermi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-kuriermi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-kuriermi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-kuriermi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-kuriermi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-kuriermi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-kuriermi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-kuriermi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-kuriermi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-kuriermi at12pt \fzzozznzzt}%
+\font\slbf= rm-kuriermi
+\def\nineslbf{\font\fzzozznzzt= rm-kuriermi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-kuriermi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-kuriermi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-kuriermi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-kuriermi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-kurierl-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-kurierl-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-kurierl-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-kurierl-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-kurierl-sc at12pt \fzzozznzzt}%
+\font\caps= rm-kurierl-sc
+\def\ninecaps{\font\fzzozznzzt= rm-kurierl-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-kurierl-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-kurierl-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-kurierl-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-kurierl-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-kurierm-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-kurierm-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-kurierm-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-kurierm-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-kurierm-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-kurierm-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-kurierm-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-kurierm-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-kurierm-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-kurierm-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-kurierm-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_kurier-medium.tex b/macros/plain/contrib/font-change/tex/macros/font_kurier-medium.tex
new file mode 100644
index 0000000000..de897c4b1d
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_kurier-medium.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan.
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-kurierm at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-kurierm at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-kurierm at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-kurierm at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-kurierm at12pt \fzzozznzzt}%
+\font\tenrm= rm-kurierm
+\def\ninerm{\font\fzzozznzzt= rm-kurierm at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-kurierm at8pt \fzzozznzzt}%
+\font\sevenrm= rm-kurierm at7pt
+\def\sixrm{\font\fzzozznzzt= rm-kurierm at6pt \fzzozznzzt}%
+\font\fiverm= rm-kurierm at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-kuriermi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-kuriermi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-kuriermi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-kuriermi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-kuriermi at12pt \fzzozznzzt}%
+\font\teni= mi-kuriermi
+\def\ninei{\font\fzzozznzzt= mi-kuriermi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-kuriermi at8pt \fzzozznzzt}%
+\font\seveni= mi-kuriermi at7pt
+\def\sixi{\font\fzzozznzzt= mi-kuriermi at6pt \fzzozznzzt}%
+\font\fivei= mi-kuriermi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-kuriermz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-kuriermz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-kuriermz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-kuriermz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-kuriermz at12pt \fzzozznzzt}%
+\font\tensy= sy-kuriermz
+\def\ninesy{\font\fzzozznzzt= sy-kuriermz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-kuriermz at8pt \fzzozznzzt}%
+\font\sevensy= sy-kuriermz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-kuriermz at6pt \fzzozznzzt}%
+\font\fivesy= sy-kuriermz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-kurierm at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-kurierm at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-kurierm at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-kurierm at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-kurierm at12pt \fzzozznzzt}%
+\font\tenex= ex-kurierm
+\def\nineex{\font\fzzozznzzt= ex-kurierm at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-kurierm at8pt \fzzozznzzt}%
+\font\sevenex= ex-kurierm at7pt
+\def\sixex{\font\fzzozznzzt= ex-kurierm at6pt \fzzozznzzt}%
+\font\fiveex= ex-kurierm at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-kuriermi at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-kuriermi at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-kuriermi at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-kuriermi at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-kuriermi at12pt \fzzozznzzt}%
+\font\tenit= rm-kuriermi
+\def\nineit{\font\fzzozznzzt= rm-kuriermi at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-kuriermi at8pt \fzzozznzzt}%
+\font\sevenit= rm-kuriermi at7pt
+\def\sixit{\font\fzzozznzzt= rm-kuriermi at6pt \fzzozznzzt}%
+\font\fiveit= rm-kuriermi at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-kuriermi at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-kuriermi at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-kuriermi at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-kuriermi at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-kuriermi at12pt \fzzozznzzt}%
+\font\tensl= rm-kuriermi %There is no slanted version of Antykwa Torunska. This is to keep \sl working.
+\def\ninesl{\font\fzzozznzzt= rm-kuriermi at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-kuriermi at8pt \fzzozznzzt}%
+\font\sevensl= rm-kuriermi at7pt
+\def\sixsl{\font\fzzozznzzt= rm-kuriermi at6pt \fzzozznzzt}%
+\font\fivesl= rm-kuriermi at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-kurierh at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-kurierh at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-kurierh at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-kurierh at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-kurierh at12pt \fzzozznzzt}%
+\font\tenbf= rm-kurierh
+\def\ninebf{\font\fzzozznzzt= rm-kurierh at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-kurierh at8pt \fzzozznzzt}%
+\font\sevenbf= rm-kurierh at7pt
+\def\sixbf{\font\fzzozznzzt= rm-kurierh at6pt \fzzozznzzt}%
+\font\fivebf= rm-kurierh at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-kurierhi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-kurierhi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-kurierhi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-kurierhi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-kurierhi at12pt \fzzozznzzt}%
+\font\itbf= rm-kurierhi
+\def\nineitbf{\font\fzzozznzzt= rm-kurierhi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-kurierhi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-kurierhi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-kurierhi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-kurierhi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-kurierhi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-kurierhi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-kurierhi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-kurierhi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-kurierhi at12pt \fzzozznzzt}%
+\font\slbf= rm-kurierhi
+\def\nineslbf{\font\fzzozznzzt= rm-kurierhi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-kurierhi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-kurierhi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-kurierhi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-kurierhi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-kurierm-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-kurierm-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-kurierm-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-kurierm-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-kurierm-sc at12pt \fzzozznzzt}%
+\font\caps= rm-kurierm-sc
+\def\ninecaps{\font\fzzozznzzt= rm-kurierm-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-kurierm-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-kurierm-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-kurierm-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-kurierm-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-kurierh-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-kurierh-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-kurierh-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-kurierh-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-kurierh-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-kurierh-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-kurierh-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-kurierh-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-kurierh-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-kurierh-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-kurierh-sc at5pt
+%
+\chardef\Lstroke='212%
+\chardef\lstroke='252%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_kurier.tex b/macros/plain/contrib/font-change/tex/macros/font_kurier.tex
new file mode 100644
index 0000000000..9074e1657e
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_kurier.tex
@@ -0,0 +1,213 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-kurierr at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-kurierr at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-kurierr at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-kurierr at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-kurierr at12pt \fzzozznzzt}%
+\font\tenrm= rm-kurierr
+\def\ninerm{\font\fzzozznzzt= rm-kurierr at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-kurierr at8pt \fzzozznzzt}%
+\font\sevenrm= rm-kurierr at7pt
+\def\sixrm{\font\fzzozznzzt= rm-kurierr at6pt \fzzozznzzt}%
+\font\fiverm= rm-kurierr at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mi-kurierri at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mi-kurierri at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mi-kurierri at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mi-kurierri at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mi-kurierri at12pt \fzzozznzzt}%
+\font\teni= mi-kurierri
+\def\ninei{\font\fzzozznzzt= mi-kurierri at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mi-kurierri at8pt \fzzozznzzt}%
+\font\seveni= mi-kurierri at7pt
+\def\sixi{\font\fzzozznzzt= mi-kurierri at6pt \fzzozznzzt}%
+\font\fivei= mi-kurierri at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= sy-kurierrz at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=sy-kurierrz at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= sy-kurierrz at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=sy-kurierrz at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= sy-kurierrz at12pt \fzzozznzzt}%
+\font\tensy= sy-kurierrz
+\def\ninesy{\font\fzzozznzzt= sy-kurierrz at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= sy-kurierrz at8pt \fzzozznzzt}%
+\font\sevensy= sy-kurierrz at7pt
+\def\sixsy{\font\fzzozznzzt= sy-kurierrz at6pt \fzzozznzzt}%
+\font\fivesy= sy-kurierrz at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= ex-kurierr at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=ex-kurierr at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= ex-kurierr at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=ex-kurierr at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= ex-kurierr at12pt \fzzozznzzt}%
+\font\tenex= ex-kurierr
+\def\nineex{\font\fzzozznzzt= ex-kurierr at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= ex-kurierr at8pt \fzzozznzzt}%
+\font\sevenex= ex-kurierr at7pt
+\def\sixex{\font\fzzozznzzt= ex-kurierr at6pt \fzzozznzzt}%
+\font\fiveex= ex-kurierr at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-kurierri at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-kurierri at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-kurierri at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-kurierri at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-kurierri at12pt \fzzozznzzt}%
+\font\tenit= rm-kurierri
+\def\nineit{\font\fzzozznzzt= rm-kurierri at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-kurierri at8pt \fzzozznzzt}%
+\font\sevenit= rm-kurierri at7pt
+\def\sixit{\font\fzzozznzzt= rm-kurierri at6pt \fzzozznzzt}%
+\font\fiveit= rm-kurierri at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= rm-kurierri at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=rm-kurierri at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= rm-kurierri at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= rm-kurierri at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= rm-kurierri at12pt \fzzozznzzt}%
+\font\tensl= rm-kurierri
+\def\ninesl{\font\fzzozznzzt= rm-kurierri at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= rm-kurierri at8pt \fzzozznzzt}%
+\font\sevensl= rm-kurierri at7pt
+\def\sixsl{\font\fzzozznzzt= rm-kurierri at6pt \fzzozznzzt}%
+\font\fivesl= rm-kurierri at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-kurierb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-kurierb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-kurierb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-kurierb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-kurierb at12pt \fzzozznzzt}%
+\font\tenbf= rm-kurierb
+\def\ninebf{\font\fzzozznzzt= rm-kurierb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-kurierb at8pt \fzzozznzzt}%
+\font\sevenbf= rm-kurierb at7pt
+\def\sixbf{\font\fzzozznzzt= rm-kurierb at6pt \fzzozznzzt}%
+\font\fivebf= rm-kurierb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-kurierbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-kurierbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-kurierbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-kurierbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-kurierbi at12pt \fzzozznzzt}%
+\font\itbf= rm-kurierbi
+\def\nineitbf{\font\fzzozznzzt= rm-kurierbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-kurierbi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-kurierbi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-kurierbi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-kurierbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= rm-kurierbi at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= rm-kurierbi at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= rm-kurierbi at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= rm-kurierbi at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= rm-kurierbi at12pt \fzzozznzzt}%
+\font\slbf= rm-kurierbi
+\def\nineslbf{\font\fzzozznzzt= rm-kurierbi at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= rm-kurierbi at8pt \fzzozznzzt}%
+\font\sevenslbf= rm-kurierbi at7pt
+\def\sixslbf{\font\fzzozznzzt= rm-kurierbi at6pt \fzzozznzzt}%
+\font\fiveslbf= rm-kurierbi at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-kurierr-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-kurierr-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-kurierr-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-kurierr-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-kurierr-sc at12pt \fzzozznzzt}%
+\font\caps= rm-kurierr-sc
+\def\ninecaps{\font\fzzozznzzt= rm-kurierr-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-kurierr-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-kurierr-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-kurierr-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-kurierr-sc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= rm-kurierb-sc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= rm-kurierb-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-kurierb-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-kurierb-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt== rm-kurierb-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-kurierb-sc
+\def\ninecapsbf{\font\fzzozznzzt= rm-kurierb-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-kurierb-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-kurierb-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-kurierb-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-kurierb-sc at5pt
+%
+\chardef\lstroke='252%
+\chardef\Lstroke='212%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_libertine_kp.tex b/macros/plain/contrib/font-change/tex/macros/font_libertine_kp.tex
new file mode 100644
index 0000000000..e7f965a370
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_libertine_kp.tex
@@ -0,0 +1,239 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=LinLibertineT-lf-ot1 at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=LinLibertineT-lf-ot1 at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= LinLibertineT-lf-ot1 at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=LinLibertineT-lf-ot1 at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= LinLibertineT-lf-ot1 at12pt \fzzozznzzt}%
+\font\tenrm= LinLibertineT-lf-ot1
+\def\ninerm{\font\fzzozznzzt= LinLibertineT-lf-ot1 at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= LinLibertineT-lf-ot1 at8pt \fzzozznzzt}%
+\font\sevenrm= LinLibertineT-lf-ot1 at7pt
+\def\sixrm{\font\fzzozznzzt= LinLibertineT-lf-ot1 at6pt \fzzozznzzt}%
+\font\fiverm= LinLibertineT-lf-ot1 at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= jkpmi at19pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= jkpmi at17.1pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= jkpmi at15.2pt \fzzozznzzt}%
+\def\fouteeni{\font\fzzozznzzt= jkpmi at13.3pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= jkpmi at11.4pt \fzzozznzzt}%
+\font\teni= jkpmi at9.5pt% linear scaling by 0.95
+\def\ninei{\font\fzzozznzzt= jkpmi at8.55pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= jkpmi at7.6pt \fzzozznzzt}%
+\font\seveni= jkpmi at6.65pt
+\def\sixi{\font\fzzozznzzt= jkpmi at5.7pt \fzzozznzzt}%
+\font\fivei= jkpmi at4.75pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= jkpsy at19pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt= jkpsy at17.1pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= jkpsy at15.2pt \fzzozznzzt}%
+\def\fouteensy{\font\fzzozznzzt= jkpsy at13.3pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= jkpsy at11.4pt \fzzozznzzt}%
+\font\tensy= jkpsy at9.5pt% linear scaling by 0.95
+\def\ninesy{\font\fzzozznzzt= jkpsy at8.55pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= jkpsy at7.6pt \fzzozznzzt}%
+\font\sevensy= jkpsy at6.65pt
+\def\sixsy{\font\fzzozznzzt= jkpsy at5.7pt \fzzozznzzt}%
+\font\fivesy= jkpsy at4.75pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= jkpex at19pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt= jkpex at17.1pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= jkpex at15.2pt \fzzozznzzt}%
+\def\fouteenex{\font\fzzozznzzt= jkpex at13.3pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= jkpex at11.4pt \fzzozznzzt}%
+\font\tenex= jkpex at9.5pt% linear scaling by 0.95
+\def\nineex{\font\fzzozznzzt= jkpex at8.55pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= jkpex at7.6pt \fzzozznzzt}%
+\font\sevenex= jkpex at6.65pt
+\def\sixex{\font\fzzozznzzt= jkpex at5.7pt \fzzozznzzt}%
+\font\fiveex= jkpex at4.75pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=LinLibertineTI-lf-ot1 at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at12pt \fzzozznzzt}%
+\font\tenit= LinLibertineTI-lf-ot1
+\def\nineit{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at8pt \fzzozznzzt}%
+\font\sevenit= LinLibertineTI-lf-ot1 at7pt
+\def\sixit{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at6pt \fzzozznzzt}%
+\font\fiveit= LinLibertineTI-lf-ot1 at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=LinLibertineTI-lf-ot1 at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at12pt \fzzozznzzt}%
+\font\tensl= LinLibertineTI-lf-ot1
+\def\ninesl{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at8pt \fzzozznzzt}%
+\font\sevensl= LinLibertineTI-lf-ot1 at7pt
+\def\sixsl{\font\fzzozznzzt= LinLibertineTI-lf-ot1 at6pt \fzzozznzzt}%
+\font\fivesl= LinLibertineTI-lf-ot1 at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= LinLibertineTZ-lf-ot1 at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= LinLibertineTZ-lf-ot1 at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= LinLibertineTZ-lf-ot1 at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= LinLibertineTZ-lf-ot1 at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= LinLibertineTZ-lf-ot1 at12pt \fzzozznzzt}%
+\font\tenbf= LinLibertineTZ-lf-ot1
+\def\ninebf{\font\fzzozznzzt= LinLibertineTZ-lf-ot1 at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= LinLibertineTZ-lf-ot1 at8pt \fzzozznzzt}%
+\font\sevenbf= LinLibertineTZ-lf-ot1 at7pt
+\def\sixbf{\font\fzzozznzzt= LinLibertineTZ-lf-ot1 at6pt \fzzozznzzt}%
+\font\fivebf= LinLibertineTZ-lf-ot1 at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at12pt \fzzozznzzt}%
+\font\itbf= LinLibertineTZI-lf-ot1
+\def\nineitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at8pt \fzzozznzzt}%
+\font\sevenitbf= LinLibertineTZI-lf-ot1 at7pt
+\def\sixitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at6pt \fzzozznzzt}%
+\font\fiveitbf= LinLibertineTZI-lf-ot1 at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at12pt \fzzozznzzt}%
+\font\slbf= LinLibertineTZI-lf-ot1
+\def\nineslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at8pt \fzzozznzzt}%
+\font\sevenslbf= LinLibertineTZI-lf-ot1 at7pt
+\def\sixslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ot1 at6pt \fzzozznzzt}%
+\font\fiveslbf= LinLibertineTZI-lf-ot1 at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ot1 at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ot1 at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ot1 at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ot1 at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ot1 at12pt \fzzozznzzt}%
+\font\caps= LinLibertineT-lf-sc-ot1 % putrc7t from Adobe can be used to get \l etc.
+\def\ninecaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ot1 at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ot1 at8pt \fzzozznzzt}%
+\font\sevencaps= LinLibertineT-lf-sc-ot1 at7pt
+\def\sixcaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ot1 at6pt \fzzozznzzt}%
+\font\fivecaps= LinLibertineT-lf-sc-ot1 at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ot1 at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ot1 at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ot1 at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ot1 at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ot1 at12pt \fzzozznzzt}%
+\font\capsbf= LinLibertineTZ-lf-sc-ot1
+\def\ninecapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ot1 at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ot1 at8pt \fzzozznzzt}%
+\font\sevencapsbf= LinLibertineTZ-lf-sc-ot1 at7pt
+\def\sixcapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ot1 at6pt \fzzozznzzt}%
+\font\fivecapsbf= LinLibertineTZ-lf-sc-ot1 at5pt
+%
+% Some missing glyphs
+\font\tenmiss=jkpmn7t at9.7pt
+\font\sevenmiss=jkpmn7t at6.79pt
+\font\fivemiss=jkpmn7t at4.85pt
+%
+\newfam\misscharfam
+\textfont\misscharfam=\tenmiss
+\scriptfont\misscharfam=\sevenmiss
+\scriptscriptfont\misscharfam=\fivemiss
+%
+\def\Gamma{{\fam=\misscharfam \mathchar"7800}}%
+\def\Delta{{\fam=\misscharfam \mathchar"7801}}%
+\def\Theta{{\fam=\misscharfam \mathchar"7802}}%
+\def\Lambda{{\fam=\misscharfam \mathchar"7803}}%
+\def\Xi{{\fam=\misscharfam \mathchar"7804}}%
+\def\Pi{{\fam=\misscharfam \mathchar"7805}}%
+\def\Sigma{{\fam=\misscharfam \mathchar"7806}}%
+\def\Upsilon{{\fam=\misscharfam \mathchar"7807}}%
+\def\Phi{{\fam=\misscharfam \mathchar"7808}}%
+\def\Psi{{\fam=\misscharfam \mathchar"7809}}%
+\def\Omega{{\fam=\misscharfam \mathchar"780A}}%
+%
+% AMS Symbols
+\def\loadmsam{\font\tenmsa=jkpsya at9.7pt \font\sevenmsa=jkpsya at6.79pt \font\fivemsa=jkpsya at4.85pt \fam\msafam \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\def\loadmsbm{\font\tenmsb=jkpsyb at9.7pt \font\sevenmsb=jkpsyb at6.79pt \font\fivemsb=jkpsyb at4.85pt \fam\msbfam \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\def\UseAMSsymbols{\loadmsam\loadmsbm}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_libertine_palatino.tex b/macros/plain/contrib/font-change/tex/macros/font_libertine_palatino.tex
new file mode 100644
index 0000000000..b35b9e1007
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_libertine_palatino.tex
@@ -0,0 +1,239 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=LinLibertineT-lf-ly1 at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=LinLibertineT-lf-ly1 at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= LinLibertineT-lf-ly1 at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=LinLibertineT-lf-ly1 at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= LinLibertineT-lf-ly1 at12pt \fzzozznzzt}%
+\font\tenrm= LinLibertineT-lf-ly1
+\def\ninerm{\font\fzzozznzzt= LinLibertineT-lf-ly1 at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= LinLibertineT-lf-ly1 at8pt \fzzozznzzt}%
+\font\sevenrm= LinLibertineT-lf-ly1 at7pt
+\def\sixrm{\font\fzzozznzzt= LinLibertineT-lf-ly1 at6pt \fzzozznzzt}%
+\font\fiverm= LinLibertineT-lf-ly1 at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt=pxmi at19.4pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt=pxmi at17.46pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt=pxmi at15.52pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt=pxmi at13.58pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt=pxmi at11.64pt \fzzozznzzt}%
+\font\teni= pxmi at9.7pt% linear scaling by 0.97
+\def\ninei{\font\fzzozznzzt=pxmi at8.73pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt=pxmi at7.76pt \fzzozznzzt}%
+\font\seveni= pxmi at6.79pt
+\def\sixi{\font\fzzozznzzt=pxmi at5.82pt \fzzozznzzt}%
+\font\fivei= pxmi at4.85pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt=pxsy at19.4pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=pxsy at17.46pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt=pxsy at15.52pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=pxsy at13.58pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt=pxsy at11.64pt \fzzozznzzt}%
+\font\tensy= pxsy at9.7pt% linear scaling by 0.97
+\def\ninesy{\font\fzzozznzzt=pxsy at8.73pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt=pxsy at7.76pt \fzzozznzzt}%
+\font\sevensy= pxsy at6.79pt
+\def\sixsy{\font\fzzozznzzt=pxsy at5.82pt \fzzozznzzt}%
+\font\fivesy= pxsy at4.85pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt=pxex at19.4pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=pxex at17.46pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt=pxex at15.52pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=pxex at13.58pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt=pxex at11.64pt \fzzozznzzt}%
+\font\tenex= pxex at9.7pt% linear scaling by 0.97
+\def\nineex{\font\fzzozznzzt=pxex at8.73pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt=pxex at7.76pt \fzzozznzzt}%
+\font\sevenex= pxex at6.79pt
+\def\sixex{\font\fzzozznzzt=pxex at5.82pt \fzzozznzzt}%
+\font\fiveex= pxex at4.85pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=LinLibertineTI-lf-ly1 at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at12pt \fzzozznzzt}%
+\font\tenit= LinLibertineTI-lf-ly1
+\def\nineit{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at8pt \fzzozznzzt}%
+\font\sevenit= LinLibertineTI-lf-ly1 at7pt
+\def\sixit{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at6pt \fzzozznzzt}%
+\font\fiveit= LinLibertineTI-lf-ly1 at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=LinLibertineTI-lf-ly1 at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at12pt \fzzozznzzt}%
+\font\tensl= LinLibertineTI-lf-ly1
+\def\ninesl{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at8pt \fzzozznzzt}%
+\font\sevensl= LinLibertineTI-lf-ly1 at7pt
+\def\sixsl{\font\fzzozznzzt= LinLibertineTI-lf-ly1 at6pt \fzzozznzzt}%
+\font\fivesl= LinLibertineTI-lf-ly1 at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= LinLibertineTZ-lf-ly1 at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= LinLibertineTZ-lf-ly1 at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= LinLibertineTZ-lf-ly1 at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= LinLibertineTZ-lf-ly1 at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= LinLibertineTZ-lf-ly1 at12pt \fzzozznzzt}%
+\font\tenbf= LinLibertineTZ-lf-ly1
+\def\ninebf{\font\fzzozznzzt= LinLibertineTZ-lf-ly1 at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= LinLibertineTZ-lf-ly1 at8pt \fzzozznzzt}%
+\font\sevenbf= LinLibertineTZ-lf-ly1 at7pt
+\def\sixbf{\font\fzzozznzzt= LinLibertineTZ-lf-ly1 at6pt \fzzozznzzt}%
+\font\fivebf= LinLibertineTZ-lf-ly1 at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at12pt \fzzozznzzt}%
+\font\itbf= LinLibertineTZI-lf-ly1
+\def\nineitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at8pt \fzzozznzzt}%
+\font\sevenitbf= LinLibertineTZI-lf-ly1 at7pt
+\def\sixitbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at6pt \fzzozznzzt}%
+\font\fiveitbf= LinLibertineTZI-lf-ly1 at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at12pt \fzzozznzzt}%
+\font\slbf= LinLibertineTZI-lf-ly1
+\def\nineslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at8pt \fzzozznzzt}%
+\font\sevenslbf= LinLibertineTZI-lf-ly1 at7pt
+\def\sixslbf{\font\fzzozznzzt= LinLibertineTZI-lf-ly1 at6pt \fzzozznzzt}%
+\font\fiveslbf= LinLibertineTZI-lf-ly1 at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ly1 at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ly1 at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ly1 at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ly1 at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ly1 at12pt \fzzozznzzt}%
+\font\caps= LinLibertineT-lf-sc-ly1 % putrc7t from Adobe can be used to get \l etc.
+\def\ninecaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ly1 at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ly1 at8pt \fzzozznzzt}%
+\font\sevencaps= LinLibertineT-lf-sc-ly1 at7pt
+\def\sixcaps{\font\fzzozznzzt= LinLibertineT-lf-sc-ly1 at6pt \fzzozznzzt}%
+\font\fivecaps= LinLibertineT-lf-sc-ly1 at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ly1 at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ly1 at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ly1 at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ly1 at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ly1 at12pt \fzzozznzzt}%
+\font\capsbf= LinLibertineTZ-lf-sc-ly1
+\def\ninecapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ly1 at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ly1 at8pt \fzzozznzzt}%
+\font\sevencapsbf= LinLibertineTZ-lf-sc-ly1 at7pt
+\def\sixcapsbf{\font\fzzozznzzt= LinLibertineTZ-lf-sc-ly1 at6pt \fzzozznzzt}%
+\font\fivecapsbf= LinLibertineTZ-lf-sc-ly1 at5pt
+%
+% Some missing glyphs
+\font\tenmiss=pxr at9.7pt
+\font\sevenmiss=pxr at6.79pt
+\font\fivemiss=pxr at4.85pt
+%
+\newfam\misscharfam
+\textfont\misscharfam=\tenmiss
+\scriptfont\misscharfam=\sevenmiss
+\scriptscriptfont\misscharfam=\fivemiss
+%
+\def\Gamma{{\fam=\misscharfam \mathchar"7800}}%
+\def\Delta{{\fam=\misscharfam \mathchar"7801}}%
+\def\Theta{{\fam=\misscharfam \mathchar"7802}}%
+\def\Lambda{{\fam=\misscharfam \mathchar"7803}}%
+\def\Xi{{\fam=\misscharfam \mathchar"7804}}%
+\def\Pi{{\fam=\misscharfam \mathchar"7805}}%
+\def\Sigma{{\fam=\misscharfam \mathchar"7806}}%
+\def\Upsilon{{\fam=\misscharfam \mathchar"7807}}%
+\def\Phi{{\fam=\misscharfam \mathchar"7808}}%
+\def\Psi{{\fam=\misscharfam \mathchar"7809}}%
+\def\Omega{{\fam=\misscharfam \mathchar"780A}}%
+%
+% AMS Symbols
+\def\loadmsam{\font\tenmsa=pxsya at9.7pt \font\sevenmsa=pxsya at6.79pt \font\fivemsa=pxsya at4.85pt \fam\msafam \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\def\loadmsbm{\font\tenmsb=pxsyb at9.7pt\font\sevenmsb=pxsyb at6.79pt\font\fivemsb=pxsyb at4.85pt \fam\msbfam \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\def\UseAMSsymbols{\loadmsam\loadmsbm}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_libertine_times.tex b/macros/plain/contrib/font-change/tex/macros/font_libertine_times.tex
new file mode 100644
index 0000000000..a5e243afe4
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_libertine_times.tex
@@ -0,0 +1,238 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\font\twentyrm= LinLibertineT-lf-ly1 at20pt
+\font\eighteenrm= LinLibertineT-lf-ly1 at18pt
+\font\sixteenrm= LinLibertineT-lf-ly1 at16pt
+\font\fourteenrm= LinLibertineT-lf-ly1 at14pt
+\font\twelverm= LinLibertineT-lf-ly1 at12pt
+\font\tenrm= LinLibertineT-lf-ly1
+\font\ninerm= LinLibertineT-lf-ly1 at9pt
+\font\eightrm= LinLibertineT-lf-ly1 at8pt
+\font\sevenrm= LinLibertineT-lf-ly1 at7pt
+\font\sixrm= LinLibertineT-lf-ly1 at6pt
+\font\fiverm= LinLibertineT-lf-ly1 at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt=txmi at19.4pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt=txmi at17.46pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt=txmi at15.52pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt=txmi at13.58pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt=txmi at11.64pt \fzzozznzzt}%
+\font\teni= txmi at9.7pt% linear scaling by 0.97
+\def\ninei{\font\fzzozznzzt=txmi at8.73pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt=txmi at7.76pt \fzzozznzzt}%
+\font\seveni= txmi at6.79pt
+\def\sixi{\font\fzzozznzzt=txmi at5.82pt \fzzozznzzt}%
+\font\fivei= txmi at4.85pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt=txsy at19.4pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=txsy at17.46pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt=txsy at15.52pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=txsy at13.58pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt=txsy at11.64pt \fzzozznzzt}%
+\font\tensy= txsy at9.7pt% linear scaling by 0.97
+\def\ninesy{\font\fzzozznzzt=txsy at8.73pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt=txsy at7.76pt \fzzozznzzt}%
+\font\sevensy= txsy at6.79pt
+\def\sixsy{\font\fzzozznzzt=txsy at5.82pt \fzzozznzzt}%
+\font\fivesy= txsy at4.85pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt=txex at19.4pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=txex at17.46pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt=txex at15.52pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=txex at13.58pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt=txex at11.64pt \fzzozznzzt}%
+\font\tenex= txex at9.7pt% linear scaling by 0.97
+\def\nineex{\font\fzzozznzzt=txex at8.73pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt=txex at7.76pt \fzzozznzzt}%
+\font\sevenex= txex at6.79pt
+\def\sixex{\font\fzzozznzzt=txex at5.82pt \fzzozznzzt}%
+\font\fiveex= txex at4.85pt
+%
+% italic text (Family 4)
+\font\twentyit= LinLibertineTI-lf-ly1 at20pt
+\font\eighteenit= LinLibertineTI-lf-ly1 at18pt
+\font\sixteenit= LinLibertineTI-lf-ly1 at16pt
+\font\fourteenit= LinLibertineTI-lf-ly1 at14pt
+\font\twelveit= LinLibertineTI-lf-ly1 at12pt
+\font\tenit= LinLibertineTI-lf-ly1
+\font\nineit= LinLibertineTI-lf-ly1 at9pt
+\font\eightit= LinLibertineTI-lf-ly1 at8pt
+\font\sevenit= LinLibertineTI-lf-ly1 at7pt
+\font\sixit= LinLibertineTI-lf-ly1 at6pt
+\font\fiveit= LinLibertineTI-lf-ly1 at5pt
+%
+% slanted text (Family 5)
+\font\twentysl= LinLibertineTI-lf-ly1 at20pt
+\font\eighteensl= LinLibertineTI-lf-ly1 at18pt
+\font\sixteensl= LinLibertineTI-lf-ly1 at16pt
+\font\fourteensl= LinLibertineTI-lf-ly1 at14pt
+\font\twelvesl= LinLibertineTI-lf-ly1 at12pt
+\font\tensl= LinLibertineTI-lf-ly1
+\font\ninesl= LinLibertineTI-lf-ly1 at9pt
+\font\eightsl= LinLibertineTI-lf-ly1 at8pt
+\font\sevensl= LinLibertineTI-lf-ly1 at7pt
+\font\sixsl= LinLibertineTI-lf-ly1 at6pt
+\font\fivesl= LinLibertineTI-lf-ly1 at5pt
+%
+% boldface text (Family 6)
+\font\twentybf= LinLibertineTZ-lf-ly1 at20pt
+\font\eighteenbf= LinLibertineTZ-lf-ly1 at18pt
+\font\sixteenbf= LinLibertineTZ-lf-ly1 at16pt
+\font\fourteenbf= LinLibertineTZ-lf-ly1 at14pt
+\font\twelvebf= LinLibertineTZ-lf-ly1 at12pt
+\font\tenbf= LinLibertineTZ-lf-ly1
+\font\ninebf= LinLibertineTZ-lf-ly1 at9pt
+\font\eightbf= LinLibertineTZ-lf-ly1 at8pt
+\font\sevenbf= LinLibertineTZ-lf-ly1 at7pt
+\font\sixbf= LinLibertineTZ-lf-ly1 at6pt
+\font\fivebf= LinLibertineTZ-lf-ly1 at5pt
+%
+% typewriter text (Family 7)
+\font\twentytt= cmtt10 at20pt
+\font\eighteentt= cmtt10 at18pt
+\font\sixteentt= cmtt10 at16pt
+\font\fourteentt= cmtt10 at14pt
+\font\twelvett= cmtt10 at12pt
+\font\tentt= cmtt10
+\font\ninett= cmtt9
+\font\eighttt= cmtt8
+\font\seventt= cmtt10 at7pt
+\font\sixtt= cmtt10 at6pt
+\font\fivett= cmtt10 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\font\twentyitbf= LinLibertineTZI-lf-ly1 at20pt
+\font\eighteenitbf= LinLibertineTZI-lf-ly1 at18pt
+\font\sixteenitbf= LinLibertineTZI-lf-ly1 at16pt
+\font\fourteenitbf= LinLibertineTZI-lf-ly1 at14pt
+\font\twelveitbf= LinLibertineTZI-lf-ly1 at12pt
+\font\itbf= LinLibertineTZI-lf-ly1
+\font\nineitbf= LinLibertineTZI-lf-ly1 at9pt
+\font\eightitbf= LinLibertineTZI-lf-ly1 at8pt
+\font\sevenitbf= LinLibertineTZI-lf-ly1 at7pt
+\font\sixitbf= LinLibertineTZI-lf-ly1 at6pt
+\font\fiveitbf= LinLibertineTZI-lf-ly1 at5pt
+%
+% slanted boldface
+\font\twentyslbf= LinLibertineTZI-lf-ly1 at20pt
+\font\eighteenslbf= LinLibertineTZI-lf-ly1 at18pt
+\font\sixteenslbf= LinLibertineTZI-lf-ly1 at16pt
+\font\fourteenslbf= LinLibertineTZI-lf-ly1 at14pt
+\font\twelveslbf= LinLibertineTZI-lf-ly1 at12pt
+\font\slbf= LinLibertineTZI-lf-ly1
+\font\nineslbf= LinLibertineTZI-lf-ly1 at9pt
+\font\eightslbf= LinLibertineTZI-lf-ly1 at8pt
+\font\sevenslbf= LinLibertineTZI-lf-ly1 at7pt
+\font\sixslbf= LinLibertineTZI-lf-ly1 at6pt
+\font\fiveslbf= LinLibertineTZI-lf-ly1 at5pt
+%
+% caps
+\font\twentycaps= LinLibertineT-lf-sc-ly1 at20pt
+\font\eighteencaps= LinLibertineT-lf-sc-ly1 at18pt
+\font\sixteencaps= LinLibertineT-lf-sc-ly1 at16pt
+\font\fourteencaps= LinLibertineT-lf-sc-ly1 at14pt
+\font\twelvecaps= LinLibertineT-lf-sc-ly1 at12pt
+\font\caps= LinLibertineT-lf-sc-ly1
+\font\ninecaps= LinLibertineT-lf-sc-ly1 at9pt
+\font\eightcaps= LinLibertineT-lf-sc-ly1 at8pt
+\font\sevencaps= LinLibertineT-lf-sc-ly1 at7pt
+\font\sixcaps= LinLibertineT-lf-sc-ly1 at6pt
+\font\fivecaps= LinLibertineT-lf-sc-ly1 at5pt
+%
+% caps boldface
+\font\twentycapsbf= LinLibertineTZ-lf-sc-ly1 at20pt
+\font\eighteencapsbf= LinLibertineTZ-lf-sc-ly1 at18pt
+\font\sixteencapsbf= LinLibertineTZ-lf-sc-ly1 at16pt
+\font\fourteencapsbf= LinLibertineTZ-lf-sc-ly1 at14pt
+\font\twelvecapsbf= LinLibertineTZ-lf-sc-ly1 at12pt
+\font\capsbf= LinLibertineTZ-lf-sc-ly1
+\font\ninecapsbf= LinLibertineTZ-lf-sc-ly1 at9pt
+\font\eightcapsbf= LinLibertineTZ-lf-sc-ly1 at8pt
+\font\sevencapsbf= LinLibertineTZ-lf-sc-ly1 at7pt
+\font\sixcapsbf= LinLibertineTZ-lf-sc-ly1 at6pt
+\font\fivecapsbf= LinLibertineTZ-lf-sc-ly1 at5pt
+%
+% Some missing glyphs
+\font\tenmiss=txr at9.7pt
+\font\sevenmiss=txr at6.79pt
+\font\fivemiss=txr at4.85pt
+%
+\newfam\misscharfam
+\textfont\misscharfam=\tenmiss
+\scriptfont\misscharfam=\sevenmiss
+\scriptscriptfont\misscharfam=\fivemiss
+%
+\def\Gamma{{\fam=\misscharfam \mathchar"7800}}%
+\def\Delta{{\fam=\misscharfam \mathchar"7801}}%
+\def\Theta{{\fam=\misscharfam \mathchar"7802}}%
+\def\Lambda{{\fam=\misscharfam \mathchar"7803}}%
+\def\Xi{{\fam=\misscharfam \mathchar"7804}}%
+\def\Pi{{\fam=\misscharfam \mathchar"7805}}%
+\def\Sigma{{\fam=\misscharfam \mathchar"7806}}%
+\def\Upsilon{{\fam=\misscharfam \mathchar"7807}}%
+\def\Phi{{\fam=\misscharfam \mathchar"7808}}%
+\def\Psi{{\fam=\misscharfam \mathchar"7809}}%
+\def\Omega{{\fam=\misscharfam \mathchar"780A}}%
+%
+% AMS Symbols
+\def\loadmsam{\font\tenmsa=txsya at9.7pt \font\sevenmsa=txsya at6.79pt \font\fivemsa=txsya at4.85pt \fam\msafam \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\def\loadmsbm{\font\tenmsb=txsyb at9.7pt\font\sevenmsb=txsyb at6.79pt\font\fivemsb=txsyb at4.85pt \fam\msbfam \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\def\UseAMSsymbols{\loadmsam\loadmsbm}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_mdutopia.tex b/macros/plain/contrib/font-change/tex/macros/font_mdutopia.tex
new file mode 100644
index 0000000000..b95ab4ab40
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_mdutopia.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=mdputr7t at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=mdputr7t at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= mdputr7t at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=mdputr7t at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= mdputr7t at12pt \fzzozznzzt}%
+\font\tenrm= mdputr7t % futr8r of fourier, as putr8r of adobe misses \Delta
+\def\ninerm{\font\fzzozznzzt= mdputr7t at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= mdputr7t at8pt \fzzozznzzt}%
+\font\sevenrm= mdputr7t at7pt
+\def\sixrm{\font\fzzozznzzt= mdputr7t at6pt \fzzozznzzt}%
+\font\fiverm= mdputr7t at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= mdputri7m at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= mdputri7m at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= mdputri7m at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= mdputri7m at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= mdputri7m at12pt \fzzozznzzt}%
+\font\teni= mdputri7m% mdputri7m of mathdesign works but spacing problem needs \fontdimen2\teni (e.g. dx)
+\def\ninei{\font\fzzozznzzt= mdputri7m at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= mdputri7m at8pt \fzzozznzzt}%
+\font\seveni= mdputri7m at7pt
+\def\sixi{\font\fzzozznzzt= mdputri7m at6pt \fzzozznzzt}%
+\font\fivei= mdputri7m at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= md-utr7y at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=md-utr7y at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= md-utr7y at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=md-utr7y at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= md-utr7y at12pt \fzzozznzzt}%
+\font\tensy= md-utr7y % md-utr7y of mathdesign also works
+\def\ninesy{\font\fzzozznzzt= md-utr7y at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= md-utr7y at8pt \fzzozznzzt}%
+\font\sevensy= md-utr7y at7pt
+\def\sixsy{\font\fzzozznzzt= md-utr7y at6pt \fzzozznzzt}%
+\font\fivesy= md-utr7y at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= mdputr7v at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=mdputr7v at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= mdputr7v at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=mdputr7v at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= mdputr7v at12pt \fzzozznzzt}%
+\font\tenex= mdputr7v % fourier-mex of fourier works too
+\def\nineex{\font\fzzozznzzt= mdputr7v at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= mdputr7v at8pt \fzzozznzzt}%
+\font\sevenex= mdputr7v at7pt
+\def\sixex{\font\fzzozznzzt= mdputr7v at6pt \fzzozznzzt}%
+\font\fiveex= mdputr7v at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= mdputri7t at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=mdputri7t at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= mdputri7t at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= mdputri7t at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= mdputri7t at12pt \fzzozznzzt}%
+\font\tenit= mdputri7t
+\def\nineit{\font\fzzozznzzt= mdputri7t at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= mdputri7t at8pt \fzzozznzzt}%
+\font\sevenit= mdputri7t at7pt
+\def\sixit{\font\fzzozznzzt= mdputri7t at6pt \fzzozznzzt}%
+\font\fiveit= mdputri7t at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= mdputro7t at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=mdputro7t at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= mdputro7t at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= mdputro7t at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= mdputro7t at12pt \fzzozznzzt}%
+\font\tensl= mdputro7t
+\def\ninesl{\font\fzzozznzzt= mdputro7t at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= mdputro7t at8pt \fzzozznzzt}%
+\font\sevensl= mdputro7t at7pt
+\def\sixsl{\font\fzzozznzzt= mdputro7t at6pt \fzzozznzzt}%
+\font\fivesl= mdputro7t at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= mdputb7t at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= mdputb7t at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= mdputb7t at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= mdputb7t at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= mdputb7t at12pt \fzzozznzzt}%
+\font\tenbf= mdputb7t
+\def\ninebf{\font\fzzozznzzt= mdputb7t at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= mdputb7t at8pt \fzzozznzzt}%
+\font\sevenbf= mdputb7t at7pt
+\def\sixbf{\font\fzzozznzzt= mdputb7t at6pt \fzzozznzzt}%
+\font\fivebf= mdputb7t at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= mdputbi7t at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= mdputbi7t at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= mdputbi7t at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= mdputbi7t at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= mdputbi7t at12pt \fzzozznzzt}%
+\font\itbf= mdputbi7t
+\def\nineitbf{\font\fzzozznzzt= mdputbi7t at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= mdputbi7t at8pt \fzzozznzzt}%
+\font\sevenitbf= mdputbi7t at7pt
+\def\sixitbf{\font\fzzozznzzt= mdputbi7t at6pt \fzzozznzzt}%
+\font\fiveitbf= mdputbi7t at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= mdputbo7t at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= mdputbo7t at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= mdputbo7t at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= mdputbo7t at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= mdputbo7t at12pt \fzzozznzzt}%
+\font\slbf= mdputbo7t
+\def\nineslbf{\font\fzzozznzzt= mdputbo7t at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= mdputbo7t at8pt \fzzozznzzt}%
+\font\sevenslbf= mdputbo7t at7pt
+\def\sixslbf{\font\fzzozznzzt= mdputbo7t at6pt \fzzozznzzt}%
+\font\fiveslbf= mdputbo7t at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= mdputrfc8t at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= mdputrfc8t at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= mdputrfc8t at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= mdputrfc8t at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= mdputrfc8t at12pt \fzzozznzzt}%
+\font\caps= mdputrfc8t % putrc7t from Adobe can be used to get \l etc.
+\def\ninecaps{\font\fzzozznzzt= mdputrfc8t at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= mdputrfc8t at8pt \fzzozznzzt}%
+\font\sevencaps= mdputrfc8t at7pt
+\def\sixcaps{\font\fzzozznzzt= mdputrfc8t at6pt \fzzozznzzt}%
+\font\fivecaps= mdputrfc8t at5pt
+%
+% caps bold
+\def\twentycapsbf{\font\fzzozznzzt= mdputbfc8t at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= mdputbfc8t at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= mdputbfc8t at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= mdputbfc8t at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= mdputbfc8t at12pt \fzzozznzzt}%
+\font\capsbf= mdputbfc8t
+\def\ninecapsbf{\font\fzzozznzzt= mdputbfc8t at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= mdputbfc8t at8pt \fzzozznzzt}%
+\font\sevencapsbf= mdputbfc8t at7pt
+\def\sixcapsbf{\font\fzzozznzzt= mdputbfc8t at6pt \fzzozznzzt}%
+\font\fivecapsbf= mdputbfc8t at5pt
+%
+%\fontdimen2\teni=-0.01pt % needed with md... mathdesign family, this even improves mdputri7m and gives best results
+%
+%\skewchar\teni='177 \skewchar\seveni='177 \skewchar\fivei='177%
+%\skewchar\tensy='60 \skewchar\sevensy='60 \skewchar\fivesy='60%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_pagella.tex b/macros/plain/contrib/font-change/tex/macros/font_pagella.tex
new file mode 100644
index 0000000000..e3f933f6f8
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_pagella.tex
@@ -0,0 +1,216 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=rm-qplr at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=rm-qplr at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= rm-qplr at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=rm-qplr at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= rm-qplr at12pt \fzzozznzzt}%
+\font\tenrm= rm-qplr% rm-qplr (TeX encoding) offers better rendering of letters D and T, and has the ff ligature.
+\def\ninerm{\font\fzzozznzzt= rm-qplr at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= rm-qplr at8pt \fzzozznzzt}%
+\font\sevenrm= rm-qplr at7pt
+\def\sixrm{\font\fzzozznzzt= rm-qplr at6pt \fzzozznzzt}%
+\font\fiverm= rm-qplr at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= zplmr7m at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= zplmr7m at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= zplmr7m at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= zplmr7m at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= zplmr7m at12pt \fzzozznzzt}%
+\font\teni= zplmr7m
+\def\ninei{\font\fzzozznzzt= zplmr7m at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= zplmr7m at8pt \fzzozznzzt}%
+\font\seveni= zplmr7m at7pt
+\def\sixi{\font\fzzozznzzt= zplmr7m at6pt \fzzozznzzt}%
+\font\fivei= zplmr7m at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= zplmr7y at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=zplmr7y at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= zplmr7y at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=zplmr7y at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= zplmr7y at12pt \fzzozznzzt}%
+\font\tensy= zplmr7y
+\def\ninesy{\font\fzzozznzzt= zplmr7y at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= zplmr7y at8pt \fzzozznzzt}%
+\font\sevensy= zplmr7y at7pt
+\def\sixsy{\font\fzzozznzzt= zplmr7y at6pt \fzzozznzzt}%
+\font\fivesy= zplmr7y at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= zplmr7v at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=zplmr7v at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= zplmr7v at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=zplmr7v at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= zplmr7v at12pt \fzzozznzzt}%
+\font\tenex= zplmr7v
+\def\nineex{\font\fzzozznzzt= zplmr7v at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= zplmr7v at8pt \fzzozznzzt}%
+\font\sevenex= zplmr7v at7pt
+\def\sixex{\font\fzzozznzzt= zplmr7v at6pt \fzzozznzzt}%
+\font\fiveex= zplmr7v at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= rm-qplri at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=rm-qplri at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= rm-qplri at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= rm-qplri at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= rm-qplri at12pt \fzzozznzzt}%
+\font\tenit= rm-qplri
+\def\nineit{\font\fzzozznzzt= rm-qplri at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= rm-qplri at8pt \fzzozznzzt}%
+\font\sevenit= rm-qplri at7pt
+\def\sixit{\font\fzzozznzzt= rm-qplri at6pt \fzzozznzzt}%
+\font\fiveit= rm-qplri at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= pxsl at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=pxsl at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= pxsl at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= pxsl at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= pxsl at12pt \fzzozznzzt}%
+\font\tensl= pxsl
+\def\ninesl{\font\fzzozznzzt= pxsl at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= pxsl at8pt \fzzozznzzt}%
+\font\sevensl= pxsl at7pt
+\def\sixsl{\font\fzzozznzzt= pxsl at6pt \fzzozznzzt}%
+\font\fivesl= pxsl at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= rm-qplb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= rm-qplb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= rm-qplb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= rm-qplb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= rm-qplb at12pt \fzzozznzzt}%
+\font\tenbf= rm-qplb
+\def\ninebf{\font\fzzozznzzt= rm-qplb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= rm-qplb at8pt \fzzozznzzt}%
+\font\sevenbf= rm-qplb at7pt
+\def\sixbf{\font\fzzozznzzt= rm-qplb at6pt \fzzozznzzt}%
+\font\fivebf= rm-qplb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= cmtt10 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= cmtt10 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= cmtt10 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=cmtt10 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= cmtt10 at12pt \fzzozznzzt}%
+\font\tentt= cmtt10
+\def\ninett{\font\fzzozznzzt= cmtt9 \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= cmtt8 \fzzozznzzt}%
+\font\seventt= cmtt10 at7pt
+\def\sixtt{\font\fzzozznzzt= cmtt10 at6pt \fzzozznzzt}%
+\font\fivett= cmtt10 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= rm-qplbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= rm-qplbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= rm-qplbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= rm-qplbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= rm-qplbi at12pt \fzzozznzzt}%
+\font\itbf= rm-qplbi
+\def\nineitbf{\font\fzzozznzzt= rm-qplbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= rm-qplbi at8pt \fzzozznzzt}%
+\font\sevenitbf= rm-qplbi at7pt
+\def\sixitbf{\font\fzzozznzzt= rm-qplbi at6pt \fzzozznzzt}%
+\font\fiveitbf= rm-qplbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= pxbsl at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= pxbsl at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= pxbsl at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= pxbsl at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= pxbsl at12pt \fzzozznzzt}%
+\font\slbf= pxbsl
+\def\nineslbf{\font\fzzozznzzt= pxbsl at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= pxbsl at8pt \fzzozznzzt}%
+\font\sevenslbf= pxbsl at7pt
+\def\sixslbf{\font\fzzozznzzt= pxbsl at6pt \fzzozznzzt}%
+\font\fiveslbf= pxbsl at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= rm-qplr-sc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= rm-qplr-sc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= rm-qplr-sc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= rm-qplr-sc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= rm-qplr-sc at12pt \fzzozznzzt}%
+\font\caps= rm-qplr-sc % rm-qplr-sc of TeX Gyre or pplrc7t of Adobe can also be used.
+\def\ninecaps{\font\fzzozznzzt= rm-qplr-sc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= rm-qplr-sc at8pt \fzzozznzzt}%
+\font\sevencaps= rm-qplr-sc at7pt
+\def\sixcaps{\font\fzzozznzzt= rm-qplr-sc at6pt \fzzozznzzt}%
+\font\fivecaps= rm-qplr-sc at5pt
+%
+\def\twentycapsbf{\font\fzzozznzzt= rm-qplb-sc at20pt \fzzozznzzt}%
+% caps boldface
+\def\eighteencapsbf{\font\fzzozznzzt= rm-qplb-sc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= rm-qplb-sc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= rm-qplb-sc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= rm-qplb-sc at12pt \fzzozznzzt}%
+\font\capsbf= rm-qplb-sc % rm-qplb-sc of TeX Gyre or pplrc7t of Adobe can also be used.
+\def\ninecapsbf{\font\fzzozznzzt= rm-qplb-sc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= rm-qplb-sc at8pt \fzzozznzzt}%
+\font\sevencapsbf= rm-qplb-sc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= rm-qplb-sc at6pt \fzzozznzzt}%
+\font\fivecapsbf= rm-qplb-sc at5pt
+%
+% AMS Symbols
+\def\loadmsam{\font\tenmsa=pxsya \font\sevenmsa=pxsya at7pt \font\fivemsa=pxsya at5pt \fam\msafam \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\def\loadmsbm{\font\tenmsb=pxsyb \font\sevenmsb=pxsyb at7pt \font\fivemsb=pxsyb at5pt \fam\msbfam \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\def\UseAMSsymbols{\loadmsam\loadmsbm}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_palatino.tex b/macros/plain/contrib/font-change/tex/macros/font_palatino.tex
new file mode 100644
index 0000000000..0050c8a4d8
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_palatino.tex
@@ -0,0 +1,216 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=pxr at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=pxr at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= pxr at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=pxr at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= pxr at12pt \fzzozznzzt}%
+\font\tenrm= pxr% rm-qplr (TeX encoding) offers better rendering of letters D and T, and has the ff ligature.
+\def\ninerm{\font\fzzozznzzt= pxr at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= pxr at8pt \fzzozznzzt}%
+\font\sevenrm= pxr at7pt
+\def\sixrm{\font\fzzozznzzt= pxr at6pt \fzzozznzzt}%
+\font\fiverm= pxr at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= pxmi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= pxmi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= pxmi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= pxmi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= pxmi at12pt \fzzozznzzt}%
+\font\teni= pxmi
+\def\ninei{\font\fzzozznzzt= pxmi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= pxmi at8pt \fzzozznzzt}%
+\font\seveni= pxmi at7pt
+\def\sixi{\font\fzzozznzzt= pxmi at6pt \fzzozznzzt}%
+\font\fivei= pxmi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= pxsy at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=pxsy at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= pxsy at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=pxsy at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= pxsy at12pt \fzzozznzzt}%
+\font\tensy= pxsy
+\def\ninesy{\font\fzzozznzzt= pxsy at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= pxsy at8pt \fzzozznzzt}%
+\font\sevensy= pxsy at7pt
+\def\sixsy{\font\fzzozznzzt= pxsy at6pt \fzzozznzzt}%
+\font\fivesy= pxsy at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= pxex at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=pxex at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= pxex at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=pxex at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= pxex at12pt \fzzozznzzt}%
+\font\tenex= pxex
+\def\nineex{\font\fzzozznzzt= pxex at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= pxex at8pt \fzzozznzzt}%
+\font\sevenex= pxex at7pt
+\def\sixex{\font\fzzozznzzt= pxex at6pt \fzzozznzzt}%
+\font\fiveex= pxex at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= pxi at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=pxi at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= pxi at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= pxi at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= pxi at12pt \fzzozznzzt}%
+\font\tenit= pxi
+\def\nineit{\font\fzzozznzzt= pxi at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= pxi at8pt \fzzozznzzt}%
+\font\sevenit= pxi at7pt
+\def\sixit{\font\fzzozznzzt= pxi at6pt \fzzozznzzt}%
+\font\fiveit= pxi at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= pxsl at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=pxsl at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= pxsl at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= pxsl at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= pxsl at12pt \fzzozznzzt}%
+\font\tensl= pxsl
+\def\ninesl{\font\fzzozznzzt= pxsl at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= pxsl at8pt \fzzozznzzt}%
+\font\sevensl= pxsl at7pt
+\def\sixsl{\font\fzzozznzzt= pxsl at6pt \fzzozznzzt}%
+\font\fivesl= pxsl at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= pxb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= pxb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= pxb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= pxb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= pxb at12pt \fzzozznzzt}%
+\font\tenbf= pxb
+\def\ninebf{\font\fzzozznzzt= pxb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= pxb at8pt \fzzozznzzt}%
+\font\sevenbf= pxb at7pt
+\def\sixbf{\font\fzzozznzzt= pxb at6pt \fzzozznzzt}%
+\font\fivebf= pxb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= cmtt10 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= cmtt10 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= cmtt10 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=cmtt10 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= cmtt10 at12pt \fzzozznzzt}%
+\font\tentt= cmtt10
+\def\ninett{\font\fzzozznzzt= cmtt9 \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= cmtt8 \fzzozznzzt}%
+\font\seventt= cmtt10 at7pt
+\def\sixtt{\font\fzzozznzzt= cmtt10 at6pt \fzzozznzzt}%
+\font\fivett= cmtt10 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= pxbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= pxbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= pxbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= pxbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= pxbi at12pt \fzzozznzzt}%
+\font\itbf= pxbi
+\def\nineitbf{\font\fzzozznzzt= pxbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= pxbi at8pt \fzzozznzzt}%
+\font\sevenitbf= pxbi at7pt
+\def\sixitbf{\font\fzzozznzzt= pxbi at6pt \fzzozznzzt}%
+\font\fiveitbf= pxbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= pxbsl at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= pxbsl at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= pxbsl at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= pxbsl at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= pxbsl at12pt \fzzozznzzt}%
+\font\slbf= pxbsl
+\def\nineslbf{\font\fzzozznzzt= pxbsl at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= pxbsl at8pt \fzzozznzzt}%
+\font\sevenslbf= pxbsl at7pt
+\def\sixslbf{\font\fzzozznzzt= pxbsl at6pt \fzzozznzzt}%
+\font\fiveslbf= pxbsl at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= pxsc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= pxsc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= pxsc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= pxsc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= pxsc at12pt \fzzozznzzt}%
+\font\caps= pxsc % rm-qplr-sc of TeX Gyre or pplrc7t of Adobe can also be used.
+\def\ninecaps{\font\fzzozznzzt= pxsc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= pxsc at8pt \fzzozznzzt}%
+\font\sevencaps= pxsc at7pt
+\def\sixcaps{\font\fzzozznzzt= pxsc at6pt \fzzozznzzt}%
+\font\fivecaps= pxsc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= pxbsc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= pxbsc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= pxbsc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= pxbsc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= pxbsc at12pt \fzzozznzzt}%
+\font\capsbf= pxbsc % rm-qplb-sc of TeX Gyre or pplrc7t of Adobe can also be used.
+\def\ninecapsbf{\font\fzzozznzzt= pxbsc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= pxbsc at8pt \fzzozznzzt}%
+\font\sevencapsbf= pxbsc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= pxbsc at6pt \fzzozznzzt}%
+\font\fivecapsbf= pxbsc at5pt
+%
+% AMS Symbols
+\def\loadmsam{\font\tenmsa=pxsya \font\sevenmsa=pxsya at7pt \font\fivemsa=pxsya at5pt \fam\msafam \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\def\loadmsbm{\font\tenmsb=pxsyb \font\sevenmsb=pxsyb at7pt \font\fivemsb=pxsyb at5pt \fam\msbfam \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\def\UseAMSsymbols{\loadmsam\loadmsbm}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_times.tex b/macros/plain/contrib/font-change/tex/macros/font_times.tex
new file mode 100644
index 0000000000..0f1590c1f3
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_times.tex
@@ -0,0 +1,216 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=txr at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=txr at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= txr at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=txr at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= txr at12pt \fzzozznzzt}%
+\font\tenrm= txr
+\def\ninerm{\font\fzzozznzzt= txr at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= txr at8pt \fzzozznzzt}%
+\font\sevenrm= txr at7pt
+\def\sixrm{\font\fzzozznzzt= txr at6pt \fzzozznzzt}%
+\font\fiverm= txr at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= txmi at20pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= txmi at18pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= txmi at16pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= txmi at14pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= txmi at12pt \fzzozznzzt}%
+\font\teni= txmi
+\def\ninei{\font\fzzozznzzt= txmi at9pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= txmi at8pt \fzzozznzzt}%
+\font\seveni= txmi at7pt
+\def\sixi{\font\fzzozznzzt= txmi at6pt \fzzozznzzt}%
+\font\fivei= txmi at5pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= txsy at20pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=txsy at18pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= txsy at16pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=txsy at14pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= txsy at12pt \fzzozznzzt}%
+\font\tensy= txsy
+\def\ninesy{\font\fzzozznzzt= txsy at9pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= txsy at8pt \fzzozznzzt}%
+\font\sevensy= txsy at7pt
+\def\sixsy{\font\fzzozznzzt= txsy at6pt \fzzozznzzt}%
+\font\fivesy= txsy at5pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= txex at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=txex at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= txex at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=txex at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= txex at12pt \fzzozznzzt}%
+\font\tenex= txex
+\def\nineex{\font\fzzozznzzt= txex at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= txex at8pt \fzzozznzzt}%
+\font\sevenex= txex at7pt
+\def\sixex{\font\fzzozznzzt= txex at6pt \fzzozznzzt}%
+\font\fiveex= txex at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= txi at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=txi at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= txi at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= txi at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= txi at12pt \fzzozznzzt}%
+\font\tenit= txi
+\def\nineit{\font\fzzozznzzt= txi at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= txi at8pt \fzzozznzzt}%
+\font\sevenit= txi at7pt
+\def\sixit{\font\fzzozznzzt= txi at6pt \fzzozznzzt}%
+\font\fiveit= txi at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= txsl at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=txsl at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= txsl at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= txsl at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= txsl at12pt \fzzozznzzt}%
+\font\tensl= txsl
+\def\ninesl{\font\fzzozznzzt= txsl at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= txsl at8pt \fzzozznzzt}%
+\font\sevensl= txsl at7pt
+\def\sixsl{\font\fzzozznzzt= txsl at6pt \fzzozznzzt}%
+\font\fivesl= txsl at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= txb at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= txb at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= txb at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= txb at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= txb at12pt \fzzozznzzt}%
+\font\tenbf= txb
+\def\ninebf{\font\fzzozznzzt= txb at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= txb at8pt \fzzozznzzt}%
+\font\sevenbf= txb at7pt
+\def\sixbf{\font\fzzozznzzt= txb at6pt \fzzozznzzt}%
+\font\fivebf= txb at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= txtt at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= txtt at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= txtt at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=txtt at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= txtt at12pt \fzzozznzzt}%
+\font\tentt= txtt
+\def\ninett{\font\fzzozznzzt= txtt at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= txtt at8pt \fzzozznzzt}%
+\font\seventt= txtt at7pt
+\def\sixtt{\font\fzzozznzzt= txtt at6pt \fzzozznzzt}%
+\font\fivett= txtt at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= txbi at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= txbi at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= txbi at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= txbi at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= txbi at12pt \fzzozznzzt}%
+\font\itbf= txbi
+\def\nineitbf{\font\fzzozznzzt= txbi at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= txbi at8pt \fzzozznzzt}%
+\font\sevenitbf= txbi at7pt
+\def\sixitbf{\font\fzzozznzzt= txbi at6pt \fzzozznzzt}%
+\font\fiveitbf= txbi at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= txbsl at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= txbsl at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= txbsl at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= txbsl at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= txbsl at12pt \fzzozznzzt}%
+\font\slbf= txbsl
+\def\nineslbf{\font\fzzozznzzt= txbsl at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= txbsl at8pt \fzzozznzzt}%
+\font\sevenslbf= txbsl at7pt
+\def\sixslbf{\font\fzzozznzzt= txbsl at6pt \fzzozznzzt}%
+\font\fiveslbf= txbsl at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= txsc at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= txsc at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= txsc at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= txsc at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= txsc at12pt \fzzozznzzt}%
+\font\caps= txsc % rm-qtmr-sc of TeX Gyre or ptmrc7t of Adobe can also be used.
+\def\ninecaps{\font\fzzozznzzt= txsc at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= txsc at8pt \fzzozznzzt}%
+\font\sevencaps= txsc at7pt
+\def\sixcaps{\font\fzzozznzzt= txsc at6pt \fzzozznzzt}%
+\font\fivecaps= txsc at5pt
+%
+% caps boldface
+\def\twentycapsbf{\font\fzzozznzzt= txbsc at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= txbsc at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= txbsc at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= txbsc at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= txbsc at12pt \fzzozznzzt}%
+\font\capsbf= txbsc % rm-qtmb-sc of TeX Gyre or ptmbc7t of Adobe can also be used.
+\def\ninecapsbf{\font\fzzozznzzt= txbsc at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= txbsc at8pt \fzzozznzzt}%
+\font\sevencapsbf= txbsc at7pt
+\def\sixcapsbf{\font\fzzozznzzt= txbsc at6pt \fzzozznzzt}%
+\font\fivecapsbf= txbsc at5pt
+%
+% AMS Symbols
+\def\loadmsam{\font\tenmsa=txsya \font\sevenmsa=txsya at7pt \font\fivemsa=txsya at5pt \fam\msafam \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa \global\let\loadmsam\empty}%
+\def\loadmsbm{\font\tenmsb=txsyb \font\sevenmsb=txsyb at7pt \font\fivemsb=txsyb at5pt \fam\msbfam \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb \global\let\loadmsbm\empty}%
+\def\UseAMSsymbols{\loadmsam\loadmsbm}%
+%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font-change/tex/macros/font_utopia.tex b/macros/plain/contrib/font-change/tex/macros/font_utopia.tex
new file mode 100644
index 0000000000..61475ea55d
--- /dev/null
+++ b/macros/plain/contrib/font-change/tex/macros/font_utopia.tex
@@ -0,0 +1,215 @@
+% The author of this work is Amit Raj Dhawan
+% This work has been released under
+% Creative Commons Attribution-Share Alike 3.0 Unported License
+% on July 19, 2010. For details visit:
+% http://creativecommons.org/licenses/by-sa/3.0/.
+%
+% roman text (Family 0)
+\def\twentyrm{\font\fzzozznzzt=mdputr7t at20pt \fzzozznzzt}%
+\def\eighteenrm{\font\fzzozznzzt=mdputr7t at18pt \fzzozznzzt}%
+\def\sixteenrm{\font\fzzozznzzt= mdputr7t at16pt \fzzozznzzt}%
+\def\fourteenrm{\font\fzzozznzzt=mdputr7t at14pt \fzzozznzzt}%
+\def\twelverm{\font\fzzozznzzt= mdputr7t at12pt \fzzozznzzt}%
+\font\tenrm= mdputr7t % futr8r of fourier, as putr8r of adobe misses \Delta
+\def\ninerm{\font\fzzozznzzt= mdputr7t at9pt \fzzozznzzt}%
+\def\eightrm{\font\fzzozznzzt= mdputr7t at8pt \fzzozznzzt}%
+\font\sevenrm= mdputr7t at7pt
+\def\sixrm{\font\fzzozznzzt= mdputr7t at6pt \fzzozznzzt}%
+\font\fiverm= mdputr7t at5pt
+%
+% math italic (Family 1)
+\def\twentyi{\font\fzzozznzzt= futmii at21.68pt \fzzozznzzt}%
+\def\eighteeni{\font\fzzozznzzt= futmii at19.51pt \fzzozznzzt}%
+\def\sixteeni{\font\fzzozznzzt= futmii at17.34pt \fzzozznzzt}%
+\def\fourteeni{\font\fzzozznzzt= futmii at15.18pt \fzzozznzzt}%
+\def\twelvei{\font\fzzozznzzt= futmii at13.01pt \fzzozznzzt}%
+\font\teni= futmii at10.84pt% To compensate with mdutopia height. mdputri7m of mathdesign works but spacing problem needs \fontdimen2\teni (e.g. dx)
+\def\ninei{\font\fzzozznzzt= futmii at9.76pt \fzzozznzzt}%
+\def\eighti{\font\fzzozznzzt= futmii at8.67pt \fzzozznzzt}%
+\font\seveni= futmii at7.59pt
+\def\sixi{\font\fzzozznzzt= futmii at6.5pt \fzzozznzzt}%
+\font\fivei= futmii at5.42pt
+%
+% math symbols (Family 2)
+\def\twentysy{\font\fzzozznzzt= futsy at21.68pt \fzzozznzzt}%
+\def\eighteensy{\font\fzzozznzzt=futsy at19.51pt \fzzozznzzt}%
+\def\sixteensy{\font\fzzozznzzt= futsy at17.34pt \fzzozznzzt}%
+\def\fourteensy{\font\fzzozznzzt=futsy at15.18pt \fzzozznzzt}%
+\def\twelvesy{\font\fzzozznzzt= futsy at13.01pt \fzzozznzzt}%
+\font\tensy= futsy at10.84pt% md-utr7y of mathdesign also works
+\def\ninesy{\font\fzzozznzzt= futsy at9.76pt \fzzozznzzt}%
+\def\eightsy{\font\fzzozznzzt= futsy at8.67pt \fzzozznzzt}%
+\font\sevensy= futsy at7.59pt
+\def\sixsy{\font\fzzozznzzt= futsy at6.5pt \fzzozznzzt}%
+\font\fivesy= futsy at5.42pt
+%
+% math extension (Family 3)
+\def\twentyex{\font\fzzozznzzt= mdputr7v at20pt \fzzozznzzt}%
+\def\eighteenex{\font\fzzozznzzt=mdputr7v at18pt \fzzozznzzt}%
+\def\sixteenex{\font\fzzozznzzt= mdputr7v at16pt \fzzozznzzt}%
+\def\fourteenex{\font\fzzozznzzt=mdputr7v at14pt \fzzozznzzt}%
+\def\twelveex{\font\fzzozznzzt= mdputr7v at12pt \fzzozznzzt}%
+\font\tenex= mdputr7v % fourier-mex of fourier works too
+\def\nineex{\font\fzzozznzzt= mdputr7v at9pt \fzzozznzzt}%
+\def\eightex{\font\fzzozznzzt= mdputr7v at8pt \fzzozznzzt}%
+\font\sevenex= mdputr7v at7pt
+\def\sixex{\font\fzzozznzzt= mdputr7v at6pt \fzzozznzzt}%
+\font\fiveex= mdputr7v at5pt
+%
+% italic text (Family 4)
+\def\twentyit{\font\fzzozznzzt= mdputri7t at20pt \fzzozznzzt}%
+\def\eighteenit{\font\fzzozznzzt=mdputri7t at18pt \fzzozznzzt}%
+\def\sixteenit{\font\fzzozznzzt= mdputri7t at16pt \fzzozznzzt}%
+\def\fourteenit{\font\fzzozznzzt= mdputri7t at14pt \fzzozznzzt}%
+\def\twelveit{\font\fzzozznzzt= mdputri7t at12pt \fzzozznzzt}%
+\font\tenit= mdputri7t
+\def\nineit{\font\fzzozznzzt= mdputri7t at9pt \fzzozznzzt}%
+\def\eightit{\font\fzzozznzzt= mdputri7t at8pt \fzzozznzzt}%
+\font\sevenit= mdputri7t at7pt
+\def\sixit{\font\fzzozznzzt= mdputri7t at6pt \fzzozznzzt}%
+\font\fiveit= mdputri7t at5pt
+%
+% slanted text (Family 5)
+\def\twentysl{\font\fzzozznzzt= mdputro7t at20pt \fzzozznzzt}%
+\def\eighteensl{\font\fzzozznzzt=mdputro7t at18pt \fzzozznzzt}%
+\def\sixteensl{\font\fzzozznzzt= mdputro7t at16pt \fzzozznzzt}%
+\def\fourteensl{\font\fzzozznzzt= mdputro7t at14pt \fzzozznzzt}%
+\def\twelvesl{\font\fzzozznzzt= mdputro7t at12pt \fzzozznzzt}%
+\font\tensl= mdputro7t
+\def\ninesl{\font\fzzozznzzt= mdputro7t at9pt \fzzozznzzt}%
+\def\eightsl{\font\fzzozznzzt= mdputro7t at8pt \fzzozznzzt}%
+\font\sevensl= mdputro7t at7pt
+\def\sixsl{\font\fzzozznzzt= mdputro7t at6pt \fzzozznzzt}%
+\font\fivesl= mdputro7t at5pt
+%
+% boldface text (Family 6)
+\def\twentybf{\font\fzzozznzzt= mdputb7t at20pt \fzzozznzzt}%
+\def\eighteenbf{\font\fzzozznzzt= mdputb7t at18pt \fzzozznzzt}%
+\def\sixteenbf{\font\fzzozznzzt= mdputb7t at16pt \fzzozznzzt}%
+\def\fourteenbf{\font\fzzozznzzt= mdputb7t at14pt \fzzozznzzt}%
+\def\twelvebf{\font\fzzozznzzt= mdputb7t at12pt \fzzozznzzt}%
+\font\tenbf= mdputb7t
+\def\ninebf{\font\fzzozznzzt= mdputb7t at9pt \fzzozznzzt}%
+\def\eightbf{\font\fzzozznzzt= mdputb7t at8pt \fzzozznzzt}%
+\font\sevenbf= mdputb7t at7pt
+\def\sixbf{\font\fzzozznzzt= mdputb7t at6pt \fzzozznzzt}%
+\font\fivebf= mdputb7t at5pt
+%
+% typewriter text (Family 7)
+\def\twentytt{\font\fzzozznzzt= ly1-zi4r-1 at20pt \fzzozznzzt}%
+\def\eighteentt{\font\fzzozznzzt= ly1-zi4r-1 at18pt \fzzozznzzt}%
+\def\sixteentt{\font\fzzozznzzt= ly1-zi4r-1 at16pt \fzzozznzzt}%
+\def\fourteentt{\font\fzzozznzzt=ly1-zi4r-1 at14pt \fzzozznzzt}%
+\def\twelvett{\font\fzzozznzzt= ly1-zi4r-1 at12pt \fzzozznzzt}%
+\font\tentt= ly1-zi4r-1
+\def\ninett{\font\fzzozznzzt= ly1-zi4r-1 at9pt \fzzozznzzt}%
+\def\eighttt{\font\fzzozznzzt= ly1-zi4r-1 at8pt \fzzozznzzt}%
+\font\seventt= ly1-zi4r-1 at7pt
+\def\sixtt{\font\fzzozznzzt= ly1-zi4r-1 at6pt \fzzozznzzt}%
+\font\fivett= ly1-zi4r-1 at5pt
+%
+% Family 0 (roman text)
+\textfont0=\tenrm
+\scriptfont0=\sevenrm
+\scriptscriptfont0=\fiverm
+\def\rm{\fam=0 \tenrm}%
+%
+% Family 1 (math italic)
+\textfont1=\teni
+\scriptfont1=\seveni
+\scriptscriptfont1=\fivei
+\def\mit{\fam=1}%
+%
+% Family 2 (math symbol)
+\textfont2=\tensy
+\scriptfont2=\sevensy
+\scriptscriptfont2=\fivesy
+\def\cal{\fam=2}%
+%
+% Family 3 (math extension)
+\textfont3=\tenex
+\scriptfont3=\sevenex
+\scriptscriptfont3=\fiveex
+%
+% Family 4 (italic text)
+\def\it{\fam=\itfam \tenit}%
+\textfont\itfam=\tenit
+\scriptfont\itfam=\sevenit
+\scriptscriptfont\itfam=\fiveit
+%
+% Family 5 (slanted text)
+\def\sl{\fam=\slfam \tensl}%
+\textfont\slfam=\tensl
+\scriptfont\slfam=\sevensl
+\scriptscriptfont\slfam=\fivesl
+%
+% Family 6 (boldface text)
+\def\bf{\fam=\bffam \tenbf}%
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf
+\scriptscriptfont\bffam=\fivebf
+%
+% Family 7 (typewriter text)
+\def\tt{\fam=\ttfam \tentt}%
+\textfont\ttfam=\tentt
+\scriptfont\ttfam=\seventt
+\scriptscriptfont\ttfam=\fivett
+%
+% italic boldface
+\def\twentyitbf{\font\fzzozznzzt= mdputbi7t at20pt \fzzozznzzt}%
+\def\eighteenitbf{\font\fzzozznzzt= mdputbi7t at18pt \fzzozznzzt}%
+\def\sixteenitbf{\font\fzzozznzzt= mdputbi7t at16pt \fzzozznzzt}%
+\def\fourteenitbf{\font\fzzozznzzt= mdputbi7t at14pt \fzzozznzzt}%
+\def\twelveitbf{\font\fzzozznzzt= mdputbi7t at12pt \fzzozznzzt}%
+\font\itbf= mdputbi7t
+\def\nineitbf{\font\fzzozznzzt= mdputbi7t at9pt \fzzozznzzt}%
+\def\eightitbf{\font\fzzozznzzt= mdputbi7t at8pt \fzzozznzzt}%
+\font\sevenitbf= mdputbi7t at7pt
+\def\sixitbf{\font\fzzozznzzt= mdputbi7t at6pt \fzzozznzzt}%
+\font\fiveitbf= mdputbi7t at5pt
+%
+% slanted boldface
+\def\twentyslbf{\font\fzzozznzzt= mdputbo7t at20pt \fzzozznzzt}%
+\def\eighteenslbf{\font\fzzozznzzt= mdputbo7t at18pt \fzzozznzzt}%
+\def\sixteenslbf{\font\fzzozznzzt= mdputbo7t at16pt \fzzozznzzt}%
+\def\fourteenslbf{\font\fzzozznzzt= mdputbo7t at14pt \fzzozznzzt}%
+\def\twelveslbf{\font\fzzozznzzt= mdputbo7t at12pt \fzzozznzzt}%
+\font\slbf= mdputbo7t
+\def\nineslbf{\font\fzzozznzzt= mdputbo7t at9pt \fzzozznzzt}%
+\def\eightslbf{\font\fzzozznzzt= mdputbo7t at8pt \fzzozznzzt}%
+\font\sevenslbf= mdputbo7t at7pt
+\def\sixslbf{\font\fzzozznzzt= mdputbo7t at6pt \fzzozznzzt}%
+\font\fiveslbf= mdputbo7t at5pt
+%
+% caps
+\def\twentycaps{\font\fzzozznzzt= mdputrfc8t at20pt \fzzozznzzt}%
+\def\eighteencaps{\font\fzzozznzzt= mdputrfc8t at18pt \fzzozznzzt}%
+\def\sixteencaps{\font\fzzozznzzt= mdputrfc8t at16pt \fzzozznzzt}%
+\def\fourteencaps{\font\fzzozznzzt= mdputrfc8t at14pt \fzzozznzzt}%
+\def\twelvecaps{\font\fzzozznzzt= mdputrfc8t at12pt \fzzozznzzt}%
+\font\caps= mdputrfc8t % putrc7t from Adobe can be used to get \l etc.
+\def\ninecaps{\font\fzzozznzzt= mdputrfc8t at9pt \fzzozznzzt}%
+\def\eightcaps{\font\fzzozznzzt= mdputrfc8t at8pt \fzzozznzzt}%
+\font\sevencaps= mdputrfc8t at7pt
+\def\sixcaps{\font\fzzozznzzt= mdputrfc8t at6pt \fzzozznzzt}%
+\font\fivecaps= mdputrfc8t at5pt
+%
+% caps bold
+\def\twentycapsbf{\font\fzzozznzzt= mdputbfc8t at20pt \fzzozznzzt}%
+\def\eighteencapsbf{\font\fzzozznzzt= mdputbfc8t at18pt \fzzozznzzt}%
+\def\sixteencapsbf{\font\fzzozznzzt= mdputbfc8t at16pt \fzzozznzzt}%
+\def\fourteencapsbf{\font\fzzozznzzt= mdputbfc8t at14pt \fzzozznzzt}%
+\def\twelvecapsbf{\font\fzzozznzzt= mdputbfc8t at12pt \fzzozznzzt}%
+\font\capsbf= mdputbfc8t
+\def\ninecapsbf{\font\fzzozznzzt= mdputbfc8t at9pt \fzzozznzzt}%
+\def\eightcapsbf{\font\fzzozznzzt= mdputbfc8t at8pt \fzzozznzzt}%
+\font\sevencapsbf= mdputbfc8t at7pt
+\def\sixcapsbf{\font\fzzozznzzt= mdputbfc8t at6pt \fzzozznzzt}%
+\font\fivecapsbf= mdputbfc8t at5pt
+%
+\fontdimen2\teni=-0.01pt % needed with md... mathdesign family, this even improves futmii and gives best results
+%
+\skewchar\teni='177 \skewchar\seveni='177 \skewchar\fivei='177%
+\skewchar\tensy='60 \skewchar\sevensy='60 \skewchar\fivesy='60%
+%
+\rm \ No newline at end of file
diff --git a/macros/plain/contrib/font_selection/README b/macros/plain/contrib/font_selection/README
new file mode 120000
index 0000000000..7255e1cbcc
--- /dev/null
+++ b/macros/plain/contrib/font_selection/README
@@ -0,0 +1 @@
+fnts.doc \ No newline at end of file
diff --git a/macros/plain/contrib/font_selection/fnts.doc b/macros/plain/contrib/font_selection/fnts.doc
new file mode 100644
index 0000000000..091668992f
--- /dev/null
+++ b/macros/plain/contrib/font_selection/fnts.doc
@@ -0,0 +1,227 @@
+FNTS.TEX v3.0 Copyright (c) 1994-1999 Harold W. de Wijn
+
+FONT SELECTION FOR PLAIN TeX, featuring
+- 21 sizes in the range 7 to 154 points;
+- 16 typefaces, including Italic Bold, Calligraphic Bold, Sans Serif, Sans
+ Serif Italic, and Sans Serif Bold;
+- Boldmath, inclusive of subscripts, superscripts, and symbols.
+
+File is provided `as is' with no warranty of any kind.
+
+Please direct comments to the author at H.W.deWijn@phys.uu.nl
+
+
+ *** USAGE ***
+
+\input fnts [\viipt, \viiipt, ..., \fsize0, \fsize{h}, \fsize1, ... ]
+<body of document with further font-size calls as necessary>
+\bye (or \Bye)
+
+
+ *** FONT SIZES ***
+
+Fonts of point size 7, 8, 9, 10, 11, 12, 13, 14, 17, 21, 25, 30, 36, 43,
+52, 62, 74, 89, 107, 128, and 154 are selected by \<roman numeral>pt,
+i.e., \viipt, \viiipt, \ixpt, \xpt, \xipt, \xiipt, \xiiipt, \xivpt,
+\xviipt, \xxipt, \xxvpt, \xxxpt, \xxxvipt, \xliiipt, \liipt, \lxiipt,
+\lxxivpt, \lxxxixpt, \cviipt, \cxxviii, and \cliv. The fonts of size 10
+point and larger follow the customary 10*1.2^n magstep series, with
+additional halfinteger steps for n = 0.5 and 1.5. They may alternatively
+be selected by \fsize{n}, in which n = 0, 0.5, 1, 1.5, 2, ...., 15 is the
+number of magsteps; \fsize{h} is equivalent to \fsize{0.5}, and \fsize{1h}
+equivalent to \fsize{1.5}. Spaces following \fsize{n} are ignored.
+Also note that the {} are optional for integer n < 10, as in \fsize2.
+
+The values delivered by the macro \magstep#1 accordingly extend from 1000
+to 1000*1.2^15 = 15407 for parameter values #1 = 0 up to 15 as follows:
+
+ 0 1000 1 1200 2 1440 3 1728 4 2074
+ 5 2488 6 2986 7 3583 8 4300 9 5160
+ 10 6192 11 7430 12 8916 13 10699 14 12839
+ 15 15407
+
+The macros \magstephalf and \magsteponehalf refer to 0.5 and 1.5 magsteps,
+i.e., the values 1095 and 1314.
+
+The integer \fontscaling assumes the values 700, 800, 900, 1000,
+\magstephalf, \magstep1, \magsteponehalf, \magstep2, ..., \magstep{15}
+according to the font size selected. It may conveniently be used to load
+additional fonts scaled to the same size, e.g., \font\euro=euro scaled
+\fontscaling.
+
+
+ *** TYPEFACES ***
+
+The following typefaces are available in text mode and math mode (T = text
+size, S = script size, SS = scriptscript size; see also the table of font
+families in math mode below):
+
+==========================================================================
+ typeface text math remarks
+ mode mode
+--------------------------------------------------------------------------
+\rm Roman x T S SS
+\mit Math Italic T S SS No need for text mode!
+\oldstyle x T
+ Symbol T S SS Math mode only
+\cal Calligraphic T S SS Math mode only (=symbol)
+\it Text Italic x T
+\sl Slanted Roman x T
+\bf Bold x T S SS
+\tt Typewriter x T
+\sc small caps x Text mode only
+\mib Math Italic Bold T S SS No need for text mode!
+\boldoldstyle x T
+ Symbol Bold T S SS Math mode only
+\boldcal Calligraphic Bold T S SS Math mode only
+\itb Text italic Bold x T
+\sf Sans Serif x T S SS
+\sfi Sans Serif Italic x T S SS
+\sfb Sans Serif Bold x T S SS
+==========================================================================
+
+
+ *** BOLDMATH ***
+
+The macro \boldmath causes TeX to make boldface the default in math mode.
+This includes first-order and second-order subscripts and superscripts.
+Boldmath applies to math italic, greek characters, symbols, and the
+standard mathematical functions, but not to the math extension font.
+\boldmath is achieved by exchanging the font families 0, 1, and 2 for the
+families \bffam, \mibfam, and \sybfam, and vice versa. The macro
+\unboldmath returns math to the standard fonts. \boldmath should be
+called prior to entering math mode, \unboldmath after exiting math mode.
+The Boolean \ifboldmath is true when boldmath is in effect.
+
+\boldmath is designed for boldface composition of all math in a document,
+or, for that matter, part of a document or a complete formula. You may,
+e.g., include \bf\boldmath in macros for headers, to ensure that any
+material in math mode will appear in boldface, as does the material in text
+mode. To compose part of a formula or a single character in boldface, one
+should preferentially rely on \bf for roman and \mib for italic boldface.
+The macro \bmbox#1, which is based on \boldmath, provides a more powerful
+tool, but its use should be restricted to cases where \bf and \mib don't
+work. \bmbox#1 may be used in both text and math modes.
+
+The macros \boldoldstyle and \boldcal produce bold oldstyle numbers and
+bold calligraphic capitals, similarly to \oldstyle and \cal.
+
+
+ *** HEAD AND FOOT LINES ***
+
+The font size of the head and foot lines is defined as the font size first
+selected (usually immediately following \input fnts), with roman the
+default.
+
+
+ *** SCALING OF PARAMETERS, \tightendisplays ***
+
+All of TeX's parameters scale with the font size, with the exception of
+\parindent, \parskip, and the page-size parameters.
+
+For large-size lettering on standard-sized paper, this results in
+unaesthetically wide skips separating the displayed equation from the
+preceding and following text. The macro \tightendisplays#1 reduces the
+height of displays by roughly #1/100 times the baselineskip. Satisfactory
+values of the integer parameter #1 are in the range 0 - 100. A negative
+#1 similarly increases the display height. The display skips may be reset
+to their default values by the command \normaldisplayskips.
+
+
+ *** ADDITIONAL MACROS IN TEXT MODE ***
+
+\Bye % \bye except for omitting page numbering in a single-page
+ document
+\@ % end-of-sentence space after punctuation (\@ must precede the
+ punctuation character; the length of the space depends on the
+ character's \sfcode; suppressed by \frenchspacing)
+\is, \\ % intersentence space (following whatever; suppressed by
+ \frenchspacing; \\ may be redefined without affecting \is)
+\hoursminutes (time in format hh:mm)
+\today
+\vandaag (\today in Dutch)
+\heute (\today in German)
+\aujourdhui (\today in French)
+\dollar
+\pounds
+\copyright
+\GOTOnextoddpage % useful to ensure that material to follow, e.g. the
+\GOTOnextevenpage % next chapter, begins at the top of the next odd or
+ % even page, inserting a blank page if necessary
+
+
+ *** ADDITIONAL MACROS IN MATH MODE ***
+
+\frac#1#2 % fraction
+\csfrac#1#2, \case#1#2 % case fraction (used for small integers)
+\slfrac#1#2 % slanted fraction
+\rdcl % slightly raised radical sign \surd
+\gsim, \gtrsim % greater than or on the order of
+\lsim, \lesssim % smaller than or on the order of
+
+
+ *** FONT FAMILIES IN MATH MODE ***
+
+==========================================================================
+family typeface macro
+(in boldmath)
+--------------------------------------------------------------------------
+FAMILIES ALREADY DEFINED IN plain TeX:
+ 0 (6) Roman \rm
+ 1 (8) Math Italic \mit (math), \oldstyle
+ 2 (9) Symbols \cal (math)
+ 3 Math Extension
+\itfam= 4 Text Italic \it
+\slfam= 5 Slanted Roman \sl
+\bffam= 6 (0) Bold \bf
+\ttfam= 7 Typewriter \tt
+--------------------------------------------------------------------------
+ADDITIONAL FAMILIES:
+\mibfam= 8 (1) Math Italic Bold \mib (math), \boldoldstyle
+\sybfam= 9 (2) Symbol Bold \boldcal (math)
+\itbfam=10 Text Italic Bold \itb
+\sffam= 11 Sans Serif \sf
+\sfifam=12 Sans Serif Italic \sfi
+\sfbfam=13 Sans Serif Bold \sfb
+ 14 -- not used
+ 15 -- not used
+==========================================================================
+
+
+ *** FONTS ***
+
+The fonts, in various magnifications, are the 16 basic Computer Modern
+fonts of plain TeX (marked with *) augmented with Computer Modern fonts
+that come with standard TeX distributions such as emTeX. The font metrics
+should be available in tfm files, and METAFONT should be ready to generate
+the pk files for missing magnifications.
+
+==========================================================================
+Roman cmr5* cmr6 cmr7* cmr8 cmr9 cmr10* cmr12
+Math Italic cmi5* cmi6 cmi7* cmi8 cmi9 cmi10* cmi12
+Symbol cmsy5* cmsy6 cmsy7* cmsy8 cmsy9 cmsy10*
+Math Extension cmex7 cmex8 cmex9 cmex10*
+Text Italic cmti7 cmti8 cmti9 cmti10* cmti12
+Slanted cmsl8 cmsl9 cmsl10* cmsl12
+Bold Extended cmbx5* cmbx6 cmbx7* cmbx8 cmbx9 cmbx10* cmbx12
+Typewriter cmtt8 cmtt9 cmtt10* cmtt12
+Math Italic Bold cmmib5 cmmib6 cmmib7 cmmib8 cmmib9 cmmib10
+Symbol Bold cmbsy5 cmbsy6 cmbsy7 cmbsy8 cmbsy9 cmbsy10
+Text Italic Bold cmbxti10
+Sans Serif cmss8 cmss9 cmss10 cmss12
+Sans Serif Italic cmssi8 cmssi9 cmssi10 cmssi12
+Sans Serif Demi Bold cmssdc10
+Small caps cmcsc8 cmcsc9 cmcsc10
+==========================================================================
+
+The font-selecting macros load the typefaces belonging to a particular
+size. This includes, to the extent requested, the text-mode font, the
+math-mode text font, the math-mode script font, and the math-mode
+scriptscript font (cf. the table of typefaces above). Fonts are called
+only once throughout the document. Their font identifiers are stored for
+later use by global definitions such as \global\def\twelverm=cmr12. The
+fonts marked with an * are preloaded by plain TeX.
+
+ *** END OF FNTS.DOC ***
+
+
diff --git a/macros/plain/contrib/font_selection/fnts.tex b/macros/plain/contrib/font_selection/fnts.tex
new file mode 100644
index 0000000000..62054fa45e
--- /dev/null
+++ b/macros/plain/contrib/font_selection/fnts.tex
@@ -0,0 +1,706 @@
+% FNTS.TEX v3.0 Copyright (c) 1994-1999 Harold W. de Wijn
+%
+% FONT SELECTION FOR PLAIN TeX, featuring
+% - 21 sizes in the range 7 to 154 points;
+% - 16 typefaces, including Italic Bold, Calligraphic Bold, Sans Serif,
+% Sans Serif Italic, and Sans Serif Bold;
+% - Boldmath, inclusive of subscripts, superscripts, and symbols.
+%
+% File is provided `as is' with no warranty of any kind.
+%
+% For documentation see file FNTS.DOC
+%
+% Please direct comments to the author at H.W.deWijn@phys.uu.nl
+
+\message{v3.0 Copyright (c) 1994-1999 Harold W. de Wijn}
+\catcode`@=11
+% Non bis in idem! (Do not read file twice!)
+\ifx\@FONTS\undefined\relax\else\catcode`@=12 \endinput\fi
+
+
+% FAMILIES ALREADY DEFINED IN TeX
+% % family:
+% % 0 roman \rm
+% % 1 math italic \mit (math), \oldstyle
+% % 2 symbols \cal (math)
+% % 3 math extension
+% \newfam\itfam % 4 text italic \it
+% \newfam\slfam % 5 slanted roman \sl
+% \newfam\bffam % 6 boldface \bf
+% \newfam\ttfam % 7 typewriter \tt
+
+% ADDITIONAL FAMILIES
+\newfam\mibfam % 8 math italic bold \mib (math), \boldoldstyle
+\newfam\bsyfam % 9 symbol bold \boldcal (math)
+\newfam\itbfam % 10 text italic bold \itb
+\newfam\sffam % 11 sans serif \sf
+\newfam\sfifam % 12 sans serif italic \sfi
+\newfam\sfbfam % 13 sans serif bold \sfb
+
+
+% MAGSTEP 0 UNTIL 15
+%\def\magstephalf{1095 } % defined in plain TeX
+\def\magsteponehalf{1314 }
+\def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\or
+ 2986\or 3583\or 4300\or 5160\or 6192\or 7430\or 8916\or 10699\or
+ 12839\or 15407\fi\relax}
+
+
+% TO SAVE TOKENS
+\def\@height{height} \def\@depth{depth} \def\@width{width}
+\def\@magstep#1{ scaled \magstep{#1}\relax}
+\def\@magstephalf{ scaled \magstephalf\relax}
+\def\@magsteponehalf{ scaled \magsteponehalf\relax}
+\def\@scaled#1{ scaled #1\relax}
+\def\@plus{ plus }
+\def\@minus{ minus }
+
+
+% MODIFICATION OF \raggedright TO INCLUDE AUTOMATIC ADJUSTMENT WITH
+% CHANGE OF FONT SIZE
+\newif\ifr@ggedright % signals subsequent font-size commands
+\newif\ifttr@ggedright % to adjust \raggedright
+\def\raggedright{\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em
+ \r@ggedrighttrue\relax}
+\def\ttraggedright{\tt\rightskip\z@ plus2em\ttr@ggedrighttrue\relax}
+ % for use with \tt only
+
+
+% DEFINITIONS MODIFIED FROM PLAIN TO INCLUDE \xp@ INSTEAD OF \p@
+% \xp@ replaces \p@ and pt to ensure proper scaling with the font size.
+% Note: Scaling \p@ itself, which would have avoided redefinition of the
+% macros below, leads to unpredictable output.
+\newdimen\xp@
+
+\def\vdots{\vbox{\baselineskip4\xp@ \lineskiplimit\z@
+ \kern6\xp@\hbox{.}\hbox{.}\hbox{.}}}
+\def\ddots{\mathinner{\mkern1mu\raise7\xp@\vbox{\kern7\xp@\hbox{.}}\mkern2mu
+ \raise4\xp@\hbox{.}\mkern2mu\raise\xp@\hbox{.}\mkern1mu}}
+
+\def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr
+ \rightarrowfill\crcr\noalign{\kern-\xp@\nointerlineskip}
+ $\hfil\displaystyle{#1}\hfil$\crcr}}}
+\def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr
+ \leftarrowfill\crcr\noalign{\kern-\xp@\nointerlineskip}
+ $\hfil\displaystyle{#1}\hfil$\crcr}}}
+\def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\xp@}
+ \downbracefill\crcr\noalign{\kern3\xp@\nointerlineskip}
+ $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits}
+\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
+ $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\xp@\nointerlineskip}
+ \upbracefill\crcr\noalign{\kern3\xp@}}}}\limits}
+
+\def\big#1{{\hbox{$\left#1\vbox to8.5\xp@{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vbox to11.5\xp@{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vbox to14.5\xp@{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vbox to17.5\xp@{}\right.\n@space$}}}
+
+\def\@vereq#1#2{\lower.5\xp@\vbox{\lineskiplimit\maxdimen\lineskip-.5\xp@
+ \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}
+
+\def\bordermatrix#1{\begingroup \m@th
+ \setbox\z@\vbox{\def\cr{\crcr\noalign{\kern2\xp@\global\let\cr\endline}}%
+ \ialign{$##$\hfil\kern2\xp@\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\xp@}%
+ \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}%
+ \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
+
+\def\raggedbottom{\topskip 10\xp@ plus60\xp@ \r@ggedbottomtrue}
+\def\normalbottom{\topskip 10\xp@ \r@ggedbottomfalse} % undoes \raggedbottom
+
+\def\endinsert{\egroup % finish the \vbox
+ \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ \advance\dimen@12\xp@
+ \advance\dimen@\pagetotal \advance\dimen@-\pageshrink
+ \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}
+
+\def\footnoterule{\kern-3\xp@
+ \hrule width 2truein \kern 2.6\xp@} % the \hrule is .4pt high
+
+
+% DEFINITIONS MODIFIED FROM PLAIN TO INCLUDE \xp@ INSTEAD OF pt
+\def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr
+ \not\mathrel{\mkern14mu}\crcr
+ \noalign{\nointerlineskip}
+ \mkern2.5mu\leaders\hrule height.34\xp@\hfill\mkern2.5mu\crcr}}}}
+\def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2\xp@
+ \hbox{$#1\rightharpoonup$}\crcr
+ $#1\leftharpoondown$}}}}
+
+
+% MODIFIED FOR THE SAKE OF BOLDMATH (\rm -> \fam\z@)
+\def\log{\mathop{\fam\z@ log}\nolimits}
+\def\lg{\mathop{\fam\z@ lg}\nolimits}
+\def\ln{\mathop{\fam\z@ ln}\nolimits}
+\def\lim{\mathop{\fam\z@ lim}}
+\def\limsup{\mathop{\fam\z@ lim\,sup}}
+\def\liminf{\mathop{\fam\z@ lim\,inf}}
+\def\sin{\mathop{\fam\z@ sin}\nolimits}
+\def\arcsin{\mathop{\fam\z@ arcsin}\nolimits}
+\def\sinh{\mathop{\fam\z@ sinh}\nolimits}
+\def\cos{\mathop{\fam\z@ cos}\nolimits}
+\def\arccos{\mathop{\fam\z@ arccos}\nolimits}
+\def\cosh{\mathop{\fam\z@ cosh}\nolimits}
+\def\tan{\mathop{\fam\z@ tan}\nolimits}
+\def\arctan{\mathop{\fam\z@ arctan}\nolimits}
+\def\tanh{\mathop{\fam\z@ tanh}\nolimits}
+\def\cot{\mathop{\fam\z@ cot}\nolimits}
+\def\coth{\mathop{\fam\z@ coth}\nolimits}
+\def\sec{\mathop{\fam\z@ sec}\nolimits}
+\def\csc{\mathop{\fam\z@ csc}\nolimits}
+\def\max{\mathop{\fam\z@ max}}
+\def\min{\mathop{\fam\z@ min}}
+\def\sup{\mathop{\fam\z@ sup}}
+\def\inf{\mathop{\fam\z@ inf}}
+\def\arg{\mathop{\fam\z@ arg}\nolimits}
+\def\ker{\mathop{\fam\z@ ker}\nolimits}
+\def\dim{\mathop{\fam\z@ dim}\nolimits}
+\def\hom{\mathop{\fam\z@ hom}\nolimits}
+\def\det{\mathop{\fam\z@ det}}
+\def\exp{\mathop{\fam\z@ exp}\nolimits}
+\def\Pr{\mathop{\fam\z@ Pr}}
+\def\gcd{\mathop{\fam\z@ gcd}}
+\def\deg{\mathop{\fam\z@ deg}\nolimits}
+
+\def\bmod{\nonscript\mskip-\medmuskip\mkern5mu
+ \mathbin{\fam\z@ mod}\penalty900\mkern5mu\nonscript\mskip-\medmuskip}
+\def\pmod#1{\allowbreak\mkern18mu({\fam\z@ mod}\,\,#1)}
+
+
+% BUT THE FOLLOWING SHOULD ONLY PARTIALLY SCALE WITH THE FONT SIZE!
+\newdimen\headlineskip
+\newdimen\headlineskipa
+\newdimen\footlineskip
+\def\makeheadline{\vbox to\z@{\vskip-\headlineskip\vskip\topskip
+ \line{\vbox to\headlineskipa{}\the\headline}\vss}\nointerlineskip}
+\def\makefootline{\baselineskip\footlineskip\line{\the\footline}}
+
+
+% FOOTLINE, HEADLINE
+\newif\if@firstsize\@firstsizetrue
+\let\footlinefont\rm % \fam0\tenrm is default
+\footline={\hss\footlinefont\folio\hss}
+% \headline={\footlinefont\hfil} % headline is normally blank
+
+
+% NONZERO DIMENSIONS AND GLUES MODIFIED FROM PLAIN
+\newcount\tightenp@r@meter\tightenp@r@meter=\z@ %default
+\newdimen\yp@
+\def\norm@ldispl@ys{%
+ \abovedisplayskip=12\xp@ \@plus3\xp@ \@minus9\xp@
+ \abovedisplayshortskip=0\xp@ \@plus3\xp@
+ \belowdisplayskip=12\xp@ \@plus3\xp@ \@minus9\xp@
+ \belowdisplayshortskip=7\xp@ \@plus3\xp@ \@minus4\xp@}
+\def\normaldisplays{\tightenp@r@meter=\z@\norm@ldispl@ys}
+\def\tightendisplays#1{%
+ \tightenp@r@meter=#1\norm@ldispl@ys % reset to avoid cumulation
+ \yp@=-\tightenp@r@meter\xp@ \divide\yp@ by 100
+ \ifdim\yp@<\z@
+ \advance\abovedisplayskip 6\yp@ \@minus4.5\yp@ % reducing abilty to
+ \advance\abovedisplayshortskip \yp@ % shrink for positive
+ \advance\belowdisplayskip 6\yp@ \@minus4.5\yp@ % \tightenp@r@meter's
+ \advance\belowdisplayshortskip 3\yp@ \@minus2\yp@
+ \else
+ \advance\abovedisplayskip 6\yp@ % just add white for
+ \advance\abovedisplayshortskip 6\yp@ % negative \tightenp@r@meter's
+ \advance\belowdisplayskip 6\yp@
+ \advance\belowdisplayshortskip 6\yp@
+ \fi}
+\def\s@tdimen{%
+ \delimitershortfall=5\xp@
+ \nulldelimiterspace=1.2\xp@
+ \scriptspace=0.5\xp@
+%%\parindent=20pt % We leave this one!
+%%\parskip=0pt plus 1pt % We leave this one!
+ \ifnum\tightenp@r@meter=\z@\norm@ldispl@ys\else % Default is scaling
+ \tightendisplays\tightenp@r@meter\fi % with font size
+ \topskip=10\xp@
+ \splittopskip=10\xp@
+ \smallskipamount=3\xp@ \@plus1\xp@ \@minus1\xp@
+ \medskipamount=6\xp@ \@plus2\xp@ \@minus2\xp@
+ \bigskipamount=12\xp@ \@plus4\xp@ \@minus4\xp@
+ \normalbaselineskip 12\xp@
+ \normallineskip=1\xp@
+ \jot=3\xp@
+ \setbox\strutbox=\hbox{\vrule \@height8.5\xp@ \@depth3.5\xp@ \@width\z@}%
+ \setbox0=\hbox{$\mathchar"0342$}\p@renwd=\wd0 %equivalent tenex B in TeX
+ \normalbaselines
+% and finally setting \footlinefont, etc
+ \if@firstsize\global\@firstsizefalse
+ \headlineskip15.5pt\advance\headlineskip17\xp@\headlineskipa8.5\xp@
+ \footlineskip15.5pt\advance\footlineskip8.5\xp@
+% To avoid an unpredictable \footline, \fam0\<size>rm associated with
+% the font size called first is included in \footlinefont.
+ \futurelet\footlinefont
+ \fi}
+
+
+% FONT SIZES
+\def\v@{five} \def\vi@{six} \def\vii@{seven}
+\def\viii@{eight} \def\ix@{nine} \def\x@{ten}
+\def\xi@{eleven} \def\xii@{twelve} \def\xiii@{thirteen}
+\def\xiv@{fourteen} \def\xvii@{seventeen} \def\xxi@{twentyone}
+\def\xxv@{twentyfive} \def\xxx@{thirty} \def\xxxvi@{thirtysix}
+\def\xliii@{fortythree} \def\lii@{fiftytwo} \def\lxii@{sixtytwo}
+\def\lxxiv@{seventyfour} \def\lxxxix@{eightynine} \def\cvii@{hundredseven}
+\def\cxxviii@{hundredtwentyeight}
+\def\cliv@{hundredfiftyfour}
+
+
+% ROLL CALL OF FONTS
+%\def\@fiverm{cmr5} % \fiverm defined in plain TeX
+%\def\@fivei{cmmi5} % \fivei defined in plain TeX
+%def\@fivesy{cmsy5} % \fivesy defined in plain TeX
+%\def\@fiveex{cmex7\@scaled{714}} % not needed
+%\def\@fiveit{cmti7\@scaled{714}} % not needed
+%\def\@fivesl{cmsl8\@scaled{625}} % not needed
+%def\@fivebf{cmbx5} % \fivebf defined in plain TeX
+%\def\@fivett{cmtt8\@scaled{625}} % not needed
+\def\@fivemib{cmmib5\skewchar\fivemib='177}
+\def\@fivebsy{cmbsy5}
+%\def\@fiveitb{cmbxti10\@scaled{500}} % not needed
+\def\@fivesf{cmss8\@scaled{625}}
+\def\@fivesfi{cmssi8\@scaled{625}}
+\def\@fivesfb{cmssdc10\@scaled{500}} % does not Metafont well at 300 dpi
+%\def\@fivesc{cmcsc8\@scaled{625}} % not needed
+
+\def\@sixrm{cmr6}
+\def\@sixi{cmmi6\skewchar\sixi='177}
+\def\@sixsy{cmsy6\skewchar\sixsy='60}
+%\def\@sixex{cmex7\@scaled{857}} % not needed
+%\def\@sixit{cmti7\@scaled{857}} % not needed
+%\def\@sixsl{cmsl8\@scaled{750}} % not needed
+\def\@sixbf{cmbx6}
+%\def\@sixtt{cmtt8\@scaled{750}} % not needed
+\def\@sixmib{cmmib6\skewchar\sixmib='177}
+\def\@sixbsy{cmbsy6}
+%\def\@sixitb{cmbxti10\@scaled{600}} % not needed
+\def\@sixsf{cmss8\@scaled{750}}
+\def\@sixsfi{cmssi8\@scaled{750}}
+\def\@sixsfb{cmssdc10\@scaled{600}}
+%\def\@sixsc{cmcsc8\@scaled{750}} % not needed
+
+%\def\@sevenrm{cmr7} % \sevenrm defined in plain TeX
+%\def\@seveni{cmmi7} % \seveni defined in plain TeX
+%def\@sevensy{cmsy7} % \sevensy defined in plain TeX
+\def\@sevenex{cmex7}
+\def\@sevenit{cmti7}
+\def\@sevensl{cmsl8\@scaled{875}}
+%\def\@sevenbf{cmbx7} % \sevenbf defined in plain TeX
+\def\@seventt{cmtt8\@scaled{875}}
+\def\@sevenmib{cmmib7\skewchar\sevenmib='177}
+\def\@sevenbsy{cmbsy7}
+\def\@sevenitb{cmbxti10\@scaled{700}}
+\def\@sevensf{cmss8\@scaled{875}}
+\def\@sevensfi{cmssi8\@scaled{875}}
+\def\@sevensfb{cmssdc10\@scaled{700}}
+\def\@sevensc{cmcsc8\@scaled{875}}
+
+\def\@eightrm{cmr8}
+\def\@eighti{cmmi8\skewchar\eighti='177}
+\def\@eightsy{cmsy8\skewchar\eightsy='60}
+\def\@eightex{cmex8}
+\def\@eightit{cmti8}
+\def\@eightsl{cmsl8}
+\def\@eightbf{cmbx8}
+\def\@eighttt{cmtt8}
+\def\@eightmib{cmmib8\skewchar\eightmib='177}
+\def\@eightbsy{cmbsy8}
+\def\@eightitb{cmbxti10\@scaled{800}}
+\def\@eightsf{cmss8}
+\def\@eightsfi{cmssi8}
+\def\@eightsfb{cmssdc10\@scaled{800}}
+\def\@eightsc{cmcsc8}
+
+\def\@ninerm{cmr9}
+\def\@ninei{cmmi9\skewchar\ninei='177}
+\def\@ninesy{cmsy9\skewchar\ninesy='60}
+\def\@nineex{cmex9}
+\def\@nineit{cmti9}
+\def\@ninesl{cmsl9}
+\def\@ninebf{cmbx9}
+\def\@ninett{cmtt9}
+\def\@ninemib{cmmib9\skewchar\ninemib='177}
+\def\@ninebsy{cmbsy9}
+\def\@nineitb{cmbxti10\@scaled{900}}
+\def\@ninesf{cmss9}
+\def\@ninesfi{cmssi9}
+\def\@ninesfb{cmssdc10\@scaled{900}}
+\def\@ninesc{cmcsc9}
+
+%\def\@tenrm{cmr10} % \tenrm defined in plain TeX
+%\def\@teni{cmmi10} % \teni defined in plain TeX
+%\def\@tensy{cmsy10} % \tensy defined in plain TeX
+%\def\@tenex{cmex10} % \tenex defined in plain TeX
+%\def\@tenit{cmti10} % \tenit defined in plain TeX
+%\def\@tensl{cmsl10} % \tensl defined in plain TeX
+%\def\@tenbf{cmbx10} % \tenbf defined in plain TeX
+%\def\@tentt{cmtt10} % \tentt defined in plain TeX
+\def\@tenmib{cmmib10\skewchar\tenmib='177}
+\def\@tenbsy{cmbsy10}
+\def\@tenitb{cmbxti10}
+\def\@tensf{cmss10}
+\def\@tensfi{cmssi10}
+\def\@tensfb{cmssdc10}
+\def\@tensc{cmcsc10}
+
+\def\@elevenrm{cmr10\@magstephalf}
+\def\@eleveni{cmmi10\@magstephalf\skewchar\eleveni='177}
+\def\@elevensy{cmsy10\@magstephalf\skewchar\elevensy='60}
+\def\@elevenex{cmex10\@magstephalf}
+\def\@elevenit{cmti10\@magstephalf}
+\def\@elevensl{cmsl10\@magstephalf}
+\def\@elevenbf{cmbx10\@magstephalf}
+\def\@eleventt{cmtt10\@magstephalf}
+\def\@elevenmib{cmmib10\@magstephalf\skewchar\elevenmib='177}
+\def\@elevenbsy{cmbsy10\@magstephalf}
+\def\@elevenitb{cmbxti10\@magstephalf}
+\def\@elevensf{cmss10\@magstephalf}
+\def\@elevensfi{cmssi10\@magstephalf}
+\def\@elevensfb{cmssdc10\@magstephalf}
+\def\@elevensc{cmcsc10\@magstephalf}
+
+\def\@twelverm{cmr12}
+\def\@twelvei{cmmi12\skewchar\twelvei='177}
+\def\@twelvesy{cmsy10\@magstep\@ne\skewchar\twelvesy='60}
+\def\@twelveex{cmex10\@magstep\@ne}
+\def\@twelveit{cmti12}
+\def\@twelvesl{cmsl12}
+\def\@twelvebf{cmbx12}
+\def\@twelvett{cmtt12}
+\def\@twelvemib{cmmib10\@magstep\@ne\skewchar\twelvemib='177}
+\def\@twelvebsy{cmbsy10\@magstep\@ne}
+\def\@twelveitb{cmbxti10\@magstep\@ne}
+\def\@twelvesf{cmss12}
+\def\@twelvesfi{cmssi12}
+\def\@twelvesfb{cmssdc10\@magstep\@ne}
+\def\@twelvesc{cmcsc10\@magstep\@ne}
+
+\def\@thirteenrm{cmr12\@magstephalf}
+\def\@thirteeni{cmmi12\@magstephalf\skewchar\thirteeni='177}
+\def\@thirteensy{cmsy10\@magsteponehalf\skewchar\thirteensy='60}
+\def\@thirteenex{cmex10\@magsteponehalf}
+\def\@thirteenit{cmti12\@magstephalf}
+\def\@thirteensl{cmsl12\@magstephalf}
+\def\@thirteenbf{cmbx12\@magstephalf}
+\def\@thirteentt{cmtt12\@magstephalf}
+\def\@thirteenmib{cmmib10\@magsteponehalf\skewchar\thirteenmib='177}
+\def\@thirteenbsy{cmbsy10\@magsteponehalf}
+\def\@thirteenitb{cmbxti10\@magsteponehalf}
+\def\@thirteensf{cmss12\@magstephalf}
+\def\@thirteensfi{cmssi12\@magstephalf}
+\def\@thirteensfb{cmssdc10\@magsteponehalf}
+\def\@thirteensc{cmcsc10\@magsteponehalf}
+
+% The font names \@fourteenrm, \@seventeenrm, \@twentyonerm,
+% \@twentyfiverm, \@thirtyrm, \@thirtysixrm, \@fortythreerm, \@fiftytworm,
+% \@sixtytworm, \@seventyfourrm, \@eightyninerm, \@hundredsevenrm,
+% \@hundredtwentyeightrm, \@hundredfiftyfourrm, and their counterparts for
+% other typefaces are, if necessary, generated by the macro \fontn@mes.
+
+\def\fontn@mes#1#2{% skip if called earlier for this size
+\expandafter\ifx\csname @#1rm\endcsname\relax
+\count@=#2\advance\count@ -1
+\expandafter\edef\csname @#1rm\endcsname{cmr12\@magstep\count@}%
+\expandafter\edef\csname @#1i\endcsname{cmmi12\@magstep\count@%
+ \expandafter\skewchar\csname #1i\endcsname='177}%
+\expandafter\edef\csname @#1sy\endcsname{cmsy10\@magstep{#2}%
+ \expandafter\skewchar\csname #1sy\endcsname='60}%
+\expandafter\edef\csname @#1ex\endcsname{cmex10\@magstep{#2}}%
+\expandafter\edef\csname @#1it\endcsname{cmti12\@magstep\count@}%
+\expandafter\edef\csname @#1sl\endcsname{cmsl12\@magstep\count@}%
+\expandafter\edef\csname @#1bf\endcsname{cmbx12\@magstep\count@}%
+\expandafter\edef\csname @#1tt\endcsname{cmtt12\@magstep\count@}%
+\expandafter\edef\csname @#1mib\endcsname{cmmib10\@magstep{#2}%
+ \expandafter\skewchar\csname #1mib\endcsname='177}%
+\expandafter\edef\csname @#1bsy\endcsname{cmbsy10\@magstep{#2}}%
+\expandafter\edef\csname @#1itb\endcsname{cmbxti10\@magstep{#2}}%
+\expandafter\edef\csname @#1sf\endcsname{cmss12\@magstep\count@}%
+\expandafter\edef\csname @#1sfi\endcsname{cmssi12\@magstep\count@}%
+\expandafter\edef\csname @#1sfb\endcsname{cmssdc10\@magstep{#2}}%
+\expandafter\edef\csname @#1sc\endcsname{cmcsc10\@magstep{#2}}%
+\fi}
+
+
+% FONT-SELECTING MACROS
+\def\FONTID@#1[#2]{\expandafter\ifx\csname #1#2\endcsname\relax
+ \global\expandafter\font\csname #1#2\endcsname
+ =\csname @#1#2\endcsname\fi} % defining font identifier if not yet done
+\def\TSSS@#1[#2]{\FONTID@\@@tf[#2]\FONTID@\@@sf[#2]\FONTID@\@@ssf[#2]%
+ \textfont#1=\csname\@@tf#2\endcsname
+ \scriptfont#1=\csname\@@sf#2\endcsname
+ \scriptscriptfont#1=\csname\@@ssf#2\endcsname}
+\def\T@#1[#2]{\FONTID@\@@tf[#2]%
+ \textfont#1=\csname\@@tf#2\endcsname}
+\def\MATHEX@#1[#2]{\FONTID@\@@tf[#2]%
+ \textfont#1=\csname\@@tf#2\endcsname % no distinction between
+ \scriptfont#1=\csname\@@tf#2\endcsname % T, S, and SS
+ \scriptscriptfont#1=\csname\@@tf#2\endcsname}
+\def\TXT@[#1]{\FONTID@\@@tf[#1]} % Text mode only
+\def\TSSS@@#1[#2]{\textfont#1=\csname\@@tf#2\endcsname % used in boldmath;
+ \scriptfont#1=\csname\@@sf#2\endcsname % same as \TSSS@, except
+ \scriptscriptfont#1=\csname\@@ssf#2\endcsname} % for absence of \FONTID
+
+\newcount\fontscaling
+\newif\ifboldmath
+\def\@FONTS{\ifmmode\@error0\else
+ \TSSS@\z@[rm]%
+ \edef\rm{\fam\z@\csname\@@tf rm\endcsname}%
+ \TSSS@\@ne[i]%
+% \def\mit{\fam\@ne}% already defined in plain TeX
+ \edef\oldstyle{\fam\@ne\csname\@@tf i\endcsname}%
+ \TSSS@\tw@[sy]%
+% \def\cal{\fam\tw@}% already defined in plain TeX
+ \MATHEX@\thr@@[ex]%
+ \T@\itfam[it]%
+ \edef\it{\fam\itfam\csname\@@tf it\endcsname}%
+ \T@\slfam[sl]%
+ \edef\sl{\fam\slfam\csname\@@tf sl\endcsname}%
+ \TSSS@\bffam[bf]%
+ \edef\bf{\fam\bffam\csname\@@tf bf\endcsname}%
+ \T@\ttfam[tt]%
+ \edef\tt{\fam\ttfam\csname\@@tf tt\endcsname}%
+ \TSSS@\mibfam[mib]%
+ \def\mib{\fam\mibfam}% math mode only
+ \edef\boldoldstyle{\fam\mibfam\csname\@@tf mib\endcsname}%
+ \TSSS@\bsyfam[bsy]%
+ \def\boldcal{\fam\bsyfam}% math mode only
+ \T@\itbfam[itb]%
+ \edef\itb{\fam\itbfam\csname\@@tf itb\endcsname}%
+ \TSSS@\sffam[sf]%
+ \edef\sf{\fam\sffam\csname\@@tf sf\endcsname}%
+ \TSSS@\sfifam[sfi]%
+ \edef\sfi{\fam\sfifam\csname\@@tf sfi\endcsname}%
+ \TSSS@\sfbfam[sfb]%
+ \edef\sfb{\fam\sfbfam\csname\@@tf sfb\endcsname}%
+ \TXT@[sc]%
+ \edef\sc{\csname\@@tf sc\endcsname}% text mode only
+ \ifttr@ggedright\ttraggedright\fi
+ % conditionally adjust \ttraggedright to new size
+ \s@tdimen\rm % setting dimensions, roman default
+ \ifr@ggedright\raggedright\fi
+ % conditionally adjust \raggedright to new size
+ \boldmathfalse % family numbers start off normal!
+ \fi}
+
+
+% BOLDMATH
+\def\boldmath{% interchanging families 0,1,2 <-> \bffam,\mibfam,\bsyfam
+ \ifmmode\@error\@ne\else
+ \ifboldmath\@error\tw@\else
+ \TSSS@@\z@[bf]\TSSS@@\@ne[mib]\TSSS@@\tw@[bsy]%
+ \TSSS@@\bffam[rm]\TSSS@@\mibfam[i]\TSSS@@\bsyfam[sy]%
+ \edef\rm{\fam\bffam\csname\@@tf rm\endcsname}%
+ \def\mit{\fam\mibfam}%
+ \edef\oldstyle{\fam\mibfam\csname\@@tf i\endcsname}%
+ \def\cal{\fam\bsyfam}%
+ \edef\bf{\fam\z@\csname\@@tf bf\endcsname}%
+ \def\mib{\fam\@ne}%
+ \edef\boldoldstyle{\fam\@ne\csname\@@tf mib\endcsname}%
+ \def\boldcal{\fam\tw@}%
+ \boldmathtrue
+ \fi\fi}
+\def\unboldmath{% restoring default definitions
+ \ifmmode\@error\@ne\else
+ \ifboldmath
+ \TSSS@@\z@[rm]\TSSS@@\@ne[i]\TSSS@@\tw@[sy]%
+ \TSSS@@\bffam[bf]\TSSS@@\mibfam[mib]\TSSS@@\bsyfam[bsy]%
+ \edef\rm{\fam\z@\csname\@@tf rm\endcsname}%
+ \def\mit{\fam\@ne}%
+ \edef\oldstyle{\fam\@ne\csname\@@tf i\endcsname}%
+ \def\cal{\fam\tw@}%
+ \edef\bf{\fam\bffam\csname\@@tf bf\endcsname}%
+ \def\mib{\fam\mibfam}%
+ \edef\boldoldstyle{\fam\mibfam\csname\@@tf mib\endcsname}%
+ \def\boldcal{\fam\bsyfam}%
+ \boldmathfalse\else
+ \@error\thr@@
+ \fi\fi}
+\def\bmbox#1{\hbox{\ifboldmath\relax\else\boldmath\fi
+ $\m@th\relax #1$}}
+
+
+% FONT-SIZE COMMANDS
+% <roman numeral>pt, roman default
+\def\viipt{\let\@@tf\vii@ \let\@@sf\vi@ \let\@@ssf\v@
+ \xp@=0.7pt \fontscaling=700 \@FONTS}
+\def\viiipt{\let\@@tf\viii@ \let\@@sf\vi@ \let\@@ssf\v@
+ \xp@=0.8pt \fontscaling=800 \@FONTS}
+\def\ixpt{\let\@@tf\ix@ \let\@@sf\vii@ \let\@@ssf\v@
+ \xp@=0.9pt \fontscaling=900 \@FONTS}
+\def\xpt{\let\@@tf\x@ \let\@@sf\vii@ \let\@@ssf\v@
+ \xp@=1pt \fontscaling=\@m \@FONTS}
+\def\xipt{\let\@@tf\xi@ \let\@@sf\viii@ \let\@@ssf\vi@
+ \xp@=1.0955pt \fontscaling=\magstephalf \@FONTS}
+\def\xiipt{\let\@@tf\xii@ \let\@@sf\viii@ \let\@@ssf\vi@
+ \xp@=1.2pt \fontscaling=\magstep\@ne\@FONTS}
+\def\xiiipt{\let\@@tf\xiii@ \let\@@sf\ix@ \let\@@ssf\vii@
+ \xp@=1.3145pt \fontscaling=\magsteponehalf \@FONTS}
+\def\xivpt{\let\@@tf\xiv@ \let\@@sf\x@ \let\@@ssf\vii@
+ \fontn@mes\xiv@\tw@
+ \xp@=1.44pt \fontscaling=\magstep\tw@\@FONTS}
+\def\xviipt{\let\@@tf\xvii@ \let\@@sf\xii@ \let\@@ssf\viii@
+ \fontn@mes\xvii@\thr@@
+ \xp@=1.728pt \fontscaling=\magstep\thr@@\@FONTS}
+\def\xxipt{\let\@@tf\xxi@ \let\@@sf\xiv@ \let\@@ssf\x@
+ \fontn@mes\@@tf{4}\fontn@mes\@@sf\tw@
+ \xp@=2.0736pt \fontscaling=\magstep4\@FONTS}
+\def\xxvpt{\let\@@tf\xxv@ \let\@@sf\xvii@ \let\@@ssf\xii@
+ \fontn@mes\@@tf{5}\fontn@mes\@@sf\thr@@
+ \xp@=2.4883pt \fontscaling=\magstep5\@FONTS}
+\def\xxxpt{\let\@@tf\xxx@ \let\@@sf\xxi@ \let\@@ssf\xiv@
+ \fontn@mes\@@tf{6}\fontn@mes\@@sf{4}\fontn@mes\@@ssf\tw@
+ \xp@=2.9860pt \fontscaling=\magstep6\@FONTS}
+\def\xxxvipt{\let\@@tf\xxxvi@ \let\@@sf\xxv@ \let\@@ssf\xvii@
+ \fontn@mes\@@tf{7}\fontn@mes\@@sf{5}\fontn@mes\@@ssf\thr@@
+ \xp@=3.5832pt \fontscaling=\magstep7\@FONTS}
+\def\xliiipt{\let\@@tf\xliii@ \let\@@sf\xxx@ \let\@@ssf\xxi@
+ \fontn@mes\@@tf{8}\fontn@mes\@@sf{6}\fontn@mes\@@ssf{4}%
+ \xp@=4.2998pt \fontscaling=\magstep8\@FONTS}
+\def\liipt{\let\@@tf\lii@ \let\@@sf\xxxvi@ \let\@@ssf\xxv@
+ \fontn@mes\@@tf{9}\fontn@mes\@@sf{7}\fontn@mes\@@ssf{5}%
+ \xp@=5.1598pt \fontscaling=\magstep9\@FONTS}
+\def\lxiipt{\let\@@tf\lxii@ \let\@@sf\xliii@ \let\@@ssf\xxx@
+ \fontn@mes\@@tf{10}\fontn@mes\@@sf{8}\fontn@mes\@@ssf{6}%
+ \xp@=6.1917pt \fontscaling=\magstep{10}\@FONTS}
+\def\lxxivpt{\let\@@tf\lxxiv@ \let\@@sf\lii@ \let\@@ssf\xxxvi@
+ \fontn@mes\@@tf{11}\fontn@mes\@@sf{9}\fontn@mes\@@ssf{7}%
+ \xp@=7.4301pt \fontscaling=\magstep{11}\@FONTS}
+\def\lxxxixpt{\let\@@tf\lxxxix@ \let\@@sf\lxii@ \let\@@ssf\xliii@
+ \fontn@mes\@@tf{12}\fontn@mes\@@sf{10}\fontn@mes\@@ssf{8}%
+ \xp@=8.9161pt \fontscaling=\magstep{12}\@FONTS}
+\def\cviipt{\let\@@tf\cvii@ \let\@@sf\lxxiv@ \let\@@ssf\lii@
+ \fontn@mes\@@tf{13}\fontn@mes\@@sf{11}\fontn@mes\@@ssf{9}%
+ \xp@=10.6993pt \fontscaling=\magstep{13}\@FONTS}
+\def\cxxviiipt{\let\@@tf\cxxviii@ \let\@@sf\lxxxix@ \let\@@ssf\lxii@
+ \fontn@mes\@@tf{14}\fontn@mes\@@sf{12}\fontn@mes\@@ssf{10}%
+ \xp@=12.8392pt \fontscaling=\magstep{14}\@FONTS}
+\def\clivpt{\let\@@tf\cliv@ \let\@@sf\cvii@ \let\@@ssf\lxxiv@
+ \fontn@mes\@@tf{15}\fontn@mes\@@sf{13}\fontn@mes\@@ssf{11}%
+ \xp@=15.4070pt \fontscaling=\magstep{15}\@FONTS}
+
+% \fsize
+\expandafter\def\csname 0.5@\endcsname{@h@} \def\h@{@h@}
+\expandafter\def\csname 1.5@\endcsname{@hhh@} \def\hhh@{@hhh@}
+\expandafter\def\csname 1h@\endcsname{@hhh@}
+\def\fsize#1{\expandafter\ifx\csname #1@\endcsname\h@ \xipt\else
+ \expandafter\ifx\csname #1@\endcsname\hhh@ \xiiipt\else
+ \ifcase#1 \xpt\or \xiipt\or \xivpt\or \xviipt\or \xxipt\or \xxvpt\or
+ \xxxpt\or \xxxvipt\or \xliiipt\or \liipt\or \lxiipt\or \lxxivpt\or
+ \lxxxixpt\or \cviipt\or \cxxviiipt\or \clivpt \else
+ \@error4\fi\fi\fi\ignorespaces}
+
+
+% ADDITIONAL DEFINITIONS FOR MATH
+\def\frac#1#2{{#1\over #2}}
+\def\csfrac#1#2{\mathchoice % case fraction
+ {{\textstyle{#1\over #2}}}{{#1\over #2}}{{#1\over #2}}{{#1\over #2}}}
+\let\case\csfrac
+\def\slfrac#1#2{\count\z@\fam \count\@ne\fam
+ \ifnum\count\@ne=-1\count\@ne=\z@\fi
+ \def\@g##1##2{\setbox\z@=\hbox{$##1 0$}%
+ \setbox\@ne=\hbox{$\fam\count\z@ ##2/$}%
+ \dimen\z@-\ht\@ne\advance\dimen\z@\dp\@ne
+ \dimen\@ne\ht\@ne\advance\dimen\@ne\dp\@ne
+ \advance\dimen\z@\ht\z@\divide\dimen\z@\tw@
+ \advance\dimen\z@ 0.1065\dimen\@ne
+ \raise0.363\dimen\@ne\hbox{\scriptspace\z@$\fam\count\z@ ##1#1$}%
+ \kern-0.4\wd\@ne\raise\dimen\z@\copy\@ne\kern-0.4\wd\@ne
+ \lower0.15\dimen\@ne\hbox{\scriptspace\z@$\fam\count\z@ ##1#2$}}%
+ \expandafter\ifx\the\scriptscriptfont\count\@ne\nullfont
+ \mathchoice{\@g\scriptstyle\textstyle}{\@g\scriptstyle\textstyle}{XX}{}%
+ \else\mathchoice{\@g\scriptstyle\textstyle}{\@g\scriptstyle\textstyle}%
+ {\@g\scriptscriptstyle\scriptstyle}%
+ {\@g\scriptscriptstyle\scriptscriptstyle}\fi}
+\def\rdcl{\raise\xp@\hbox{$\surd$}}
+\def\gsim{\mathrel{\mathpalette\@vr >}} % greater than or on the order of
+\let\gtrsim\gsim
+\def\lsim{\mathrel{\mathpalette\@vr <}} % smaller than or on the order of
+\let\lesssim\lsim
+\def\@vr#1#2{\lower3.4\xp@\vbox{\baselineskip\z@\lineskiplimit\z@
+ \lineskip 0.8\xp@\ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr\sim\crcr}}}
+
+
+% VARIOUS DEFINITIONS
+\outer\def\Bye{\par\vfill\ifnum\pageno=\@ne\nopagenumbers\fi\supereject\end}
+\def\@{\spacefactor\@m} % end-of-sentence space
+\def\is{\spacefactor=\sfcode`\.{} } % intersentence space
+\def\\{\spacefactor=\sfcode`\.{} \ignorespaces}
+\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}
+\def\vandaag{\number\day\space
+ \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\heute{\number\day.\spacefactor\@m\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\number\year}
+\def\aujourdhui{\number\day\space
+ \ifcase\month\or janvier\or f\'evrier\or mars\or avril\or mai\or juin\or
+ julliet\or ao\^ut\or septembre\or octobre\or novembre\or d\'ecembre\fi
+ \space\number\year}
+\def\hoursminutes{% Style hh:mm
+ {\count\z@=\time\divide\count\z@ 60 \the\count\z@ \multiply\count\z@ 60
+ \advance\count\z@-\time\count\z@=-\count\z@:\ifnum\count\z@<10 0\fi\the\count\z@}}
+\def\dollar{{\ifdim\fontdimen\@ne\font>\z@ \sl\fi\char`\$}}
+\def\pounds{{\it\char'44}}
+\def\copyright{{\rm\ooalign{\hfil\raise 0.07ex\hbox{c}\kern0.03em\hfil\crcr
+ \ifboldmath\mathhexbox90D\else\mathhexbox20D\fi}}}
+ % Compared to plain TeX, \rm and \ifboldmath added
+\def\GOTOnextoddpage{\vfill\eject\ifodd\count\z@
+ \relax\else\bgroup\nopagenumbers\leavevmode\vfill\eject\egroup\fi}
+\def\GOTOnextevenpage{\vfill\eject\ifodd\count\z@
+ \bgroup\nopagenumbers\leavevmode\vfill\eject\egroup\else\relax\fi}
+
+
+% TYPE PAGES
+% US Letter is default. \hoffset should be (paper_width - \hsize)/2 - 1".
+% If printed page is not horizontally centered, do NOT modify \hoffset.
+% Instead adjust appropriate parameter of printer driver.
+% Comment out next three lines for US Letter
+\hsize157mm \vsize240mm \hoffset1.1mm % A4
+\dimen\footins220mm
+\def\m@g{\mag\count@\hsize157truemm\vsize240truemm\dimen\footins220truemm}
+
+
+% DEFAULT FONT SIZE
+\xpt % 10-points roman default
+\@firstsizetrue % yet first call in document defines size of footline
+
+
+% ERROR MESSAGES
+\def\@error#1{\errmessage{*** \ifcase#1
+\string\fsize\space or \string\viipt, etc. used in math mode\or %0
+\string\boldmath\space c.q. \string\unboldmath\space used in math %1
+ mode\or
+\string\boldmath: boldmath already active\or %2
+\string\unboldmath: boldmath not active\or %3
+Argument of \string\fsize\space invalid\or %4
+\fi\space ***}}
+
+
+% ADDITIONS TO HYPHENATION TABLE
+\count@\language\language=0
+\hyphenation{infra-red infra-struc-ture}
+\language=\count@
+
+\catcode`@=12 % at signs are no longer letters
+
+% END OF FNTS.TEX
+
+
diff --git a/macros/plain/contrib/fontch/DSmac.tex b/macros/plain/contrib/fontch/DSmac.tex
new file mode 100644
index 0000000000..ea2960a5fe
--- /dev/null
+++ b/macros/plain/contrib/fontch/DSmac.tex
@@ -0,0 +1,8 @@
+%% DSmac.tex This file is part of fontch package V2.2 2010/04/12
+%% Copyright 2010 Rodrigo Medina rmedina@ivic.gob.ve
+%% Licence: LPPL
+%%
+%% This stupid file is for avoiding to define a new family when it is not
+%% necessary, because a \newfam macro cannot be inside an if structure.
+\newfam\dsfam
+
diff --git a/macros/plain/contrib/fontch/README b/macros/plain/contrib/fontch/README
new file mode 100644
index 0000000000..39b7a38c34
--- /dev/null
+++ b/macros/plain/contrib/fontch/README
@@ -0,0 +1,360 @@
+README File of the package fontch.tex V2.2 2010/04/12
+ fontch.tex: Macros for changing fonts and sizes in plain TeX
+
+ Rodrigo Medina rmedina@ivic.gob.ve
+
+Suggested locations: .../texmf/tex/plain/fontch/
+ .../texmf/doc/plain/fontch/README
+Licence: LPPL
+
+Components
+----------
+The fontch V2.2 package is composed of the following files:
+ README -- this file
+ fontch.tex -- main macros
+ bsymbols.tex -- macros for boldface symbols
+ TS1mac.tex -- macros for the TS1 companion symbols
+ DSmac.tex -- auxiliary file for the DStroke option
+ fontch.pdf -- manual of fontch
+ fontch_doc.tex -- source of manual
+
+Description
+-----------
+ This package allows, in plain TeX, to change with a single
+command the size of all fonts that are used for text input and math input.
+Main text fonts of sizes 8, 10, 12, 14, 20 and 24 points are available.
+Fonts of sizes 5, 6, 7 and 9 points are used in subscripts and subscripts of
+subscripts of other main sizes.
+In addition fontch gives support to:
+ - boldface math-italic and boldface math symbols,
+ - T1 Latin Modern fonts,
+ - TS1 companion symbol fonts.
+ - AMS fonts for boldface math,
+ - Double Stroke fonts for blackboard bold symbols
+
+Requirements
+-------------
+- In order to use the T1 options LMTone and LMTSone, you need to have installed
+ the Latin Modern fonts of version 1.000 or larger. Older versions of LM fonts,
+ where the cork encoded fonts had names as cork-lmr10 (instead of ec-lmr10)
+ are incompatible with fontch-2.1. For those fonts you can use fontch-2.0
+ which is incompatible with the new naming convention. The old package is in
+ CTAN:/tex-archive/obsolete/macros/plain/contrib/fontch20.tar.gz
+- In order to use the AMSfont option you need to have installed the AMS fonts.
+- In order to use the DStroke option ou need to have installed the Double
+ Stroke fonts.
+
+Installation
+------------
+ You have only to put the macro files fontch.tex, bsymbols.tex,
+ TS1mac.tex and DSmac.tex in any sensible place in the texmf tree, like
+ .../texmf/tex/plain/fontch/
+
+It is also commendable to put this README file in a proper place such as
+
+ .../texmf/doc/plain/fontch/README
+
+Usage
+-----
+ For using fontch.tex with the original TeX OT1 fonts (Computer Modern)
+just put at the beginning of the document:
+ \input fontch.tex
+
+The file bsymbols.tex provides macro definitions for boldface versions
+of math symbols. For using it just input the file where you need it.
+
+The fontch package has four options for handling different kinds of fonts:
+
+ - LMTone for Latin Modern T1 fonts.
+ - LMTSone for the TS1 companion symbol font.
+ - AMSfont for AMS fonts used for boldface math.
+ - DStroke for Doublestroke fonts providing blackboard-boldface symbols.
+
+The four options are independent. They are activated by setting the
+corresponding variable before calling fontch.tex. For example for
+activating all the four options and using the macros for bold math
+put at the beginning of the document:
+
+ \let\AMSfont\relax
+ \let\DStroke\relax
+ \let\LMTone\relax
+ \let\LMTSone\relax
+ \input fontch.tex
+ \input bsymbols.tex
+
+NOTES:
+-----
+ (1) There is one modification of the standard behavior of plain TeX. Plain
+ TeX defines for the font #3 the same font (tenex) for text, script and
+ scriptscript. That is aw full. The fontch package uses sevenex for
+ script and fiveex for scriptscript, as for the other fonts.
+
+ (2) The use of files il1-t1.tcx or il2-t1.tcx is recommended together
+ with the LMT1 fonts.
+
+ (3) Only the cmcs, cmmib, cmbsy and cmex AMS fonts are supported. These
+ are used for small caps and for boldface math-italic and boldface
+ Greek symbols. The other AMS fonts like the Euler, Cyrillic and extra
+ symbols are not supported.
+
+ (4) Only the roman Doublestroke font is supported. The sans serif version
+ is not supported.
+
+ (5) There are two main uses of boldface math. One case is the use of
+ isolated bold characters or symbols inside a formula. For this case
+ fontch provides bold versions of math symbols and the macro \mb for bold
+ math-italic characters. The plain TeX macro "\bf" yields roman-bold
+ characters in math mode. The name of the bold version of a math symbol
+ is obtained adding the prefix "bf" to the name of the normal symbol. For
+ example a boldface italic "a" is {\mb a}, a boldface roman "P" is
+ {\bf P}, a boldface \Sigma is \bfSigma, a boldface \iff is \bfiff.
+
+ The other case is when one wants to write a complete formula in
+ boldface, for example inside a title. For this case fontch has the
+ macro \setmathbold that changes the font families 1 (cmmi) and 2 (cmsy)
+ to the bold versions cmmib and cmmbsy. The macro \unsetmathbold resets
+ the families 1 and 2 to their original values. These macros should be
+ put before and after the formula.
+
+ (6) Usually the macro \setmathbold does not change the whole formula to
+ boldface. This is due to the fact that in math mode some symbols
+ come from family #0 (cmr) or #3 (cmex) such as "+" or \int. Fontch
+ provides macros for the symbols that come from family #0, For
+ example the bold version of "(" is \bflparen.
+
+ (7) Math symbols of family #3 (cmex) do not have bold versions. In particular
+ \int, \sum and \prod. Nevertheless \smallint is of cmsy and does have
+ a bold version.
+
+Modifications from version 2.1
+------------------------------
+Version 2.2 is a minor bug correction version.
+The main change is the inclusion of the fontch.pdf file.
+
+Modifications from version 2.0
+------------------------------
+Version 2.1 is a minor bug correction version.
+The main change is the change in the name of
+the cork-encoded LM font files to the new
+naming conventions. (cork-lmr10 -> ec-lmr10, etc.)
+Fontch-2.1 is compatible with LM-1.000 or newer versions.
+Older versions of LM fonts are not compatible.
+
+Modifications from version 1.3
+------------------------------
+
+Version 2.0 is a mayor revision.
+
+There are many improvements such as
+ -- Proper handling of smallcaps
+ -- Support for bold-math
+ -- Support for AMS fonts
+ -- Support for blackboard boldface
+ -- Correction of bugs and scaling.
+
+The behavior of V2.0 should be compatible with V1.3 except for case explained
+in Note (1).
+-----------------------------------------------------
+%%%%%%%%% Commands of fontch %%%%%%
+
+General Commands
+----------------
+The package fontch defines the following commands valid for any option.
+
+Commands for changing font size:
+ \eightpoint -- Change to small type
+ \tenpoint -- Change to normal type
+ \twelvepoint -- Change to large type
+ \fourteenpoint -- Change to very large type
+ \twentypoint -- Change to huge type
+ \twentyfourpoint -- Change to immense type
+
+Commands for changing family, most already in plain TeX.
+
+ \rm -- Roman
+ \sl -- Slanted
+ \it -- Italic
+ \bf -- Boldface
+ \tt -- Teletype
+ \sf -- Sans Serif (new)
+ \sc -- Small Caps
+ \cal -- Calligraphic
+ \mit -- Math Italic
+ \mb -- Math Boldface (new)
+ \bcal -- Boldface calligraphic (new)
+ \oldstyle -- Old style digits
+ \boldstyle -- Boldface old style digits (new)
+ \setmathbold -- set families 1 and 2 to cmmib and cmmbsy (new)
+ \unsetmathbold -- reset families 1 and 2 to cmmi and cmmsy (new)
+
+Command for changing line spacing
+ \doublespace -- Double Space for ten & twelve points
+
+
+
+Macros of bold symbols (Requires input of bsymbols.tex)
+----------------------
+Symbols that have a keyword
+ bold_keyword = bf + normal_keyword
+
+Symbols that do not have a keyword
+ \bfexcl -- !
+ \bflparen -- (
+ \bfrparen -- )
+ \bfplus -- +
+ \bfcomma -- ,
+ \bfcolon -- :
+ \bfsemicolon -- ;
+ \bfequal -- =
+ \bflbraket -- [
+ \bfrbraket -- ]
+ \bflt -- <
+ \bfslash -- /
+ \bfgt -- >
+ \bfminus -- -
+ \bfvert -- |
+ \bfVert -- \|
+
+Command of the DStroke option
+-----------------------------
+ \ds -- Double Stroke
+
+Commands of the LMT1 option
+---------------------------
+
+Redefined Plain TeX Commands:
+ \i , \j , \ae , \AE, \oe , \OE , \o , \O ,
+ \ss , \SS , \aa , \AA , \l , \L ,
+ \Gamma , \Delta , \Theta , \Lambda , \Xi , \Pi ,
+ \Sigma , \Upsilon , \Phi , \Psi , \Omega , \hbar
+
+New T1 Commands for non-latin1 characters
+
+ \lh -- l'
+ \Lh -- L'
+ \dh -- d'
+ \th -- t'
+ \dbar -- d slash
+ \Edh
+ \edh
+ \ij
+ \IJ
+ \nj
+ \NJ
+ \thorn
+ \Thorn
+ \smallzero
+ \lguille -- left guillemot (does not appear in il1-t1.tcx)
+ \rguille -- right guillemot (does not appear in il1-t1.tcx)
+ \vispace -- visible space
+
+Redefined plain TeX accents
+ \` , \' , \^ , \~ , \" , \H , \v , \u , \= , \. , \b , \c
+
+Redefined plain TeX math-accents
+ \acute,\grave,\ddot,\tilde,\bar,\breve,\check,\hat,\dot
+
+New T1 accents
+ \r -- ring accent
+ \k -- ogonek
+
+New T1 math-accent
+ \ring
+
+Commands of the LMTS1 option
+----------------------------
+
+TS1 symbols
+ \tcchar{#1} -- Character of TS1 table
+
+Redefined plain TeX commands
+ \t{#1} -- tie-after-accent
+ \P -- pilcrow
+ \S -- section
+ \dag -- dagger
+ \ddag -- double dagger
+ \copyright
+
+Most TS1 symbols (in increasing charcode order)
+Some are text versions of symbols of the math mode.
+
+ \arrowl -- left arrow
+ \arrowr -- right arrow
+ \blank
+ \dollar
+ \caster -- centered asterisk
+ \sequals -- short equals
+ \anglel
+ \angler
+ \mho
+ \bigcircle
+ \Ohm
+ \bbracketl -- left double square bracket
+ \bbracketr -- right double square bracket
+ \arrowu -- up arrow
+ \arrowd -- down arrow
+ \textstar -- star
+ \born
+ \died
+ \leaf
+ \married
+ \music
+ \doublevert -- Double vertical bar
+ \perthousand
+ \bull -- bullet (is in manmac)
+ \centigrade
+ \olddollar
+ \oldcent
+ \florin
+ \Colon
+ \won
+ \naira
+ \guarani
+ \peso
+ \lira
+ \recipe
+ \interrobang -- Question+Exclamation
+ \gnaborretni -- Question+Exclamation upside-down
+ \dong
+ \TM
+ \pertenth -- per ten thousand
+ \npilcrow -- narrow pilcrow
+ \baht
+ \numero
+ \abzueglich
+ \aestimated -- Big e
+ \openbull
+ \SM
+ \qbrackl -- left quill bracket
+ \qbrackr -- right quill bracket
+ \cent
+ \sterling
+ \currency
+ \yen
+ \brokenvert -- broken vertical bar
+ \feminine
+ \copyleft
+ \lognot -- logical not
+ \circledP
+ \registered
+ \degree
+ \plusminus
+ \twoup
+ \threeup
+ \micro
+ \centereddot
+ \reference
+ \oneup
+ \masculine
+ \root
+ \onequarter
+ \onehalf
+ \threequarters
+ \euro
+ \texttimes
+ \textdiv
+
+Bugs
+----
+ Comments and bugs reports are welcome at rmedina@ivic.gob.ve
+-.-
diff --git a/macros/plain/contrib/fontch/TS1mac.tex b/macros/plain/contrib/fontch/TS1mac.tex
new file mode 100644
index 0000000000..c56922dbc0
--- /dev/null
+++ b/macros/plain/contrib/fontch/TS1mac.tex
@@ -0,0 +1,133 @@
+%% TS1mac.tex this file is part of fontch package V2.2 2010/04/12
+%% Copyright 2010 Rodrigo Medina rmedina@ivic.gob.ve
+%% Licence: LPPL
+%%
+%% Support of TS1 fonts
+%% eight points fonts %%
+\font\eightcrm=ts1-lmr8
+\font\eightcbf=ts1-lmbx8
+\font\eightcsl=ts1-lmro8
+\font\eightctt=ts1-lmtt8
+\font\eightcit=ts1-lmri8
+\font\eightcss=ts1-lmss8
+%% ten points fonts %%
+\font\tencrm=ts1-lmr10
+\font\tencbf=ts1-lmbx10
+\font\tencsl=ts1-lmro10
+\font\tenctt=ts1-lmtt10
+\font\tencit=ts1-lmri10
+\font\tencss=ts1-lmss10
+%% twelve points fonts %%
+\font\twelvecrm=ts1-lmr12
+\font\twelvecbf=ts1-lmbx12
+\font\twelvecsl=ts1-lmro12
+\font\twelvectt=ts1-lmtt12
+\font\twelvecit=ts1-lmri12
+\font\twelvecss=ts1-lmss12
+%% fourteen points fonts %%
+\font\fourteencrm=ts1-lmr12 scaled 1167
+\font\fourteencbf=ts1-lmbx12 scaled 1167
+\font\fourteencsl=ts1-lmro12 scaled 1167
+\font\fourteenctt=ts1-lmtt12 scaled 1167
+\font\fourteencit=ts1-lmri12 scaled 1167
+\font\fourteencss=ts1-lmss12 scaled 1167
+%% twenty points fonts %%
+\font\twentycrm=ts1-lmr12 scaled 1667
+\font\twentycbf=ts1-lmbx12 scaled 1667
+\font\twentycsl=ts1-lmro12 scaled 1667
+\font\twentyctt=ts1-lmtt12 scaled 1667
+\font\twentycit=ts1-lmri12 scaled 1667
+\font\twentycss=ts1-lmss12 scaled 1667
+%% twentyfour points fonts %%
+\font\twentyfourcrm=ts1-lmr12 scaled 2000
+\font\twentyfourcbf=ts1-lmbx12 scaled 2000
+\font\twentyfourcsl=ts1-lmro12 scaled 2000
+\font\twentyfourctt=ts1-lmtt12 scaled 2000
+\font\twentyfourcit=ts1-lmri12 scaled 2000
+\font\twentyfourcss=ts1-lmss12 scaled 2000
+%% Text companion symbols TS1 %%
+%% Redefinition of tie-accent
+\def\t#1{{\edef\next{\the\font}\tcfont\accent"1B\next#1}}
+%% TC character
+\def\tcchar#1{{\edef\next{\the\font}\tcfont\char#1\next}}
+%% TC symbols
+\def\arrowl{{\tcchar{"18}}}
+\def\arrowr{{\tcchar{"19}}}
+\def\blank{{\tcchar{"20}}}
+\def\dollar{{\tcchar{"24}}}
+\def\caster{{\tcchar{"2A}}}
+\def\sequals{{\tcchar{"2D}}}
+\def\anglel{{\tcchar{"3C}}}
+\def\angler{{\tcchar{"3E}}}
+\def\mho{{\tcchar{"4D}}}
+\def\bigcircle{{\tcchar{"4F}}}
+\def\Ohm{{\tcchar{"57}}}
+\def\bbracketl{{\tcchar{"5B}}}
+\def\bbracketr{{\tcchar{"5D}}}
+\def\arrowu{{\tcchar{"5E}}}
+\def\arrowd{{\tcchar{"5F}}}
+\def\textstar{{\tcchar{"62}}}
+\def\born{{\tcchar{"63}}}
+\def\died{{\tcchar{"64}}}
+\def\leaf{{\tcchar{"6C}}}
+\def\married{{\tcchar{"6D}}}
+\def\music{{\tcchar{"6E}}}
+\def\dag{{\tcchar{"84}}}%% Redefined
+\def\ddag{{\tcchar{"85}}}%% Redefined
+\def\doublevert{{\tcchar{"86}}}
+\def\perthousand{{\tcchar{"87}}}
+\def\bull{{\tcchar{"88}}}
+\def\centigrade{{\tcchar{"89}}}
+\def\olddollar{{\tcchar{"8A}}}
+\def\oldcent{{\tcchar{"8B}}}
+\def\florin{{\tcchar{"8C}}}
+\def\Colon{{\tcchar{"8D}}}
+\def\won{{\tcchar{"8E}}}
+\def\naira{{\tcchar{"8F}}}
+\def\guarani{{\tcchar{"90}}}
+\def\peso{{\tcchar{"91}}}
+\def\lira{{\tcchar{"92}}}
+\def\recipe{{\tcchar{"93}}}
+\def\interrobang{{\tcchar{"94}}}
+\def\gnaborretni{{\tcchar{"95}}}
+\def\dong{{\tcchar{"96}}}
+\def\TM{{\tcchar{"97}}}
+\def\pertenth{{\tcchar{"98}}}
+\def\npilcrow{{\tcchar{"99}}}
+\def\baht{{\tcchar{"9A}}}
+\def\numero{{\tcchar{"9B}}}
+\def\abzueglich{{\tcchar{"9C}}}
+\def\aestimated{{\tcchar{"9D}}}
+\def\openbull{{\tcchar{"9E}}}
+\def\SM{{\tcchar{"9F}}}
+\def\qbrackl{{\tcchar{"A0}}}
+\def\qbrackr{{\tcchar{"A1}}}
+\def\cent{{\tcchar{"A2}}}
+\def\sterling{{\tcchar{"A3}}}
+\def\currency{{\tcchar{"A4}}}
+\def\yen{{\tcchar{"A5}}}
+\def\brokenvert{{\tcchar{"A6}}}
+\def\S{{\tcchar{"A7}}}%% Redefined
+\def\copyright{{\tcchar{"A9}}}
+\def\feminine{{\tcchar{"AA}}}
+\def\copyleft{{\tcchar{"AB}}}
+\def\lognot{{\tcchar{"AC}}}
+\def\circledP{{\tcchar{"AD}}}
+\def\registered{{\tcchar{"AE}}}
+\def\degree{{\tcchar{"B0}}}
+\def\plusminus{{\tcchar{"B1}}}
+\def\twoup{{\tcchar{"B2}}}
+\def\threeup{{\tcchar{"B3}}}
+\def\micro{{\tcchar{"B5}}}
+\def\P{{\tcchar{"B6}}}%% Redefined
+\def\centereddot{{\tcchar{"B7}}}
+\def\reference{{\tcchar{"B8}}}
+\def\oneup{{\tcchar{"B9}}}
+\def\masculine{{\tcchar{"BA}}}
+\def\root{{\tcchar{"BB}}}
+\def\onequarter{{\tcchar{"BC}}}
+\def\onehalf{{\tcchar{"BD}}}
+\def\threequarters{{\tcchar{"BE}}}
+\def\euro{{\tcchar{"BF}}}
+\def\texttimes{{\tcchar{"D6}}}
+%% End of LMTSone option %%
diff --git a/macros/plain/contrib/fontch/bsymbols.tex b/macros/plain/contrib/fontch/bsymbols.tex
new file mode 100644
index 0000000000..287099f952
--- /dev/null
+++ b/macros/plain/contrib/fontch/bsymbols.tex
@@ -0,0 +1,228 @@
+%% bsymbols.tex Macros for bold symbols defined in cmmib and cmbsy
+%% Part of package fontch V2.2 2010/04/12
+%% Copyright 2010 Rodrigo Medina rmedina@ivic.gob.ve
+%% Licence: LPPL
+%%
+%%%% Description
+%% Defines a macro for the bold version of each symbol that appears in
+%% cmmi and cmsy. The name of the bold symbol is the name of the normal symbol
+%% with the prefix "bf". For example the bold version of \Sigma is \bfSigma.
+%%
+%% There are also macros for the bold versions of symbols that have their
+%% own key. For example the bold version of "+" is \bfplus.
+%%%% Requirement
+%% As it is defined in fontch.tex cmmib must be family #8 and cmbsy family #9
+%%
+%%%% Usage
+%% You can use bsymbols.tex in two ways:
+%% 1- put \input bsymbols.tex in your document.
+%% 2- If need only a few bold symbols you may copy in your document
+%% the lines of this file in which the symbols that you need appear.
+%%
+%%%%
+%%
+%% These have their own key, most are defined in cmr
+\mathchardef\bfexcl="0621
+\mathchardef\bflparen="4628
+\mathchardef\bfrparen="5629
+\mathchardef\bfplus="262B
+\mathchardef\bfcomma="662C
+\mathchardef\bfcolon="063A
+\mathchardef\bfsemicolon="663B
+\mathchardef\bfequal="363D
+\mathchardef\bflbraket="465B
+\mathchardef\bfrbraket="565D
+\mathchardef\bflt="383C
+\mathchardef\bfslash="283D
+\mathchardef\bfgt="383E
+\mathchardef\bfminus="2900
+\mathchardef\bfvert="296A
+%% cmmi symbols
+\mathchardef\bfGamma="7800
+\mathchardef\bfDelta="7801
+\mathchardef\bfTheta="7802
+\mathchardef\bfLambda="7803
+\mathchardef\bfXi="7804
+\mathchardef\bfPi="7805
+\mathchardef\bfSigma="7806
+\mathchardef\bfUpsilon="7807
+\mathchardef\bfPhi="7808
+\mathchardef\bfPsi="7809
+\mathchardef\bfOmega="780A
+\mathchardef\bfalpha="080B
+\mathchardef\bfbeta="080C
+\mathchardef\bfgamma="080D
+\mathchardef\bfdelta="080E
+\mathchardef\bfepsilon="080F
+\mathchardef\bfzeta="0810
+\mathchardef\bfeta="0811
+\mathchardef\bftheta="0812
+\mathchardef\bfiota="0813
+\mathchardef\bfkappa="0814
+\mathchardef\bflambda="0815
+\mathchardef\bfmu="0816
+\mathchardef\bfnu="0817
+\mathchardef\bfxi="0818
+\mathchardef\bfpi="0819
+\mathchardef\bfrho="081A
+\mathchardef\bfsigma="081B
+\mathchardef\bftau="081C
+\mathchardef\bfupsilon="081D
+\mathchardef\bfphi="081E
+\mathchardef\bfchi="081F
+\mathchardef\bfpsi="0820
+\mathchardef\bfomega="0821
+\mathchardef\bfvarepsilon="0822
+\mathchardef\bfvartheta="0823
+\mathchardef\bfvarpi="0824
+\mathchardef\bfvarrho="0825
+\mathchardef\bfvarsigma="0826
+\mathchardef\bfvarphi="0827
+\mathchardef\bfleftharpoonup="3828
+\mathchardef\bfleftharpoondown="3829
+\mathchardef\bfrightharpoonup="382A
+\mathchardef\bfrightharpoondown="382B
+\mathchardef\bflhook="382C
+\mathchardef\bfrhook="382D
+\def\bfhookrightarrow{\bflhook\joinrel\bfrightarrow}
+\def\bfhookleftarrow{\bfleftarrow\joinrel\bfrhook}
+\def\bfrelbar{\mathrel{\smash\bfminus}}
+\def\bfRelbar{\mathrel\bfequal}
+\mathchardef\bftriangleright="282E
+\mathchardef\bftriangleleft="282F
+\def\bfjoinrel{\mathrel{\mkern-4mu}}
+\def\bfbowtie{\mathrel\bftriangleright\bfjoinrel\mathrel\bftriangleleft}
+\def\bfmodels{\mathrel\bfvert\bfjoinrel\bfequal}
+\def\bfLongrightarrow{\bfRelbar\bfjoinrel\bfRightarrow}
+\def\bflongrightarrow{\bfrelbar\bfjoinrel\bfrightarrow}
+\def\bflongmapsto{\bfmapstochar\bflongrightarrow}
+\def\bflongleftarrow{\bfleftarrow\bfjoinrel\bfrelbar}
+\def\bfLongleftarrow{\bfLeftarrow\bfjoinrel\bfRelbar}
+\def\bflongleftrightarrow{\bfleftarrow\bfjoinrel\bfrightarrow}
+\def\bfLongleftrightarrow{\bfLeftarrow\bfjoinrel\bfRightarrow}
+\def\bfiff{\;\bfLongleftrightarrow\;}
+
+
+\mathchardef\bfldotp="683A
+\def\bfldots{\mathinner{\bfldotp\bfldotp\bfldotp}}
+\let\bfdots=\bfldots
+\mathchardef\bfstar="283F
+\mathchardef\bfpartial="0840
+\mathchardef\bfflat="085B
+\mathchardef\bfnatural="085C
+\mathchardef\bfsharp="085D
+\mathchardef\bfsmile="385E
+\mathchardef\bffrown="385F
+\mathchardef\bfell="0860
+\mathchardef\bfimath="087B
+\mathchardef\bfjmath="087C
+\mathchardef\bfwp="087D
+%%
+%% cmsy symbols
+\mathchardef\bfcdot="2901
+\mathchardef\bfcdotp="6201
+\def\bfcdots{\mathinner{\bfcdotp\bfcdotp\bfcdotp}}
+\mathchardef\bftimes="2902
+\mathchardef\bfast="2903
+\mathchardef\bfdiv="2904
+\mathchardef\bfdiamond="2905
+\mathchardef\bfpm="2906
+\mathchardef\bfmp="2907
+\mathchardef\bfoplus="2908
+\mathchardef\bfominus="2909
+\mathchardef\bfotimes="290A
+\mathchardef\bfoslash="290B
+\mathchardef\bfodot="290C
+\mathchardef\bfbigcirc="290D
+\mathchardef\bfcirc="290E
+\mathchardef\bfbullet="290F
+\mathchardef\bfasymp="3910
+\mathchardef\bfequiv="3911
+\mathchardef\bfsubseteq="3912
+\mathchardef\bfsupseteq="3913
+\mathchardef\bfleq="3914 \let\bfle=\bfleq
+\mathchardef\bfgeq="3915 \let\bfge=\bfgeq
+\mathchardef\bfpreceq="3916
+\mathchardef\bfsucceq="3917
+\mathchardef\bfsim="3918
+\mathchardef\bfapprox="3919
+\mathchardef\bfsubset="391A
+\mathchardef\bfsupset="391B
+\mathchardef\bfll="391C
+\mathchardef\bfgg="391D
+\mathchardef\bfprec="391E
+\mathchardef\bfsucc="391F
+\mathchardef\bfleftarrow="3920 \let\bfgets=\bfleftarrow
+\mathchardef\bfrightarrow="3921 \let\bfto=\bfrightarrow
+\mathchardef\bfuparrow="3922
+\mathchardef\bfdownarrow="3923
+\mathchardef\bfleftrightarrow="3924
+\mathchardef\bfnearrow="3925
+\mathchardef\bfsearrow="3926
+\mathchardef\bfsimeq="3927
+\mathchardef\bfLeftarrow="3928
+\mathchardef\bfRightarrow="3929
+\mathchardef\bfUparrow="392A
+\mathchardef\bfDownarrow="392B
+\mathchardef\bfLeftrightarrow="392C
+\mathchardef\bfnwarrow="392D
+\mathchardef\bfswarrow="392E
+\mathchardef\bfpropto="392F
+\mathchardef\bfprime="0930
+\mathchardef\bfinfty="0931
+\mathchardef\bfin="3932
+\mathchardef\bfni="3933
+\mathchardef\bfbigtriangle="2934
+\mathchardef\bfbigtriangledown="2935
+\mathchardef\bfnot="3936
+\mathchardef\bfmapstochar="3937
+\def\bfmapsto{\bfmapstochar\bfrightarrow}
+\mathchardef\bfforall="0938
+\mathchardef\bfexists="0939
+\mathchardef\bfneg="093A \let\bflnot=\bfneg
+\mathchardef\bfemptyset="093B
+\mathchardef\bfRe="093C
+\mathchardef\bfIm="093D
+\mathchardef\bftop="093E
+\mathchardef\bfbot="093F \let\bfperp=\bfbot
+\mathchardef\bfaleph="0940
+\mathchardef\bfcup="295B
+\mathchardef\bfcap="295C
+\mathchardef\bfuplus="295D
+\mathchardef\bfwedge="295E \let\bfland=\bfwedge
+\mathchardef\bfvee="295F \let\bflor=\bfvee
+\mathchardef\bfvdash="3960
+\mathchardef\bfdashv="2961
+\mathchardef\bflfloor="4962
+\mathchardef\bfrfloor="5963
+\mathchardef\bflceil="4964
+\mathchardef\bfrceil="5965
+\mathchardef\bflbrace="4966
+\mathchardef\bfrbrace="5967
+\mathchardef\bflangle="4968
+\mathchardef\bfrangle="5969
+\mathchardef\bfmid="396A
+\mathchardef\bfparallel="396B
+\mathchardef\bfVert="296B
+\mathchardef\bfupdownarrow="396C
+\mathchardef\bfUpdownarrow="396D
+\mathchardef\bfbackslash="096E
+\mathchardef\bfwr="296F
+\def\bfsurd{{\mathchar"1970}}
+\mathchardef\bfamalg="2971
+\mathchardef\bfnabla="0972
+\mathchardef\bfsmallint="1973
+\mathchardef\bfsqcup="2974
+\mathchardef\bfsqcap="2975
+\mathchardef\bfsqsubseteq="3976
+\mathchardef\bfsqsupseteq="3977
+\mathchardef\bfS="0978
+\mathchardef\bfdagger="2979
+\mathchardef\bfddagger="297A
+\mathchardef\bfP="097B
+\mathchardef\bfclubsuit="097C
+\mathchardef\bfdiamondsuit="097D
+\mathchardef\bfheartsuit="097E
+\mathchardef\bfspadesuit="097F
+%%
+~
diff --git a/macros/plain/contrib/fontch/fontch.pdf b/macros/plain/contrib/fontch/fontch.pdf
new file mode 100644
index 0000000000..1604e73957
--- /dev/null
+++ b/macros/plain/contrib/fontch/fontch.pdf
Binary files differ
diff --git a/macros/plain/contrib/fontch/fontch.tex b/macros/plain/contrib/fontch/fontch.tex
new file mode 100644
index 0000000000..8bc1717f83
--- /dev/null
+++ b/macros/plain/contrib/fontch/fontch.tex
@@ -0,0 +1,1215 @@
+%% fontch.tex Macros for easily changing fonts and sizes in plain TeX %%
+%% V2.2 2010/04/12
+%% Copyright 2010 Rodrigo Medina rmedina@ivic.gob.ve
+%% Suggested location: .../texmf/tex/plain/fontch/
+%% Licence: LPPL
+%%
+%%%%%% Components
+%% The fontch V2.2 package is composed of the following files
+%% README -- Explanation file (has essentially this information)
+%% fontch.tex -- main macros
+%% bsymbols.tex -- macros for boldface symbols
+%% TS1mac.tex -- macros for the TS1 companion symbols
+%% DSmac.tex -- auxiliary file for the DStroke option
+%% fontch.pdf -- manual to fontch
+%% fontch_doc.tex -- source of manual
+%%%%%% Description
+%%
+%% Fontch implements a mechanism for changing type and size of fonts. One
+%% can write text and math at main sizes of 8, 10, 12, 14, 20 and 24 points.
+%% Fonts of sizes 5, 6, 7 and 9 points are used in subscripts and subscripts of %% subscripts of other main sizes.
+%% A single command makes all the changes needed for changing font smoothly.
+%% In addition fontch gives support to:
+%% - boldface math-italic and boldface math symbols,
+%% - T1 Latin Modern fonts,
+%% - TS1 companion symbol fonts.
+%% - AMS fonts for boldface math,
+%% - Double Stroke fonts for blackboard bold symbols
+%%
+%%%%%% Usage
+%%
+%% For using fontch.tex with the original TeX OT1 fonts (Computer Modern)
+%% just put at the beginning of the document:
+%% \input fontch.tex
+%%
+%% The file bsymbols.tex provides macro definitions for boldface versions
+%% of math symbols. For using it just input the file where you need it.
+%%
+%% The fontch package has four options for handling different kinds of fonts:
+%%
+%% - LMTone for Latin Modern T1 fonts.
+%% - LMTSone for the TS1 companion symbol font.
+%% - AMSfont for AMS fonts used for boldface math.
+%% - DStroke for Doublestroke fonts providing blackboard-boldface symbols.
+%%
+%% The four options are independent. They are activated by setting the
+%% corresponding variable before calling fontch.tex. For example for
+%% activating all the four options and using the macros for bold math
+%% put at the beginning of the document:
+%%
+%% \let\AMSfont\relax
+%% \let\DStroke\relax
+%% \let\LMTone\relax
+%% \let\LMTSone\relax
+%% \input fontch.tex
+%% \input bsymbols.tex
+%%
+%%
+%%%%%% NOTES:
+%% (1) There is one modification of the standard behavior of plain TeX. Plain
+%% TeX defines for the font #3 the same font (tenex) for text, script and
+%% scriptscript. That is awfull. The fontch package uses sevenex for
+%% script and fiveex for scriptscript, as for the other fonts.
+%%
+%% (2) The use of files il1-t1.tcx or il2-t1.tcx is recommended together
+%% with the LMT1 fonts.
+%%
+%% (3) Only the cmcs, cmmib, cmbsy and cmex AMS fonts are supported. These
+%% are used for small caps and for boldface math-italic and boldface
+%% greek symbols. The other AMS fonts like the Euler, Cyrillic and extra
+%% symbols are not supported.
+%%
+%% (4) Only the roman Doublestroke font is supported. The sans serif version
+%% is not supported.
+%%
+%% (5) There are two main uses of boldface math. One case is the use of
+%% isolated bold characters or symbols inside a formula. For this case
+%% fontch provides bold versions of math synbols and the macro \mb for bold
+%% math-italic characters. The plain TeX macro "\bf" yields roman-bold
+%% characters in math mode. The name of the bold version of a math symbol
+%% is obtained adding the prefix "bf" to the name of the normal symbol. For
+%% example a boldface italic "a" is {\mb a}, a boldface roman "P" is
+%% {\bf P}, a boldface \Sigma is \bfSigma, a boldface \iff is \bfiff.
+%%
+%% The other case is when one wants to write a complete formula in
+%% boldface, for example inside a title. For this case fontch has the
+%% macro \setmathbold that changes the font families 1 (cmmi) and 2 (cmsy)
+%% to the bold versions cmmib and cmmbsy. The macro \unsetmathbold resets
+%% the families 1 and 2 to their original values. These macros should be
+%% put before and after the formula.
+%%
+%% (6) Usually the macro \setmathbold does not change the whole formula to
+%% boldface. This is due to the fact that in math mode some symbols
+%% come from family #0 (cmr) or #3 (cmex) such as "+" or \int. Fontch
+%% provides macros for the symbols that come from family #0, For
+%% example the bold version of "(" is \bflparen.
+%%
+%% (7) Math symbols of family #3 (cmex) do not have bold versions. In particular
+%% \int, \sum and \prod. Nevertheless \smallint is of cmsy and does have
+%% a bold version.
+%%
+%%%%%%%%% Commands of fontch %%%%%%
+%%
+%%%%%% General Commands
+% \rm -- Roman
+% \sl -- Slanted
+% \it -- Italic
+% \bf -- Boldface
+% \tt -- Teletype
+% \sf -- Sans Serif
+% \sc -- Small Caps
+% \cal -- Calligraphic
+% \mit -- Math Italic
+% \mb -- Math Boldface
+% \bcal -- Boldface calligraphic
+% \oldstyle -- Old style digits
+% \boldstyle -- Boldface old style digits
+% \setmathbold -- set families 1 and 2 to cmmib and cmmbsy
+% \unsetmathbold -- reset families 1 and 2 to cmmi and cmmsy
+% \eightpoint -- Change to small type
+% \tenpoint -- Change to normal type
+% \twelvepoint -- Change to large type
+% \fourteenpoint -- Change to very large type
+% \twentypoint -- Change to huge type
+% \twentyfourpoint -- Change to immense type
+% \doublespace -- Double space for ten & twelve points
+%
+%%%%%% Macros of bold symbols
+% Symbols that have a keyword
+% bold_keyword = bf + normal_keyword
+%
+% Symbols that do not have a keyword
+% \bfexcl -- !
+% \bflparen -- (
+% \bfrparen -- )
+% \bfplus -- +
+% \bfcomma -- ,
+% \bfcolon -- :
+% \bfsemicolon -- ;
+% \bfequal -- =
+% \bflbraket -- [
+% \bfrbraket -- ]
+% \bflt -- <
+% \bfslash -- /
+% \bfgt -- >
+% \bfminus -- -
+% \bfvert -- |
+% \bfVert -- \|
+%
+%%%%%% Command of the DStroke option
+% \ds -- Double Stroke
+%
+%%%%%% Commands of the LMT1 option
+%% Redefined Plain TeX Commands
+% \i , \j , \ae , \AE, \oe , \OE , \o , \O ,
+% \ss , \SS , \aa , \AA , \l , \L ,
+% \Gamma , \Delta , \Theta , \Lambda , \Xi , \Pi ,
+% \Sigma , \Upsilon , \Phi , \Psi , \Omega, \hbar
+%%
+%% New T1 Commands for non-latin1 characters
+% \lh -- l'
+% \Lh -- L'
+% \dh -- d'
+% \th -- t'
+% \dbar -- d slash
+% \Edh
+% \edh
+% \ij
+% \IJ
+% \nj
+% \NJ
+% \thorn
+% \Thorn
+% \smallzero
+% \lguille -- left guillemot (does not appear in il1-t1.tcx)
+% \rguille -- right guillemot (does not appear in il1-t1.tcx)
+% \vispace -- visible space
+%%
+%% Redefined plain TeX accents
+% \` , \' , \^ , \~ , \" , \H , \v , \u , \= , \. , \b , \c
+%% New T1 accents
+% \r -- ring accent
+% \k -- ogonek
+%%
+%% Redefined plain TeX math-accents
+% \acute,\grave,\ddot,\tilde,\bar,\breve,\check,\hat,\dot
+%% New T1 math-accent
+% \ring
+%%
+%%%%% Commands of the LMTS1 option %%
+%% Text companion symbols TS1 %%
+% \tcchar{#1} -- Character of TS1 table
+%% Redefined plain TeX commands
+% \t{#1} -- tie-after-accent
+% \P -- pilcrow
+% \S -- section
+% \dag -- dagger
+% \ddag -- double dagger
+% \copyright
+%% Most TS1 symbols (in increasing charcode order)
+% \arrowl -- left arrow
+% \arrowr -- right arrow
+% \blank
+% \dollar
+% \caster -- centered asterisk
+% \sequals -- short equals
+% \anglel
+% \angler
+% \mho
+% \bigcircle
+% \Ohm
+% \bbracketl -- left double square bracket
+% \bbracketr -- right double square bracket
+% \arrowu -- up arrow
+% \arrowd -- down arrow
+% \textstar -- star
+% \born
+% \died
+% \leaf
+% \married
+% \music
+% \doublevert -- Double vertical bar
+% \perthousand
+% \bull -- bullet (is in manmac)
+% \centigrade
+% \olddollar
+% \oldcent
+% \florin
+% \Colon
+% \won
+% \naira
+% \guarani
+% \peso
+% \lira
+% \recipe
+% \interrobang -- Question+Exclamation
+% \gnaborretni -- Question+Exclamation upsidedown
+% \dong
+% \TM
+% \pertenth -- per ten thousand
+% \npilcrow -- narrow pilcrow
+% \baht
+% \numero
+% \abzueglich
+% \aestimated -- Big e
+% \openbull
+% \SM
+% \qbrackl -- left quill bracket
+% \qbrackr -- right quill bracket
+% \cent
+% \sterling
+% \currency
+% \yen
+% \brokenvert -- broken vertical bar
+% \feminine
+% \copyleft
+% \lognot -- logical not
+% \circledP
+% \registered
+% \degree
+% \plusminus
+% \twoup
+% \threeup
+% \micro
+% \centereddot
+% \reference
+% \oneup
+% \masculine
+% \root
+% \onequarter
+% \onehalf
+% \threequarters
+% \euro
+% \texttimes
+% \textdiv
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Modifications from version 2.1
+%% Version 2.2 is a minor bug correction version.
+%% The main change is the inclusion of the fontch.pdf file.
+%%
+%% Modifications from version 2.0
+%% Version 2.1 is a bug correction version
+%% The main change is to conform with the new naming conventions
+%% of the LM fonts files. Fontch-2.1 is compatible with LM fonts
+%% of version 1.000 or larger.
+%%
+%% Modifications from version 1.3
+%%
+%% Version 2.0 is a mayor revision.
+%%
+%% There are many improvements such as
+%% -- Proper handling of smallcaps
+%% -- Support for bold-math
+%% -- Support for AMS fonts
+%% -- Support for blackboard boldface
+%% -- Correction of bugs and scaling.
+%%
+%% The behavior should be compatible with V1.3 except for
+%% case explained in Note (1).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\wlog{File: fontch.tex
+ [v2.2 (2010/04/12) font change package for plain TeX]}
+%
+%% Math fonts, valid for any option
+%% five points fonts (defined in plain.tex) %%
+%% six points fonts %%
+\font\sixi=cmmi6
+\font\sixsy=cmsy6
+\skewchar\sixi='177
+\skewchar\sixsy='60
+%% seven points fonts (defined in plain.tex) %%
+%% eight points fonts %%
+\font\eighti=cmmi8
+\font\eightsy=cmsy8
+\skewchar\eighti='177
+\skewchar\eightsy='60
+%% nine points fonts %%
+\font\ninei=cmmi9
+\font\ninesy=cmsy9
+\skewchar\ninei='177
+\skewchar\ninesy='60
+%% ten points fonts %%
+\font\tenmib=cmmib10
+\font\tenbsy=cmbsy10
+\skewchar\tenmib='177
+\skewchar\tenbsy='60
+%% twelve points fonts %%
+\font\twelvei=cmmi12
+\font\twelvesy=cmsy10 scaled 1200
+\font\twelveex=cmex10 scaled 1200
+\font\twelvemib=cmmib10 scaled 1200
+\font\twelvebsy=cmbsy10 scaled 1200
+\skewchar\twelvei='177
+\skewchar\twelvemib='177
+\skewchar\twelvesy='60
+\skewchar\twelvebsy='60
+%% fourteen points fonts %%
+\font\fourteeni=cmmi12 scaled 1167
+\font\fourteensy=cmsy10 scaled 1400
+\font\fourteenex=cmex10 scaled 1400
+\font\fourteenmib=cmmib10 scaled 1400
+\font\fourteenbsy=cmbsy10 scaled 1400
+\skewchar\fourteeni='177
+\skewchar\fourteenmib='177
+\skewchar\fourteensy='60
+\skewchar\fourteenbsy='60
+%% twenty points fonts %%
+\font\twentyi=cmmi12 scaled 1667
+\font\twentysy=cmsy10 scaled 2000
+\font\twentyex=cmex10 scaled 2000
+\font\twentymib=cmmib10 scaled 2000
+\font\twentybsy=cmbsy10 scaled 2000
+\skewchar\twentyi='177
+\skewchar\twentymib='177
+\skewchar\twentysy='60
+\skewchar\twentybsy='60
+%% twentyfour points fonts %%
+\font\twentyfouri=cmmi12 scaled 2000
+\font\twentyfoursy=cmsy10 scaled 2400
+\font\twentyfourex=cmex10 scaled 2400
+\font\twentyfourmib=cmmib10 scaled 2400
+\font\twentyfourbsy=cmsy10 scaled 2400
+\skewchar\twentyfouri='177
+\skewchar\twentyfourmib='177
+\skewchar\twentyfoursy='60
+\skewchar\twentyfourbsy='60
+%%
+%% big... operators
+\newdimen\bigsize
+\newdimen\Bigsize
+\newdimen\biggsize
+\newdimen\Biggsize
+%% Make @ visible
+\catcode`\@=11
+\def\big#1{{\hbox{$\left#1\vbox to \bigsize{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vbox to \Bigsize{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vbox to \biggsize{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vbox to \Biggsize{}\right.\n@space$}}}
+%%
+\ifx\AMSfont\@undefined%
+{}
+\else
+\let\ifAMS=\relax
+\fi
+%%
+\ifx\DStroke\@undefined%
+{}
+\else
+\let\ifDS=\relax
+\fi
+%%
+\ifx\LMTone\@undefined%
+{}
+\else
+\let\ifLMT=\relax
+\fi
+\ifx\LMTSone\@undefined%
+{}
+\else
+\let\ifLMTS=\relax
+\fi
+%%
+%% Make @ invisible
+\catcode`\@=12
+%%
+\ifx\ifAMS\relax%
+%% AMS option activated %%
+\immediate\write16{*** AMS option activated. AMS fonts are used ***}
+%% extension font
+\font\sevenex=cmex7
+\font\eightex=cmex8
+\font\nineex=cmex9
+\font\fiveex=cmex7 scaled 714
+\font\sixex=cmex7 scaled 857
+%% math-italic boldface font
+\font\fivemib=cmmib5
+\font\sixmib=cmmib6
+\font\sevenmib=cmmib7
+\font\eightmib=cmmib8
+\font\ninemib=cmmib9
+%% boldface symbols fonts
+\font\fivebsy=cmbsy5
+\font\sixbsy=cmbsy6
+\font\sevenbsy=cmbsy7
+\font\eightbsy=cmbsy8
+\font\ninebsy=cmbsy9
+\else
+%% extension font
+\font\fiveex=cmex10 scaled 500
+\font\sixex=cmex10 scaled 600
+\font\sevenex=cmex10 scaled 700
+\font\eightex=cmex10 scaled 800
+\font\nineex=cmex10 scaled 900
+%% math-italic boldface font
+\font\fivemib=cmmib10 scaled 500
+\font\sixmib=cmmib10 scaled 600
+\font\sevenmib=cmmib10 scaled 700
+\font\eightmib=cmmib10 scaled 800
+\font\ninemib=cmmib10 scaled 900
+%% boldface symbols fonts
+\font\fivebsy=cmbsy10 scaled 500
+\font\sixbsy=cmbsy10 scaled 600
+\font\sevenbsy=cmbsy10 scaled 700
+\font\eightbsy=cmbsy10 scaled 800
+\font\ninebsy=cmbsy10 scaled 900
+\fi
+%% End of AMS option
+\skewchar\fivemib='177
+\skewchar\sixmib='177
+\skewchar\sevenmib='177
+\skewchar\eightmib='177
+\skewchar\ninemib='177
+\skewchar\fivebsy='60
+\skewchar\sixbsy='60
+\skewchar\sevenbsy='60
+\skewchar\eightbsy='60
+\skewchar\ninebsy='60
+%%
+\ifx\ifLMT\relax%
+%% T1 option activated %
+\immediate\write16{*** T1 option activated. cork-LM fonts are used ***}
+%% Replace CM text fonts %%
+%% ten points fonts %%
+\font\tenrm=ec-lmr10
+\font\tenbf=ec-lmbx10
+\font\tensl=ec-lmro10
+\font\tentt=ec-lmtt10
+\font\tenit=ec-lmri10
+\font\tenss=ec-lmss10
+\font\tencsc=ec-lmcsc10
+%% eight points fonts %%
+\font\eightrm=ec-lmr8
+\font\eightbf=ec-lmbx8
+\font\eightsl=ec-lmro8
+\font\eighttt=ec-lmtt8
+\font\eightit=ec-lmri8
+\font\eightss=ec-lmss8
+\font\eightcsc=ec-lmcsc10 at 8pt
+%% five points fonts %%
+\font\fiverm=ec-lmr5
+\font\fivebf=ec-lmbx5
+\font\fivess=ec-lmss8 scaled 625
+%% six points fonts %%
+\font\sixrm=ec-lmr6
+\font\sixbf=ec-lmbx6
+\font\sixss=ec-lmss8 scaled 750
+%% seven points fonts %%
+\font\sevenrm=ec-lmr7
+\font\sevenbf=ec-lmbx7
+\font\sevenss=ec-lmss8 scaled 875
+%% nine points fonts %%
+\font\ninerm=ec-lmr9
+\font\ninebf=ec-lmbx9
+\font\niness=ec-lmss9
+%% twelve points fonts %%
+\font\twelverm=ec-lmr12
+\font\twelvebf=ec-lmbx12
+\font\twelvesl=ec-lmro12
+\font\twelvett=ec-lmtt12
+\font\twelveit=ec-lmri12
+\font\twelvess=ec-lmss12
+\font\twelvecsc=ec-lmcsc10 scaled 1200
+%% fourteen points fonts %%
+\font\fourteenrm=ec-lmr12 scaled 1167
+\font\fourteenbf=ec-lmbx12 scaled 1167
+\font\fourteensl=ec-lmro12 scaled 1167
+\font\fourteentt=ec-lmtt12 scaled 1167
+\font\fourteenit=ec-lmri12 scaled 1167
+\font\fourteenss=ec-lmss12 scaled 1167
+\font\fourteencsc=ec-lmcsc10 scaled 1400
+%% twenty points fonts %%
+\font\twentyrm=ec-lmr12 scaled 1667
+\font\twentybf=ec-lmbx12 scaled 1667
+\font\twentysl=ec-lmro12 scaled 1667
+\font\twentytt=ec-lmtt12 scaled 1667
+\font\twentyit=ec-lmri12 scaled 1667
+\font\twentyss=ec-lmss12 scaled 1667
+\font\twentycsc=ec-lmcsc10 scaled 2000
+%% twentyfour points fonts %%
+\font\twentyfourrm=ec-lmr12 scaled 2000
+\font\twentyfourbf=ec-lmbx12 scaled 2000
+\font\twentyfoursl=ec-lmro12 scaled 2000
+\font\twentyfourtt=ec-lmtt12 scaled 2000
+\font\twentyfourit=ec-lmri12 scaled 2000
+\font\twentyfourss=ec-lmss12 scaled 2000
+\font\twentyfourcsc=ec-lmcsc10 scaled 2400
+%%
+%% Redefinition of character commands %%
+\chardef\i="19 \chardef\j="1A
+\chardef\ae="E6 \chardef\AE="C6
+\chardef\oe="F7 \chardef\OE="D7
+\chardef\o="F8 \chardef\O="D8
+\chardef\ss="FF \chardef\SS="DF
+\chardef\aa="E5 \chardef\AA="C5
+\chardef\l="AA \chardef\L="8A
+\mathchardef\Gamma="0100
+\mathchardef\Delta="0101
+\mathchardef\Theta="0102
+\mathchardef\Lambda="0103
+\mathchardef\Xi="0104
+\mathchardef\Pi="0105
+\mathchardef\Sigma="0106
+\mathchardef\Upsilon="0107
+\mathchardef\Phi="0108
+\mathchardef\Psi="0109
+\mathchardef\Omega="010A
+\def\hbar{{\mathchar"7009\mkern-9muh}}
+
+%% New character commands %%
+\chardef\lh="A9 \chardef\Lh="89
+\chardef\dh="A4 \chardef\th="B4
+\chardef\dbar="9E
+\chardef\Edh="D0 \chardef\edh="F0
+\chardef\ij="BC \chardef\IJ="9C
+\chardef\nj="AD \chardef\NJ="8D
+\chardef\thorn="FE \chardef\Thorn="DE
+\chardef\smallzero="18
+\chardef\lguille="E \chardef\rguille="F
+\chardef\vispace="20
+
+%% Redefinition of accents and new accents%%
+\def\`#1{{\accent0 #1}}
+\def\'#1{{\accent1 #1}}
+\def\^#1{{\accent2 #1}}
+\def\~#1{{\accent3 #1}}
+\def\"#1{{\accent4 #1}}
+\def\H#1{{\accent5 #1}}
+%New ring accent
+\def\r#1{{\accent6 #1}}
+\def\v#1{{\accent7 #1}}
+\def\u#1{{\accent8 #1}}
+\def\=#1{{\accent9 #1}}
+\def\.#1{{\accent10 #1}}
+\def\b#1{\oalign{#1\crcr\hidewidth
+ \vbox to.2ex{\hbox{\char9}\vss}\hidewidth}}
+\def\c#1{\setbox0=\hbox{#1}\ifdim\ht0=1ex \accent"B #1%
+ \else{\ooalign{\unhbox0\crcr\hidewidth\char"B\hidewidth}}\fi}
+%New ogonek accent
+\def\k#1{\setbox0=\hbox{#1}\ifdim\ht0=1ex \accent"C #1%
+ \else{\ooalign{\unhbox0\crcr\hidewidth\char"C\hidewidth}}\fi}
+\def\textdiv{{\tcchar{"F6}}}
+%
+%% Redefinition of math-accents %%
+\def\acute{\mathaccent"7001 }
+\def\grave{\mathaccent"7000 }
+\def\ddot{\mathaccent"7004 }
+\def\tilde{\mathaccent"7003 }
+\def\bar{\mathaccent"7009 }
+\def\breve{\mathaccent"7008 }
+\def\check{\mathaccent"7007 }
+\def\hat{\mathaccent"7002 }
+\def\dot{\mathaccent"700A }
+%New ring math-accent
+\def\ring{\mathaccent"7006 }
+%
+%% Activate non-ascii letters %%
+% upper case
+\catcode`\^^80=11 \uccode`\^^80=`\^^80 \lccode`\^^80=`\^^a0
+\catcode`\^^81=11 \uccode`\^^81=`\^^81 \lccode`\^^81=`\^^a1
+\catcode`\^^82=11 \uccode`\^^82=`\^^82 \lccode`\^^82=`\^^a2
+\catcode`\^^83=11 \uccode`\^^83=`\^^83 \lccode`\^^83=`\^^a3
+\catcode`\^^84=11 \uccode`\^^84=`\^^84 \lccode`\^^84=`\^^a4
+\catcode`\^^85=11 \uccode`\^^85=`\^^85 \lccode`\^^85=`\^^a5
+\catcode`\^^86=11 \uccode`\^^86=`\^^86 \lccode`\^^86=`\^^a6
+\catcode`\^^87=11 \uccode`\^^87=`\^^87 \lccode`\^^87=`\^^a7
+\catcode`\^^88=11 \uccode`\^^88=`\^^88 \lccode`\^^88=`\^^a8
+\catcode`\^^89=11 \uccode`\^^89=`\^^89 \lccode`\^^89=`\^^a9
+\catcode`\^^8a=11 \uccode`\^^8a=`\^^8a \lccode`\^^8a=`\^^aa
+\catcode`\^^8b=11 \uccode`\^^8b=`\^^8b \lccode`\^^8b=`\^^ab
+\catcode`\^^8c=11 \uccode`\^^8c=`\^^8c \lccode`\^^8c=`\^^ac
+\catcode`\^^8d=11 \uccode`\^^8d=`\^^8d \lccode`\^^8d=`\^^ad
+\catcode`\^^8e=11 \uccode`\^^8e=`\^^8e \lccode`\^^8e=`\^^ae
+\catcode`\^^8f=11 \uccode`\^^8f=`\^^8f \lccode`\^^8f=`\^^af
+\catcode`\^^90=11 \uccode`\^^90=`\^^90 \lccode`\^^90=`\^^b0
+\catcode`\^^91=11 \uccode`\^^91=`\^^91 \lccode`\^^91=`\^^b1
+\catcode`\^^92=11 \uccode`\^^92=`\^^92 \lccode`\^^92=`\^^b2
+\catcode`\^^93=11 \uccode`\^^93=`\^^93 \lccode`\^^93=`\^^b3
+\catcode`\^^94=11 \uccode`\^^94=`\^^94 \lccode`\^^94=`\^^b4
+\catcode`\^^95=11 \uccode`\^^95=`\^^95 \lccode`\^^95=`\^^b5
+\catcode`\^^96=11 \uccode`\^^96=`\^^96 \lccode`\^^96=`\^^b6
+\catcode`\^^97=11 \uccode`\^^97=`\^^97 \lccode`\^^97=`\^^b7
+\catcode`\^^98=11 \uccode`\^^98=`\^^98 \lccode`\^^98=`\^^b8
+\catcode`\^^99=11 \uccode`\^^99=`\^^99 \lccode`\^^99=`\^^b9
+\catcode`\^^9a=11 \uccode`\^^9a=`\^^9a \lccode`\^^9a=`\^^ba
+\catcode`\^^9b=11 \uccode`\^^9b=`\^^9b \lccode`\^^9b=`\^^bb
+\catcode`\^^9c=11 \uccode`\^^9c=`\^^9c \lccode`\^^9c=`\^^bc
+\catcode`\^^c0=11 \uccode`\^^c0=`\^^c0 \lccode`\^^c0=`\^^e0
+\catcode`\^^c1=11 \uccode`\^^c1=`\^^c1 \lccode`\^^c1=`\^^e1
+\catcode`\^^c2=11 \uccode`\^^c2=`\^^c2 \lccode`\^^c2=`\^^e2
+\catcode`\^^c3=11 \uccode`\^^c3=`\^^c3 \lccode`\^^c3=`\^^e3
+\catcode`\^^c4=11 \uccode`\^^c4=`\^^c4 \lccode`\^^c4=`\^^e4
+\catcode`\^^c5=11 \uccode`\^^c5=`\^^c5 \lccode`\^^c5=`\^^e5
+\catcode`\^^c6=11 \uccode`\^^c6=`\^^c6 \lccode`\^^c6=`\^^e6
+\catcode`\^^c7=11 \uccode`\^^c7=`\^^c7 \lccode`\^^c7=`\^^e7
+\catcode`\^^c8=11 \uccode`\^^c8=`\^^c8 \lccode`\^^c8=`\^^e8
+\catcode`\^^c9=11 \uccode`\^^c9=`\^^c9 \lccode`\^^c9=`\^^e9
+\catcode`\^^ca=11 \uccode`\^^ca=`\^^ca \lccode`\^^ca=`\^^ea
+\catcode`\^^cb=11 \uccode`\^^cb=`\^^cb \lccode`\^^cb=`\^^eb
+\catcode`\^^cc=11 \uccode`\^^cc=`\^^cc \lccode`\^^cc=`\^^ec
+\catcode`\^^cd=11 \uccode`\^^cd=`\^^cd \lccode`\^^cd=`\^^ed
+\catcode`\^^ce=11 \uccode`\^^ce=`\^^ce \lccode`\^^ce=`\^^ee
+\catcode`\^^cf=11 \uccode`\^^cf=`\^^cf \lccode`\^^cf=`\^^ef
+\catcode`\^^d0=11 \uccode`\^^d0=`\^^d0 \lccode`\^^d0=`\^^f0
+\catcode`\^^d1=11 \uccode`\^^d1=`\^^d1 \lccode`\^^d1=`\^^f1
+\catcode`\^^d2=11 \uccode`\^^d2=`\^^d2 \lccode`\^^d2=`\^^f2
+\catcode`\^^d3=11 \uccode`\^^d3=`\^^d3 \lccode`\^^d3=`\^^f3
+\catcode`\^^d4=11 \uccode`\^^d4=`\^^d4 \lccode`\^^d4=`\^^f4
+\catcode`\^^d5=11 \uccode`\^^d5=`\^^d5 \lccode`\^^d5=`\^^f5
+\catcode`\^^d6=11 \uccode`\^^d6=`\^^d6 \lccode`\^^d6=`\^^f6
+\catcode`\^^d7=11 \uccode`\^^d7=`\^^d7 \lccode`\^^d7=`\^^f7
+\catcode`\^^d8=11 \uccode`\^^d8=`\^^d8 \lccode`\^^d8=`\^^f8
+\catcode`\^^d9=11 \uccode`\^^d9=`\^^d9 \lccode`\^^d9=`\^^f9
+\catcode`\^^da=11 \uccode`\^^da=`\^^da \lccode`\^^da=`\^^fa
+\catcode`\^^db=11 \uccode`\^^db=`\^^db \lccode`\^^db=`\^^fb
+\catcode`\^^dc=11 \uccode`\^^dc=`\^^dc \lccode`\^^dc=`\^^fc
+\catcode`\^^dd=11 \uccode`\^^dd=`\^^dd \lccode`\^^dd=`\^^fd
+\catcode`\^^de=11 \uccode`\^^de=`\^^de \lccode`\^^de=`\^^fe
+\catcode`\^^df=11 \uccode`\^^df=`\^^df \lccode`\^^df=`\^^ff
+% Lower case
+\catcode`\^^a0=11 \uccode`\^^a0=`\^^80 \lccode`\^^a0=`\^^a0
+\catcode`\^^a1=11 \uccode`\^^a1=`\^^81 \lccode`\^^a1=`\^^a1
+\catcode`\^^a2=11 \uccode`\^^a2=`\^^82 \lccode`\^^a2=`\^^a2
+\catcode`\^^a3=11 \uccode`\^^a3=`\^^83 \lccode`\^^a3=`\^^a3
+\catcode`\^^a4=11 \uccode`\^^a4=`\^^84 \lccode`\^^a4=`\^^a4
+\catcode`\^^a5=11 \uccode`\^^a5=`\^^85 \lccode`\^^a5=`\^^a5
+\catcode`\^^a6=11 \uccode`\^^a6=`\^^86 \lccode`\^^a6=`\^^a6
+\catcode`\^^a7=11 \uccode`\^^a7=`\^^87 \lccode`\^^a7=`\^^a7
+\catcode`\^^a8=11 \uccode`\^^a8=`\^^88 \lccode`\^^a8=`\^^a8
+\catcode`\^^a9=11 \uccode`\^^a9=`\^^89 \lccode`\^^a9=`\^^a9
+\catcode`\^^aa=11 \uccode`\^^aa=`\^^8a \lccode`\^^aa=`\^^aa
+\catcode`\^^ab=11 \uccode`\^^ab=`\^^8b \lccode`\^^ab=`\^^ab
+\catcode`\^^ac=11 \uccode`\^^ac=`\^^8c \lccode`\^^ac=`\^^ac
+\catcode`\^^ad=11 \uccode`\^^ad=`\^^8d \lccode`\^^ad=`\^^ad
+\catcode`\^^ae=11 \uccode`\^^ae=`\^^8e \lccode`\^^ae=`\^^ae
+\catcode`\^^af=11 \uccode`\^^af=`\^^8f \lccode`\^^af=`\^^af
+\catcode`\^^b0=11 \uccode`\^^b0=`\^^90 \lccode`\^^b0=`\^^b0
+\catcode`\^^b1=11 \uccode`\^^b1=`\^^91 \lccode`\^^b1=`\^^b1
+\catcode`\^^b2=11 \uccode`\^^b2=`\^^92 \lccode`\^^b2=`\^^b2
+\catcode`\^^b3=11 \uccode`\^^b3=`\^^93 \lccode`\^^b3=`\^^b3
+\catcode`\^^b4=11 \uccode`\^^b4=`\^^94 \lccode`\^^b4=`\^^b4
+\catcode`\^^b5=11 \uccode`\^^b5=`\^^95 \lccode`\^^b5=`\^^b5
+\catcode`\^^b6=11 \uccode`\^^b6=`\^^96 \lccode`\^^b6=`\^^b6
+\catcode`\^^b7=11 \uccode`\^^b7=`\^^97 \lccode`\^^b7=`\^^b7
+\catcode`\^^b8=11 \uccode`\^^b8=`\^^98 \lccode`\^^b8=`\^^b8
+\catcode`\^^b9=11 \uccode`\^^b9=`\^^99 \lccode`\^^b9=`\^^b9
+\catcode`\^^ba=11 \uccode`\^^ba=`\^^9a \lccode`\^^ba=`\^^ba
+\catcode`\^^bb=11 \uccode`\^^bb=`\^^9b \lccode`\^^bb=`\^^bb
+\catcode`\^^e0=11 \uccode`\^^e0=`\^^c0 \lccode`\^^e0=`\^^e0
+\catcode`\^^e1=11 \uccode`\^^e1=`\^^c1 \lccode`\^^e1=`\^^e1
+\catcode`\^^e2=11 \uccode`\^^e2=`\^^c2 \lccode`\^^e2=`\^^e2
+\catcode`\^^e3=11 \uccode`\^^e3=`\^^c3 \lccode`\^^e3=`\^^e3
+\catcode`\^^e4=11 \uccode`\^^e4=`\^^c4 \lccode`\^^e4=`\^^e4
+\catcode`\^^e5=11 \uccode`\^^e5=`\^^c5 \lccode`\^^e5=`\^^e5
+\catcode`\^^e6=11 \uccode`\^^e6=`\^^c6 \lccode`\^^e6=`\^^e6
+\catcode`\^^e7=11 \uccode`\^^e7=`\^^c7 \lccode`\^^e7=`\^^e7
+\catcode`\^^e8=11 \uccode`\^^e8=`\^^c8 \lccode`\^^e8=`\^^e8
+\catcode`\^^e9=11 \uccode`\^^e9=`\^^c9 \lccode`\^^e9=`\^^e9
+\catcode`\^^ea=11 \uccode`\^^ea=`\^^ca \lccode`\^^ea=`\^^ea
+\catcode`\^^eb=11 \uccode`\^^eb=`\^^cb \lccode`\^^eb=`\^^eb
+\catcode`\^^ec=11 \uccode`\^^ec=`\^^cc \lccode`\^^ec=`\^^ec
+\catcode`\^^ed=11 \uccode`\^^ed=`\^^cd \lccode`\^^ed=`\^^ed
+\catcode`\^^ee=11 \uccode`\^^ee=`\^^ce \lccode`\^^ee=`\^^ee
+\catcode`\^^ef=11 \uccode`\^^ef=`\^^cf \lccode`\^^ef=`\^^ef
+\catcode`\^^f0=11 \uccode`\^^f0=`\^^d0 \lccode`\^^f0=`\^^f0
+\catcode`\^^f1=11 \uccode`\^^f1=`\^^d1 \lccode`\^^f1=`\^^f1
+\catcode`\^^f2=11 \uccode`\^^f2=`\^^d2 \lccode`\^^f2=`\^^f2
+\catcode`\^^f3=11 \uccode`\^^f3=`\^^d3 \lccode`\^^f3=`\^^f3
+\catcode`\^^f4=11 \uccode`\^^f4=`\^^d4 \lccode`\^^f4=`\^^f4
+\catcode`\^^f5=11 \uccode`\^^f5=`\^^d5 \lccode`\^^f5=`\^^f5
+\catcode`\^^f6=11 \uccode`\^^f6=`\^^d6 \lccode`\^^f6=`\^^f6
+\catcode`\^^f7=11 \uccode`\^^f7=`\^^d7 \lccode`\^^f7=`\^^f7
+\catcode`\^^f8=11 \uccode`\^^f8=`\^^d8 \lccode`\^^f8=`\^^f8
+\catcode`\^^f9=11 \uccode`\^^f9=`\^^d9 \lccode`\^^f9=`\^^f9
+\catcode`\^^fa=11 \uccode`\^^fa=`\^^da \lccode`\^^fa=`\^^fa
+\catcode`\^^fb=11 \uccode`\^^fb=`\^^db \lccode`\^^fb=`\^^fb
+\catcode`\^^fc=11 \uccode`\^^fc=`\^^dc \lccode`\^^fc=`\^^fc
+\catcode`\^^fd=11 \uccode`\^^fd=`\^^dd \lccode`\^^fd=`\^^fd
+\catcode`\^^fe=11 \uccode`\^^fe=`\^^de \lccode`\^^fe=`\^^fe
+\catcode`\^^ff=11 \uccode`\^^ff=`\^^df \lccode`\^^ff=`\^^ff
+%%End of LMTone option %%
+\else
+%%
+%% Other CM fonts
+%% eight points fonts %%
+\font\eightrm=cmr8
+\font\eightbf=cmbx8
+\font\eightsl=cmsl8
+\font\eighttt=cmtt8
+\font\eightit=cmti8
+\font\eightss=cmss8
+%% five points fonts %%
+\font\fivess=cmss8 scaled 625
+%% six points fonts %%
+\font\sixrm=cmr6
+\font\sixbf=cmbx6
+\font\sixss=cmss8 scaled 750
+%% seven points fonts %%
+\font\sevenss=cmss8 scaled 875
+%% nine points fonts %%
+\font\ninerm=cmr9
+\font\ninebf=cmbx9
+\font\niness=cmss9
+%% ten points fonts (not defined in plain.tex)%%
+\font\tenss=cmss10
+\font\tencsc=cmcsc10
+%% twelve points fonts %%
+\font\twelverm=cmr12
+\font\twelvebf=cmbx12
+\font\twelvesl=cmsl12
+\font\twelvett=cmtt12
+\font\twelveit=cmti12
+\font\twelvess=cmss12
+\font\twelvecsc=cmcsc10 scaled 1200
+%% fourteen points fonts %%
+\font\fourteenrm=cmr12 scaled 1167
+\font\fourteenbf=cmbx12 scaled 1167
+\font\fourteensl=cmsl12 scaled 1167
+\font\fourteentt=cmtt12 scaled 1167
+\font\fourteenit=cmti12 scaled 1167
+\font\fourteenss=cmss12 scaled 1167
+\font\fourteencsc=cmcsc10 scaled 1400
+%% twenty points fonts %%
+\font\twentyrm=cmr12 scaled 1667
+\font\twentybf=cmbx12 scaled 1667
+\font\twentysl=cmsl12 scaled 1667
+\font\twentytt=cmtt12 scaled 1667
+\font\twentyit=cmti12 scaled 1667
+\font\twentyss=cmss12 scaled 1667
+\font\twentycsc=cmcsc10 scaled 2000
+%% twentyfour points fonts %%
+\font\twentyfourrm=cmr12 scaled 2000
+\font\twentyfourbf=cmbx12 scaled 2000
+\font\twentyfoursl=cmsl12 scaled 2000
+\font\twentyfourtt=cmtt12 scaled 2000
+\font\twentyfourit=cmti12 scaled 2000
+\font\twentyfourss=cmss12 scaled 2000
+\font\twentyfourcsc=cmcsc10 scaled 2400
+%% AMS activated
+\ifx\ifAMS\relax%
+%% small caps font
+\font\eightcsc=cmcsc8
+\else
+%% small caps font
+\font\eightcsc=cmcsc10 scaled 800
+\fi
+%% end of AMS option
+\fi
+%% end of LMT1 option
+%% Support of TS1 fonts
+\ifx\ifLMTS\relax%
+\immediate\write16{*** TS1 option activated. ts1-LM fonts are used ***}
+\input TS1mac.tex
+\fi
+%% End of LMTSone option %%
+%% DStroke option %%
+\ifx\ifDS\relax%
+\immediate\write16{*** Doublestroke option activated. DS fonts used ***}
+\font\fiveds=dsrom8 scaled 625
+\font\sixds=dsrom8 scaled 750
+\font\sevends=dsrom8 scaled 875
+\font\eightds=dsrom8
+\font\nineds=dsrom10 scaled 900
+\font\tends=dsrom10
+\font\twelveds=dsrom12
+\font\fourteends=dsrom12 scaled 1167
+\font\twentyds=dsrom12 scaled 1667
+\font\twentyfourds=dsrom12 scaled 2000
+\fi
+%% End of DStroke option %%
+%%
+%% Families defined in plain.tex %%
+%% fam0 rm roman
+%% fam1 i math-italic
+%% fam2 sy symbols
+%% fam3 ex extension fonts
+%% fam4 itfam text-italic
+%% fam5 slfam slanted
+%% fam6 bffam roman boldface
+%% fam7 ttfam teletype
+%%
+%% New family math-italic bold. Must be fam8 %%
+\newfam\mibfam
+%%
+%% New family symbols boldface. Must be fam9 %%
+\newfam\bsyfam
+%%
+%% New family sans serif %%
+\newfam\ssfam
+%%
+%% New family small caps %%
+\newfam\cscfam
+%%
+%% New family doublestroke %%
+\ifx\ifDS\relax%
+\input DSmac.tex
+\fi
+\def\ds{}
+%%
+%% Change to tenpoint fonts %%
+\def\tenpoint{
+\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+\def\mit{\fam1 } \def\oldstyle{\fam1 \teni}
+\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+\def\cal{\fam2 }
+\textfont3=\tenex \scriptfont3=\sevenex \scriptscriptfont3=\fiveex
+\textfont\itfam=\tenit
+\textfont\slfam=\tensl
+\textfont\ttfam=\tentt
+\textfont\ssfam=\tenss
+\scriptfont\ssfam=\sevenss \scriptscriptfont\ssfam=\fivess
+\textfont\bffam=\tenbf
+\scriptfont\bffam=\sevenbf \scriptscriptfont\bffam=\fivebf
+\textfont\cscfam=\tencsc
+\textfont\mibfam=\tenmib
+\scriptfont\mibfam=\sevenmib \scriptscriptfont\bffam=\fivemib
+\textfont\bsyfam=\tenbsy
+\scriptfont\bsyfam=\sevenbsy \scriptscriptfont\bffam=\fivebsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\tends
+\scriptfont\dsfam=\sevends \scriptscriptfont\dsfam=\fiveds
+\def\ds{\fam\dsfam\tends}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \tenrm \let\tcfont=\tencrm}
+\def\it{\fam\itfam\tenit \let\tcfont=\tencit}
+\def\sl{\fam\slfam\tensl \let\tcfont=\tencsl}
+\def\tt{\fam\ttfam\tentt \let\tcfont=\tenctt}
+\def\sf{\fam\ssfam\tenss \let\tcfont=\tencss}
+\def\bf{\fam\bffam\tenbf \let\tcfont=\tencbf}
+\else
+\def\rm{\fam0 \tenrm}
+\def\it{\fam\itfam\tenit}
+\def\sl{\fam\slfam\tensl}
+\def\tt{\fam\ttfam\tentt}
+\def\sf{\fam\ssfam\tenss}
+\def\bf{\fam\bffam\tenbf}
+\fi
+\def\sc{\fam\cscfam\tencsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\tenmib}
+\def\bcal{\fam\bsyfam\tenbsy}
+\def\unsetmathbold{
+\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+\def\oldstyle{\fam1 \teni} }
+\def\setmathbold{
+\textfont1=\tenmib \scriptfont1=\sevenmib \scriptscriptfont1=\fivemib
+\textfont2=\tenbsy \scriptfont2=\sevenbsy \scriptscriptfont2=\fivebsy
+\def\oldstyle{\fam1 \tenmib} }
+\normalbaselineskip=12pt minus 1pt
+\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}
+\bigsize=8.5pt
+\Bigsize=11.5pt
+\biggsize=14.5pt
+\Biggsize=17.5pt
+\normalbaselines\rm}
+%%
+%% Change to twelve points fonts %%
+\def\twelvepoint{
+\textfont0=\twelverm \scriptfont0=\eightrm \scriptscriptfont0=\sixrm
+\textfont1=\twelvei \scriptfont1=\eighti \scriptscriptfont1=\sixi
+\def\mit{\fam1 } \def\oldstyle{\fam1 \twelvei}
+\textfont2=\twelvesy \scriptfont2=\eightsy \scriptscriptfont2=\sixsy
+\def\cal{\fam2 }
+\textfont3=\twelveex \scriptfont3=\eightex \scriptscriptfont3=\sixex
+\textfont\itfam=\twelveit
+\textfont\slfam=\twelvesl
+\textfont\ttfam=\twelvett
+\textfont\ssfam=\twelvess
+\scriptfont\ssfam=\eightss \scriptscriptfont\ssfam=\sixss
+\textfont\bffam=\twelvebf
+\scriptfont\bffam=\eightbf \scriptscriptfont\bffam=\sixbf
+\textfont\cscfam=\twelvecsc
+\textfont\mibfam=\twelvemib
+\scriptfont\mibfam=\eightmib \scriptscriptfont\mibfam=\sixmib
+\textfont\bsyfam=\twelvebsy
+\scriptfont\bsyfam=\eightbsy \scriptscriptfont\bsyfam=\sixbsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\twelveds
+\scriptfont\dsfam=\eightds \scriptscriptfont\dsfam=\sixds
+\def\ds{\fam\dsfam\twelveds}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \twelverm \let\tcfont=\twelvecrm}
+\def\it{\fam\itfam\twelveit \let\tcfont=\twelvecit}
+\def\sl{\fam\slfam\twelvesl \let\tcfont=\twelvecsl}
+\def\tt{\fam\ttfam\twelvett \let\tcfont=\twelvectt}
+\def\sf{\fam\ssfam\twelvess \let\tcfont=\twelvecss}
+\def\bf{\fam\bffam\twelvebf \let\tcfont=\twelvecss}
+\else
+\def\rm{\fam0 \twelverm}
+\def\it{\fam\itfam\twelveit}
+\def\sl{\fam\slfam\twelvesl}
+\def\tt{\fam\ttfam\twelvett}
+\def\sf{\fam\ssfam\twelvess}
+\def\bf{\fam\bffam\twelvebf}
+\fi
+\def\sc{\fam\cscfam\twelvecsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\twelvemib}
+\def\bcal{\fam\bsyfam}
+\def\unsetmathbold{
+\textfont1=\twelvei \scriptfont1=\eighti \scriptscriptfont1=\sixi
+\textfont2=\twelvesy \scriptfont2=\eightsy \scriptscriptfont2=\sixsy
+\def\oldstyle{\fam1 \twelvei} }
+\def\setmathbold{
+\textfont1=\twelvemib \scriptfont1=\eightmib \scriptscriptfont1=\sixmib
+\textfont2=\twelvebsy \scriptfont2=\eightbsy \scriptscriptfont2=\sixbsy
+\def\oldstyle{\fam1 \twelvemib} }
+\normalbaselineskip=14pt minus 1pt
+\setbox\strutbox=\hbox{\vrule height10pt depth4pt width0pt}
+\bigsize=10.2pt
+\Bigsize=13.8pt
+\biggsize=17.4pt
+\Biggsize=21pt
+\normalbaselines\rm}
+%%
+%% Change to eight points fonts %%
+\def\eightpoint{
+\textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+\textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+\def\mit{\fam1 } \def\oldstyle{\fam1 \eighti}
+\textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+\def\cal{\fam2 }
+\textfont3=\eightex \scriptfont3=\sixex \scriptscriptfont3=\fiveex
+\textfont\itfam=\eightit
+\textfont\slfam=\eightsl
+\textfont\ttfam=\eighttt
+\textfont\ssfam=\eightss
+\scriptfont\ssfam=\sixss \scriptscriptfont\ssfam=\fivess
+\textfont\bffam=\eightbf
+\scriptfont\bffam=\sixbf \scriptscriptfont\bffam=\fivebf
+\textfont\cscfam=\eightcsc
+\textfont\mibfam=\eightmib
+\scriptfont\mibfam=\sixmib \scriptscriptfont\mibfam=\fivemib
+\textfont\bsyfam=\eightbsy
+\scriptfont\bsyfam=\sixbsy \scriptscriptfont\bsyfam=\fivebsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\eightds
+\scriptfont\dsfam=\sixds \scriptscriptfont\dsfam=\fiveds
+\def\ds{\fam\dsfam\eightds}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \eightrm \let\tcfont=\eightcrm}
+\def\it{\fam\itfam\eightit \let\tcfont=\eightcit}
+\def\sl{\fam\slfam\eightsl \let\tcfont=\eightcsl}
+\def\tt{\fam\ttfam\eighttt \let\tcfont=\eightctt}
+\def\sf{\fam\ssfam\eightss \let\tcfont=\eightcss}
+\def\bf{\fam\bffam\eightbf \let\tcfont=\eightcbf}
+\else
+\def\rm{\fam0 \eightrm}
+\def\it{\fam\itfam\eightit}
+\def\sl{\fam\slfam\eightsl}
+\def\tt{\fam\ttfam\eighttt}
+\def\sf{\fam\ssfam\eightss}
+\def\bf{\fam\bffam\eightbf}
+\fi
+\def\sc{\fam\cscfam\eightcsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\eightmib}
+\def\bcal{\fam\bsyfam}
+\def\unsetmathbold{
+\textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+\textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+\def\oldstyle{\fam1 \eighti} }
+\def\setmathbold{
+\textfont1=\eightmib \scriptfont1=\sixmib \scriptscriptfont1=\fivemib
+\textfont2=\eightbsy \scriptfont2=\sixbsy \scriptscriptfont2=\fivebsy
+\def\oldstyle{\fam1 \eightmib} }
+\normalbaselineskip=9pt
+\setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}
+\bigsize=6.8pt
+\Bigsize=9.2pt
+\biggsize=11.6pt
+\Biggsize=14pt
+\normalbaselines\rm}
+%%
+%% Change to fourteen points fonts %%
+\def\fourteenpoint{
+\textfont0=\fourteenrm \scriptfont0=\ninerm \scriptscriptfont0=\sevenrm
+\textfont1=\fourteeni \scriptfont1=\ninei \scriptscriptfont1=\seveni
+\def\mit{\fam1 } \def\oldstyle{\fam1 \fourteeni}
+\textfont2=\fourteensy \scriptfont2=\ninesy \scriptscriptfont2=\sevensy
+\def\cal{\fam2 }
+\textfont3=\fourteenex \scriptfont3=\nineex \scriptscriptfont3=\sevenex
+\textfont\itfam=\fourteenit
+\textfont\slfam=\fourteensl
+\textfont\ttfam=\fourteentt
+\textfont\ssfam=\fourteenss
+\scriptfont\ssfam=\niness \scriptscriptfont\ssfam=\sevenss
+\textfont\bffam=\fourteenbf
+\scriptfont\bffam=\ninebf \scriptscriptfont\bffam=\sevenbf
+\textfont\cscfam=\fourteencsc
+\textfont\mibfam=\fourteenmib
+\scriptfont\mibfam=\ninemib \scriptscriptfont\mibfam=\sevenmib
+\textfont\bsyfam=\fourteenbsy
+\scriptfont\bsyfam=\ninebsy \scriptscriptfont\bsyfam=\sevenbsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\fourteends
+\scriptfont\dsfam=\nineds \scriptscriptfont\dsfam=\sevends
+\def\ds{\fam\dsfam\fourteends}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \fourteenrm \let\tcfont=\fourteencrm}
+\def\it{\fam\itfam\fourteenit \let\tcfont=\fourteencit}
+\def\sl{\fam\slfam\fourteensl \let\tcfont=\fourteencsl}
+\def\tt{\fam\ttfam\fourteentt \let\tcfont=\fourteenctt}
+\def\bf{\fam\bffam\fourteenbf \let\tcfont=\fourteencbf}
+\def\sf{\fam\ssfam\fourteenss \let\tcfont=\fourteencss}
+\else
+\def\rm{\fam0 \fourteenrm}
+\def\it{\fam\itfam\fourteenit}
+\def\sl{\fam\slfam\fourteensl}
+\def\tt{\fam\ttfam\fourteentt}
+\def\bf{\fam\bffam\fourteenbf}
+\def\sf{\fam\ssfam\fourteenss}
+\fi
+\def\sc{\fam\cscfam\fourteencsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\fourteenmib}
+\def\bcal{\fam\bsyfam}
+\def\unsetmathbold{
+\textfont1=\fourteeni \scriptfont1=\ninei \scriptscriptfont1=\seveni
+\textfont2=\fourteensy \scriptfont2=\ninesy \scriptscriptfont2=\sevensy
+\def\oldstyle{\fam1 \fourteeni} }
+\def\setmathbold{
+\textfont1=\fourteenmib \scriptfont1=\ninemib \scriptscriptfont1=\sevenmib
+\textfont2=\fourteenbsy \scriptfont2=\ninebsy \scriptscriptfont2=\sevenbsy
+\def\oldstyle{\fam1 \fourteenmib} }
+\normalbaselineskip=17pt minus 1pt
+\setbox\strutbox=\hbox{\vrule height12pt depth5pt width0pt}
+\bigsize=11.9pt
+\Bigsize=16.1pt
+\biggsize=20.3pt
+\Biggsize=24.5pt
+\normalbaselines\rm}
+%%
+%% Change to twentypoint fonts %%
+\def\twentypoint{
+\textfont0=\twentyrm \scriptfont0=\fourteenrm \scriptscriptfont0=\tenrm
+\textfont1=\twentyi \scriptfont1=\fourteeni \scriptscriptfont1=\teni
+\def\mit{\fam1 } \def\oldstyle{\fam1 \twentyi}
+\textfont2=\twentysy \scriptfont2=\fourteensy \scriptscriptfont2=\tensy
+\def\cal{\fam2 }
+\textfont3=\twentyex \scriptfont3=\fourteenex \scriptscriptfont3=\tenex
+\textfont\itfam=\twentyit
+\textfont\slfam=\twentysl
+\textfont\ttfam=\twentytt
+\textfont\ssfam=\twentyss
+\scriptfont\ssfam=\fourteenss \scriptscriptfont\ssfam=\tenss
+\textfont\bffam=\twentybf
+\scriptfont\bffam=\fourteenbf \scriptscriptfont\bffam=\tenbf
+\textfont\cscfam=\twentycsc
+\textfont\mibfam=\twentymib
+\scriptfont\mibfam=\fourteenmib \scriptscriptfont\mibfam=\tenmib
+\textfont\bsyfam=\twentybsy
+\scriptfont\bsyfam=\fourteenbsy \scriptscriptfont\bsyfam=\tenbsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\twentyds
+\scriptfont\dsfam=\fourteends \scriptscriptfont\dsfam=\tends
+\def\ds{\fam\dsfam\twentyds}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \twentyrm \let\tcfont=\twentycrm}
+\def\it{\fam\itfam\twentyit \let\tcfont=\twentycit}
+\def\sl{\fam\slfam\twentysl \let\tcfont=\twentycsl}
+\def\tt{\fam\ttfam\twentytt \let\tcfont=\twentyctt}
+\def\sf{\fam\ssfam\twentyss \let\tcfont=\twentycss}
+\def\bf{\fam\bffam\twentybf \let\tcfont=\twentycbf}
+\else
+\def\rm{\fam0 \twentyrm}
+\def\it{\fam\itfam\twentyit}
+\def\sl{\fam\slfam\twentysl}
+\def\tt{\fam\ttfam\twentytt}
+\def\sf{\fam\ssfam\twentyss}
+\def\bf{\fam\bffam\twentybf}
+\fi
+\def\sc{\fam\cscfam\twentycsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\twentymib}
+\def\unsetmathbold{
+\textfont1=\twentyi \scriptfont1=\fourteeni \scriptscriptfont1=\teni
+\textfont2=\twentysy \scriptfont2=\fourteensy \scriptscriptfont2=\tensy
+\def\oldstyle{\fam1 \twentyi} }
+\def\setmathbold{
+\textfont1=\twentymib \scriptfont1=\fourteenmib \scriptscriptfont1=\tenmib
+\textfont2=\twentybsy \scriptfont2=\fourteenbsy \scriptscriptfont2=\tenbsy
+\def\oldstyle{\fam1 \twentymib} }
+\normalbaselineskip=24pt minus 2pt
+\setbox\strutbox=\hbox{\vrule height17pt depth7pt width0pt}
+\bigsize=17pt
+\Bigsize=23pt
+\biggsize=29pt
+\Biggsize=35pt
+\normalbaselines\rm}
+%%
+%% Change to twentyfour points fonts %%
+\def\twentyfourpoint{
+\textfont0=\twentyfourrm \scriptfont0=\fourteenrm \scriptscriptfont0=\twelverm
+\textfont1=\twentyfouri \scriptfont1=\fourteeni \scriptscriptfont1=\twelvei
+\def\mit{\fam1 } \def\oldstyle{\fam1 \twentyfouri}
+\textfont2=\twentyfoursy \scriptfont2=\fourteensy \scriptscriptfont2=\twelvesy
+\def\cal{\fam2 }
+\textfont3=\twentyfourex \scriptfont3=\fourteenex \scriptscriptfont3=\twelveex
+\textfont\itfam=\twentyfourit
+\textfont\slfam=\twentyfoursl
+\textfont\ttfam=\twentyfourtt
+\textfont\ssfam=\twentyfourss
+\scriptfont\ssfam=\fourteenss \scriptscriptfont\ssfam=\twelvess
+\textfont\bffam=\twentyfourbf
+\scriptfont\bffam=\fourteenbf \scriptscriptfont\bffam=\twelvebf
+\textfont\cscfam=\twentyfourcsc
+\textfont\mibfam=\twentyfourmib
+\scriptfont\mibfam=\fourteenmib \scriptscriptfont\mibfam=\twelvemib
+\textfont\bsyfam=\twentyfourbsy
+\scriptfont\bsyfam=\fourteenbsy \scriptscriptfont\bsyfam=\twelvebsy
+\ifx\ifDS\relax%
+\textfont\dsfam=\twentyfourds
+\scriptfont\dsfam=\fourteends \scriptscriptfont\dsfam=\twelveds
+\def\ds{\fam\dsfam\twentyfourds}
+\else
+{}
+\fi
+\ifx\ifLMTS\relax%
+\def\rm{\fam0 \twentyfourrm \let\tcfont=\twentyfourcrm}
+\def\it{\fam\itfam\twentyfourit \let\tcfont=\twentyfourcit}
+\def\sl{\fam\itfam\twentyfoursl \let\tcfont=\twentyfourcsl}
+\def\tt{\fam\ttfam\twentyfourtt \let\tcfont=\twentyfourctt}
+\def\sf{\fam\ssfam\twentyfourss \let\tcfont=\twentyfourcss}
+\def\bf{\fam\bffam\twentyfourbf \let\tcfont=\twentyfourcbf}
+\else
+\def\rm{\fam0 \twentyfourrm}
+\def\it{\fam\itfam\twentyfourit}
+\def\sl{\fam\itfam\twentyfoursl}
+\def\tt{\fam\ttfam\twentyfourtt}
+\def\sf{\fam\ssfam\twentyfourss}
+\def\bf{\fam\bffam\twentyfourbf}
+\fi
+\def\sc{\fam\cscfam\twentyfourcsc}
+\def\mb{\fam\mibfam} \def\boldstyle{\fam\mibfam\twentyfourmib}
+\def\bcal{\fam\bsyfam}
+\def\unsetmathbold{
+\textfont1=\twentyfouri \scriptfont1=\fourteeni \scriptscriptfont1=\twelvei
+\textfont2=\twentyfoursy \scriptfont2=\fourteensy \scriptscriptfont2=\twelvesy
+\def\oldstyle{\fam1 \twentyfouri} }
+\def\setmathbold{
+\textfont1=\twentyfourmib \scriptfont1=\fourteenmib
+\scriptscriptfont1=\twelvemib
+\textfont2=\twentyfourbsy \scriptfont2=\fourteenbsy
+\scriptscriptfont2=\twelvebsy
+\def\oldstyle{\fam1 \twentyfourmib} }
+\normalbaselineskip=28pt minus 2pt
+\setbox\strutbox=\hbox{\vrule height20pt depth8pt width0pt}
+\bigsize=20.4pt
+\Bigsize=27.6pt
+\biggsize=34.8pt
+\Biggsize=42pt
+\normalbaselines\rm}
+%%
+%% double space
+\def\doublespace{
+\normalbaselineskip=24pt minus 1pt
+\setbox\strutbox=\hbox{\vrule height17pt depth 7pt width0pt}
+\normalbaselines}
+%%
+%% Initial set at ten points
+\tenpoint
+
diff --git a/macros/plain/contrib/fontch/fontch_doc.tex b/macros/plain/contrib/fontch/fontch_doc.tex
new file mode 100644
index 0000000000..e93ed6e61b
--- /dev/null
+++ b/macros/plain/contrib/fontch/fontch_doc.tex
@@ -0,0 +1,577 @@
+%& --translate-file=il1-t1.tcx
+% Documentatioin File of the package fontch.tex V2.2 2010/04/12
+% Copyright 2010 R. Medina
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, version 1.3c
+%
+%% Options of fontch
+ \let\AMSfont\relax
+ \let\DStroke\relax
+ \let\LMTone\relax
+ \let\LMTSone\relax
+%% Input fontch and bsymbols
+ \input fontch.tex
+ \input bsymbols.tex
+\leftline{ } %% To start the page
+\bigskip\bigskip
+\twentyfourpoint
+\centerline{\bf fontch}
+\fourteenpoint\sf
+\bigskip
+\centerline{ Macros for changing fonts and sizes in plain \TeX}
+\centerline{Rodrigo Medina rmedina@ivic.gob.ve}
+\centerline{V2.2 2010/04/12}
+\rm
+\bigskip\bigskip
+\twelvepoint
+\leftline{\bf Description}
+\tenpoint
+ This package allows, in plain \TeX, to change with a single
+command the size of all fonts that are used for text input and math input.
+Main text fonts of sizes 8, 10, 12, 14, 20 and 24 points are available.
+Fonts of sizes 5, 6, 7 and 9 points are used in subscripts and subscripts of
+subscripts of other main sizes.
+In addition fontch gives support to:
+\item{\bull} Boldface math-italic and boldface math symbols,
+\item{\bull} T1 Latin Modern fonts,
+\item{\bull} TS1 companion symbol fonts.
+\item{\bull} AMS fonts for boldface math,
+\item{\bull} Double Stroke fonts for blackboard bold symbols
+\medskip
+\twelvepoint
+\leftline{\bf Requirements}
+\tenpoint
+No special requirements are needed for using the original OT1 Computer Modern fonts.
+
+\item{\bull} In order to use the options for T1 Latin Modern fonts and the
+companion TS1 symbol fonts, you
+ need to have installed
+ the Latin Modern fonts of version 1.000 or larger. Older versions of LM fonts,
+ where the cork encoded fonts had names as cork-lmr10 (instead of ec-lmr10)
+ are compatible only with fontch-2.0.
+ You can find the old package in
+
+\centerline{\sf CTAN:/tex-archive/obsolete/macros/plain/contrib/fontch20.tar.gz}
+\item{\bull} In order to use the option for boldface math symbols you need to have
+ the AMS fonts installed.
+\item{\bull} In order to use the option for blackboard bold symbols you need to
+ have the Double Stroke fonts installed.
+\medskip
+\twelvepoint
+\leftline{\bf Components}
+\tenpoint
+The fontch V2.2 package is composed of the following files:\par\noindent
+\settabs 10 \columns
+\+&{\tt README} &&-- text file with this same information \cr
+\+&{\tt fontch.tex} &&-- main macros\cr
+\+&{\tt bsymbols.tex}&&-- macros for boldface symbols\cr
+\+&{\tt TS1mac.texr} &&-- macros for the TS1 companion symbols\cr
+\+&{\tt DSmac.tex} &&-- auxiliary file for the DStroke option\cr
+\+&{\tt fontch.pdf} &&-- manual of fontch\cr
+\+&{\tt fontch\_doc.tex} &&-- source of manual \cr
+
+\medskip
+\twelvepoint
+\leftline{\bf Installation}
+\tenpoint
+ You have only to put the macro files {\tt fontch.tex}, {\tt
+ bsymbols.tex}, {\tt TS1mac.tex} and {\tt DSmac.tex} in any sensible place
+ inside the texmf tree, like\par
+
+\centerline{\tt \dots/texmf/tex/plain/fontch/}
+
+It is also commendable to put the files {\tt README} and {\tt fontch.pdf}
+in a proper place such as
+
+ \centerline{\tt \dots/texmf/doc/plain/fontch/}
+\medskip
+\twelvepoint
+\leftline{\bf Usage}
+\tenpoint
+ For using {\tt fontch.tex} with the original TeX OT1 fonts (Computer Modern)
+just put at the beginning of the document:\par
+
+{\tt $\backslash$input fontch.tex}
+
+The file {\tt bsymbols.tex} provides macro definitions for boldface versions
+of math symbols. For using it just input the file where you need it.
+
+The fontch package has four options for handling different kinds of fonts:\par
+
+\+&{\tt LMTone} &&for Latin Modern T1 fonts.\cr
+\+&{\tt LMTSone} &&for the TS1 companion symbol font.\cr
+\+&{\tt AMSfont} &&for AMS fonts used for boldface math.\cr
+\+&{\tt DStroke} &&for Doublestroke fonts providing blackboard-boldface
+ symbols.\cr
+\par
+
+The four options are independent. They are activated by setting the
+corresponding variable before calling fontch.tex. For example for
+activating all the four options and using the macros for bold math
+put at the beginning of the document:
+\smallskip\par
+{\tt
+$\backslash$let$\backslash$AMSfont$\backslash$relax\par
+$\backslash$let$\backslash$DStroke$\backslash$relax\par
+$\backslash$let$\backslash$LMTone$\backslash$relax\par
+$\backslash$let$\backslash$LMTSone$\backslash$relax\par
+$\backslash$input fontch.tex\par
+$\backslash$input bsymbols.tex\par
+}
+\medskip
+{\twelvepoint
+\leftline{\bf General Commands}
+}
+Here we treat those features of fontch that are common to all options. First
+we have to say that there is one modification of the standard behavior of
+plain \TeX. Plain
+ \TeX\ defines for the font \#3 the same font (tenex) for text, script and
+ scriptscript. That is awful. The fontch package uses sevenex for
+ script and fiveex for scriptscript, as \TeX\ does for the other fonts.
+
+The package fontch defines the following commands valid for any option.
+\par\noindent
+Commands for changing font size:\par
+
+\+&{\tt $\backslash$eightpoint} &&-- Change to small type\cr
+\+&{\tt $\backslash$tenpoint} &&-- Change to normal type\cr
+\+&{\tt $\backslash$twelvepoint} &&-- Change to large type\cr
+\+&{\tt $\backslash$fourteenpoint} &&-- Change to very large type\cr
+\+&{\tt $\backslash$twentypoint} &&-- Change to huge type\cr
+\+&{\tt $\backslash$twentyfourpoint} &&-- Change to immense type\cr
+\smallskip
+\noindent
+Commands for changing family, most of them already in plain \TeX:
+
+\+&{\tt $\backslash$rm} &&-- Roman\cr
+\+&{\tt $\backslash$sl} &&-- Slanted\cr
+\+&{\tt $\backslash$it} &&-- Italic\cr
+\+&{\tt $\backslash$bf} &&-- Boldface\cr
+\+&{\tt $\backslash$tt} &&-- Teletype\cr
+\+&{\tt $\backslash$sf} &&-- Sans Serif (new)\cr
+\+&{\tt $\backslash$sc} &&-- Small Caps\cr
+\+&{\tt $\backslash$cal} &&-- Calligraphic\cr
+\+&{\tt $\backslash$mit} &&-- Math Italic\cr
+\+&{\tt $\backslash$mb} &&-- Math Boldface (new)\cr
+\+&{\tt $\backslash$bcal} &&-- Boldface calligraphic (new)\cr
+\+&{\tt $\backslash$oldstyle} &&-- Old style digits\cr
+\+&{\tt $\backslash$boldstyle} &&-- Boldface old style digits (new)\cr
+\+&{\tt $\backslash$setmathbold}&&-- Set families 1 and 2 to cmmib and
+ cmmbsy (new)\cr
+\+&{\tt $\backslash$unsetmathbold}&&-- Reset families 1 and 2 to cmmi and
+ cmmsy (new)\cr
+\smallskip
+\noindent
+Command for changing line spacing:
+\+&{\tt $\backslash$doublespace}&&-- Double space for ten and twelve points\cr
+\medskip
+The scope of these commands is the group defined by the braces.
+The commands for changing size are active until a new changing size command is
+given. The initial size is tenpoint and the initial family is roman. The
+commands for changing family
+are active until a new changing family command is given. The changing size
+commands reset the family to {\tt $\backslash$rm} and the double space
+to single space.
+
+ Since the changing size commands modify the parameters that
+control the spacing between lines and between words, unpredictable results
+are obtained if they are given in the middle of a paragraph. Nevertheless
+inside a paragraph
+it is still possible to use the \TeX\ font commands of the form
+ {\it $\backslash$size+family}, where {\it size} is one from {\tt five,
+six, seven, eight, nine, ten, twelve, fourteen, twenty} or {\tt twentyfour}
+and {\it family} is one from {\tt rm, sl, it, bf, tt, ss} or {\tt csc}
+({\it e.g.}{\tt $\backslash$twelvess}). Here {\tt ss} represents the sans serifi
+family and {\tt csc} the small caps family.
+
+\noindent
+For example the following text\par
+{\tt
+\smallskip
+$\backslash$eightpoint\par
+This well known formula of physics is due to $\{\backslash$it
+ Newton$\}$\par
+\$\$ $\backslash$vec F = m $\backslash$vec a \$\$\par
+\medskip
+$\backslash$twentyfourpoint\par
+This well known formula of physics is due to $\{\backslash$it
+ Newton$\}$\par
+\$\$ $\backslash$vec F = m $\backslash$vec a \$\$\par
+\medskip
+$\backslash$fourteenpoint\par
+Many books use boldface letters instead of arrows for indicating vectors,\par
+\$\$ $\{\backslash$mb F$\}$ = m $\{\backslash$mb a$\}$ \$\$\par
+}
+\par \noindent
+yields:\par
+\eightpoint
+This well known formula of physics is due to {\it Newton}
+$$ \vec F = m \vec a $$
+
+\twentyfourpoint
+This well known formula of physics is due to {\it Newton}
+$$ \vec F = m \vec a $$
+
+\fourteenpoint
+Many books use boldface letters instead of arrows for indicating vectors,\par
+$$ {\mb F} = m {\mb a} $$
+
+\tenpoint
+\medskip\noindent
+Another example using the sans serif family,
+
+{\tt
+The orthogonal matrix \$$\backslash$sf A\$ satifies the relation\par
+\$\$ $\{\backslash$sf A$\}$\^{}t $\backslash$sf A = I\$\$
+}
+\par\noindent
+yields
+
+The orthogonal matrix $\sf A$ satifies the relation
+$$ {\sf A}^t \sf A = I$$
+
+\medskip
+{\twelvepoint
+\leftline{\bf AMS fonts}
+}
+ Only the cmcs, cmmib, cmbsy and cmex AMS fonts are supported. These
+ are used for small caps and for boldface math-italic and boldface
+ greek symbols. The other AMS fonts like the Euler, Cyrillic and extra
+ symbols are not supported.
+
+\medskip
+{\twelvepoint
+\leftline{\bf Boldface math}}
+
+ There are two main uses of boldface math. One case is the use of
+ isolated boldface characters or symbols inside a formula. For this case
+ fontch provides bold versions of math symbols and the macro
+ {\tt $\backslash$mb} for bold
+ math-italic characters. The plain \TeX\ macro
+{\tt $\backslash$bf} yields roman-bold
+ characters in math mode. The name of the bold version of a math symbol
+ is obtained adding the prefix {\tt bf} to the name of the normal symbol.
+ For
+ example a boldface italic ``a'' ($\mb a$) is {\tt $\{\backslash$mb a$\}$},
+ a boldface roman ``P'' ({\bf P}) is {\tt $\{\backslash$bf P$\}$},
+ a boldface $\sigma$ ($\bfsigma$) is {\tt $\backslash$bfsigma}, a boldface
+{\tt $\backslash$iff} ($\bfiff$) is {\tt $\backslash$bfiff}.
+
+ The other case is when one wants to write a complete formula in
+ boldface, for example inside a title. For this case fontch has the
+ macro {\tt $\backslash$setmathbold} that changes the font families 1 (cmmi) and 2 (cmsy)
+ to the bold versions cmmib and cmmbsy. The macro
+ {\tt $\backslash$unsetmathbold} resets
+ the families 1 and 2 to their original values. These macros should be
+ put before and after the formula.
+
+ Usually the macro {\tt $\backslash$setmathbold} does not change the whole
+ formula to
+ boldface. This is due to the fact that in math mode some symbols
+ come from family \#0 (cmr) or \#3 (cmex) such as ``+''
+ or {\tt $\backslash$int}. Fontch
+ provides macros for the symbols that come from family \#0, For
+ example the bold version of ``('' is {\tt $\backslash$bflparen}.
+
+ Math symbols of family \#3 (cmex) do not have bold versions. In particular
+ {\tt $\backslash$int}, {\tt $\backslash$sum} and {\tt $\backslash$prod}.
+ Nevertheless {\tt $\backslash$smallint} is of cmsy and does have
+ a bold version.
+
+
+The macros for boldface math symbols are defined in the file
+ {\tt bsymbols.tex}. The macros for the bold version of
+symbols that don't have a keyword are
+\smallskip
+\+&$\backslash$bfexcl &&$\bfexcl$\cr
+\+&$\backslash$bflparen &&$\bflparen$\cr
+\+&$\backslash$bfrparen &&$\bfrparen$\cr
+\+&$\backslash$bfplus &&$\bfplus$\cr
+\+&$\backslash$bfcomma &&$\bfcomma$\cr
+\+&$\backslash$bfcolon &&$\bfcolon$\cr
+\+&$\backslash$bfsemicolon &&$\bfsemicolon$\cr
+\+&$\backslash$bfequal &&$\bfequal$\cr
+\+&$\backslash$bflbraket &&$\bflbraket$\cr
+\+&$\backslash$bfrbraket &&$\bfrbraket$\cr
+\+&$\backslash$bflt &&$\bflt$\cr
+\+&$\backslash$bfslash &&$\bfslash$\cr
+\+&$\backslash$bfgt &&$\bfgt$\cr
+\+&$\backslash$bfminus && $\bfminus$\cr
+\+&$\backslash$bfvert &&$\bfvert$\cr
+
+\smallskip\noindent
+For example the following text
+
+{\tt
+$\backslash$twelvepoint\par
+$\backslash$centerline$\{\backslash$bf Newton's Sencod Law,
+$\backslash$setmathbold \$$\backslash$vec F$\backslash$bfequal m
+$\backslash$vec a\$\par
+$\backslash$unsetmathbold$\}$}\par
+\smallskip\noindent
+yields
+
+\twelvepoint
+\centerline{\bf Newton's Second Law, \setmathbold$\vec F\bfequal m\vec a$
+\unsetmathbold}
+\tenpoint
+
+\medskip
+{\twelvepoint
+\leftline{\bf Double Stroke option}
+}
+The {\tt DStroke} option loads the Double Stroke fonts, that provide
+blackboard-boldface capital letters.
+ Only the roman Double Stroke font is supported. The sans serif version
+ is not supported. There is only a command associated to this option
+
+\+&{\tt $\backslash$ds} &&-- Double Stroke\cr
+
+\smallskip\noindent
+For example\par
+{\tt \$\$ $\{\backslash$ds N$\} \backslash$subset
+$\{\backslash$ds Z$\} \backslash$subset
+$\{\backslash$ds Q$\} \backslash$subset
+$\{\backslash$ds R$\} \backslash$subset
+$\{\backslash$ds C$\}$ \$\$}
+
+\noindent
+yields
+
+$$ {\ds N}\subset{\ds Z}\subset{\ds Q}\subset{\ds R}\subset{\ds C}$$
+
+
+\medskip
+{\twelvepoint
+\leftline{\bf T1 encoded Latin Modern fonts}}
+
+The {\tt LMTone} option loads the T1 encoded Latin Modern fonts, which
+are used for text input. Math input is still done with the CM OT1 fonts.
+Using the translation files {\tt il1-t1.tcx} or {\tt il2-t1.tcx}
+it is possible to write a latin1 or latin2 encoded {\tt .tex} file, without
+bothering about accents and special characters. This is not only more
+convenient for writing the
+file, but usually it is also required for a proper behavior of the
+hyphenation procedures. For example
+
+{\tt
+\%\& --translate-file=il1-t1.tcx\par
+$\backslash$let$\backslash$LMTone$\backslash$relax\par
+$\backslash$input fontch.tex\par
+\medskip
+¡Esto está escrito en español! ¿no es cómodo?}\par
+\smallskip\noindent
+yields
+
+¡Esto está escrito en español! ¿no es cómodo?
+
+\medskip
+{\twelvepoint
+\leftline{\bf Commands of the LM T1 option}}
+
+The {\tt LMTone} option of fontch redefines the following plain
+ \TeX\ commands: {\tt
+ $\backslash$i, $\backslash$j, $\backslash$ae, $\backslash$AE,
+ $\backslash$oe, $\backslash$OE, $\backslash$o, $\backslash$O,
+ $\backslash$ss, $\backslash$SS, $\backslash$aa, $\backslash$AA,
+ $\backslash$l, $\backslash$L,
+ $\backslash$Gamma, $\backslash$Delta, $\backslash$Theta,
+ $\backslash$Lambda, $\backslash$Xi, $\backslash$Pi, $\backslash$Phi,\par
+\noindent
+ $\backslash$Sigma, $\backslash$Upsilon,
+ $\backslash$Psi, $\backslash$Omega, $\backslash$hbar.}
+
+\noindent
+Fontch defines new T1 commands for non-latin1 characters
+
+\+&{\tt $\backslash$lh} &&\lh\cr
+\+&{\tt $\backslash$Lh} &&\Lh\cr
+\+&{\tt $\backslash$dh} &&\dh\cr
+\+&{\tt $\backslash$th} &&\th \cr
+\+&{\tt $\backslash$dbar} &&\dbar\cr
+\+&{\tt $\backslash$Edh} &&\Edh\cr
+\+&{\tt $\backslash$edh} &&\edh\cr
+\+&{\tt $\backslash$ij} &&\ij\cr
+\+&{\tt $\backslash$IJ} &&\IJ\cr
+\+&{\tt $\backslash$nj} &&\nj\cr
+\+&{\tt $\backslash$NJ} &&\NJ\cr
+\+&{\tt $\backslash$thorn} &&\thorn\cr
+\+&{\tt $\backslash$Thorn} &&\Thorn\cr
+\+&{\tt $\backslash$smallzero} &&\smallzero\cr
+\+&{\tt $\backslash$lguille} &&\lguille &&&(don't appear in il1-t1.tcx)\cr
+\+&{\tt $\backslash$rguille} &&\rguille &&&(don't appear in il1-t1.tcx)\cr
+\+&{\tt $\backslash$vispace} &&\vispace\cr
+
+\noindent
+The following plain \TeX\ text accents are redefined:
+
+{\tt
+ $\backslash$\`{}, $\backslash$\'{}, $\backslash$\^{}, $\backslash$\~{},
+ $\backslash$\"{}, $\backslash$H, $\backslash$v, $\backslash$u,
+ $\backslash$=, $\backslash$., $\backslash$b, $\backslash$c}
+
+\noindent
+The following plain \TeX\ math-accents are redefined:
+
+{\tt
+ $\backslash$acute, $\backslash$grave,
+ $\backslash$ddot,
+$\backslash$tilde, $\backslash$bar, $\backslash$breve,
+$\backslash$check, $\backslash$hat, $\backslash$dot.}
+
+\noindent
+New T1 text accents re defined:
+
+\+&{\tt $\backslash$r} &&-- ring accent\cr
+\+&{\tt $\backslash$k} &&-- ogonek\cr
+
+\noindent
+Finally a new T1 math-accent is defined
+
+\+&{\tt $\backslash$ring}\cr
+
+\medskip
+{\twelvepoint
+\leftline{\bf Commands of the LMTS1 option}}
+
+The TS1 option defines a macro for accessing the TS1 symbols by their position
+in the table,\par
+
+\+&{\tt $\backslash$tcchar$\{$\#1$\}$} &&-- Character of TS1 table\cr
+
+\noindent
+Some plain \TeX\ commands are redefined:\par
+
+\+&{\tt $\backslash$t$\{$\#1$\}$} &&-- tie-after-accent\cr
+\+&{\tt $\backslash$P} &&\P\cr
+\+&{\tt $\backslash$S} &&\S\cr
+\+&{\tt $\backslash$dag} &&\dag\cr
+\+&{\tt $\backslash$ddag} &&\ddag\cr
+\+&{\tt $\backslash$copyright} &&\$copyright\cr
+
+\noindent
+There is a macro for most of the TS1 symbols,
+Some are text versions of symbols of the math mode. The macros are
+in increasing charcode order:
+
+\+&{\tt $\backslash$arrowl} &&\arrowl\cr
+\+&{\tt $\backslash$arrowr} &&\arrowr\cr
+\+&{\tt $\backslash$blank} &&\blank\cr
+\+&{\tt $\backslash$dollar} &&\dollar\cr
+\+&{\tt $\backslash$caster} &&\caster\cr
+\+&{\tt $\backslash$sequals} &&\sequals\cr
+\+&{\tt $\backslash$anglel} &&\anglel\cr
+\+&{\tt $\backslash$angler} &&\angler\cr
+\+&{\tt $\backslash$mho} &&\mho\cr
+\+&{\tt $\backslash$bigcircle} &&\bigcircle\cr
+\+&{\tt $\backslash$Ohm} &&\Ohm\cr
+\+&{\tt $\backslash$bbracketl} &&\bbracketl\cr
+\+&{\tt $\backslash$bbracketr} &&\bbracketr\cr
+\+&{\tt $\backslash$arrowu} &&\arrowu \cr
+\+&{\tt $\backslash$arrowd} &&\arrowd \cr
+\+&{\tt $\backslash$textstar} &&\textstar\cr
+\+&{\tt $\backslash$born} &&\born\cr
+\+&{\tt $\backslash$died} &&\died\cr
+\+&{\tt $\backslash$leaf} &&\leaf\cr
+\+&{\tt $\backslash$married} &&\married\cr
+\+&{\tt $\backslash$music} &&\music\cr
+\+&{\tt $\backslash$doublevert} &&\doublevert\cr
+\+&{\tt $\backslash$perthousand} &&\perthousand\cr
+\+&{\tt $\backslash$bull} &&\bull\cr
+\+&{\tt $\backslash$centigrade} &&\centigrade\cr
+\+&{\tt $\backslash$olddollar} &&\olddollar\cr
+\+&{\tt $\backslash$oldcent} &&\oldcent\cr
+\+&{\tt $\backslash$florin} &&\florin\cr
+\+&{\tt $\backslash$Colon} &&\Colon\cr
+\+&{\tt $\backslash$won} &&\won\cr
+\+&{\tt $\backslash$naira} &&\naira\cr
+\+&{\tt $\backslash$guarani} &&\guarani\cr
+\+&{\tt $\backslash$peso} &&\peso\cr
+\+&{\tt $\backslash$lira} &&\lira\cr
+\+&{\tt $\backslash$recipe} &&\recipe\cr
+\+&{\tt $\backslash$interrobang} &&\interrobang\cr
+\+&{\tt $\backslash$gnaborretni} &&\gnaborretni\cr
+\+&{\tt $\backslash$dong} &&\dong\cr
+\+&{\tt $\backslash$TM} &&\TM\cr
+\+&{\tt $\backslash$pertenth} &&\pertenth\cr
+\+&{\tt $\backslash$npilcrow} &&\npilcrow \cr
+\+&{\tt $\backslash$baht} &&\baht\cr
+\+&{\tt $\backslash$numero} &&\numero\cr
+\+&{\tt $\backslash$abzueglich} &&\abzueglich\cr
+\+&{\tt $\backslash$aestimated} &&\aestimated \cr
+\+&{\tt $\backslash$openbull} &&\openbull\cr
+\+&{\tt $\backslash$SM} &&\SM\cr
+\+&{\tt $\backslash$qbrackl} &&\qbrackl\cr
+\+&{\tt $\backslash$qbrackr} &&\qbrackr \cr
+\+&{\tt $\backslash$cent} &&\cent\cr
+\+&{\tt $\backslash$sterling} &&\sterling\cr
+\+&{\tt $\backslash$currency} &&\currency\cr
+\+&{\tt $\backslash$yen} &&\yen\cr
+\+&{\tt $\backslash$brokenvert} &&\brokenvert\cr
+\+&{\tt $\backslash$feminine} &&\feminine\cr
+\+&{\tt $\backslash$copyleft} &&\copyleft\cr
+\+&{\tt $\backslash$lognot} &&\lognot \cr
+\+&{\tt $\backslash$circledP} &&\circledP\cr
+\+&{\tt $\backslash$registered} &&\registered\cr
+\+&{\tt $\backslash$degree} &&\degree\cr
+\+&{\tt $\backslash$plusminus} &&\plusminus\cr
+\+&{\tt $\backslash$twoup} &&\twoup\cr
+\+&{\tt $\backslash$threeup} &&\threeup\cr
+\+&{\tt $\backslash$micro} &&\micro\cr
+\+&{\tt $\backslash$centereddot} &&\centereddot\cr
+\+&{\tt $\backslash$reference} &&\reference\cr
+\+&{\tt $\backslash$oneup} &&\oneup\cr
+\+&{\tt $\backslash$masculine} &&\masculine\cr
+\+&{\tt $\backslash$root} &&\root\cr
+\+&{\tt $\backslash$onequarter} &&\onequarter\cr
+\+&{\tt $\backslash$onehalf} &&\onehalf \cr
+\+&{\tt $\backslash$threequarters} &&\threequarters\cr
+\+&{\tt $\backslash$euro} &&\euro\cr
+\+&{\tt $\backslash$texttimes} &&\texttimes\cr
+
+\medskip
+{\twelvepoint
+\leftline{\bf History}}
+\leftline{\sl Modifications from version 2.1}
+Version 2.2 is a minor correction version. Some minor
+corrections of the README file.
+The main change is the inclusion of the {\tt fontch.pdf}
+documentation file.
+
+\leftline{\sl Modifications from version 2.0}
+Version 2.1 is a minor bug correction version.
+The main change is the change in the name of
+the cork-encoded LM font files to the new
+naming conventions (cork-lmr10 -> ec-lmr10, etc.).
+Fontch-2.1 is compatible with LM-1.000 or newer versions.
+Older versions of LM fonts are not compatible.
+
+\leftline{\sl Modifications from version 1.3}
+Version 2.0 is a mayor revision.
+There are many improvements such as
+
+\item{--} Proper handling of smallcaps
+\item{--} Support for bold-math
+\item{--} Support for AMS fonts
+\item{--} Support for blackboard boldface
+\item{--} Correction of bugs and scaling.
+
+\medskip
+{\twelvepoint
+\leftline{\bf Bugs}}
+ Comments and bugs reports are welcome at {\sf rmedina@ivic.gob.ve}.
+
+\medskip
+{\twelvepoint
+\leftline{\bf Copyright}}
+ Copyright 2010 Rodrigo Medina\par
+The fontch package v2.2, including this manual, may be distributed or modified
+under the conditions of the LaTeX Project Public License, version 1.3c.
+
+This software is copyright but you are granted a license which gives you, the
+``user'' of the software, legal permission to copy, distribute, and/or modify
+the software. However, if you modify the software and then distribute it (even
+just locally) you must change the name of the software, or use other technical
+means to avoid confusion.
+
+\bye
diff --git a/macros/plain/contrib/getoptk/COPYING b/macros/plain/contrib/getoptk/COPYING
new file mode 100644
index 0000000000..fe87c257d0
--- /dev/null
+++ b/macros/plain/contrib/getoptk/COPYING
@@ -0,0 +1,514 @@
+CeCILL-B FREE SOFTWARE LICENSE AGREEMENT
+
+
+ Notice
+
+This Agreement is a Free Software license agreement that is the result
+of discussions between its authors in order to ensure compliance with
+the two main principles guiding its drafting:
+
+ * firstly, compliance with the principles governing the distribution
+ of Free Software: access to source code, broad rights granted to
+ users,
+ * secondly, the election of a governing law, French law, with which
+ it is conformant, both as regards the law of torts and
+ intellectual property law, and the protection that it offers to
+ both authors and holders of the economic rights over software.
+
+The authors of the CeCILL-B (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre])
+license are:
+
+Commissariat à l'Energie Atomique - CEA, a public scientific, technical
+and industrial research establishment, having its principal place of
+business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France.
+
+Centre National de la Recherche Scientifique - CNRS, a public scientific
+and technological establishment, having its principal place of business
+at 3 rue Michel-Ange, 75794 Paris cedex 16, France.
+
+Institut National de Recherche en Informatique et en Automatique -
+INRIA, a public scientific and technological establishment, having its
+principal place of business at Domaine de Voluceau, Rocquencourt, BP
+105, 78153 Le Chesnay cedex, France.
+
+
+ Preamble
+
+This Agreement is an open source software license intended to give users
+significant freedom to modify and redistribute the software licensed
+hereunder.
+
+The exercising of this freedom is conditional upon a strong obligation
+of giving credits for everybody that distributes a software
+incorporating a software ruled by the current license so as all
+contributions to be properly identified and acknowledged.
+
+In consideration of access to the source code and the rights to copy,
+modify and redistribute granted by the license, users are provided only
+with a limited warranty and the software's author, the holder of the
+economic rights, and the successive licensors only have limited liability.
+
+In this respect, the risks associated with loading, using, modifying
+and/or developing or reproducing the software by the user are brought to
+the user's attention, given its Free Software status, which may make it
+complicated to use, with the result that its use is reserved for
+developers and experienced professionals having in-depth computer
+knowledge. Users are therefore encouraged to load and test the
+suitability of the software as regards their requirements in conditions
+enabling the security of their systems and/or data to be ensured and,
+more generally, to use and operate it in the same conditions of
+security. This Agreement may be freely reproduced and published,
+provided it is not altered, and that no provisions are either added or
+removed herefrom.
+
+This Agreement may apply to any or all software for which the holder of
+the economic rights decides to submit the use thereof to its provisions.
+
+
+ Article 1 - DEFINITIONS
+
+For the purpose of this Agreement, when the following expressions
+commence with a capital letter, they shall have the following meaning:
+
+Agreement: means this license agreement, and its possible subsequent
+versions and annexes.
+
+Software: means the software in its Object Code and/or Source Code form
+and, where applicable, its documentation, "as is" when the Licensee
+accepts the Agreement.
+
+Initial Software: means the Software in its Source Code and possibly its
+Object Code form and, where applicable, its documentation, "as is" when
+it is first distributed under the terms and conditions of the Agreement.
+
+Modified Software: means the Software modified by at least one
+Contribution.
+
+Source Code: means all the Software's instructions and program lines to
+which access is required so as to modify the Software.
+
+Object Code: means the binary files originating from the compilation of
+the Source Code.
+
+Holder: means the holder(s) of the economic rights over the Initial
+Software.
+
+Licensee: means the Software user(s) having accepted the Agreement.
+
+Contributor: means a Licensee having made at least one Contribution.
+
+Licensor: means the Holder, or any other individual or legal entity, who
+distributes the Software under the Agreement.
+
+Contribution: means any or all modifications, corrections, translations,
+adaptations and/or new functions integrated into the Software by any or
+all Contributors, as well as any or all Internal Modules.
+
+Module: means a set of sources files including their documentation that
+enables supplementary functions or services in addition to those offered
+by the Software.
+
+External Module: means any or all Modules, not derived from the
+Software, so that this Module and the Software run in separate address
+spaces, with one calling the other when they are run.
+
+Internal Module: means any or all Module, connected to the Software so
+that they both execute in the same address space.
+
+Parties: mean both the Licensee and the Licensor.
+
+These expressions may be used both in singular and plural form.
+
+
+ Article 2 - PURPOSE
+
+The purpose of the Agreement is the grant by the Licensor to the
+Licensee of a non-exclusive, transferable and worldwide license for the
+Software as set forth in Article 5 hereinafter for the whole term of the
+protection granted by the rights over said Software.
+
+
+ Article 3 - ACCEPTANCE
+
+3.1 The Licensee shall be deemed as having accepted the terms and
+conditions of this Agreement upon the occurrence of the first of the
+following events:
+
+ * (i) loading the Software by any or all means, notably, by
+ downloading from a remote server, or by loading from a physical
+ medium;
+ * (ii) the first time the Licensee exercises any of the rights
+ granted hereunder.
+
+3.2 One copy of the Agreement, containing a notice relating to the
+characteristics of the Software, to the limited warranty, and to the
+fact that its use is restricted to experienced users has been provided
+to the Licensee prior to its acceptance as set forth in Article 3.1
+hereinabove, and the Licensee hereby acknowledges that it has read and
+understood it.
+
+
+ Article 4 - EFFECTIVE DATE AND TERM
+
+
+ 4.1 EFFECTIVE DATE
+
+The Agreement shall become effective on the date when it is accepted by
+the Licensee as set forth in Article 3.1.
+
+
+ 4.2 TERM
+
+The Agreement shall remain in force for the entire legal term of
+protection of the economic rights over the Software.
+
+
+ Article 5 - SCOPE OF RIGHTS GRANTED
+
+The Licensor hereby grants to the Licensee, who accepts, the following
+rights over the Software for any or all use, and for the term of the
+Agreement, on the basis of the terms and conditions set forth hereinafter.
+
+Besides, if the Licensor owns or comes to own one or more patents
+protecting all or part of the functions of the Software or of its
+components, the Licensor undertakes not to enforce the rights granted by
+these patents against successive Licensees using, exploiting or
+modifying the Software. If these patents are transferred, the Licensor
+undertakes to have the transferees subscribe to the obligations set
+forth in this paragraph.
+
+
+ 5.1 RIGHT OF USE
+
+The Licensee is authorized to use the Software, without any limitation
+as to its fields of application, with it being hereinafter specified
+that this comprises:
+
+ 1. permanent or temporary reproduction of all or part of the Software
+ by any or all means and in any or all form.
+
+ 2. loading, displaying, running, or storing the Software on any or
+ all medium.
+
+ 3. entitlement to observe, study or test its operation so as to
+ determine the ideas and principles behind any or all constituent
+ elements of said Software. This shall apply when the Licensee
+ carries out any or all loading, displaying, running, transmission
+ or storage operation as regards the Software, that it is entitled
+ to carry out hereunder.
+
+
+ 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS
+
+The right to make Contributions includes the right to translate, adapt,
+arrange, or make any or all modifications to the Software, and the right
+to reproduce the resulting software.
+
+The Licensee is authorized to make any or all Contributions to the
+Software provided that it includes an explicit notice that it is the
+author of said Contribution and indicates the date of the creation thereof.
+
+
+ 5.3 RIGHT OF DISTRIBUTION
+
+In particular, the right of distribution includes the right to publish,
+transmit and communicate the Software to the general public on any or
+all medium, and by any or all means, and the right to market, either in
+consideration of a fee, or free of charge, one or more copies of the
+Software by any means.
+
+The Licensee is further authorized to distribute copies of the modified
+or unmodified Software to third parties according to the terms and
+conditions set forth hereinafter.
+
+
+ 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION
+
+The Licensee is authorized to distribute true copies of the Software in
+Source Code or Object Code form, provided that said distribution
+complies with all the provisions of the Agreement and is accompanied by:
+
+ 1. a copy of the Agreement,
+
+ 2. a notice relating to the limitation of both the Licensor's
+ warranty and liability as set forth in Articles 8 and 9,
+
+and that, in the event that only the Object Code of the Software is
+redistributed, the Licensee allows effective access to the full Source
+Code of the Software at a minimum during the entire period of its
+distribution of the Software, it being understood that the additional
+cost of acquiring the Source Code shall not exceed the cost of
+transferring the data.
+
+
+ 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE
+
+If the Licensee makes any Contribution to the Software, the resulting
+Modified Software may be distributed under a license agreement other
+than this Agreement subject to compliance with the provisions of Article
+5.3.4.
+
+
+ 5.3.3 DISTRIBUTION OF EXTERNAL MODULES
+
+When the Licensee has developed an External Module, the terms and
+conditions of this Agreement do not apply to said External Module, that
+may be distributed under a separate license agreement.
+
+
+ 5.3.4 CREDITS
+
+Any Licensee who may distribute a Modified Software hereby expressly
+agrees to:
+
+ 1. indicate in the related documentation that it is based on the
+ Software licensed hereunder, and reproduce the intellectual
+ property notice for the Software,
+
+ 2. ensure that written indications of the Software intended use,
+ intellectual property notice and license hereunder are included in
+ easily accessible format from the Modified Software interface,
+
+ 3. mention, on a freely accessible website describing the Modified
+ Software, at least throughout the distribution term thereof, that
+ it is based on the Software licensed hereunder, and reproduce the
+ Software intellectual property notice,
+
+ 4. where it is distributed to a third party that may distribute a
+ Modified Software without having to make its source code
+ available, make its best efforts to ensure that said third party
+ agrees to comply with the obligations set forth in this Article .
+
+If the Software, whether or not modified, is distributed with an
+External Module designed for use in connection with the Software, the
+Licensee shall submit said External Module to the foregoing obligations.
+
+
+ 5.3.5 COMPATIBILITY WITH THE CeCILL AND CeCILL-C LICENSES
+
+Where a Modified Software contains a Contribution subject to the CeCILL
+license, the provisions set forth in Article 5.3.4 shall be optional.
+
+A Modified Software may be distributed under the CeCILL-C license. In
+such a case the provisions set forth in Article 5.3.4 shall be optional.
+
+
+ Article 6 - INTELLECTUAL PROPERTY
+
+
+ 6.1 OVER THE INITIAL SOFTWARE
+
+The Holder owns the economic rights over the Initial Software. Any or
+all use of the Initial Software is subject to compliance with the terms
+and conditions under which the Holder has elected to distribute its work
+and no one shall be entitled to modify the terms and conditions for the
+distribution of said Initial Software.
+
+The Holder undertakes that the Initial Software will remain ruled at
+least by this Agreement, for the duration set forth in Article 4.2.
+
+
+ 6.2 OVER THE CONTRIBUTIONS
+
+The Licensee who develops a Contribution is the owner of the
+intellectual property rights over this Contribution as defined by
+applicable law.
+
+
+ 6.3 OVER THE EXTERNAL MODULES
+
+The Licensee who develops an External Module is the owner of the
+intellectual property rights over this External Module as defined by
+applicable law and is free to choose the type of agreement that shall
+govern its distribution.
+
+
+ 6.4 JOINT PROVISIONS
+
+The Licensee expressly undertakes:
+
+ 1. not to remove, or modify, in any manner, the intellectual property
+ notices attached to the Software;
+
+ 2. to reproduce said notices, in an identical manner, in the copies
+ of the Software modified or not.
+
+The Licensee undertakes not to directly or indirectly infringe the
+intellectual property rights of the Holder and/or Contributors on the
+Software and to take, where applicable, vis-à-vis its staff, any and all
+measures required to ensure respect of said intellectual property rights
+of the Holder and/or Contributors.
+
+
+ Article 7 - RELATED SERVICES
+
+7.1 Under no circumstances shall the Agreement oblige the Licensor to
+provide technical assistance or maintenance services for the Software.
+
+However, the Licensor is entitled to offer this type of services. The
+terms and conditions of such technical assistance, and/or such
+maintenance, shall be set forth in a separate instrument. Only the
+Licensor offering said maintenance and/or technical assistance services
+shall incur liability therefor.
+
+7.2 Similarly, any Licensor is entitled to offer to its licensees, under
+its sole responsibility, a warranty, that shall only be binding upon
+itself, for the redistribution of the Software and/or the Modified
+Software, under terms and conditions that it is free to decide. Said
+warranty, and the financial terms and conditions of its application,
+shall be subject of a separate instrument executed between the Licensor
+and the Licensee.
+
+
+ Article 8 - LIABILITY
+
+8.1 Subject to the provisions of Article 8.2, the Licensee shall be
+entitled to claim compensation for any direct loss it may have suffered
+from the Software as a result of a fault on the part of the relevant
+Licensor, subject to providing evidence thereof.
+
+8.2 The Licensor's liability is limited to the commitments made under
+this Agreement and shall not be incurred as a result of in particular:
+(i) loss due the Licensee's total or partial failure to fulfill its
+obligations, (ii) direct or consequential loss that is suffered by the
+Licensee due to the use or performance of the Software, and (iii) more
+generally, any consequential loss. In particular the Parties expressly
+agree that any or all pecuniary or business loss (i.e. loss of data,
+loss of profits, operating loss, loss of customers or orders,
+opportunity cost, any disturbance to business activities) or any or all
+legal proceedings instituted against the Licensee by a third party,
+shall constitute consequential loss and shall not provide entitlement to
+any or all compensation from the Licensor.
+
+
+ Article 9 - WARRANTY
+
+9.1 The Licensee acknowledges that the scientific and technical
+state-of-the-art when the Software was distributed did not enable all
+possible uses to be tested and verified, nor for the presence of
+possible defects to be detected. In this respect, the Licensee's
+attention has been drawn to the risks associated with loading, using,
+modifying and/or developing and reproducing the Software which are
+reserved for experienced users.
+
+The Licensee shall be responsible for verifying, by any or all means,
+the suitability of the product for its requirements, its good working
+order, and for ensuring that it shall not cause damage to either persons
+or properties.
+
+9.2 The Licensor hereby represents, in good faith, that it is entitled
+to grant all the rights over the Software (including in particular the
+rights set forth in Article 5).
+
+9.3 The Licensee acknowledges that the Software is supplied "as is" by
+the Licensor without any other express or tacit warranty, other than
+that provided for in Article 9.2 and, in particular, without any warranty
+as to its commercial value, its secured, safe, innovative or relevant
+nature.
+
+Specifically, the Licensor does not warrant that the Software is free
+from any error, that it will operate without interruption, that it will
+be compatible with the Licensee's own equipment and software
+configuration, nor that it will meet the Licensee's requirements.
+
+9.4 The Licensor does not either expressly or tacitly warrant that the
+Software does not infringe any third party intellectual property right
+relating to a patent, software or any other property right. Therefore,
+the Licensor disclaims any and all liability towards the Licensee
+arising out of any or all proceedings for infringement that may be
+instituted in respect of the use, modification and redistribution of the
+Software. Nevertheless, should such proceedings be instituted against
+the Licensee, the Licensor shall provide it with technical and legal
+assistance for its defense. Such technical and legal assistance shall be
+decided on a case-by-case basis between the relevant Licensor and the
+Licensee pursuant to a memorandum of understanding. The Licensor
+disclaims any and all liability as regards the Licensee's use of the
+name of the Software. No warranty is given as regards the existence of
+prior rights over the name of the Software or as regards the existence
+of a trademark.
+
+
+ Article 10 - TERMINATION
+
+10.1 In the event of a breach by the Licensee of its obligations
+hereunder, the Licensor may automatically terminate this Agreement
+thirty (30) days after notice has been sent to the Licensee and has
+remained ineffective.
+
+10.2 A Licensee whose Agreement is terminated shall no longer be
+authorized to use, modify or distribute the Software. However, any
+licenses that it may have granted prior to termination of the Agreement
+shall remain valid subject to their having been granted in compliance
+with the terms and conditions hereof.
+
+
+ Article 11 - MISCELLANEOUS
+
+
+ 11.1 EXCUSABLE EVENTS
+
+Neither Party shall be liable for any or all delay, or failure to
+perform the Agreement, that may be attributable to an event of force
+majeure, an act of God or an outside cause, such as defective
+functioning or interruptions of the electricity or telecommunications
+networks, network paralysis following a virus attack, intervention by
+government authorities, natural disasters, water damage, earthquakes,
+fire, explosions, strikes and labor unrest, war, etc.
+
+11.2 Any failure by either Party, on one or more occasions, to invoke
+one or more of the provisions hereof, shall under no circumstances be
+interpreted as being a waiver by the interested Party of its right to
+invoke said provision(s) subsequently.
+
+11.3 The Agreement cancels and replaces any or all previous agreements,
+whether written or oral, between the Parties and having the same
+purpose, and constitutes the entirety of the agreement between said
+Parties concerning said purpose. No supplement or modification to the
+terms and conditions hereof shall be effective as between the Parties
+unless it is made in writing and signed by their duly authorized
+representatives.
+
+11.4 In the event that one or more of the provisions hereof were to
+conflict with a current or future applicable act or legislative text,
+said act or legislative text shall prevail, and the Parties shall make
+the necessary amendments so as to comply with said act or legislative
+text. All other provisions shall remain effective. Similarly, invalidity
+of a provision of the Agreement, for any reason whatsoever, shall not
+cause the Agreement as a whole to be invalid.
+
+
+ 11.5 LANGUAGE
+
+The Agreement is drafted in both French and English and both versions
+are deemed authentic.
+
+
+ Article 12 - NEW VERSIONS OF THE AGREEMENT
+
+12.1 Any person is authorized to duplicate and distribute copies of this
+Agreement.
+
+12.2 So as to ensure coherence, the wording of this Agreement is
+protected and may only be modified by the authors of the License, who
+reserve the right to periodically publish updates or new versions of the
+Agreement, each with a separate number. These subsequent versions may
+address new issues encountered by Free Software.
+
+12.3 Any Software distributed under a given version of the Agreement may
+only be subsequently distributed under the same version of the Agreement
+or a subsequent version.
+
+
+ Article 13 - GOVERNING LAW AND JURISDICTION
+
+13.1 The Agreement is governed by French law. The Parties agree to
+endeavor to seek an amicable solution to any disagreements or disputes
+that may arise during the performance of the Agreement.
+
+13.2 Failing an amicable solution within two (2) months as from their
+occurrence, and unless emergency proceedings are necessary, the
+disagreements or disputes shall be referred to the Paris Courts having
+jurisdiction, by the more diligent Party.
+
+
+Version 1.0 dated 2006-09-05.
diff --git a/macros/plain/contrib/getoptk/COPYING-FR b/macros/plain/contrib/getoptk/COPYING-FR
new file mode 100644
index 0000000000..355f45e388
--- /dev/null
+++ b/macros/plain/contrib/getoptk/COPYING-FR
@@ -0,0 +1,519 @@
+
+CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B
+
+
+ Avertissement
+
+Ce contrat est une licence de logiciel libre issue d'une concertation
+entre ses auteurs afin que le respect de deux grands principes préside à
+sa rédaction:
+
+ * d'une part, le respect des principes de diffusion des logiciels
+ libres: accès au code source, droits étendus conférés aux
+ utilisateurs,
+ * d'autre part, la désignation d'un droit applicable, le droit
+ français, auquel elle est conforme, tant au regard du droit de la
+ responsabilité civile que du droit de la propriété intellectuelle
+ et de la protection qu'il offre aux auteurs et titulaires des
+ droits patrimoniaux sur un logiciel.
+
+Les auteurs de la licence CeCILL-B (pour Ce[a] C[nrs] I[nria] L[ogiciel]
+L[ibre]) sont:
+
+Commissariat à l'Energie Atomique - CEA, établissement public de
+recherche à caractère scientifique, technique et industriel, dont le
+siège est situé 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris.
+
+Centre National de la Recherche Scientifique - CNRS, établissement
+public à caractère scientifique et technologique, dont le siège est
+situé 3 rue Michel-Ange, 75794 Paris cedex 16.
+
+Institut National de Recherche en Informatique et en Automatique -
+INRIA, établissement public à caractère scientifique et technologique,
+dont le siège est situé Domaine de Voluceau, Rocquencourt, BP 105, 78153
+Le Chesnay cedex.
+
+
+ Préambule
+
+Ce contrat est une licence de logiciel libre dont l'objectif est de
+conférer aux utilisateurs une très large liberté de modification et de
+redistribution du logiciel régi par cette licence.
+
+L'exercice de cette liberté est assorti d'une obligation forte de
+citation à la charge de ceux qui distribueraient un logiciel incorporant
+un logiciel régi par la présente licence afin d'assurer que les
+contributions de tous soient correctement identifiées et reconnues.
+
+L'accessibilité au code source et les droits de copie, de modification
+et de redistribution qui découlent de ce contrat ont pour contrepartie
+de n'offrir aux utilisateurs qu'une garantie limitée et de ne faire
+peser sur l'auteur du logiciel, le titulaire des droits patrimoniaux et
+les concédants successifs qu'une responsabilité restreinte.
+
+A cet égard l'attention de l'utilisateur est attirée sur les risques
+associés au chargement, à l'utilisation, à la modification et/ou au
+développement et à la reproduction du logiciel par l'utilisateur étant
+donné sa spécificité de logiciel libre, qui peut le rendre complexe à
+manipuler et qui le réserve donc à des développeurs ou des
+professionnels avertis possédant des connaissances informatiques
+approfondies. Les utilisateurs sont donc invités à charger et tester
+l'adéquation du logiciel à leurs besoins dans des conditions permettant
+d'assurer la sécurité de leurs systèmes et/ou de leurs données et, plus
+généralement, à l'utiliser et l'exploiter dans les mêmes conditions de
+sécurité. Ce contrat peut être reproduit et diffusé librement, sous
+réserve de le conserver en l'état, sans ajout ni suppression de clauses.
+
+Ce contrat est susceptible de s'appliquer à tout logiciel dont le
+titulaire des droits patrimoniaux décide de soumettre l'exploitation aux
+dispositions qu'il contient.
+
+
+ Article 1 - DEFINITIONS
+
+Dans ce contrat, les termes suivants, lorsqu'ils seront écrits avec une
+lettre capitale, auront la signification suivante:
+
+Contrat: désigne le présent contrat de licence, ses éventuelles versions
+postérieures et annexes.
+
+Logiciel: désigne le logiciel sous sa forme de Code Objet et/ou de Code
+Source et le cas échéant sa documentation, dans leur état au moment de
+l'acceptation du Contrat par le Licencié.
+
+Logiciel Initial: désigne le Logiciel sous sa forme de Code Source et
+éventuellement de Code Objet et le cas échéant sa documentation, dans
+leur état au moment de leur première diffusion sous les termes du Contrat.
+
+Logiciel Modifié: désigne le Logiciel modifié par au moins une
+Contribution.
+
+Code Source: désigne l'ensemble des instructions et des lignes de
+programme du Logiciel et auquel l'accès est nécessaire en vue de
+modifier le Logiciel.
+
+Code Objet: désigne les fichiers binaires issus de la compilation du
+Code Source.
+
+Titulaire: désigne le ou les détenteurs des droits patrimoniaux d'auteur
+sur le Logiciel Initial.
+
+Licencié: désigne le ou les utilisateurs du Logiciel ayant accepté le
+Contrat.
+
+Contributeur: désigne le Licencié auteur d'au moins une Contribution.
+
+Concédant: désigne le Titulaire ou toute personne physique ou morale
+distribuant le Logiciel sous le Contrat.
+
+Contribution: désigne l'ensemble des modifications, corrections,
+traductions, adaptations et/ou nouvelles fonctionnalités intégrées dans
+le Logiciel par tout Contributeur, ainsi que tout Module Interne.
+
+Module: désigne un ensemble de fichiers sources y compris leur
+documentation qui permet de réaliser des fonctionnalités ou services
+supplémentaires à ceux fournis par le Logiciel.
+
+Module Externe: désigne tout Module, non dérivé du Logiciel, tel que ce
+Module et le Logiciel s'exécutent dans des espaces d'adressage
+différents, l'un appelant l'autre au moment de leur exécution.
+
+Module Interne: désigne tout Module lié au Logiciel de telle sorte
+qu'ils s'exécutent dans le même espace d'adressage.
+
+Parties: désigne collectivement le Licencié et le Concédant.
+
+Ces termes s'entendent au singulier comme au pluriel.
+
+
+ Article 2 - OBJET
+
+Le Contrat a pour objet la concession par le Concédant au Licencié d'une
+licence non exclusive, cessible et mondiale du Logiciel telle que
+définie ci-après à l'article 5 pour toute la durée de protection des droits
+portant sur ce Logiciel.
+
+
+ Article 3 - ACCEPTATION
+
+3.1 L'acceptation par le Licencié des termes du Contrat est réputée
+acquise du fait du premier des faits suivants:
+
+ * (i) le chargement du Logiciel par tout moyen notamment par
+ téléchargement à partir d'un serveur distant ou par chargement à
+ partir d'un support physique;
+ * (ii) le premier exercice par le Licencié de l'un quelconque des
+ droits concédés par le Contrat.
+
+3.2 Un exemplaire du Contrat, contenant notamment un avertissement
+relatif aux spécificités du Logiciel, à la restriction de garantie et à
+la limitation à un usage par des utilisateurs expérimentés a été mis à
+disposition du Licencié préalablement à son acceptation telle que
+définie à l'article 3.1 ci dessus et le Licencié reconnaît en avoir pris
+connaissance.
+
+
+ Article 4 - ENTREE EN VIGUEUR ET DUREE
+
+
+ 4.1 ENTREE EN VIGUEUR
+
+Le Contrat entre en vigueur à la date de son acceptation par le Licencié
+telle que définie en 3.1.
+
+
+ 4.2 DUREE
+
+Le Contrat produira ses effets pendant toute la durée légale de
+protection des droits patrimoniaux portant sur le Logiciel.
+
+
+ Article 5 - ETENDUE DES DROITS CONCEDES
+
+Le Concédant concède au Licencié, qui accepte, les droits suivants sur
+le Logiciel pour toutes destinations et pour la durée du Contrat dans
+les conditions ci-après détaillées.
+
+Par ailleurs, si le Concédant détient ou venait à détenir un ou
+plusieurs brevets d'invention protégeant tout ou partie des
+fonctionnalités du Logiciel ou de ses composants, il s'engage à ne pas
+opposer les éventuels droits conférés par ces brevets aux Licenciés
+successifs qui utiliseraient, exploiteraient ou modifieraient le
+Logiciel. En cas de cession de ces brevets, le Concédant s'engage à
+faire reprendre les obligations du présent alinéa aux cessionnaires.
+
+
+ 5.1 DROIT D'UTILISATION
+
+Le Licencié est autorisé à utiliser le Logiciel, sans restriction quant
+aux domaines d'application, étant ci-après précisé que cela comporte:
+
+ 1. la reproduction permanente ou provisoire du Logiciel en tout ou
+ partie par tout moyen et sous toute forme.
+
+ 2. le chargement, l'affichage, l'exécution, ou le stockage du
+ Logiciel sur tout support.
+
+ 3. la possibilité d'en observer, d'en étudier, ou d'en tester le
+ fonctionnement afin de déterminer les idées et principes qui sont
+ à la base de n'importe quel élément de ce Logiciel; et ceci,
+ lorsque le Licencié effectue toute opération de chargement,
+ d'affichage, d'exécution, de transmission ou de stockage du
+ Logiciel qu'il est en droit d'effectuer en vertu du Contrat.
+
+
+ 5.2 DROIT D'APPORTER DES CONTRIBUTIONS
+
+Le droit d'apporter des Contributions comporte le droit de traduire,
+d'adapter, d'arranger ou d'apporter toute autre modification au Logiciel
+et le droit de reproduire le logiciel en résultant.
+
+Le Licencié est autorisé à apporter toute Contribution au Logiciel sous
+réserve de mentionner, de façon explicite, son nom en tant qu'auteur de
+cette Contribution et la date de création de celle-ci.
+
+
+ 5.3 DROIT DE DISTRIBUTION
+
+Le droit de distribution comporte notamment le droit de diffuser, de
+transmettre et de communiquer le Logiciel au public sur tout support et
+par tout moyen ainsi que le droit de mettre sur le marché à titre
+onéreux ou gratuit, un ou des exemplaires du Logiciel par tout procédé.
+
+Le Licencié est autorisé à distribuer des copies du Logiciel, modifié ou
+non, à des tiers dans les conditions ci-après détaillées.
+
+
+ 5.3.1 DISTRIBUTION DU LOGICIEL SANS MODIFICATION
+
+Le Licencié est autorisé à distribuer des copies conformes du Logiciel,
+sous forme de Code Source ou de Code Objet, à condition que cette
+distribution respecte les dispositions du Contrat dans leur totalité et
+soit accompagnée:
+
+ 1. d'un exemplaire du Contrat,
+
+ 2. d'un avertissement relatif à la restriction de garantie et de
+ responsabilité du Concédant telle que prévue aux articles 8
+ et 9,
+
+et que, dans le cas où seul le Code Objet du Logiciel est redistribué,
+le Licencié permette un accès effectif au Code Source complet du
+Logiciel pendant au moins toute la durée de sa distribution du Logiciel,
+étant entendu que le coût additionnel d'acquisition du Code Source ne
+devra pas excéder le simple coût de transfert des données.
+
+
+ 5.3.2 DISTRIBUTION DU LOGICIEL MODIFIE
+
+Lorsque le Licencié apporte une Contribution au Logiciel, le Logiciel
+Modifié peut être distribué sous un contrat de licence autre que le
+présent Contrat sous réserve du respect des dispositions de l'article
+5.3.4.
+
+
+ 5.3.3 DISTRIBUTION DES MODULES EXTERNES
+
+Lorsque le Licencié a développé un Module Externe les conditions du
+Contrat ne s'appliquent pas à ce Module Externe, qui peut être distribué
+sous un contrat de licence différent.
+
+
+ 5.3.4 CITATIONS
+
+Le Licencié qui distribue un Logiciel Modifié s'engage expressément:
+
+ 1. à indiquer dans sa documentation qu'il a été réalisé à partir du
+ Logiciel régi par le Contrat, en reproduisant les mentions de
+ propriété intellectuelle du Logiciel,
+
+ 2. à faire en sorte que l'utilisation du Logiciel, ses mentions de
+ propriété intellectuelle et le fait qu'il est régi par le Contrat
+ soient indiqués dans un texte facilement accessible depuis
+ l'interface du Logiciel Modifié,
+
+ 3. à mentionner, sur un site Web librement accessible décrivant le
+ Logiciel Modifié, et pendant au moins toute la durée de sa
+ distribution, qu'il a été réalisé à partir du Logiciel régi par le
+ Contrat, en reproduisant les mentions de propriété intellectuelle
+ du Logiciel,
+
+ 4. lorsqu'il le distribue à un tiers susceptible de distribuer
+ lui-même un Logiciel Modifié, sans avoir à en distribuer le code
+ source, à faire ses meilleurs efforts pour que les obligations du
+ présent article 5.3.4 soient reprises par le dit tiers.
+
+Lorsque le Logiciel modifié ou non est distribué avec un Module Externe
+qui a été conçu pour l'utiliser, le Licencié doit soumettre le dit
+Module Externe aux obligations précédentes.
+
+
+ 5.3.5 COMPATIBILITE AVEC LES LICENCES CeCILL et CeCILL-C
+
+Lorsqu'un Logiciel Modifié contient une Contribution soumise au contrat
+de licence CeCILL, les stipulations prévues à l'article 5.3.4 sont
+facultatives.
+
+Un Logiciel Modifié peut être distribué sous le contrat de licence
+CeCILL-C. Les stipulations prévues à l'article 5.3.4 sont alors
+facultatives.
+
+
+ Article 6 - PROPRIETE INTELLECTUELLE
+
+
+ 6.1 SUR LE LOGICIEL INITIAL
+
+Le Titulaire est détenteur des droits patrimoniaux sur le Logiciel
+Initial. Toute utilisation du Logiciel Initial est soumise au respect
+des conditions dans lesquelles le Titulaire a choisi de diffuser son
+oeuvre et nul autre n'a la faculté de modifier les conditions de
+diffusion de ce Logiciel Initial.
+
+Le Titulaire s'engage à ce que le Logiciel Initial reste au moins régi
+par le Contrat et ce, pour la durée visée à l'article 4.2.
+
+
+ 6.2 SUR LES CONTRIBUTIONS
+
+Le Licencié qui a développé une Contribution est titulaire sur celle-ci
+des droits de propriété intellectuelle dans les conditions définies par
+la législation applicable.
+
+
+ 6.3 SUR LES MODULES EXTERNES
+
+Le Licencié qui a développé un Module Externe est titulaire sur celui-ci
+des droits de propriété intellectuelle dans les conditions définies par
+la législation applicable et reste libre du choix du contrat régissant
+sa diffusion.
+
+
+ 6.4 DISPOSITIONS COMMUNES
+
+Le Licencié s'engage expressément:
+
+ 1. à ne pas supprimer ou modifier de quelque manière que ce soit les
+ mentions de propriété intellectuelle apposées sur le Logiciel;
+
+ 2. à reproduire à l'identique lesdites mentions de propriété
+ intellectuelle sur les copies du Logiciel modifié ou non.
+
+Le Licencié s'engage à ne pas porter atteinte, directement ou
+indirectement, aux droits de propriété intellectuelle du Titulaire et/ou
+des Contributeurs sur le Logiciel et à prendre, le cas échéant, à
+l'égard de son personnel toutes les mesures nécessaires pour assurer le
+respect des dits droits de propriété intellectuelle du Titulaire et/ou
+des Contributeurs.
+
+
+ Article 7 - SERVICES ASSOCIES
+
+7.1 Le Contrat n'oblige en aucun cas le Concédant à la réalisation de
+prestations d'assistance technique ou de maintenance du Logiciel.
+
+Cependant le Concédant reste libre de proposer ce type de services. Les
+termes et conditions d'une telle assistance technique et/ou d'une telle
+maintenance seront alors déterminés dans un acte séparé. Ces actes de
+maintenance et/ou assistance technique n'engageront que la seule
+responsabilité du Concédant qui les propose.
+
+7.2 De même, tout Concédant est libre de proposer, sous sa seule
+responsabilité, à ses licenciés une garantie, qui n'engagera que lui,
+lors de la redistribution du Logiciel et/ou du Logiciel Modifié et ce,
+dans les conditions qu'il souhaite. Cette garantie et les modalités
+financières de son application feront l'objet d'un acte séparé entre le
+Concédant et le Licencié.
+
+
+ Article 8 - RESPONSABILITE
+
+8.1 Sous réserve des dispositions de l'article 8.2, le Licencié a la
+faculté, sous réserve de prouver la faute du Concédant concerné, de
+solliciter la réparation du préjudice direct qu'il subirait du fait du
+Logiciel et dont il apportera la preuve.
+
+8.2 La responsabilité du Concédant est limitée aux engagements pris en
+application du Contrat et ne saurait être engagée en raison notamment:
+(i) des dommages dus à l'inexécution, totale ou partielle, de ses
+obligations par le Licencié, (ii) des dommages directs ou indirects
+découlant de l'utilisation ou des performances du Logiciel subis par le
+Licencié et (iii) plus généralement d'un quelconque dommage indirect. En
+particulier, les Parties conviennent expressément que tout préjudice
+financier ou commercial (par exemple perte de données, perte de
+bénéfices, perte d'exploitation, perte de clientèle ou de commandes,
+manque à gagner, trouble commercial quelconque) ou toute action dirigée
+contre le Licencié par un tiers, constitue un dommage indirect et
+n'ouvre pas droit à réparation par le Concédant.
+
+
+ Article 9 - GARANTIE
+
+9.1 Le Licencié reconnaît que l'état actuel des connaissances
+scientifiques et techniques au moment de la mise en circulation du
+Logiciel ne permet pas d'en tester et d'en vérifier toutes les
+utilisations ni de détecter l'existence d'éventuels défauts. L'attention
+du Licencié a été attirée sur ce point sur les risques associés au
+chargement, à l'utilisation, la modification et/ou au développement et à
+la reproduction du Logiciel qui sont réservés à des utilisateurs avertis.
+
+Il relève de la responsabilité du Licencié de contrôler, par tous
+moyens, l'adéquation du produit à ses besoins, son bon fonctionnement et
+de s'assurer qu'il ne causera pas de dommages aux personnes et aux biens.
+
+9.2 Le Concédant déclare de bonne foi être en droit de concéder
+l'ensemble des droits attachés au Logiciel (comprenant notamment les
+droits visés à l'article 5).
+
+9.3 Le Licencié reconnaît que le Logiciel est fourni "en l'état" par le
+Concédant sans autre garantie, expresse ou tacite, que celle prévue à
+l'article 9.2 et notamment sans aucune garantie sur sa valeur commerciale,
+son caractère sécurisé, innovant ou pertinent.
+
+En particulier, le Concédant ne garantit pas que le Logiciel est exempt
+d'erreur, qu'il fonctionnera sans interruption, qu'il sera compatible
+avec l'équipement du Licencié et sa configuration logicielle ni qu'il
+remplira les besoins du Licencié.
+
+9.4 Le Concédant ne garantit pas, de manière expresse ou tacite, que le
+Logiciel ne porte pas atteinte à un quelconque droit de propriété
+intellectuelle d'un tiers portant sur un brevet, un logiciel ou sur tout
+autre droit de propriété. Ainsi, le Concédant exclut toute garantie au
+profit du Licencié contre les actions en contrefaçon qui pourraient être
+diligentées au titre de l'utilisation, de la modification, et de la
+redistribution du Logiciel. Néanmoins, si de telles actions sont
+exercées contre le Licencié, le Concédant lui apportera son aide
+technique et juridique pour sa défense. Cette aide technique et
+juridique est déterminée au cas par cas entre le Concédant concerné et
+le Licencié dans le cadre d'un protocole d'accord. Le Concédant dégage
+toute responsabilité quant à l'utilisation de la dénomination du
+Logiciel par le Licencié. Aucune garantie n'est apportée quant à
+l'existence de droits antérieurs sur le nom du Logiciel et sur
+l'existence d'une marque.
+
+
+ Article 10 - RESILIATION
+
+10.1 En cas de manquement par le Licencié aux obligations mises à sa
+charge par le Contrat, le Concédant pourra résilier de plein droit le
+Contrat trente (30) jours après notification adressée au Licencié et
+restée sans effet.
+
+10.2 Le Licencié dont le Contrat est résilié n'est plus autorisé à
+utiliser, modifier ou distribuer le Logiciel. Cependant, toutes les
+licences qu'il aura concédées antérieurement à la résiliation du Contrat
+resteront valides sous réserve qu'elles aient été effectuées en
+conformité avec le Contrat.
+
+
+ Article 11 - DISPOSITIONS DIVERSES
+
+
+ 11.1 CAUSE EXTERIEURE
+
+Aucune des Parties ne sera responsable d'un retard ou d'une défaillance
+d'exécution du Contrat qui serait dû à un cas de force majeure, un cas
+fortuit ou une cause extérieure, telle que, notamment, le mauvais
+fonctionnement ou les interruptions du réseau électrique ou de
+télécommunication, la paralysie du réseau liée à une attaque
+informatique, l'intervention des autorités gouvernementales, les
+catastrophes naturelles, les dégâts des eaux, les tremblements de terre,
+le feu, les explosions, les grèves et les conflits sociaux, l'état de
+guerre...
+
+11.2 Le fait, par l'une ou l'autre des Parties, d'omettre en une ou
+plusieurs occasions de se prévaloir d'une ou plusieurs dispositions du
+Contrat, ne pourra en aucun cas impliquer renonciation par la Partie
+intéressée à s'en prévaloir ultérieurement.
+
+11.3 Le Contrat annule et remplace toute convention antérieure, écrite
+ou orale, entre les Parties sur le même objet et constitue l'accord
+entier entre les Parties sur cet objet. Aucune addition ou modification
+aux termes du Contrat n'aura d'effet à l'égard des Parties à moins
+d'être faite par écrit et signée par leurs représentants dûment habilités.
+
+11.4 Dans l'hypothèse où une ou plusieurs des dispositions du Contrat
+s'avèrerait contraire à une loi ou à un texte applicable, existants ou
+futurs, cette loi ou ce texte prévaudrait, et les Parties feraient les
+amendements nécessaires pour se conformer à cette loi ou à ce texte.
+Toutes les autres dispositions resteront en vigueur. De même, la
+nullité, pour quelque raison que ce soit, d'une des dispositions du
+Contrat ne saurait entraîner la nullité de l'ensemble du Contrat.
+
+
+ 11.5 LANGUE
+
+Le Contrat est rédigé en langue française et en langue anglaise, ces
+deux versions faisant également foi.
+
+
+ Article 12 - NOUVELLES VERSIONS DU CONTRAT
+
+12.1 Toute personne est autorisée à copier et distribuer des copies de
+ce Contrat.
+
+12.2 Afin d'en préserver la cohérence, le texte du Contrat est protégé
+et ne peut être modifié que par les auteurs de la licence, lesquels se
+réservent le droit de publier périodiquement des mises à jour ou de
+nouvelles versions du Contrat, qui posséderont chacune un numéro
+distinct. Ces versions ultérieures seront susceptibles de prendre en
+compte de nouvelles problématiques rencontrées par les logiciels libres.
+
+12.3 Tout Logiciel diffusé sous une version donnée du Contrat ne pourra
+faire l'objet d'une diffusion ultérieure que sous la même version du
+Contrat ou une version postérieure.
+
+
+ Article 13 - LOI APPLICABLE ET COMPETENCE TERRITORIALE
+
+13.1 Le Contrat est régi par la loi française. Les Parties conviennent
+de tenter de régler à l'amiable les différends ou litiges qui
+viendraient à se produire par suite ou à l'occasion du Contrat.
+
+13.2 A défaut d'accord amiable dans un délai de deux (2) mois à compter
+de leur survenance et sauf situation relevant d'une procédure d'urgence,
+les différends ou litiges seront portés par la Partie la plus diligente
+devant les Tribunaux compétents de Paris.
+
+
+Version 1.0 du 2006-09-05.
diff --git a/macros/plain/contrib/getoptk/README b/macros/plain/contrib/getoptk/README
new file mode 100644
index 0000000000..03be616a13
--- /dev/null
+++ b/macros/plain/contrib/getoptk/README
@@ -0,0 +1,10 @@
+THE PLAIN TeX GETOPTK PACKAGE
+(c) 2011 Michael Le Barbier Gruenewald
+
+The GETOPTK package eases the definition of macros accepting
+optional arguments in the same style as \hrule or \hbox.
+It is meant to be used with plain TeX.
+
+See guide.pdf for a quick guide.
+
+See COPYING and COPYING-FR for licence agreement.
diff --git a/macros/plain/contrib/getoptk/getoptk.tex b/macros/plain/contrib/getoptk/getoptk.tex
new file mode 100644
index 0000000000..9c1b6ea345
--- /dev/null
+++ b/macros/plain/contrib/getoptk/getoptk.tex
@@ -0,0 +1,285 @@
+\catcode`\@=11
+\def\gobble#1{}
+\def\elet#1{%
+ \expandafter\let\expandafter#1%
+}
+
+\def\csdef#1{%
+ \expandafter\def\csname #1\endcsname
+}
+
+\def\cslet#1{%
+ \expandafter\let\csname #1\endcsname
+}
+
+\def\gobble#1{}
+
+\def\getoptk@@#1#2{%
+ \beginnext
+ \toks2={{#1}{#2}}%
+ \edef\next{%
+ \noexpand\getoptk@@A\the\toks2
+ {\expandafter\noexpand\csname
+ getoptk@behaviour@\getoptkactivedictionary @#1\endcsname}%
+ }%
+ \endnext
+}
+
+\def\getoptk@@A#1#2#3{%
+ \beginnext
+ \toksloadcsexpansion\getoptkdictionary\to{\toks2}%
+ \toks4={\\{{#1}{#2}{#3}}}%
+ \edef\next{\noexpand\def\noexpand\getoptkdictionary{%
+ \the\toks2
+ \the\toks4
+ }%
+ }%
+ \endnext
+ \cslet{getoptk@dictionary@\getoptkactivedictionary}\getoptkdictionary
+ \beginnext
+ \def\getoptk@a{#2}%
+ \ifx\getoptk@a\empty
+ \toks4={}%
+ \else
+ \toks4={####1}%
+ \fi
+ \toks2={\def#3}%
+ \edef\next{\the\toks2\the\toks4}%
+ \endnext
+}
+
+\def\toksloadcsexpansion#1\to#2{%
+ #2=\expandafter{#1}}
+\def\tokscat#1&#2\to#3{%
+ \beginnext
+ \edef\tokscat@a{\the#1\the#2}%
+ \toks2={#3}%
+ \toksloadcsexpansion\tokscat@a
+ \to{\toks4}%
+ \edef\next{\the\toks2={\the\toks4}}%
+ \endnext}
+\def\beginnext{%
+ \begingroup
+ \let\next\undefined}
+\def\endnext{%
+ \expandafter\endgroup\next}
+\begingroup
+\catcode`\*=13
+\def *#1{}
+\global\futurelet\spacetoken*^^20\relax
+\global\futurelet\newlinetoken*^^0a\relax
+\endgroup
+\def\readblanks\then#1\done{%
+ \beginnext
+ \def\next{#1}%
+ \readblanks@L}
+\def\readblanks@L{%
+ \futurelet\readblanks@t\readblanks@A}
+\def\readblanks@A{%
+ \let\readblanks@N\readblanks@E
+ \ifx\readblanks@t\spacetoken
+ \let\readblanks@N\readblanks@S
+ \fi
+ \ifx\readblanks@t\newlinetoken
+ \let\readblanks@N\readblanks@S
+ \fi
+ \ifx\readblanks@t\par
+ \let\readblanks@N\readblanks@I
+ \fi
+ \ifx\readblanks@t\input
+ \let\readblanks@N\readblanks@X
+ \fi
+ \readblanks@N}
+\def\readblanks@E{\endnext}
+\long\def\readblanks@S{%
+ \afterassignment\readblanks@L
+ \count0=0}
+\def\readblanks@I#1{%
+ \readblanks@L}
+\def\readblanks@X{%
+ \expandafter\readblanks@L}
+\def\readletters\to#1\then#2\done{%
+ \beginnext
+ \toks2={#2}%
+ \toks4={#1}%
+ \toks6={}%
+ \readletters@L
+}
+
+\def\readletters@L{%
+ \futurelet\readletters@t\readletters@A
+}
+
+\def\readletters@A{%
+ \ifcat A\noexpand\readletters@t
+ \let\readletters@N\readletters@X
+ \else
+ \let\readletters@N\readletters@E
+ \fi
+ \readletters@N
+}
+
+\def\readletters@X#1{%
+ \toks8={#1}%
+ \tokscat\toks6 &\toks8\to{\toks6}%
+ \readletters@L
+}
+
+\def\readletters@E{%
+ \edef\next{\the\toks4={\the\toks6}\the\toks2}%
+ \endnext
+}
+
+\newtoks\getoptkargument
+\def\getoptk#1{%
+ \beginnext
+ \toks0={#1}%
+ \toks2={}%
+ \toks4={}%
+ \toks6={}%
+ \getoptkargument={}%
+ \getoptk@L}
+\def\getoptk@E{%
+ \edef\next{%
+ \the\toks0{\the\toks2}%
+ \the\toks4}%
+ \endnext}
+\def\getoptk@L{%
+ \readblanks\then\getoptk@A\done}
+\def\getoptk@A{%
+ \readletters\to\toks4\then
+ \getoptk@B
+ \done}
+\def\getoptk@B{%
+ \let\getoptk@N\getoptk@E
+ \let\\\getoptk@S
+ \getoptkdictionary
+ \getoptk@N}
+\def\getoptk@S#1{\getoptk@T#1}
+\def\getoptk@T#1#2#3{%
+ \edef\getoptk@a{\the\toks4}%
+ \def\getoptk@b{#1}%
+ \def\getoptk@p{#2}%
+ \ifx\getoptk@a\getoptk@b
+ \let\\\gobble
+ \toks6={}%
+ \toks8={#3}%
+ \def\getoptk@N{#2}%
+ \def\getoptk@a{}%
+ \ifx\getoptk@p\getoptk@a
+ \let\getoptk@N\getoptkcallback
+ \fi
+ \def\getoptk@a{[]}%
+ \ifx\getoptk@p\getoptk@a
+ \let\getoptk@N\getoptk@O
+ \fi
+ \fi}
+\def\getoptkcallback{%
+ \tokscat\toks2 &\toks6\to{\toks2}%
+ \tokscat\toks2 &\toks8\to{\toks2}%
+ \def\getoptk@a{}%
+ \ifx\getoptk@p\getoptk@a
+ \toks6={}%
+ \else
+ \edef\getoptk@N{%
+ \toks6={%
+ {\the\getoptkargument}%
+ }%
+ }%
+ \getoptk@N
+ \fi
+ \tokscat\toks2 &\toks6\to{\toks2}%
+ \getoptk@L}
+\newif\ifgetoptkbracket
+\def\getoptk@O{%
+ \readblanks\then
+ \futurelet\getoptk@t\getoptk@P
+ \done}
+\def\getoptk@P{%
+ \ifx\getoptk@t[%]
+ \toks6={\getoptkbrackettrue}%
+ \let\getoptk@N\getoptk@Q
+ \else
+ \toks6={\getoptkbracketfalse}%
+ \let\getoptk@N\getoptkcallback
+ \fi
+ \getoptk@N}
+\def\getoptk@Q[#1]{%
+ \getoptkargument={#1}%
+ \getoptkcallback}
+\def\getoptkmetaparser#1{%
+ \def\getoptkmetaparser@r{#1}%
+ \afterassignment\getoptkmetaparser@A
+ #1}
+\def\getoptkmetaparser@A{%
+ \beginnext
+ \toks2=\expandafter{%
+ \getoptkmetaparser@r
+ }%
+ \edef\next{%
+ \noexpand
+ \getoptkmetaparser@B{\the\toks2}%
+ }%
+ \endnext}
+\def\getoptkmetaparser@B#1{%
+ \edef\getoptk@N{%
+ \getoptkargument={\the#1}%
+ }%
+ \getoptk@N
+ \getoptkcallback}
+\def\getoptkcountparser{%
+ \getoptkmetaparser{\count0 }}
+\def\getoptkdimenparser{%
+ \getoptkmetaparser{\dimen0 }%
+}
+
+\def\getoptkskipparser{%
+ \getoptkmetaparser{\skip0 }%
+}
+
+\def\getoptkskipparser{%
+ \getoptkmetaparser{\skip0 }%
+}
+
+\def\getoptktoksparser{%
+ \getoptkmetaparser{\toks0 }%
+}
+\def\newgetoptkdictionary#1{%
+ \cslet{getoptk@dictionary@#1}\empty
+ \setgetoptkdictionary{#1}%
+}
+
+\def\setgetoptkdictionary#1{%
+ \def\getoptkactivedictionary{#1}%
+ \beginnext
+ \toks2={\let\getoptkdictionary}%
+ \toks4=\expandafter{\csname getoptk@dictionary@#1\endcsname}%
+ \edef\next{\the\toks2 \the\toks4}%
+ \endnext
+}
+
+\def\defgetoptkflag#1{%
+ \getoptk@@{#1}{}%
+}
+
+\def\defgetoptkbracket#1{%
+ \getoptk@@{#1}{[]}%
+}
+
+\def\defgetoptkcount#1{%
+ \getoptk@@{#1}{\getoptkcountparser}%
+}
+
+\def\defgetoptkdimen#1{%
+ \getoptk@@{#1}{\getoptkdimenparser}%
+}
+
+\def\defgetoptkskip#1{%
+ \getopk@@{#1}{\getoptkskipparser}%
+}
+
+\def\defgetoptktoks#1{%
+ \getopk@@{#1}{\getoptktoksparser}%
+}
+\catcode`\@=12
+
diff --git a/macros/plain/contrib/getoptk/guide.pdf b/macros/plain/contrib/getoptk/guide.pdf
new file mode 100644
index 0000000000..34d03909a7
--- /dev/null
+++ b/macros/plain/contrib/getoptk/guide.pdf
Binary files differ
diff --git a/macros/plain/contrib/getoptk/guide.tex b/macros/plain/contrib/getoptk/guide.tex
new file mode 100644
index 0000000000..5d6ccf69a4
--- /dev/null
+++ b/macros/plain/contrib/getoptk/guide.tex
@@ -0,0 +1,192 @@
+\documentclass{article}
+\usepackage{palatino}
+\usepackage[T1]{fontenc}
+\usepackage[latin9]{inputenc}
+\usepackage[dvipsnames]{xcolor}
+\usepackage{hyperref}
+\usepackage{graphicx}
+\usepackage{microtype}
+\hypersetup{%
+ hyperindex,
+ % pagebackref,
+ pdftex,
+ pdftitle={Interfaces to macros: the GETOPTK package}
+ pdfdisplaydoctitle,
+ % pdfpagemode=UseNone,
+ breaklinks=true,
+ % extension=pdf,
+ bookmarks=true,
+ % plainpages=false,
+ colorlinks,
+ linkcolor=BlueViolet,
+ citecolor=BrickRed,
+ urlcolor=Plum,
+ pdfpagelabels,
+ pdfpagelayout=TwoPageRight,
+ pdfview=Fit,
+ pdfstartview=Fit
+}%
+%
+% Definitions
+%
+\newcommand\PACKAGE{\emph{getoptk}}
+\newcommand\cs[1]{\texttt{\textbackslash#1}}
+\newcommand\meta[1]{\penalty0 $\langle\textit{#1}\rangle$\penalty0 }
+\begin{document}
+\author{Michael Le Barbier Grünewald}
+\title{The GETOPTK package}%
+\date{6th of June 2011}
+\maketitle
+\begin{abstract}
+The~{\PACKAGE} package eases the definition of macros accepting
+optional arguments in the same style as~\cs{hrule} or~\cs{hbox}.
+It is meant to be used with \emph{plain {\TeX}}.
+\end{abstract}
+\section{Introduction}
+A flexible way to pass optional arguments to a procedure is to rely on
+\emph{dictionaries} of optional arguments, that is, a set of bindings
+between formal names of arguments and their values. Some~{\TeX}
+primitives, like~\cs{hrule} or~\cs{hbox}, use such an interface style.
+We call this style the~\emph{keyword} interface style. There is no
+facility in~{\TeX} to define new macros using the~\emph{keyword}
+interface style. The {\PACKAGE} package provides such a service.
+
+\section{Quick guide}
+
+In order to define a macro using the~\emph{keyword} interface style,
+we have to setup first a~\emph{behaviour dictionary}
+binding \emph{keywords} and \emph{behaviours}. A~keyword introduces an
+optional argument and a behaviour describes its effect, we will soon
+show an example of this. In the definition of the macro itself, we
+first select the behaviour dictionary we want to use and
+call~\cs{getoptk}, the control sequence responsible of the detection
+of optional arguments. In this call, we need to provide
+a~\emph{callback} as argument to~\cs{getoptk}, this callback is a macro
+taking control of the execution after~\cs{getoptk} has completed its
+task. It will be called with an argument, that is derived from the
+list of optional arguments.
+
+For explanatory purposes, let us assume that we want to define a
+macro \cs{begindisplay} using the \emph{keyword} interface style and
+accepting the following optional arguments:
+\begin{description}
+\item [ragged]
+ Fill, but do not adjust the right margin (only left-justify).
+
+\item [literal]
+ Display block with literal font (usually fixed-width). Useful for
+ source code or simple tabbed or spaced text.
+
+\item [file \meta{file name}]
+ The file whose name, enclosed in curly braces, follows the
+ \emph{file} keyword is read and displayed using the selected
+ display type.
+
+\item [offset \meta{dimen}]
+ Use~\emph{dimen} as indentation for the display.
+
+\end{description}
+We first create a fresh new behaviour dictionary:
+\begin{verbatim}
+\newgetoptkdictionary{display}
+\end{verbatim}
+and fill it with behaviours:
+\begin{verbatim}
+\defgetoptkflag{ragged}{\raggedright}
+\defgetoptkflag{literal}{\let\displayfont\literalfont}
+\defgetoptktoks{file}{\input #1}
+\defgetoptkdimen{dimen}{\displayindent=#1\relax}
+\end{verbatim}
+Besides registering the behaviours in the dictionary~\emph{display},
+these commands also bind the behaviours to the following control
+sequences:
+\begin{verbatim}
+\getoptk@behaviour@display@ragged
+\getoptk@behaviour@display@literal
+\getoptk@behaviour@display@file
+\getoptk@behaviour@display@dimen
+\end{verbatim}
+The control sequences created with \cs{getoptkflag} must do not have an
+argument, while those created by \cs{getoptktoks} or \cs{getoptkdimen}
+do have one. The definition of~\cs{begindisplay} is
+\begin{verbatim}
+\def\begindisplay{%
+ \setgetoptkdictionary{display}%
+ \getoptk\display@M
+}
+\end{verbatim}
+The control sequence~\cs{getoptk} is such that the input text
+\begin{verbatim}
+\begindisplay file {chapter1} literal offset 20pt
+\end{verbatim}
+is \emph{replaced} by
+\begin{verbatim}
+\display@M{%
+ \getoptk@behaviour@display@file{chapter1}%
+ \getoptk@behaviour@display@literal
+ \getoptk@behaviour@display@dimen{20pt}%
+}
+\end{verbatim}
+so that \cs{display@M} can do its job and trigger the behaviours at
+the appropriate time.
+
+
+\section{Defining a behaviour dictionary}
+
+The command \cs{newgetoptkdictionary}\meta{dictionary} creates a
+behaviour dictionary that will be filled by subsequent calls to
+commands binding keywords and behaviours. The bindings commands are:
+\begin{verbatim}
+\defgetoptkflag
+\defgetoptkcount
+\defgetoptkdimen
+\defgetoptkskip
+\defgetoptktoks
+\defgetoptkbracket
+\end{verbatim}
+They all must be called like in the previous examples, following the
+pattern:
+\par\medskip
+\leftline{\meta{binding\_command}\meta{keyword}\meta{behaviour}}
+\smallskip
+\begin{description}
+\newcommand\defgetoptkdescribe[1]{%
+\item [defgetoptk#1]
+ The \meta{behaviour} is the replacement text of a macro having one
+ argument. When it finds~\meta{keyword}, the \cs{getoptk} macro
+ scans further for an argument that is valid right hand side value
+ for a \emph{#1} register. This argument will be supplied to the
+ \meta{behaviour} when behaviours are triggered.\par
+}
+\item [defgetoptkflag]
+ The \meta{behaviour} is the replacement text of a macro without
+ arguments. When it finds~\meta{keyword}, the \cs{getoptk} macro
+ does not look for an argument but starts again scanning for
+ keywords.
+\defgetoptkdescribe{count}
+\defgetoptkdescribe{dimen}
+\defgetoptkdescribe{skip}
+\defgetoptkdescribe{toks}
+\item [defgetoptkbracket]
+ The \meta{behaviour} is the replacement text of a macro having one
+ argument. When it finds~\meta{keyword}, the \cs{getoptk} macro
+ scans further for an optional argument enclosed by square brackets.
+ If such an argument is found, it is supplied to
+ \meta{behaviour} when behaviours are triggered and the predicate
+ \cs{ifgetoptkbracket} is bound to \cs{iftrue}. If no such an
+ argument is found, then the empty argument is supplied
+ to~\meta{behaviour} when behaviours are triggered and the predicate
+ \cs{ifgetoptkbracket} is bound to \cs{iffalse}.
+\end{description}
+
+\section{Licence}
+The {\PACKAGE} software id copyright \copyright~2011 Michael Le
+Barbier Grünewald.
+The {\PACKAGE} software is distributed under the terms of the
+CeCILL-B licence, version~1.0. See the files COPYING and COPYING-FR
+in the distribution.
+\end{document}
+
+% Local Variables:
+% ispell-dictionary: "en_GB-ise"
+% End:
diff --git a/macros/plain/contrib/gfnotation/COPYING b/macros/plain/contrib/gfnotation/COPYING
new file mode 100644
index 0000000000..94a9ed024d
--- /dev/null
+++ b/macros/plain/contrib/gfnotation/COPYING
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. 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
+them 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 prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. 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.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey 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;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If 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 convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU 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 that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ 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.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+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.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ 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
+state 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) <year> <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 3 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, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program 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, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU 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 Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/macros/plain/contrib/gfnotation/GFnotation-doc.pdf b/macros/plain/contrib/gfnotation/GFnotation-doc.pdf
new file mode 100644
index 0000000000..a32c0c75f0
--- /dev/null
+++ b/macros/plain/contrib/gfnotation/GFnotation-doc.pdf
Binary files differ
diff --git a/macros/plain/contrib/gfnotation/GFnotation-doc.tex b/macros/plain/contrib/gfnotation/GFnotation-doc.tex
new file mode 100644
index 0000000000..d57cc99105
--- /dev/null
+++ b/macros/plain/contrib/gfnotation/GFnotation-doc.tex
@@ -0,0 +1,1186 @@
+% This file is part of the CTAN package named gfnotation.
+%
+% This is the users guide to the TeX macros ``GFnotation.tex''.
+% GFnotation.tex: typeset G. Frege's notation of the Begriffsschrift or
+% the Grundgesetze der Arithmetik in plain TeX
+%
+% Copyright (C) 2015 Udo Wermuth (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 3 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, see <http://www.gnu.org/licenses/>.
+% %%%
+% %%% GFnotation
+% %%%
+\input amssym.def
+\catcode`\ß=11
+\let\nosubst=f
+\let\showrotation=t \input rotate
+\let\fgefontsknown=t
+\input GFnotation
+\gfbslognotationtrue
+\gfbszeigestatstrue
+% %%%
+% %%% verbatim macros (from manmac.tex)
+% %%%
+\newskip\ttglue {\tt\global\ttglue=0.5em plus 0.25em minus 0.15em }
+\def\ttverbatim{\begingroup \frenchspacing
+ \catcode`\\=12 \catcode`\{=12 \catcode`\}=12 \catcode`\$=12 \catcode`\&=12
+ \catcode`\#=12 \catcode`\%=12 \catcode`\~=12 \catcode`\_=12 \catcode`\^=12
+ \obeyspaces \obeylines \tt}
+\def\verbatimspace{\ifvmode\indent\fi\space}
+{\obeyspaces \gdef\makespaceverbspace{\def {\verbatimspace}}}
+\outer\def\verbatim{$$\ifdim\parskip>0pt
+ \abovedisplayskip=\parskip \abovedisplayshortskip=\parskip
+ \belowdisplayskip=\parskip \belowdisplayshortskip=\parskip
+ \else
+ \abovedisplayskip=3pt \abovedisplayshortskip=3pt
+ \belowdisplayskip=3pt \belowdisplayshortskip=3pt
+ \fi
+ \let\par=\endgraf \ttverbatim \makespaceverbspace \parskip=0pt
+ \catcode`\§=0 \advance\leftskip by 10pt \ttfinish}
+{\catcode`\§=0 §catcode`§\=12 % § is temporary escape character
+ §obeylines % end of line is active
+ §gdef§ttfinish#1^^M#2\endverbatim{§vbox{#2}§endgroup$$}}
+\catcode`\¤=\active
+{\obeylines \gdef¤{\ttverbatim \spaceskip\ttglue \let^^M=\ \let¤=\endgroup}}
+% %%%
+% %%% Examples
+% %%%
+\def\Econt{\goodbreak\bgroup
+ \parskip=0pt \leftskip=3\parindent \rightskip=\leftskip \parindent=0pt }
+\def\Epause{\par\egroup}
+\def\Example#1{\bigskip\Econt\noindent{\bf Example #1.}\ }
+\def\Eend#1{\ifnum#1>0 \vskip-\baselineskip\fi
+ \hfill\vrule height 7pt depth 1pt width 3pt \Epause\bigskip}
+% %%%
+% %%% hyphenation exceptions
+% %%%
+\hyphenation{Gottlob Frege Begriffs-schrift Grund-gesetze}
+% %%%
+% %%% other
+% %%%
+\def\\{\par\vskip0pt plus.3\vsize\penalty-253\vskip0pt plus-.3\vsize\relax}
+\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.075em S$-\TeX}
+\def\La{L\kern-3pt \raise.42ex\hbox{$\scriptstyle A$}}
+\def\LaTeX{\La\kern-.15em\TeX}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\parskip=0.25\baselineskip
+\settabs 6 \columns
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\font\titlefont=cmssdc10 at 36pt
+\font\subtitlefont=cmssdc10 at 17pt
+%
+\centerline{\titlefont Users Guide}
+\bigskip
+\centerline{\subtitlefont GFnotation.tex (version 2.9, 29.03.2015)}
+
+% %%%%%%%%%%%
+\beginsection 1. Description
+
+This package implements macros to typeset formulas and inferences in
+Gottlob Frege's notation in the style of his ``Begriffsschrift, eine der
+arithmetischen nachgebildete Formelsprache des reinen Denkens'' (see
+[1]) or in the style of his main work ``Grundgesetze der Arithmetik''
+(see [2]). Here is an example of a single
+formula: \frege|{..\gA.{*.a.{f(\da)}}}. And this is a complete
+inference:
+\nlp4\*_[-\*-:-\ce{$\gA$}
+\nlp4\*___\*_'-\ce{$\gB$}
+\nlp4\*_[-\*---\ce{$\gB$}
+\nlp4\*---\*---\*---
+\nlp4\*_[-\*---\ce{$\gA$} .
+
+The package has two input formats, the so-called ``symbolic
+representation'' and the ``short form.'' The short form outputs the
+formulas either in the style of Frege's {\it Begriffsschrift\/} or in
+the style that is used in his {\it Grundgesetze}. The above formulas
+are in the style of the {\it Begriffsschrift\/}; here is the first one
+in the style of the {\it Grundgesetze\/}:
+\toggleGGstyle\frege|{..\gA.{*.a.{f(\da)}}}.\toggleGGstyle
+
+{\it Note\/}: This users guide shows how to work with the package.
+It does not explain the constructions and symbols in Frege's
+notation.
+
+
+% %%%%%%%%%%%
+\beginsection 2. Elements of Frege's notation
+
+{\bf a) Letters.}\ Frege used lowercase roman letters, $a$, $b$,
+$c$, \dots, uppercase Greek letters $\gA$, $\gB$, $\gG$, \dots,
+lowercase Greek letters $\ka$, $\kb$, $\kg$, \dots, and Fraktur
+letters $\da$, $\de$, $\dF$, \dots\thinspace.
+
+\noindent
+{\bf b) Formulas (Begriffsschrift).}\
+The following notation is used by Frege to build formulas:
+\smallskip
+\+&{\it Content stroke\/}: \*---\ze{$\gA$}.
+ &&{\it Judgment\/}: \*[--\ze{$\gA$}.\cr
+\smallskip
+\+&{\it Negation\/}: \*-~-\ze{$\gA$}.
+ &&{\it Affirmation\/}: \*-+-\ze{$\gA$}.\cr
+ \smallskip
+\+&{\it Condition\/}: \frege .{..\gB.\gA}.
+ &&{\it Generality\/}: \frege .{*.a.{\gF(\da)}}.\cr
+\+&{\it Condition stroke\/}: \*_!_.
+ &&{\it Definition\/}: \*"3- $((\gA)\equiv\gB)$.\cr
+\smallskip
+\+&{\it Substitution\/}: $a$\*_|_$f(a)$.\cr
+
+\noindent
+{\bf c) Inferences (Begriffsschrift).}\
+For inferences two types of lines are used:
+\smallskip
+\+&{\it Single line\/}: \*---\*---.
+ &&{\it Double lines\/}: \*===\*===.\cr
+\smallskip
+\+&{\it Separator between inference chains\/}:\cr
+\decollator4
+
+\noindent
+{\bf d) Terminal symbols (Begriffsschrift).}\
+Four special constructions appear in the {\it Begriffsschrift\/}:
+\smallskip
+\+&$\gfvererbe\kd\ka{{x(\ka)}}{{f(\kd,\ka)}}$, \quad$\gffolgt\kg\kb{f(x_\kg,y_\kb)}$,
+\quad$\gfgehoertan\kg\kb{f(x_\kg,z_\kb)}$, \quad$\gfeindeutig\kd\ke{f(\kd,\ke)}$.\cr
+
+\toggleGGstyle
+\gfbskeinekompaktehoehlungtrue
+\noindent
+{\bf e) Formulas (Grundgesetze).}\
+The following notation is used by Frege to build formulas:
+\smallskip
+\+&{\it Content stroke\/}: \frege.{=.\gA}.
+ &&{\it Judgment\/}: \frege|{=.\gA}.\cr
+\smallskip
+\+&{\it Negation\/}: \frege.{=-\gA}.
+ &&{\it Affirmation\/}: \frege.{=+\gA}.\cr
+ \smallskip
+\+&{\it Condition\/}: \frege .{..\gB.\gA}.
+ &&{\it Generality\/}: \frege .{*.a.{\gF(\da)}}.\cr
+\+&{\it Condition stroke\/}: \*_!_.
+ &&{\it Definition\/}: \*"39 $\gA=\gB$.\cr
+
+\noindent
+{\bf f) Inferences (Grundgesetze).}\
+For inferences eight types are used:
+\smallskip
+\+&{\it Single line\/}: \*?--\*?--.
+ &&{\it Double lines\/}: \*?==\*?==.\cr
+\smallskip
+\+&{\it Dashed line\/}: \*?-_\*?-_.
+ &&{\it Dashed double lines\/}: \*?=_\*?=_.\cr
+\smallskip
+\+&{\it Single/double line\/}: \*?=*\*?=*.
+ &&{\it Dot/dashed line\/}: \*?.-\*?.-.\cr
+\smallskip
+\+&{\it Contraposition\/}: \*?>x.
+ &&{\it Quantification\/}: \*?>u.\cr
+\smallskip
+\+&{\it Separator\/}: \gfggtrenner.\cr
+
+\noindent
+{\bf g) Special symbols (Grundgesetze).}\
+Several special characters appear in the {\it Grundgesetze\/}:
+\smallskip
+\+&{\it symbols\/}: $\Gbf$ \G0 \G1 $\Guu$\cr
+\smallskip
+\+&{\it unary operators\/}: \G! $\kasl$ \GI\ $\G>$ \G- \G~ $\G*$
+ $\G6$ $\Gf$ $\Gp$ $\GUorg$ $\Gnorg$
+&&&{\it last two from the fge fonts\/}: $\GU$ $\Gn$\cr
+\smallskip
+\+&{\it binary operators\/}: $\G^$ $\G_$ $\G;$ $\Gfm$ $\Gsm$
+ $\G<$ $\Gmf$ $\Gl$
+&&&{\it rotated\/}: $\Gy$ $\Ge$ $\Gc$ $\GF$ $\Gss$\cr
+\toggleGGstyle
+
+
+% %%%%%%%%%%%
+\beginsection 3. How to load the package
+
+The package requires characters that come with \AmSTeX\ (see [3]);
+the following statement must be given before the package is loaded:
+¤\input amssym.def¤. Then the package is loaded with the statement
+¤\input GFnotation¤.
+
+The package has two styles: the one that is used in the {\it
+Begriffsschrift\/} and the one that is used in the {\it Grundgesetze}.
+If you want to work with the style of the {\it Grundgesetze\/} several
+external flags are available.
+
+First, if only inferences without substitutions are needed the line
+¤\let\nosubst=t¤ should be entered before ¤GFnotation¤ is loaded. This
+avoids typesetting errors and saves some \TeX\ registers. Second, the
+flag ¤\let\showrotation=t¤ can be set to output some terminal symbols
+of the {\it Grundgesetze\/} rotated. Then ¤\input rotate¤ (see [4])
+must be stated too. Otherwise the symbols are not shown as rotated
+symbols (some DVI screen drivers can't do PS-rotation). The affected
+symbols are shown in Section~2g. Third, the flag
+¤\let\fgefontsknown=t¤ can be set to indicate that the fge-fonts by
+J.~J.~Green (see~[5]) are available. Then some symbols of these fonts
+are used in the output. The affected symbols are shown in Section~2g.
+
+After the package has been loaded two flags can be set (independent of the
+style).
+\item{1.}¤\gfbslognotationtrue¤ writes all formulas, which are given in the
+short form, in their symbolic representation into the log file of the
+\TeX\ run.
+\item{2.}¤\gfbszeigestatstrue¤ writes a \TeX\ message for each formula in
+short form if its number of lines is a new maximum.
+
+By default the package activates the style that is used in the {\it
+Begriffsschrift}. To switch to the style of the {\it Grundgesetze\/}
+the global acting command ¤\toggleGGstyle¤ shall be given.
+
+Therefore a typical start is coded in the following way if the style
+of the {\it Begriffschrift\/} is required:
+\verbatim
+\input amssym.def
+\input GFnotation
+\gfbslognotationtrue % log short form formulas in symbolic representation
+\gfbszeigestatstrue % inform about maximum number of lines of short form formulas
+\endverbatim
+
+Otherwise, the style of the {\it Grundgesetze\/} is started with
+\verbatim
+\input amssym.def
+%%% external flags:
+\let\nosubst=t % substitutions aren't needed
+\let\showrotation=t \input rotate % activate this line if PS-rotation works
+%\let\fgefontsknown=t % activate this line if the fge-fonts are available
+\input GFnotation
+%%% internal flags:
+\gfbslognotationtrue % log short form formulas in symbolic representation
+\gfbszeigestatstrue % inform about maximum number of lines of short form formulas
+%%% define the style of the output:
+\toggleGGstyle % use the style of the Grundgesetze
+\endverbatim
+
+
+% %%%%%%%%%%%
+\beginsection 4. Shortcuts for letters
+
+The characters that Frege used (except the roman letters) are coded
+with two letter shortcuts. The first letter indicates how the second
+letter is output. Uppercase Greek letters are introduced by `g',
+lowercase Greek letters by `k', and the Fraktur letters by `d':
+¤$\gA$¤ outputs~$\gA$, ¤$\ka$¤ outputs~$\ka$, and ¤$\da$¤
+outputs~$\da$.
+
+Here is the list of the uppercase Greek letters; the coding follows~[6].
+\smallskip
+\+&¤$\gA$¤: $\gA$& ¤$\gB$¤: $\gB$& ¤$\gG$¤: $\gG$& ¤$\gD$¤: $\gD$& ¤$\gE$¤: $\gE$\cr
+\+&¤$\gZ$¤: $\gZ$& ¤$\gH$¤: $\gH$& ¤$\gJ$¤: $\gJ$& ¤$\gI$¤: $\gI$& ¤$\gK$¤: $\gK$\cr
+\+&¤$\gL$¤: $\gL$& ¤$\gM$¤: $\gM$& ¤$\gN$¤: $\gN$& ¤$\gX$¤: $\gX$& ¤$\gO$¤: $\gO$\cr
+\+&¤$\gP$¤: $\gP$& ¤$\gR$¤: $\gR$& ¤$\gS$¤: $\gS$& ¤$\gT$¤: $\gT$& ¤$\gU$¤: $\gU$\cr
+\+&¤$\gF$¤: $\gF$& ¤$\gQ$¤: $\gQ$& ¤$\gY$¤: $\gY$& ¤$\gW$¤: $\gW$\cr
+
+For the Fraktur letters only a subset of the alphabets is provided;
+these are the letters that appear in the {\it Begriffsschrift\/} or in
+part~1 of Vol.~1 of the {\it Grundgesetze\/}:
+\smallskip
+\+&¤$\da$¤: $\da$& ¤$\dc$¤: $\dc$& ¤$\dd$¤: $\dd$& ¤$\de$¤: $\de$& ¤$\df$¤: $\df$\cr
+\+&¤$\dg$¤: $\dg$& ¤$\dm$¤: $\dm$& ¤$\dn$¤: $\dn$& ¤$\ddo$¤: $\ddo$&¤$\ddp$¤: $\ddp$\cr
+\+&¤$\dq$¤: $\dq$& ¤$\dr$¤: $\dr$& ¤$\dt$¤: $\dt$& ¤$\du$¤: $\du$& ¤$\dF$¤: $\dF$\cr
+
+{\it Note\/}: Commands like ¤\dp¤ or ¤\do¤ shouldn't change their
+plain \TeX\ meaning. Therefore the commands for the letters `o' and
+`p' are build with two `d's.
+
+\begingroup\def\ds{{\frak s}} % keep this definition local
+You can add more letters using a simple
+¤\def¤. For example, to add $\ds$ declare ¤\def\ds{{\frak s}}¤.
+\endgroup
+
+
+% %%%%%%%%%%%
+\beginsection 5. Input of formulas using the
+ ``symbolic representation'' (Begriffsschrift)
+
+This input format gives complete control over the output of the
+formulas. But it requires some amount of typing. All formulas are
+built from symbols and three of them are grouped into the argument of
+a control symbol. The control symbol is the ¤\*¤. (The original
+meaning as discretionary multiplication is kept in the new control
+word ¤\discretionarytimes¤.)
+
+In total there are 35 symbols. In the following list the parentheses
+contain the sequence ¤\*"#"¤ if symbol `{\tt\#}' is explained. The
+first collection lists the important symbols that are used for
+hand-coding the formulas in Frege's notation.
+\smallskip
+% 11 symbols
+\item{\tt\char95 }(\*"_") is the empty space;
+\item{\tt-}(\*"-") is a horizontal line for the content stroke and the inference rule;
+\item{\tt\~}(\*"~") is a horizontal line with centered negation;
+\item{\tt+}(\*"+") is a horizontal line with two centered negation indicators (affirmation);
+\item{\tt:}(\*":") is the then-part of the condition;
+\item{\tt'}(\*"'") is the if-part of the condition;
+\item{\tt!}(\*"!") is a vertical line for the condition stroke;
+\item{\tt[}(\*"[") is a vertical line placed left and starts a horizontal line;
+\item{\tt|}(\*"|") is the vertical line for the substitution;
+\item{\tt3}(\*"3") are two vertical lines used for {\it definitions\/};
+\item{\tt=}(\*"=") are two horizontal lines.
+
+\smallskip\noindent
+The following symbols extend the basic list and can be used to
+fine-tune the output.
+\smallskip
+% 8 symbols (sum=19)
+\item{\tt"}(\*""") is a skip, that is, no output at all;
+\item{\tt(}(\*"(") negation but the indication of negation is moved to the left;
+\item{\tt)}(\*")") negation with the indicator moved to the right;
+\item{\tt<}(\*"<") negation: the indicator is placed at the left end;
+\item{\tt>}(\*">") negation: the indicator is placed at the right end;
+\item{\tt\^{}}(\*"^") affirmation with indicators moved to the left;
+\item{\tt/}(\*"/") affirmation with indicators moved to the right;
+\item{\tt]}(\*"]") is a vertical line placed right, that is, only the judgment stroke is printed.
+
+For the generality a letter must be given. Therefore the parentheses
+contain the sequence ¤\*#a.¤ (¤\*@a"¤ for {\tt @}). Instead of the
+letter `a' any other letter can be used that is available in the
+Fraktur font (see Section~4). A triple for the generality must be
+started with one of the following symbols {\tt.,`;@}. If it is not
+the {\tt @} then the symbol after the letter must be one of
+{\tt.,`;}\thinspace.
+\smallskip
+% 5 symbols (sum=24)
+\item{\tt.}(\*.a.) is a short vertical line;
+\item{\tt,}(\*,a.) is a short vertical line with a centered negation indicator;
+\item{\tt`}(\*`a.) represents negation but the indicator is moved to the left;
+\item{\tt;}(\*;a.) is a short vertical line with affirmation;
+\item{\tt @}(\*@a") signals (without any output) that a letter for the generality follows.
+
+{\it Note\/}: The letter `{\tt\ss}' is special. It uses the content of
+the token register ¤\dsz¤. For example, with the default ¤\dsz={\xi}¤
+¤\*.¤{\tt\ss}¤.¤ outputs \*.ß.. Of course, {\tt\ss} must be a letter
+so for plain \TeX\ the command ¤\catcode`\¤{\tt\ss}¤=11¤ must be
+entered before ¤\input GFnotation¤ is done.
+
+\Example1
+The formula \
+\vtop{%
+ \hbox{\strut\*[-:\*--- $\gA$}
+ \hbox{\strut\*__'\*.a. $f(\da)$}}
+of Section~1 can be coded in the following way:
+\verbatim
+\vtop{%
+ \hbox{\strut\*[-:\*--- $\gA$}
+ \hbox{\strut\*__'\*.a. $f(\da)$}}
+\endverbatim\Eend1
+
+The last list contains symbols that are used by the short form. The
+symbols do not try to have a mnemonic representation for their
+output. Most of these symbols can ``change'' and stand for one of two
+symbols from the above lists.
+\smallskip
+% 11 symbols (sum=35)
+\item{\tt0}negation either moved to the left or the right: {\tt0=()}
+\item{\tt1}affirmation: {\tt1=\^{}/}
+\item{\tt2}again affirmation: {\tt2=\^{}+}
+\item{\tt4}not required content strokes: {\tt4=-"}
+\item{\tt5}not required empty space: {\tt5=\char95"}
+\item{\tt6}judgment strokes: {\tt6=[]}
+\item{\tt7}negated generality: {\tt7=`,}
+\item{\tt8}again negation: {\tt8=<\~{}}
+\item{\tt9}represents a content stroke that has only one third of its usual length;
+\item{\tt*}is a skip whose length is multiplied by $5/3$ to get back into alignment after a {\tt9};
+\item{\tt\$} is used only with a generality and represents either a short content stroke or an empty space.
+
+
+% %%%%%%%%%%%
+\beginsection 6. Input for inference chains in the
+ ``symbolic representation'' (Begriffsschrift)
+
+In order to typeset complete inferences several formulas must be
+positioned in a chain and the rule for the inference has to be entered.
+The construction of Example~1 with ¤\vtop¤, ¤\hbox¤, and ¤\strut¤ is
+shortened to a single command ¤\nlp¤. The terminal symbols become
+an argument of a second command ¤\ce¤.
+\smallskip
+\item{1.}¤\nlp<n>¤ starts a new line and sets the following text {\tt<n>} units to the right;
+\item{2.}¤\ce{<s>}¤ outputs the string {\tt<s>} with some spacing at the end of a line.
+
+\Example2
+This is the implementation of the inference in Section~1, that is
+\nlp4\*_[-\*-:-\ce{$\gA$}
+\nlp4\*___\*_'-\ce{$\gB$}
+\nlp4\*_[-\*---\ce{$\gB$}
+\nlp4\*---\*---\*---
+\nlp4\*_[-\*---\ce{$\gA$}\qquad:
+\smallskip
+\verbatim
+\nlp4\*_[-\*-:-\ce{$\gA$}
+\nlp4\*___\*_'-\ce{$\gB$}
+\nlp4\*_[-\*---\ce{$\gB$}
+\nlp4\*---\*---\*---
+\nlp4\*_[-\*---\ce{$\gA$} .
+\endverbatim\Eend1
+
+\noindent
+For complete inferences with substitutions more commands are
+required:
+\smallskip
+\item{3.}¤\ci{<s>}¤ is like ¤\ce¤ but must be used in the line and spaces that follow are ignored;
+\item{4.}¤\nlpc<n>{<s>}¤ acts like ¤\nlp<n>¤ and sets the string {\tt<s>} to the left in the white space;
+\item{5.}¤\fono{<m>}¤ outputs {\tt<m>} as the number of the formula at the right end of the previous line;
+\item{6.}¤\rep<n><f>¤ repeats the ¤\*¤-formula {\tt<f>} {\tt<n>} times;
+\item{7.}¤\bcc<n>/<p><m>:<c><f>\ecc¤ typesets an inference rule.
+{\tt<n>} is the position to the right, {\tt<m>} is a formula number used in the inference,
+and {\tt<f>} is the rule itself. The parameter {\tt<p>} is either `l', 'm', or `r' to
+position the formula number to the left, in the middle, or to the right.
+And {\tt<c>} is either `.'\ or `:'\ to output one or two colons after the formula number.
+
+\Example3
+The following code
+\Epause
+\verbatim
+ \nlp4\ci{\hss\thinspace58\hss}\rep3\*___\*_[-\*-:-\*---\*-:-\ce{$f(b)$}
+\nlpc4{$f(A)$}\*_|_\*-:-\ci{$f(A)$}\rep2\*___\*_!_\*___\*_'-\ce{$g(b)$}
+ \nlp4\*_|_\*_'-\ci{$g(A)$}\rep2\*___\*_'-\*.a.\*-:-\ce{$f(\da)$}
+ \nlpc4{$c$}\*_|_\ci{$b$} \rep3\*___\*___\*___\*_'-\ce{$g(\da)$}
+ \bcc4/m30:.\rep3\*___\null \rep6\*---\ecc
+ \nlpc4{$a$}\*_|_\ci{$f(b)$} \rep2\*___\*_[-\*-:-\*-:-\*,a.\*-:-\ce{$f(\da)$}
+ \nlpc4{$c$}\*_|_\ci{$g(b)$} \rep2\*___\*___\*_!_\*_!_\*___\*_'-\ce{$g(\da)$}
+ \nlpc4{$b$}\*_|_\*.a.\*-:-\ci{$f(\da)$} \*___\*_!_\*_'-\*---\*--(\ce{$f(b)$}
+ \nlp4\*_|_\*___\*_'-\ci{$g(\da)$} \*___\*_'-\*---\*---\*---\ce{$g(b)$}
+\fono{59}
+\endverbatim\Econt
+
+outputs formula~59 of the {\it Begriffsschrift}:
+\smallskip
+ \nlp4\ci{\hss\thinspace58\hss}\rep3\*___\*_[-\*-:-\*---\*-:-\ce{$f(b)$}
+\nlpc4{$f(A)$}\*_|_\*-:-\ci{$f(A)$}\rep2\*___\*_!_\*___\*_'-\ce{$g(b)$}
+ \nlp4\*_|_\*_'-\ci{$g(A)$}\rep2\*___\*_'-\*.a.\*-:-\ce{$f(\da)$}
+ \nlpc4{$c$}\*_|_\ci{$b$} \rep3\*___\*___\*___\*_'-\ce{$g(\da)$}
+ \bcc4/m30:.\rep3\*___\null \rep6\*---\ecc
+ \nlpc4{$a$}\*_|_\ci{$f(b)$} \rep2\*___\*_[-\*-:-\*-:-\*,a.\*-:-\ce{$f(\da)$}
+ \nlpc4{$c$}\*_|_\ci{$g(b)$} \rep2\*___\*___\*_!_\*_!_\*___\*_'-\ce{$g(\da)$}
+ \nlpc4{$b$}\*_|_\*.a.\*-:-\ci{$f(\da)$} \*___\*_!_\*_'-\*---\*--(\ce{$f(b)$}
+ \nlp4\*_|_\*___\*_'-\ci{$g(\da)$} \*___\*_'-\*---\*---\*---\ce{$g(b)$}
+\fono{59}\Eend0
+
+\noindent
+One more command is required for collections of inferences:
+\item{8.}¤\decollator<l>¤ outputs a thick line of width ¤0.<l>\hsize¤. The line is
+centered. It is preceded and followed by vertical space.
+
+\Example4
+Here are some inferences of the {\it Begriffsschrift\/}:
+\outof p3,0"1"with\thatis
+\formula p9|{..{..a.b}.a}
+\followswith p3"8"a.p8s5
+\substituting p3 d:a \whichgives
+\formula p9|{..{..a.a}.b}
+\named "26"
+\decollator4
+\outof p3,0"26"with b:{..{..a.b}.a} \thatis
+\formula p8|{..{=.{..a.a}}.{..{..a.b}.a}}
+\followswith p3"1"a:p8s5
+\formula p8|{=.{=.{..a.a}}}
+\named "27"
+
+The command ¤\decollator4¤ appears after formula~26.
+\Eend0
+
+
+% %%%%%%%%%%%
+\beginsection 7. Input of formulas using the ``short form''
+
+This input format reduces the amount of typing compared to the
+symbolic representation. It follows given rules and produces as an
+intermediate step the code of the symbolic representation.
+
+The input is recursively entered using four constructions:
+\smallskip
+\item{1.}{\tt=<}sign{\tt>\char"7B<}formula{\tt>\char"7D} to add a
+signed content stroke in front of a formula;
+\item{2.}{\tt<}sign{\tt><}sign{\tt>\char"7B<}formula{\tt>\char"7D<}%
+ sign{\tt>\char"7B<}formula{\tt>\char"7D}
+to build a signed condition from two signed formulas;
+\item{3.}{\tt*<}sign{\tt><}character{\tt><}sign{\tt>\char"7B<}%
+ formula{\tt>\char"7D} to add a signed
+concavity in front of a signed formula;
+\item{4.}{\tt!\char92<}nameofdef{\tt><}arguments{\tt>} to insert a
+previously defined subformula.
+
+\noindent
+Here {\tt<}formula{\tt>} is either a valid formula constructed with
+the four rules or a terminal string (both are typeset in math mode)
+and {\tt<}sign{\tt>} is one of the following symbols:
+\item{\tt.} represents no sign;
+\item{\tt-} represents the negation;
+\item{\tt+} represents the affirmation.
+
+In rule~4 {\tt<}nameofdef{\tt>} is together with the preceding
+backslash a defined control word that has at most three arguments
+given in {\tt<}arguments{\tt>}. The control word must define a part
+of a formula. This rule implements {\sl macro expansion\/} to avoid
+retyping of often used parts in formulas.
+
+Most formulas are created by rules~2 and~3; rule~1 is only needed to
+type a single line.
+
+{\it Important note\/}: The braces around {\tt<}formula{\tt>} can be
+omitted if the formula is a terminal string that consists of a single
+token. Double curly braces are required around terminal strings that
+have more than five tokens. But single braces must always be used for
+formulas in rules 1--3, which are not terminal strings. (In Example~5
+below case~i shows that a single token needs no braces. The cases ii
+and~iii show the use of single and double curly braces.)
+
+Formulas that are created by the above rules must be given to the
+following commands:
+\smallskip
+\item{1.}¤\frege<j>{<f>}¤ where {\tt<f>} is a formula created by the above
+stated rules and {\tt<j>} is either `{\tt.}'\ or `{\tt|}'.
+\item{2.}¤\formula p<n><j>{<f>}¤ adds a position parameter {\tt<p>} to
+move the formula {\tt<n>} units to the right.
+
+\noindent
+The formula {\tt<f>} is output as a judgment if {\tt<j>} equals
+{\tt|}. The command ¤\frege¤ shall be used in running text,
+¤\formula¤ in vertical mode. But ¤\frege¤ doesn't start a paragraph;
+use ¤\indent¤ (or ¤\noindent¤) if ¤\frege¤ is the first item
+in a paragraph.
+
+\Example5
+\def\0#1{*.a.{#1(\da)}}
+Here are a few examples for all four rules:
+\smallskip
+\advance\leftskip by 20pt
+\item{i)}¤\frege|{=-\gA}¤ outputs \frege|{=-\gA}.
+\item{ii)}¤\frege.{-.\gA-{{g(\ka,\kb)}}}¤ outputs \frege.{-.\gA-{{g(\ka,\kb)}}}.
+\item{iii)}¤\frege.{*-a+{f(\da)}}¤ outputs \frege.{*-a+{f(\da)}}.
+\item{iv)}¤\def\0#1{*.a.{#1(\da)}}¤ together with ¤\frege|{-.\gA-{!\0f}}¤
+outputs \frege|{-.\gA-{!\0f}}.
+\smallskip
+\advance\leftskip by -20pt
+The output of iv) is nearly the formula of Section~1 (\frege|{..\gA.{!\0f}});
+it can be coded (without ¤\0¤) as ¤\frege|{..\gA.{*.a.{f(\da)}}}¤.
+\Eend0
+
+Of course, a formula in Frege's notation that has several lines is not
+easy to read in a sequential form. The periods and braces do not help
+to make the structure of that formula easy to recognize.
+I suggest to copy a Frege formula from left to right and from bottom
+to top and to use more than one line for the sequential coding.
+
+\Example6
+This example shows how to construct in a structured manner the short
+form of a given formula, which is written in Frege's notation.
+The formula is \frege|{.-{..\gA.\gB}.{*.a.{..\gG-\gD}}}.
+
+Step~1: The formula is a judgment and starts at the left with a
+condition, whose upper line contains a negation indicator.
+So the coding starts with
+\verbatim
+\frege|{.-{}.{}}
+\endverbatim
+
+Or write it in two lines to make the structure visible:
+\verbatim
+\frege|{.-{}
+ .{}}
+\endverbatim
+
+Step~2: The bottom part starts with a concavity, so the input becomes
+\verbatim
+\frege|{.-{}
+ .{*.a.{}}}
+\endverbatim
+
+Step~3: A simple condition comes after the concavity
+\verbatim
+\frege|{.-{}
+ .{*.a.{..\gG-\gD}}}
+\endverbatim
+
+And the final step is to add the condition in the upper part:
+\verbatim
+\frege|{.-{..\gA.\gB}
+ .{*.a.{..\gG-\gD}}}
+\endverbatim
+\medskip
+{\it Note\/}: The input
+\verbatim
+\frege|{..{-.\gA.\gB}
+ .{*.a.{..\gG-\gD}}}
+\endverbatim
+outputs
+\frege|{..{-.\gA.\gB}
+ .{*.a.{..\gG-\gD}}},
+which looks very similar to the given formula but, of course,
+the negation indicator in the upper part has moved a little bit
+to the right.
+\Eend0
+
+
+% %%%%%%%%%%%
+\beginsection 8. Inferences of the Begriffsschrift in the ``short form''
+
+Five commands are available to typeset inferences with the short form:
+\smallskip
+\item{1.}¤\outof p<n>,<o>"<m>"with<r>\thatis¤ starts the inference chain.
+The parameter {\tt<n>} is the number of units the output is moved to
+the right, {\tt<m>} is a number of a formula, {\tt<o>} is an offset to
+position the number {\tt<m>} {\tt<o>} lines lower, and {\tt<r>} is
+either empty or a space separated list of pairs {\tt v:F} to indicate
+the substitution of {\tt v} by the formula {\tt F}.
+\item{2.}¤\use p<n>"<m>"¤ is a shortcut of ¤\outof¤ if the parameters {\tt<o>}
+and {\tt<r>} are not needed; {\tt<o>} is set 0 and {\tt<r>} is empty.
+\item{3.}¤\followswith p<n>"<m>"a<c>p<N>s<l>¤ draws the inference rule and
+can be expressed in the ¤\bcc¤ macro of Section~6, no~7, as
+¤\bcc{<n>}/m{<m>}:<c>\rep(<N>-<n>)\*___\rep{<l>}\*---\ecc¤.
+\item{4.}¤\substituting p<n> <r>\whichgives¤ has the usual position parameter
+{\tt<n>} and a list of substitutions {\tt<r>} in the above described form {\tt
+v:F}.
+\item{5.}¤\named "<m>"¤ outputs the number {\tt<m>} as the number of the
+previous formula.
+
+An inference chain is typically typed with the sequence:
+\verbatim
+\outof ... with ... \thatis
+\formula ...
+\followswith ...
+\substituting ... \whichgives
+\formula ...
+\named ...
+\endverbatim
+
+\noindent
+or if no substitution in the first formula is required, the ¤\outof¤ line
+is replaced by the simpler ¤\use¤.
+
+\Example7
+The formula of Example~3
+\smallskip
+\outof p4,0"58"with f(A):{..{f(A)}.{g(A)}}
+ c:b
+\thatis
+\formula p8|{..{..{f(b)}.{g(b)}}
+ .{*.a.{..{f(\da)}.{g(\da)}}}}
+\followswith p4"30"a.p8s6
+\substituting p4 a:{f(b)}
+ c:{g(b)}
+ b:{*.a.{..{f(\da)}.{g(\da)}}}
+\whichgives
+\formula p8|{..{..{*-a.{..{f(\da)}.{g(\da)}}}
+ -{f(b)}}
+ .{g(b)}}
+\named "59"
+
+\bigskip
+has this coding:
+\verbatim
+\outof p4,0"58"with f(A):{..{f(A)}.{g(A)}}
+ c:b
+\thatis
+\formula p8|{..{..{f(b)}.{g(b)}}
+ .{*.a.{..{f(\da)}.{g(\da)}}}}
+\followswith p4"30"a.p8s6
+\substituting p4 a:{f(b)}
+ c:{g(b)}
+ b:{*.a.{..{f(\da)}.{g(\da)}}}
+\whichgives
+\formula p8|{..{..{*-a.{..{f(\da)}.{g(\da)}}}
+ -{f(b)}}
+ .{g(b)}}
+\named "59"
+\endverbatim\Eend1
+
+
+% %%%%%%%%%%%
+\beginsection 9. Terminal symbols of the Begriffsschrift
+
+In part~3 of the {\it Begriffsschrift\/} four symbols are
+defined. They are available as \TeX\ commands. The commands get more
+flexibility than the {\it Begriffsschrift\/} requires as all possible
+content can be addressed by parameters.
+
+\item{1.}¤\gfvererbe¤ with four parameters:
+¤$\gfvererbe\kd\ka{x(\ka)}{f(\kd,\ka)}$¤ outputs
+$\gfvererbe\kd\ka{x(\ka)}{f(\kd,\ka)}$.
+\item{2.}¤\gffolgt¤ with three parameters:
+¤$\gffolgt\kg\kb{f(x_\kg,y_\kb)}$¤ outputs $\gffolgt\kg\kb{f(x_\kg,y_\kb)}$.
+\item{3.}¤\gfgehoertan¤ with three parameters:
+¤$\gfgehoertan\kg\kb{f(x_\kg,z_\kb)}$¤ outputs
+$\gfgehoertan\kg\kb{f(x_\kg,z_\kb)}$.
+\item{4.}¤\gfeindeutig¤ with three parameters:
+¤$\gfeindeutig\kd\ke{f(\kd,\ke)}$¤ outputs $\gfeindeutig\kd\ke{f(\kd,\ke)}$.
+
+\noindent
+I use shortcuts for these special terminal symbols and reduce the
+number of parameters to the amount that is used in the text;
+see Example~11 below.
+
+
+% %%%%%%%%%%%
+\beginsection 10. Output style of the Grundgesetze
+
+\toggleGGstyle
+Frege made changes to the notation in his main work. A command and
+several flags are defined to switch from the style of the {\it
+Begriffsschrift\/} to the style of the {\it Grundgesetze}.
+\smallskip
+\item{1.}¤\toggleGGstyle¤ switches the styles; the default is the style of
+the {\it Begriffsschrift}. Several of the changes are global so even
+if the switch is made inside a group it shall be called a second time
+to switch it back. This happens when it is called for the first time:
+\itemitem{a)}¤\gfbsuseGGstyletrue¤ is set. Together with a call to
+¤\gfbsneuestriche¤ the thickness of the lines is changed.
+\itemitem{b)}¤\gfbskompakttrue¤ is set. This reduces the width of the formulas
+that are input with the short form.
+\itemitem{c)}¤\gfggschlussweisetrue¤ is set. This activates more symbols
+to express the eight inferences of the {\it Grundgesetze\/} (see Section~12).
+\itemitem{d)}¤\gfbsfonoohnepunkttrue¤ is set. No period after the number of
+a formula is set in ¤\fono¤ or ¤\named¤.
+\itemitem{e)}¤\gfbsnegdirekttrue¤ is set. The negation indicator touches
+the content stroke.
+\item{2.}The flags can be set individually, for example, to get a compact output
+but keep the line thicknesses etc.\ of the {\it Begriffsschrift}.
+\item{3.}To control the compact output of the generality when the flag
+¤\gfbskompakttrue¤ is set more flags are available. Examples are given to
+show how these flags influences the output.
+\itemitem{$\alpha$)}The output is not compact if ¤\gfbskeinekompaktehoehlungtrue¤
+is set. At the left the flag is false and at the right true; the source code
+is ¤\frege|{..{*-a.{\gY(\da)}}.{*.e.{\gF(\de)}}}¤:
+\smallskip\indent\indent
+{\gfbskompakttrue \gfbskeinekompaktehoehlungfalse
+\frege|{..{*-a.{\gY(\da)}}.{*.e.{\gF(\de)}}}
+}\quad
+{\gfbskompakttrue \gfbskeinekompaktehoehlungtrue
+\frege|{..{*-a.{\gY(\da)}}.{*.e.{\gF(\de)}}}
+}.
+\itemitem{$\beta$)}The output of the short form rule~1 (with the {\tt=}) can
+have no effect except if the flag named ¤\gfbsaussagesichtbartrue¤ is set.
+At the left the flag is false and at the right true; the line reads
+¤\frege.{=.a} vs \frege.{=.{=.a}}¤:
+{\gfbskompakttrue \gfbsaussagesichtbarfalse
+\frege.{=.a} vs \frege.{=.{=.a}}
+}\quad
+{\gfbskompakttrue \gfbsaussagesichtbartrue
+\frege.{=.a} vs \frege.{=.{=.a}}
+}
+
+{\it Note\/}: Both input forms, the symbolic representation and the
+short form, can be used with this style. But only the short form
+creates smaller formulas if ¤\gfbscompakttrue¤ is set. The width of a
+formula in symbolic representation must be changed manually if it is
+not coded with the symbols of the last list in Section~5.
+
+\Example8
+Here is the example of Sections 1 and~5; it is coded in the
+short form as ¤\frege|{..\gA.{*.a.{f(\da)}}}¤:
+\frege|{..\gA.{*.a.{f(\da)}}}.
+\Eend0
+
+
+% %%%%%%%%%%%
+\beginsection 11. Setting formulas in parentheses and brackets (Grundgesetze)
+
+In the {\it Grundgesetze\/} some formulas must be placed in
+parentheses or brackets. A few commands are provided to make this an
+easy task.
+\smallskip
+\item{1.}¤\pfrege<x><j>{<f>}¤ acts like ¤\frege<j>{<f>}¤ and adds parentheses around
+this formula. The result is stored in a box with the number {\tt<x>}. In total
+there are four boxes for this task.
+\item{2.}¤\bfrege<y><j>{<f>}¤ is like ¤\pfrege¤ but the formula is placed between
+brackets. The pool of boxes is independent from the ¤\pfrege¤ boxes and there are
+four boxes.
+\item{3.}¤\pparens<x><M>¤ places the math {\tt<M>} with parentheses in the box
+numbered {\tt<x>}. The boxes are taken from the pool that is available for
+¤\pfrege¤.
+\item{4.}¤\bparens<y><M>¤ acts like ¤\pparens¤ but it uses brackets and the
+pool of boxes of ¤\bfrege¤.
+\item{5.}¤\pfbox<x>¤ outputs box number {\tt<x>} from the ¤\pfrege¤ pool.
+\item{6.}¤\bfbox<y>¤ outputs the box {\tt<y>} from the pool used by ¤\bfrege¤.
+
+\Example9
+The following formula appears on page~115 of the {\it Grundgesetze},
+vol.~1.
+\Epause
+\smallskip
+\begingroup
+\pfrege1.{.-{\ke=c}.{\ke\G^v}}
+\pfrege2.{.-{\ke=b}.{\ke\G^u}}
+\bfrege1.{-.{\ke=n}.{{\ke\G^\kesl\pfbox1}}}
+\bfrege2.{-.{\ke=m}.{{\ke\G^\kesl\pfbox2}}}
+\bfrege3.{--{{\ke\G^(\ka\G^q)}}-{..{\ke=b}-{\ka=c}}}
+\pfrege1.{-.{\ke=n}.{{\ke\G^\kesl\pfbox1}}}
+\pfrege2.{-.{\ke=m}.{{\ke\G^\kesl\pfbox2}}}
+\pparens3{\kesl\bfbox1\G^\G>q}
+\pparens4{\bfbox1\G^\G>\kasl\kesl\bfbox3}
+
+$$\frege|{..{..{..{{\kesl\pfbox2\G^\pfbox4}}
+ -{{b\G^\kesl\pfbox2}}}
+ -{{c\G^\kesl\pfbox1}}}
+ .{{\kesl\pfbox2\G^\pfbox3}}}
+$$
+\endgroup
+\Econt
+And here is the source:
+\verbatim
+\pfrege1.{.-{\ke=c}.{\ke\G^v}}
+\pfrege2.{.-{\ke=b}.{\ke\G^u}}
+\bfrege1.{-.{\ke=n}.{{\ke\G^\kesl\pfbox1}}}
+\bfrege2.{-.{\ke=m}.{{\ke\G^\kesl\pfbox2}}}
+\bfrege3.{--{{\ke\G^(\ka\G^q)}}-{..{\ke=b}-{\ka=c}}}
+\pfrege1.{-.{\ke=n}.{{\ke\G^\kesl\pfbox1}}}
+\pfrege2.{-.{\ke=m}.{{\ke\G^\kesl\pfbox2}}}
+\pparens3{\kesl\bfbox1\G^\G>q}
+\pparens4{\bfbox1\G^\G>\kasl\kesl\bfbox3}
+\endverbatim\smallskip\verbatim
+$$\frege|{..{..{..{{\kesl\pfbox2\G^\pfbox4}}
+ -{{b\G^\kesl\pfbox2}}}
+ -{{c\G^\kesl\pfbox1}}}
+ .{{\kesl\pfbox2\G^\pfbox3}}}
+$$\endverbatim\Eend1
+
+
+% %%%%%%%%%%%
+\beginsection 12. Inferences of the Grundgesetze
+
+The list entry~1c of Section~10 needs some explanation as it extends
+the list of available symbols for inferences. Two of the symbols have
+no output ({\tt?}\ and {\tt>}). In the following list the text in
+parentheses contains the sequence ¤\*?#"¤ or ¤\*?>#¤ for the symbol
+`{\tt\#}'.
+\smallskip
+\item{\tt ?} (must be the first in the triple) signals that the next
+two symbols build an inference line in the style of the {\it
+Grundgesetze\/}. Such symbols use 50\% more space than ordinary symbols.
+\item{\tt -}(\*?-") is a single horizontal stroke;
+\item{\tt .}(\*?.") is a single (centered) period;
+\item{\tt =}(\*?=") is a double stroke;
+\item{\tt *}(\*?*") is a single stroke in the height of the upper line of the
+double stroke;
+\item{\tt\char95 }(\*?_") is an empty space;
+\item{\tt "}(\*?"") is a skip;
+\item{\tt >}has no output; the next symbol must be a {\sl transition-sign\/}:
+\itemitem{\tt x}(\*?>x) it must follow a {\tt >};
+\itemitem{\tt u}(\*?>u) it must follow a {\tt >}.
+
+\noindent
+Inferences of the {\it Grundgesetze\/} are separated by a new type of line:
+\item{1.}¤\separator¤ outputs a thick line with a centered dot.
+
+\Example{10}
+Here is an inference chain from the {\it Grundgesetze\/}:
+\smallskip
+\advance\rightskip by 2\rightskip
+\use p3"III"
+\formula p5|{.-{*.f.{..{\df(a)}.{\df(a)}}}-{a=a}}
+\nlp{6.5}\*?>x
+\formula p5|{..{a=a}.{*.f.{..{\df(a)}.{\df(a)}}}}
+\named "$\ka$"
+\separator
+\use p3"I"
+\formula p5|{..{f(a)}.{f(a)}}
+\nlp5\*?_"\*?>u
+\formula p5|{*.f.{..{\df(a)}.{\df(a)}}}
+\named"$\kb$"
+\bcc3/m$\ka$:.\*__"\rep3\*?--\ecc
+\formula p5|{=.{a=a}}
+\named"IIIe"
+
+\rightskip=\leftskip
+\medskip
+And this is the code:
+\verbatim
+\use p3"III"
+\formula p5|{.-{*.f.{..{\df(a)}.{\df(a)}}}-{a=a}}
+\nlp{6.5}\*?>x
+\formula p5|{..{a=a}.{*.f.{..{\df(a)}.{\df(a)}}}}
+\named "$\ka$"
+\separator
+\use p3"I"
+\formula p5|{..{f(a)}.{f(a)}}
+\nlp5\*?_"\*?>u
+\formula p5|{*.f.{..{\df(a)}.{\df(a)}}}
+\named"$\kb$"
+\bcc3/m$\ka$:.\*__"\rep3\*?--\ecc
+\formula p5|{=.{a=a}}
+\named"IIIe"
+\endverbatim\Eend1
+
+
+% %%%%%%%%%%%
+\beginsection 13. Terminal symbols of the Grundgesetze
+
+The {\it Grundgesetze\/} has not such complex constructions as the
+{\it Begriffsschrift\/} (see Section~9). But it contains a lot of
+special symbols.
+\smallskip
+\settabs 2 \columns
+\def\hsnor#1.{\hbox to 3em{\hss#1.}\ }
+\+\hsnor1.¤\G!¤: $\G!\kx$.&
+\hsnor16.¤\Gfm¤: $u\Gfm q$.\cr
+\+\hsnor2.¤\kasl¤: $\kasl\gF(\ka)$.&
+\hsnor17.¤\Gsm¤: $p\Gsm q$.\cr
+\+\hsnor3.¤\G^¤: $a\G^b$.&
+\hsnor18.¤\G<¤: $p\G<q$.\cr
+\+\hsnor4.¤\GI¤: $\GI p$.&
+\hsnor19.¤\Gy¤: $p\Gy q$.\cr
+\+\hsnor5.¤\G>¤: $\G>p$.&
+\hsnor20.¤\Ge¤: $p\Ge q$.\cr
+\+\hsnor6.¤\GU¤: $\GUorg p$ (or $\GU p$).&
+\hsnor21.¤\Gc¤: $p\Gc q$.\cr
+\+\hsnor7.¤\Gn¤: $\Gnorg u$ (or $\Gn u$).&
+\hsnor22.¤\Gmf¤: $p\Gmf q$.\cr
+\+\hsnor8.¤\G0¤: $\G0$.&
+\hsnor23.¤\G*¤: $\G*t$.\cr
+\+\hsnor9.¤\G1¤: $\G1$.&
+\hsnor24.¤\G6¤: $\G6s$.\cr
+\+\hsnor10.¤\Gbf¤ or ¤\Gff¤: $\Gbf$.&
+\hsnor25.¤\Gf¤: $\Gf s$.\cr
+\+\hsnor11.¤\G-¤: $\G-q$.&
+\hsnor26.¤\GF¤: $s\GF u$.\cr
+\+\hsnor12.¤\G~¤: $\G~q$.&
+\hsnor27.¤\Gl¤: $s\Gl u$.\cr
+\+\hsnor13.¤\G_¤: $p\G_q$.&
+\hsnor28.¤\Gp¤: $\Gp s$.\cr
+\+\hsnor14.¤\Guu¤: $\Guu$.&
+\hsnor29.¤\Gss¤ or ¤\Gsz¤: $s\Gss p$.\cr
+\+\hsnor15.¤\G;¤: $o\G;a$.\cr
+
+\noindent
+The symbols are constructed with the Computer Modern
+and \AmSTeX\ fonts. But with the external flag ¤\fgefontsknown¤ the
+second symbol in numbers 6 and 7 is selected (see Section~3).
+
+Several symbols are rotated and this requires the package {\tt
+rotate.tex}. The output of unrotated symbols is activated by default;
+the external flag ¤\let\showrotation=t¤ must be given to activate
+rotation (see Section~3).
+\toggleGGstyle
+
+
+% %%%%%%%%%%%
+\beginsection 14. Typesetting definitions
+
+The following command is provided to typeset definitions:
+\smallskip
+\item{1.}¤\gfdefinition p<n><J> <j>{<f>}=<e>¤ outputs the formula
+¤\frege<j>{<f>}¤ in parentheses and sets it equal to the new symbol
+{\tt<e>} if the parameter {\tt<J>} is either {\tt|} to type a judgment
+or {\tt.}\ for a definition. In the style of the {\it Grundgesetze\/}
+the parameter {\tt<J>} can also be {\tt:}. In this case write ¤<j><f>¤
+and this is interpreted as a math formula and not as a formula created
+by ¤\frege¤. The parameter {\tt<n>} is the position parameter to move
+the output the given amount of units to the right.
+
+\noindent
+The output of a definition depends on the style.
+
+\Example{11}
+The definition in formula~69 of the {\it Begriffsschrift\/} is:
+\smallskip
+\def\1#1{{\gfvererbe\kd\ka{#1(\ka)}{f(\kd,\ka)}}}
+\gfdefinition p4. .{*.d.{..{*.a.{..{F(\da)}.{{f(\dd,\da)}}}}.{F(\dd)}}}={\1F}
+\smallskip
+In the style of the {\it Grundgesetze\/} the output is:
+\smallskip
+\toggleGGstyle
+\def\1#1{{\gfvererbe\kd\ka{#1(\ka)}{f(\kd,\ka)}}}
+\gfdefinition p4. .{*.d.{..{*.a.{..{F(\da)}
+ .{{f(\dd,\da)}}}}
+ .{F(\dd)}}}={\1F}
+\toggleGGstyle
+\smallskip
+And here is the source (note that ¤\1¤ is a normal macro and needs no
+macro expansion):
+\verbatim
+\def\1#1{{\gfvererbe\kd\ka{#1(\ka)}{f(\kd,\ka)}}}
+\gfdefinition p4. .{*.d.{..{*.a.{..{F(\da)}
+ .{{f(\dd,\da)}}}}
+ .{F(\dd)}}}={\1F}
+\endverbatim\Eend1
+
+\Example{12}
+Here is an example of the {\it Grundgesetze}, in which the {\tt<J>} is
+a colon.
+\smallskip
+\advance\rightskip by 2\rightskip
+\toggleGGstyle
+\gfdefinition p4: \kesl(o\G^(a\G^\ke))={o\G;a}
+\named "$\gX$"
+\toggleGGstyle
+\smallskip
+\rightskip=\leftskip
+And this is the source:
+\verbatim
+\gfdefinition p4: \kesl(o\G^(a\G^\ke))={o\G;a}
+\named "$\gX$"
+\endverbatim\Eend1
+
+
+% %%%%%%%%%%%
+\beginsection 15. Commands to improve page breaks
+
+The formulas are never broken. A page or column break must appear
+at a decollator, separator, or after an inference rule. To gain some
+space the formulas can be typeset in a smaller height and depth.
+(¤\offinterlineskip¤ should be set.)
+\smallskip
+\item{1.}¤\gfbssetzeabstand<h><d>¤ sets the height and depth between the lines to
+{\tt<h>}\thinspace pt and {\tt<d>}\thinspace pt, resp.;
+\item{2.}¤\gfbsreduziereabstandum<nn>¤ reduces the height and depth each by {\tt<nn>}\%
+({\tt<nn>} is a two-digit number);
+\item{3.}¤\gfbsabstandzuruecksetzen¤ sets height and depth to the values of ¤\strutbox¤.
+
+\Example{13}
+The right formula uses ¤\gfbsreduziereabstandum20¤:
+\smallskip
+\begingroup
+\offinterlineskip
+\setbox0=\hbox to .3\hsize{\vtop to 30pt{%
+ \nlp4\*_[-\*-:-\*---\ce{$a$}
+ \nlp4\*___\*_'-\*-:-\ce{$c$}
+ \nlp4\*___\*___\*_'-\ce{$e$}\vss}\hss}
+\setbox1=\hbox to .3\hsize{\vtop to 30pt{%
+ \nlp1\*_[-\*-:-\*---\ce{$a$}
+ \gfbsreduziereabstandum20
+ \nlp1\*___\*_'-\*-:-\ce{$c$}
+ \nlp1\*___\*___\*_'-\ce{$e$}\vss}\hss}
+\centerline{\box0 \box1 }
+\gfbsabstandzuruecksetzen
+\endgroup
+
+And this is the code:
+\verbatim
+\offinterlineskip
+\setbox0=\hbox to .3\hsize{\vtop to 30pt{%
+ \nlp4\*_[-\*-:-\*---\ce{$a$}
+ \nlp4\*___\*_'-\*-:-\ce{$c$}
+ \nlp4\*___\*___\*_'-\ce{$e$}\vss}\hss}
+\setbox1=\hbox to .3\hsize{\vtop to 30pt{%
+ \nlp1\*_[-\*-:-\*---\ce{$a$}
+ \gfbsreduziereabstandum20
+ \nlp1\*___\*_'-\*-:-\ce{$c$}
+ \nlp1\*___\*___\*_'-\ce{$e$}\vss}\hss}
+\centerline{\box0 \box1 }
+\gfbsabstandzuruecksetzen
+\endverbatim\Eend1
+
+
+% %%%%%%%%%%%
+\beginsection 16. List of parameters
+
+Nearly all aspects of the lines that build the structure of Frege's
+notation is controlled by parameters. They can be changed to fit
+better with a certain type of font. But note that a couple of tests
+have been made with these values to guarantee, for example, that the
+affirmation can be placed in front of a quantification.\\
+
+\noindent
+Here is the list of registers that make up the style of the
+{\it Begriffsschrift}.
+\item{1.}$¤\gfbsvolleeinheit¤=\rm0.57\,em$; width of one ¤\*¤ triple
+\item{2.}$¤\gfbsraise¤=\rm0.5\,ex$; height of the horizontal line
+\item{3.}$¤\gfbsneg¤=\rm0.25\,ex$; height of the negation indicator
+\item{4.}$¤\gfbsstrichdicke¤=\rm0.5\,pt$; thickness of the horizontal line
+\item{5.}$¤\gfbsurteildicke¤=\rm1\,pt$; thickness of the judgment stroke\\
+\item{6.}$¤\gfbsuht¤=\rm1.5\,ex$; height of the judgment stroke\\
+\item{7.}$¤\gfbsudp¤=\rm0.5\,ex$; depth of the judgment stroke\\
+\item{8.}$¤\gfbsersetzungdicke¤=\rm0.8\,pt$; thickness of the substitution line\\
+\item{9.}$¤\gfbsdefdicke¤=\rm0.75\,pt$; thickness of the definition strokes
+\item{10.}$¤\gfbsschlussabstand¤=\rm2.5\,pt$; distance of double lines in an inference
+\item{11.}$¤\gfbsschlussdicke¤=\rm0.8\,pt$; thickness of the second line in an inference
+\item{12.}$¤\gfbsdpabstand¤=\rm0.2\,em$; distance between colons in front of an inference
+\smallskip
+\item{13.}$¤\gfbsmaxanzahlzeilen¤=25$; the maximal amount of lines
+in a single formula of the short form (the package declares for each
+line one or two token and skip registers; two registers of each kind
+are needed if substitutions are allowed);
+\item{14.}$¤\gfbsnegpct¤=70$; when ¤\ifgfbsnegdirect¤ is set to false the negation
+indicator has only a height of this percentage so that a gap occurs.
+\smallskip
+\noindent
+And this is the list of additional dimen parameters for the style of
+the {\it Grundgesetze}.
+\item{15.}$¤\gfggstrichdicke¤=\rm0.58\,pt$; common line thickness
+\item{16.}$¤\gfggraise¤=\rm0.14\,ex$; height of horizontal line
+\item{17.}$¤\gfggneg¤=\rm0.47\,ex$; height of negation indicator
+\item{18.}$¤\gfgguht¤=\rm1.4\,ex$; height of the judgment stroke
+\item{19.}$¤\gfggudp¤=\rm0.9\,ex$; depth of the judgment stroke
+\item{20.}$¤\gfggdpabstand¤=\rm0.06\,em$; distance between colons in front of an inference
+
+
+% %%%%%%%%%%%
+\beginsection 17. Related work
+
+Other people have worked on the problem to typeset Frege's notation
+in \TeX\ too. J.~Parsons has developed a package {\it begriff.sty\/}
+for \LaTeX\ (see [7]). Later the package was improved by
+Q.~Pamp~([8]). A team that translated the {\it Grundgesetze\/} created
+its own package from {\it begriff.sty\/} and called it {\it
+grundgesetze.sty\/} (see [9]). It uses the fonts [5] that J.~J.~Green
+has developed for the special terminal symbols in the {\it
+Grundgesetze}.
+
+
+% %%%%%%%%%%%
+\beginsection 18. References
+
+\raggedright\frenchspacing
+\item{[1]}Gottlob Frege,
+ {\sl Begriffsschrift, eine der arithmetischen nachgebildete Formelsprache
+ des reinen\hfil\break Denkens\/}
+ (Halle an der Saale: Louis Nebert, 1879)
+\item{}``Begriffsschrift, a formula language, modeled upon that of arthmetic, for
+ pure thought,'' in: Jean van Heijenoort (ed.),
+ {\sl From Frege to G\"odel: A Sourcebook in Mathematical Logic,
+ 1879--1931\/},\hfil\break(Cambridge, MA: Harvard University Press, 1967), 1--82;
+ translation by S. Bauer-Mengelberg
+
+\item{[2]}Gottlob Frege,
+ {\sl Grundgesetze der Arithmetik --- begriffsschriftlich abgeleitet\/}
+ (Jena: Hermann Pohle, Volume 1 1893, Volume 2 1903)
+\item{}{\sl Basic Laws of Arithmetic\/} (Oxford: Oxford Univ. Press, 2013);
+ translation by Philip A. Ebert, Marcus Rossberg, Crispin Wright
+
+\item{[3]}American Mathematical Society, {\tt amstex},
+ ¤http://www.ams.org/publications/authors/tex/tex¤ or
+ ¤http://www.ctan.org/tex-archive/macros/amstex¤
+ (accessed: 2014-11-29)
+
+\item{[4]}{\tt rotate},
+ ¤http://www.ctan.org/tex-archive/macros/plain/contrib/misc¤
+ (accessed: 2014-11-29)
+
+\item{[5]}J. J. Green, {\tt fge},
+ ¤http://www.ctan.org/tex-archive/fonts/fge¤
+ (accessed: 2014-11-29)
+
+\item{[6]}Silvio Levy, ``Using Greek fonts with \TeX,''
+ TUGboat {\bf 9,1} (1988), 20--24
+
+\item{[7]}Josh Parsons, {\tt begriff.sty},
+ ¤http://www.ctan.org/tex-archive/macros/latex/contrib/begriff¤
+ (accessed: 2014-11-29)
+
+\item{[8]}Quirin Pamp, {\tt frege.sty},
+ ¤http://www.ctan.org/tex-archive/macros/latex/contrib/frege¤
+ (accessed: 2014-11-29)
+
+\item{[9]}Marcus Rossberg, {\tt grundgesetze.sty},
+ ¤http://www.ctan.org/tex-archive/macros/latex/contrib/¤\hfil\break¤grundgesetze¤
+ (accessed: 2014-11-29)
+
+\bye
+% Local Variables:
+% coding: iso-latin-9-unix
+% End:
diff --git a/macros/plain/contrib/gfnotation/GFnotation.tex b/macros/plain/contrib/gfnotation/GFnotation.tex
new file mode 100644
index 0000000000..0b861634fe
--- /dev/null
+++ b/macros/plain/contrib/gfnotation/GFnotation.tex
@@ -0,0 +1,2175 @@
+% This file is part of the CTAN package named gfnotation.
+%
+% GFnotation.tex: typeset G. Frege's notation of the Begriffsschrift or
+% the Grundgesetze der Arithmetik in plain TeX
+%
+% Copyright (C) 2015 Udo Wermuth (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 3 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, see <http://www.gnu.org/licenses/>.
+\message{[(GFnotation.tex) Version 2.9 --- 29.03.2015 10:45]}
+% Werte für den Stil der Begriffsschrift
+% die Weite eines \*-Makroteils (Voreinstellung 0.57 em)
+\newdimen\gfbsvolleeinheit \gfbsvolleeinheit = 0.57 em
+% die Höhe der horizontalen Striche (Voreinstellung 0.5 ex)
+\newdimen\gfbsraise \gfbsraise = 0.5 ex
+% die Höhe des Negationstriches (Voreinstellung 0.25 ex)
+\newdimen\gfbsneg \gfbsneg = 0.25 ex
+% die Dicke der horizontalen Striche (Voreinstellung 0.5 pt)
+\newdimen\gfbsstrichdicke \gfbsstrichdicke = 0.5 pt
+% die Dicke des Urteilsstrichs (Voreinstellung 0.1 em)
+\newdimen\gfbsurteildicke \gfbsurteildicke = 0.1 em
+% die Höhe (ohne Strichdicke) (Voreinstellung 1.5 ex)
+\newdimen\gfbsuht \gfbsuht = 1.5 ex
+% die Tiefe des Urteilsstrichs (Voreinstellung 0.5 ex)
+\newdimen\gfbsudp \gfbsudp = 0.5 ex
+% die Dicke des Ersetzungsstrichs (Voreinstellung 0.08 em)
+\newdimen\gfbsersetzungdicke \gfbsersetzungdicke = 0.08 em
+% die Dicke eines Definitionsstrichs (Voreinstellung 0.075 em)
+\newdimen\gfbsdefdicke \gfbsdefdicke = 0.075 em
+% der Abstand der Striche bei Schlussketten (Voreinstellung 2.5 pt)
+\newdimen\gfbsschlussabstand \gfbsschlussabstand = 2.5 pt
+% und die Dicke des dickeren Striches (Voreinstellung 0.8 pt)
+\newdimen\gfbsschlussdicke \gfbsschlussdicke = 0.8 pt
+% der Abstand in Schlussweisen zwischen Doppelpunkten
+\newdimen\gfbsdpabstand \gfbsdpabstand = 0.2 em
+% Werte für den Grundgesetzestil
+% Einheitsstrichdicke (Voreinstellung 0.58 pt)
+\newdimen\gfggstrichdicke \gfggstrichdicke = 0.58 pt
+% Höhe des Inhaltsstriches (Voreinstellung 0.14 ex)
+\newdimen\gfggraise \gfggraise = 0.14 ex
+% Höhe Negationszeichen (Voreinstellung 0.47 ex)
+\newdimen\gfggneg \gfggneg = 0.47 ex
+% Höhe des Urteilsstriches (Voreinstellung 1.4 ex)
+\newdimen\gfgguht \gfgguht = 1.4 ex
+% Tiefe des Urteilstriches (Voreinstellung 0.9 ex)
+\newdimen\gfggudp \gfggudp = 0.9 ex
+% der Abstand in Schlussweisen zwischen Doppelpunkten
+\newdimen\gfggdpabstand \gfggdpabstand = 0.06 em
+% Prozentangabe für die Höhe eines kurzen Negationsstrichs
+\newcount\gfbsnegpct \gfbsnegpct=70
+% Die kompakte Notation benötigt für die Zeilen Register
+\newcount\gfbsmaxanzahlzeilen \gfbsmaxanzahlzeilen=25
+%
+% ab hier keine Änderungen vornehmen (außer am Ende Buchstaben)
+%
+% Setze folgendes Zeichen für Zeilenumbruch in Meldungen ein
+\newlinechar=`\^^J
+% Substitutionen können unterdrückt werden
+\newif\ifgfbskeinesubst
+\ifx t\nosubst
+ \message{^^JOK, substitutions are disabled^^J}%
+ \gfbskeinesubsttrue
+\else
+ \gfbskeinesubstfalse
+\fi
+\newif\ifggsymloaded
+\ifx t\fgefontsknown
+ \message{^^JThe family ggfam with the fge-fonts is active.^^J}%
+ \ggsymloadedtrue
+\else
+ \ggsymloadedfalse
+\fi
+\newif\ifggrotiere
+\ifx t\showrotation
+ \ggrotieretrue
+\else
+ \message{^^JRotated symbols are shown unrotated.^^J}%
+ \ggrotierefalse
+\fi
+\catcode`@=11
+\def\mynewfam{\alloc@8\fam\chardef\sixt@@n}
+\catcode`@=12
+\ifggsymloaded
+ \font\tengg=fgerm10 \font\tenggi=fgeit10
+ \font\ninegg=fgerm10 at 9pt \font\nineggi=fgeit10 at 9pt
+ \font\eightgg=fgerm10 at 8pt \font\eightggi=fgeit10 at 8pt
+ \mynewfam\ggfam
+\fi
+\font\nineeufm=eufm9
+\font\eighteufm=eufm8
+\font\sixeufm=eufm6
+\font\tencmmib=cmmib10 \skewchar\tencmmib='177
+\font\ninecmmib=cmmib9 \skewchar\ninecmmib='177
+\font\eightcmmib=cmmib8 \skewchar\eightcmmib='177
+\font\sevencmmib=cmmib7 \skewchar\sevencmmib='177
+\font\sixcmmib=cmmib6 \skewchar\sixcmmib='177
+\font\fivecmmib=cmmib5 \skewchar\fivecmmib='177
+\expandafter\ifx\csname cmmibfam\endcsname\relax
+ \mynewfam\cmmibfam
+\else
+ \message{^^JThe family cmmibfam is already defined.^^J}%
+\fi
+\font\tencmbsy=cmbsy10 \skewchar\tencmbsy='60
+\font\ninecmbsy=cmbsy9 \skewchar\ninecmbsy='60
+\font\eightcmbsy=cmbsy8 \skewchar\eightcmbsy='60
+\font\sevencmbsy=cmbsy7 \skewchar\sevencmbsy='60
+\font\sixcmbsy=cmbsy6 \skewchar\sixcmbsy='60
+\font\fivecmbsy=cmbsy5 \skewchar\fivecmbsy='60
+\expandafter\ifx\csname cmbsyfam\endcsname\relax
+ \mynewfam\cmbsyfam
+\else
+ \message{^^JThe family cmbsyfam is already defined.^^J}%
+\fi
+\font\sevenit=cmti7
+\font\sixit=cmti7 at 6pt
+\font\fiveit=cmti7 at 5pt
+\font\twelvei=cmmi10 at 12pt \skewchar\twelvei='177
+\def\hexno#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}
+\newtoks\gftextfontaenderung
+\newdimen\ufdimi \newdimen\ufdimii
+\def\bstenpoint{%
+ \scriptfont\itfam=\sevenit
+ \scriptscriptfont\itfam=\fiveit
+ \textfont\eufmfam=\teneufm
+ \scriptfont\eufmfam=\seveneufm
+ \scriptscriptfont\eufmfam=\fiveeufm
+ \textfont\cmmibfam=\tencmmib
+ \scriptfont\cmmibfam=\sevencmmib
+ \scriptscriptfont\cmmibfam=\fivecmmib
+ \textfont\cmbsyfam=\tencmbsy
+ \scriptfont\cmbsyfam=\sevencmbsy
+ \scriptscriptfont\cmbsyfam=\fivecmbsy
+ \ifggsymloaded
+ \textfont\ggfam=\tengg
+ \fi
+ \font\ffont=cmdunh10 at 8pt \font\nfont=cmsl12
+ \font\ufont=cmdunh10 at 9pt {\ufont\global\ufdimi=0.07em \global\ufdimii=0.5ex }%
+ \gftextfontaenderung={\textfont1=\twelvei \textfont\msbfam=\sevenmsb
+ \ifggsymloaded\textfont\ggfam=\tenggi\fi}}
+\def\bsninepoint{%
+ \scriptfont\itfam=\sixit
+ \scriptscriptfont\itfam=\fiveit
+ \textfont\eufmfam=\nineeufm
+ \scriptfont\eufmfam=\sixeufm
+ \scriptscriptfont\eufmfam=\fiveeufm
+ \textfont\cmmibfam=\ninecmmib
+ \scriptfont\cmmibfam=\sixcmmib
+ \scriptscriptfont\cmmibfam=\fivecmmib
+ \textfont\cmbsyfam=\ninecmbsy
+ \scriptfont\cmbsyfam=\sixcmbsy
+ \scriptscriptfont\cmbsyfam=\fivecmbsy
+ \ifggsymloaded
+ \textfont\ggfam=\ninegg
+ \fi
+ \font\ffont=cmdunh10 at 7pt \font\nfont=cmsl10 at 11pt
+ \font\ufont=cmdunh10 at 8pt {\ufont\global\ufdimi=0.11em \global\ufdimii=0.6ex }%
+ \gftextfontaenderung={\textfont1=\twelvei\textfont\msbfam=\sixmsb
+ \ifggsymloaded\textfont\ggfam=\nineggi\fi}}
+\def\bseightpoint{%
+ \scriptfont\itfam=\sixit
+ \scriptscriptfont\itfam=\fiveit
+ \textfont\eufmfam=\eighteufm
+ \scriptfont\eufmfam=\sixeufm
+ \scriptscriptfont\eufmfam=\fiveeufm
+ \textfont\cmmibfam=\eightcmmib
+ \scriptfont\cmmibfam=\sixcmmib
+ \scriptscriptfont\cmmibfam=\fivecmmib
+ \textfont\cmbsyfam=\eightcmbsy
+ \scriptfont\cmbsyfam=\sixcmbsy
+ \scriptscriptfont\cmbsyfam=\fivecmbsy
+ \ifggsymloaded
+ \textfont\ggfam=\eightgg
+ \fi
+ \font\ffont=cmdunh10 at 6pt \font\nfont=cmsl10
+ \font\ufont=cmdunh10 at 7pt {\ufont\global\ufdimi=0.16em \global\ufdimii=0.6ex }%
+ \gftextfontaenderung={\textfont1=\teni\textfont\msbfam=\fivemsb
+ \ifggsymloaded\textfont\ggfam=\eightggi\fi}}
+\bstenpoint
+\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.075em S$-\TeX}
+\newhelp\gfbskeinbuchstabeinhoehlunghilfe{%
+Either in the current or in the previously typed \string\* macro you must have^^J%
+used as the last symbol one of (1) \string$, %$%
+(2) \string., (3) \string,, (4) \string;,^^J%
+(5) \string`, (6) 7, or (7) \string @ and now a character is expected that is^^J%
+used as the variable for the ``for all''.}
+\newhelp\gfbsunbekanntessymbolhilfe{%
+The shown character is not handled by the \string\* macro.^^J%
+Here is the list of allowed characters:^^J%
+(1) \string" (nothing), (2) \string_ (empty box), (3) \string- (content stroke),^^J%
+(4) \string<, \string(, \string~, \string), or \string> (negation),
+(5) \string+, \string^, or \string/ (double negation),^^J%
+(6) \string: (then), (7) \string' (if), (8) \string! (connector then-if),^^J%
+(9) \string[ (judgement left), (10) \string] (judgement right),^^J%
+(11) \string| (substitution bar), (12) \string= (double inference rule),^^J%
+(13) \string. (half \string-), (14) \string, (half \string~), ^^J%
+(15) \string` (half \string~ moved left), (16) \string; (half \string+),^^J%
+(17) \string @ (for all), (18) \string$ (either \string. or half \string"),^^J% $
+(19) 0 (either \string( or \string)), (20) 1 (either \string^ or \string/),
+(21) 2 (either \string^ or \string+),^^J%
+(22) 3 , (23) 4 (either \string- or \string"),^^J%
+(24) 5 (either \string_ or \string"), (25) 6 (either \string[ or \string]),
+(26) 7 (either \string` or \string,),^^J%
+(27) 8 (either \string< or \string~), (28) 9 (only 1/3 of \string-).^^J%
+(13)-(16), and (26) signal a ``for all'' and must be paired^^J%
+(any combination allowed).^^J%
+(18) signals also a ``for all'' and must be paired with itself.}
+\newhelp\gfbshaelftehilfe{%
+After a signaled ``for all'' one of (1) \string., (2) \string,, (3) \string;,^^J%
+(4) \string`, or (5) 7 must directly follow the variable. These symbols must be^^J%
+paired in any combination around the character that is used as the^^J%
+variable in the ``for all''.}
+\newhelp\gfbsklammerhilfe{%
+A ``for all'' was signaled by a dollar sign. This must be followed by^^J%
+a dollar sign. The other symbols to signal the end of a ``for all''^^J%
+cannot be used here, that is \string., \string,, \string`, or \string; are not allowed.}
+\newhelp\gfggschlussweisehilfe{%
+The `\string?' cannot be used if the style is set to follow the Begriffsschrift.^^J%
+Either the style for the Grundgesetze must be used or the `\string?' sign has to^^J%
+be invoked: You have to set `\string\gfggschlussweisetrue' to use this command.^^J%
+You can activate the style of the Grundgesetze with the command \string\toggleGGstyle.}
+\newhelp\gfbszwischenzeichenhilfe{%
+A character for a single conclusion sign must be introduced by a `\string>'.^^J%
+The character was found but no `\string>' has been read before.}
+\newhelp\gfbszwischenzeichenfehlthilfe{%
+You have entered a `\string>' so that the next conclusion symbol must be^^J%
+either an `x' or an `u'.}
+\newhelp\gfbsunbekannterschlusshilfe{%
+The symbol is not allowed in a \string\*? macro. Here is a list of known symbols:^^J%
+(1) \string_ (empty box), (2) \string" (nothing), (3) \string- (single line),^^J%
+(4) \string. (single dot), (5) \string= (double line),^^J%
+(6) \string* (line and empty box as double line),^^J%
+(7) \string> (signal single character), (8) x (cross), and (9) u (brace).^^J%
+(8) and (9) must be signaled by (7).}
+\newhelp\gfbsnegwdhhilfe{%
+The repetition needs a nonnegative counter to output the^^J%
+text parameters. The negative value is ignored.}
+\newhelp\gfbspositionunbekannthilfe{%
+To position the formula number use either l for left, m for middle,^^J%
+or r for right.}
+\newhelp\gfbsdoppelpunkthilfe{%
+The number of colons (one or two) is given by the number of periods:^^J%
+the period gives one colon, the colon two.}
+\newhelp\gfbszuvieleparameterhilfe{%
+A statement has only three parameters. But here you have used more.^^J%
+The parameter is ignored but it might belong to the next construction^^J%
+and can cause more errors if the grouping was not correct.}
+\newhelp\gfbsfalschesvzhilfe{%
+A sign must be one of (1) \string-, (2) \string+, or (3) \string..^^J%
+They have the meaning negation, confirmation (double negation), and no sign, resp.}
+\newhelp\gfbskeinbuchstabeanhoehlungspositionhilfe{%
+A ``for all'' variable must be a letter.^^J%
+Other error messages from building the \string\*-macros will follow.}
+\newhelp\gfbsfalscherstarthilfe{%
+A formula must start either with `\string|' or `\string.'.^^J%
+The second parameter to \string\formel\space must be one of these characters.}
+\newhelp\gfbsnurterminalhilfe{%
+Only a terminal string was entered, no valid Frege formula found.}
+\newhelp\gfbsnurnullinaushilfe{%
+As substitutions are disabled, a number can only be written in the^^J%
+first line of a formula. The input is ignored and 0 is used instead.}
+\newhelp\gfbskeinesubsthilfe{%
+The last parameter is substitution information and should be empty.^^J%
+You have disabled the use of substitutions in the compact notation^^J%
+by asigning the value ``t'' to \string\nosubst. Don't make this setting^^J%
+before the package is loaded if you need substitutions.}
+\newhelp\gfbsleeresubsthilfe{%
+You cannot substitute a character by a space. Probably some space occurs^^J%
+directly after the colon that should be removed.}
+\newhelp\gfbszweiteposzugrosshilfe{%
+The position for the formel number must be to the left^^J%
+of the postition of the line. Assuming a small positive distance.}
+\newhelp\gfbskeinelaengehilfe{%
+The line denoting the conclusion can only be drawn if it^^J%
+has a positive length. More errors will follow.}
+\newhelp\gfbsdoppelpunktzahlhilfe{%
+The third symbol must be either a period or a colon to^^J%
+give the number of colons. More erros will follow.}
+\newhelp\gfbsposabstandhilfe{%
+The p-parameter of the substitution is not smaller than the^^J%
+p-parameter of the formula. A small distance is assumed, but^^J%
+that might result in a wrong output.}
+\newhelp\ggunbekannteboxnummer{%
+There are four boxes for \string\pfrege\space and \string\pparens, and^^J%
+four boxes for \string\bfrege\space and \string\bparens.^^J%
+To output a box \string\pfbox\space and \string\bfbox\space are used.^^J%
+The listed macros need as the first parameter a number^^J%
+in the range 1 and 4. Other numbers are ignored.}
+\newhelp\ggkeinbekanntessymbol{%
+Macro \string\G\space does not know how to handle the argument.}
+\newhelp\ggkeinvokalbuchstabe{%
+For a value-range the spiritus lenis must be applied to a^^J%
+lowercase greek vowel (\string\alpha, \string\epsilon).^^J%
+The greek letter is given as the argument of the macro and^^J%
+must be expresssed here by its latin representation,^^J%
+f.e., a for \string\alpha. Other letters are rejected.}
+% \ff ist der Formelnummernfont
+\let\ff=\rm
+\newdimen\gfbssdicke \newdimen\gfbsudicke
+\newdimen\gfbsddicke
+\newdimen\gfbsedicke \newdimen\gfbsfdicke
+\newdimen\gfbshoehe
+\newdimen\gfbsneght \newdimen\gfbsnegdp
+\gfbssdicke=\gfbsstrichdicke \gfbsudicke=\gfbsurteildicke
+\gfbsddicke=\gfbsdefdicke
+\gfbsedicke=\gfbsersetzungdicke \gfbsfdicke=\gfbsschlussdicke
+\gfbshoehe=\gfbsraise \gfbsnegdp=\gfbsneg
+% die Überlappung der Striche an den Fugen
+\newdimen\gfbsueberlappung \gfbsueberlappung = -0.001 em
+% eine \gfbseinheit ist um die Überlappung kleiner als die volle Einheit
+\newdimen\gfbseinheit \gfbseinheit = \gfbsvolleeinheit
+ \advance\gfbseinheit by \gfbsueberlappung
+% für zwei Einheiten wird ebenfalls ein Wert benötigt
+\newdimen\gfbszweiheit \gfbszweiheit = 2\gfbsvolleeinheit
+ \advance\gfbszweiheit by \gfbsueberlappung
+% aus drei Teilen wird ein Element erzeugt
+\newdimen\gfbselementdimen \gfbselementdimen = 3\gfbseinheit
+% die Gesamthöhe der horizontalen Striche
+\newdimen\gfbsht \newdimen\gfgght
+\gfbsht=\gfbshoehe \advance\gfbsht by \gfbssdicke \gfgght=\gfbsht
+% \gfbsrulefill ändert sich mit dem Stil, \gfggrulefill bleibt konstant
+\def\gfbsrulefill{\leaders\hrule height \gfbsht depth -\gfbshoehe\hfill}
+\def\gfggrulefill{\leaders\hrule height \gfgght depth -\gfbsraise\hfill}
+% die Strichdicke noch beim Urteilsstrich addieren
+\newdimen\gfbsfuht \newdimen\gfbsfudp
+\gfbsfuht=\gfbsuht \advance\gfbsfuht by \gfbssdicke
+\gfbsfudp=\gfbsudp
+% die Position der Schlussstriche berechnen
+\newdimen\gfbsos \newdimen\gfbsus
+\gfbsos=\gfbsschlussabstand \advance\gfbsos by \gfbsfdicke
+\gfbsus=\gfbsos \advance\gfbsus by -\gfbssdicke
+% und der Abstand bei Doppelpunkten
+\newdimen\gfbsdpa
+\gfbsdpa=\gfbsdpabstand
+\def\gfbsneuestriche{%
+ \ifgfbsuseGGstyle
+ \global\gfbssdicke=\gfggstrichdicke
+ \global\gfbsudicke=\gfggstrichdicke
+ \global\gfbsddicke=\gfggstrichdicke
+ \global\gfbsedicke=\gfggstrichdicke
+ \global\gfbsfdicke=\gfggstrichdicke
+ \global\gfbshoehe=\gfggraise
+ \global\gfbsnegdp=\gfggneg
+ \global\gfbsfuht=\gfgguht
+ \global\gfbsfudp=\gfggudp
+ \global\gfbsdpa=\gfggdpabstand
+ \else
+ \global\gfbssdicke=\gfbsstrichdicke
+ \global\gfbsudicke=\gfbsurteildicke
+ \global\gfbsddicke=\gfbsdefdicke
+ \global\gfbsedicke=\gfbsersetzungdicke
+ \global\gfbsfdicke=\gfbsschlussdicke
+ \global\gfbshoehe=\gfbsraise
+ \global\gfbsnegdp=\gfbsneg
+ \global\gfbsfuht=\gfbsuht
+ \global\gfbsfudp=\gfbsudp
+ \global\gfbsdpa=\gfbsdpabstand
+ \fi
+ \global\gfbsht=\gfbshoehe
+ \global\advance\gfbsht by \gfbssdicke
+ \gdef\gfbsrulefill{\leaders\hrule height \gfbsht depth -\gfbshoehe\hfill}%
+ \global\advance\gfbsfuht by \gfbssdicke
+ \global\gfbsos=\gfbsschlussabstand \global\advance\gfbsos by \gfbsfdicke
+ \global\gfbsus=\gfbsos \global\advance\gfbsus by -\gfbssdicke
+}
+\newif\ifgfbsuseGGstyle \gfbsuseGGstylefalse
+% true falls der Negationsstrich den Inhaltsstrich berühren soll
+\newif\ifgfbsnegdirekt \gfbsnegdirektfalse
+\newif\ifgfbshoehlung \gfbshoehlungfalse
+\newif\ifgfbskompakt \gfbskompaktfalse
+\newif\ifgfbszweitehaelfte \gfbszweitehaelftefalse
+\newif\ifgfbsklammerzu \gfbsklammerzufalse
+\newif\ifgfggschlussweise \gfggschlussweisefalse
+\newif\ifgfbszwischenzeichen
+\mathchardef\diagup="0\hexno\msbfam1E
+\mathchardef\diagdown="0\hexno\msbfam1F
+\newdimen\gfbsfonosenken
+\newbox\gfbsbox \newdimen\gfbsboxht \newdimen\gfbsboxdp
+\newif\ifgfbsfonoohnepunkt \gfbsfonoohnepunktfalse
+\newbox\ggpboxi \newbox\ggbboxi % Boxen für \pfrege und \bfrege
+\newbox\ggpboxii \newbox\ggbboxii
+\newbox\ggpboxiii \newbox\ggbboxiii % und für \pparens und \bparens
+\newbox\ggpboxiv \newbox\ggbboxiv
+\def\gfbsteilelement#1{%
+ \ifgfbshoehlung % Zeichen in eine Höhlung setzen (1. \fi)
+ \ifcat \noexpand#1a\else
+ \errhelp=\gfbskeinbuchstabeinhoehlunghilfe
+ \errmessage{A ``for all'' variable must be a letter not `\string#1'}%
+ \fi
+ \ifdim\gfbssdicke<0.59 pt
+ \setbox0=\hbox{$\mathchar"015E$}% plain \TeX Vorgabe
+ \else
+ \setbox0=\hbox{$\mathchar"0\hexno\cmmibfam5E$}%
+ \fi
+ \dimen0 = \gfbseinheit \advance\dimen0 by -0.5\wd0
+ \dimen2 = \wd0 \divide\dimen2 by 18 \advance\dimen0 by 1.5\dimen2
+ \hbox to \gfbszweiheit{%
+ \hbox to\dimen0{\gfbsrulefill}%
+ \kern-1.2\dimen2
+ \raise\gfbshoehe\hbox{%
+ \lower\ht0\hbox{%
+ \ifx#1ß$\buildrel{\the\dsz}\over{\box0}$%
+ \else$\buildrel{{\frak #1}}\over{\box0}$%
+ \fi
+ }%
+ }%
+ \nobreak
+ \kern-1.5\dimen2
+ \gfbsrulefill
+ }%
+ \kern\gfbsueberlappung
+ \gfbshoehlungfalse
+ \else
+ \ifx #1$%$% halber Inhaltsstrich oder Leerstelle nach Höhlung
+ \ifgfbsklammerzu
+ \gfbsklammerzufalse
+ \else
+ \gfbsklammerzutrue
+ \gfbshoehlungtrue
+ \fi
+ \ifgfbszweitehaelfte
+ \errhelp=\gfbshaelftehilfe
+ \errmessage{Unexpected `\string#1' after signaled ``for all''}%
+ \gfbszweitehaelftefalse
+ \fi
+ \ifgfbskompakt\relax
+ \else
+ \hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
+ \nobreak
+ \fi
+ \else
+ \ifgfbsklammerzu
+ \errhelp=\gfbsklammerhilfe
+ \errmessage{A \string$ expected, not `\string#1'}%$
+ \gfbsklammerzufalse
+ \fi
+ \ifx #1.% halber Inhaltsstrich
+ \hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
+ \nobreak
+ \ifgfbszweitehaelfte
+ \gfbszweitehaelftefalse
+ \else
+ \gfbshoehlungtrue
+ \gfbszweitehaelftetrue
+ \fi
+ \else\ifx #1,% halber verneinter Inhaltsstrich
+ \hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
+ \nobreak
+ \ifgfbszweitehaelfte\hskip-0.3\gfbseinheit
+ \else\hskip-0.2\gfbseinheit\fi
+ \hskip-0.5\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \ifgfbszweitehaelfte\hskip0.3\gfbseinheit
+ \else\hskip0.2\gfbseinheit\fi
+ \ifgfbszweitehaelfte
+ \gfbszweitehaelftefalse
+ \else
+ \gfbshoehlungtrue
+ \gfbszweitehaelftetrue
+ \fi
+ \else\ifx #1`% halber ganz links verneinter Inhaltsstrich
+ \hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
+ \nobreak
+ \hskip-0.5\gfbseinheit
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-\gfbssdicke
+ \hskip0.5\gfbseinheit
+ \ifgfbszweitehaelfte
+ \gfbszweitehaelftefalse
+ \else
+ \gfbshoehlungtrue
+ \gfbszweitehaelftetrue
+ \fi
+ \else\ifx #1;% halber doppelt verneinter Inhaltsstrich
+ \hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
+ \nobreak
+ \ifgfbszweitehaelfte\hskip-0.42\gfbseinheit
+ \else\hskip-0.27\gfbseinheit\fi
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip0.27\gfbseinheit
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \ifgfbszweitehaelfte\hskip0.15\gfbseinheit\fi
+ \ifgfbszweitehaelfte
+ \gfbszweitehaelftefalse
+ \else
+ \gfbshoehlungtrue
+ \gfbszweitehaelftetrue
+ \fi
+ \else\ifx #17% variable Negation
+ \ifgfbskompakt
+ \hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
+ \nobreak
+ \ifgfbszweitehaelfte\hskip-0.3\gfbseinheit
+ \else\hskip-0.2\gfbseinheit\fi
+ \hskip-0.5\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \ifgfbszweitehaelfte\hskip0.3\gfbseinheit
+ \else\hskip0.2\gfbseinheit\fi
+ \else
+ \hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
+ \nobreak
+ \hskip-0.5\gfbseinheit
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-\gfbssdicke
+ \hskip0.5\gfbseinheit
+ \fi
+ \ifgfbszweitehaelfte
+ \gfbszweitehaelftefalse
+ \else
+ \gfbshoehlungtrue
+ \gfbszweitehaelftetrue
+ \fi
+ \else
+ \ifgfbszweitehaelfte
+ \errhelp=\gfbshaelftehilfe
+ \errmessage{Unexpected `\string#1' after signaled ``for all''}%
+ \gfbszweitehaelftefalse
+ \fi
+ \ifx #1"% Leerstelle
+ \relax
+ \else\ifx #1_% leer
+ \hskip\gfbseinheit
+ \else\ifx #1-% Inhaltsstrich
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \else\ifx #1=% Schlusskette
+ \vrule height \gfbsos depth -\gfbsus width \gfbsvolleeinheit
+ \nobreak
+ \hskip-\gfbsvolleeinheit
+ \vrule height \gfbsfdicke depth 0pt width \gfbsvolleeinheit
+ \nobreak
+ \kern\gfbsueberlappung
+ \else
+ \ifx #1~% verneinter Inhaltsstrich
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-0.5\gfbseinheit
+ \hskip-0.5\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \hskip0.5\gfbseinheit
+ \else\ifx #1(% Negation mitte-links
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-0.75\gfbseinheit
+ \hskip-0.5\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \hskip0.75\gfbseinheit
+ \else\ifx #1<% Negation ganz links
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-\gfbseinheit
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-\gfbssdicke
+ \hskip\gfbseinheit
+ \else\ifx #1)% Negation mitte-rechts
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-0.25\gfbseinheit
+ \hskip-0.5\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \hskip0.25\gfbseinheit
+ \else\ifx #1>% Negation ganz rechts
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \else\ifx #1+% doppelter verneinter Inhaltsstrich
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-0.75\gfbseinheit
+ \hskip-0.5\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip0.5\gfbseinheit
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \hskip0.25\gfbseinheit
+ \else\ifx #1^% doppelter verneinter Inhaltsstrich links
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-\gfbseinheit
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip0.5\gfbseinheit
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-\gfbssdicke
+ \hskip0.5\gfbseinheit
+ \else\ifx #1/% doppelter verneinter Inhaltsstrich rechts
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-0.5\gfbseinheit
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip0.5\gfbseinheit
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \else
+ \ifx #1:% dann-Verbindung
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-0.5\gfbseinheit
+ \hskip-0.5\gfbssdicke
+ \vrule width \gfbssdicke height \gfbshoehe
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \hskip0.5\gfbseinheit
+ \else\ifx #1'% wenn-Verbindung
+ \hskip0.5\gfbsvolleeinheit
+ \hskip-0.5\gfbssdicke
+ \vrule width \gfbssdicke depth -\gfbshoehe
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
+ \nobreak
+ \kern0.5\gfbsueberlappung
+ \else\ifx #1!% senkrechter Strich für Verlängerungen zwischen dann und wenn
+ \hskip0.5\gfbseinheit
+ \hskip-0.5\gfbssdicke
+ \vrule width \gfbssdicke
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \hskip0.5\gfbseinheit
+ \else
+ \ifx #1[% Urteilsstrich
+ \smash{\vrule width \gfbsudicke height \gfbsfuht depth \gfbsfudp}%
+ \nobreak
+ \hskip-\gfbsudicke
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \else\ifx #1]% Urteilsstrich rechtsbündig
+ \hskip\gfbseinheit
+ \hskip-\gfbsudicke
+ \smash{\vrule width \gfbsudicke height \gfbsfuht depth \gfbsfudp}%
+ \else\ifx #13% Definitionsstriche rechtsbündig
+ \hskip\gfbseinheit
+ \hskip-4\gfbsddicke
+ \smash{\vrule width \gfbsddicke height \gfbsfuht depth \gfbsfudp}%
+ \nobreak
+ \hskip2\gfbsddicke
+ \smash{\vrule width \gfbsddicke height \gfbsfuht depth \gfbsfudp}%
+ \else\ifx #1|% Ersetzungsstrich
+ \hskip0.5\gfbseinheit
+ \hskip-0.5\gfbsedicke
+ \vrule width \gfbsedicke
+ \nobreak
+ \hskip-0.5\gfbsedicke
+ \hskip0.5\gfbseinheit
+ \else\ifx #1@% Vorbereitung für eine Höhlung
+ \gfbshoehlungtrue
+ \else
+ \ifx #10% Negation mitte-links oder mitte-rechts
+ \ifgfbskompakt
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-0.25\gfbseinheit
+ \hskip-0.5\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \hskip0.25\gfbseinheit
+ \else
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-0.75\gfbseinheit
+ \hskip-0.5\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \hskip0.75\gfbseinheit
+ \fi
+ \else\ifx #11% Doppelte Negation links oder rechts
+ \ifgfbskompakt
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-0.5\gfbseinheit
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip0.5\gfbseinheit
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \else
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-\gfbseinheit
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip0.5\gfbseinheit
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-\gfbssdicke
+ \hskip0.5\gfbseinheit
+ \fi
+ \else\ifx #12% Doppelte Negation links oder zentriert
+ \ifgfbskompakt
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-0.75\gfbseinheit
+ \hskip-0.5\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip0.5\gfbseinheit
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \hskip0.25\gfbseinheit
+ \else
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-\gfbseinheit
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip0.5\gfbseinheit
+ \hskip-\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-\gfbssdicke
+ \hskip0.5\gfbseinheit
+ \fi
+ \else\ifx #14% Inhaltsstrich oder Leerstelle
+ \ifgfbskompakt\relax
+ \else
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \fi
+ \else\ifx #15% leer oder Leerstelle
+ \ifgfbskompakt\relax
+ \else
+ \hskip\gfbseinheit
+ \fi
+ \else\ifx #16% Urteil links- oder rechtsbündig
+ \ifgfbskompakt
+ \hskip\gfbseinheit
+ \hskip-\gfbsudicke
+ \smash{\vrule width \gfbsudicke height \gfbsfuht depth \gfbsfudp}%
+ \else
+ \smash{\vrule width \gfbsudicke height \gfbsfuht depth \gfbsfudp}%
+ \nobreak
+ \hskip-\gfbsudicke
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \fi
+ \else\ifx #18% Negation ganz links oder zentriert
+ \ifgfbskompakt
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-0.5\gfbseinheit
+ \hskip-0.5\gfbssdicke
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-0.5\gfbssdicke
+ \hskip0.5\gfbseinheit
+ \else
+ \hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
+ \nobreak
+ \hskip-\gfbseinheit
+ \ifgfbsnegdirekt
+ \vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
+ \else
+ \gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
+ \vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
+ \fi
+ \nobreak
+ \hskip-\gfbssdicke
+ \hskip\gfbseinheit
+ \fi
+ \else\ifx #19% Drittelstrich
+ \hbox to 0.333333\gfbsvolleeinheit{\gfbsrulefill}\kern0.3333\gfbsueberlappung
+ \nobreak
+ \else\ifx #1*% 5/3 Leerstelle
+ \hskip1.666667\gfbseinheit
+ \else
+ \errhelp=\gfbsunbekanntessymbolhilfe
+ \errmessage{`\string#1' is not allowed in a \string\* macro}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi
+ \fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi
+ \fi
+}
+\let\discretionarytimes=\*
+\def\*#1#2#3{%
+ \ifx #1?% Schlussweise aus den Grundgesetzen
+ \ifgfggschlussweise
+ \gfbsschluss{#2}%
+ \gfbsschluss{#3}%
+ \else
+ \errhelp=\gfggschlussweisehilfe
+ \errmessage{You cannot use this construction in style Begriffsschrift}%
+ \fi
+ \else
+ \gfbsteilelement{#1}%
+ \gfbsteilelement{#2}%
+ \gfbsteilelement{#3}%
+ \fi
+}
+\def\toggleGGstyle{%
+ \ifgfbsuseGGstyle% gehe zum Stil der Begriffsschrift über
+ \gfbskompaktfalse
+ \gfbsfonoohnepunktfalse
+ \gfggschlussweisefalse
+ \gfbsnegdirektfalse
+ \gfbsuseGGstylefalse
+ \else% verwende den Stil der Grundgesetze
+ \gfbskompakttrue
+ \gfbsfonoohnepunkttrue
+ \gfggschlussweisetrue
+ \gfbsnegdirekttrue
+ \gfbsuseGGstyletrue
+ \fi
+ \gfbsneuestriche
+}
+\def\gfbsschluss#1{%
+ \ifx #1x% Wendung
+ \ifgfbszwischenzeichen
+ \kern\gfbsueberlappung
+ \hbox to 3\gfbsvolleeinheit{\hss$\diagdown$\llap{$\diagup$}\hss}%
+ \kern2\gfbsueberlappung
+ \else
+ \errhelp=\gfbszwischenzeichenhilfe
+ \errmessage{An `x' must be introduced by `\string>'}%
+ \fi
+ \gfbszwischenzeichenfalse
+ \else\ifx #1u% Wandlung
+ \ifgfbszwischenzeichen
+ \kern\gfbsueberlappung
+ \hbox to 3\gfbsvolleeinheit{$\setbox0=\hbox{$\braceld$}%
+ \bracelu\leaders\vrule height\ht0 depth0pt\hfill\braceru$}%
+ \kern2\gfbsueberlappung
+ \else
+ \errhelp=\gfbszwischenzeichenhilfe
+ \errmessage{An `u' must be introduced by `\string>'}%
+ \fi
+ \gfbszwischenzeichenfalse
+ \else
+ \ifgfbszwischenzeichen
+ \errhelp=\gfbszwischenzeichenfehlthilfe
+ \errmessage{Either `x' or `u' expected}%
+ \gfbszwischenzeichenfalse
+ \fi
+ \ifx #1-% einzeln: Strich
+ \hbox to 1.5\gfbsvolleeinheit{\gfggrulefill}\kern1.5\gfbsueberlappung
+ \else\ifx #1.% einzeln: zentrierter Punkt
+ \hbox to 1.5\gfbsvolleeinheit{\hss$\cdot$\hss}\kern1.5\gfbsueberlappung
+ \else
+ \ifx #1=% doppelt: Strich oben, Strich unten
+ \vrule height \gfbsos depth -\gfbsus width 1.5\gfbsvolleeinheit
+ \nobreak
+ \hskip-1.5\gfbsvolleeinheit
+ \vrule height \gfbsfdicke depth 0pt width 1.5\gfbsvolleeinheit
+ \kern1.5\gfbsueberlappung
+ \else\ifx #1*% doppelt: Strich oben, leer unten
+ \vrule height \gfbsos depth -\gfbsus width 1.5\gfbsvolleeinheit
+ \kern1.5\gfbsueberlappung
+ \else
+ \ifx #1_% Leerraum
+ \hskip1.5\gfbseinheit
+ \else\ifx #1"% Leerstelle
+ \relax
+ \else\ifx #1>% Einzelsymbol (Wendung oder Wandlung) folgt
+ \gfbszwischenzeichentrue
+ \else % nicht erlaubt
+ \errhelp=\gfbsunbekannterschlusshilfe
+ \errmessage{`\string#1' is not allowed in a \string\*? macro}%
+ \fi\fi\fi
+ \fi\fi
+ \fi\fi
+ \fi\fi
+}
+\newcount\gfbswiederholung
+\def\wdh#1#2#3#4#5{%
+ \gfbswiederholung=#1
+ \ifnum\gfbswiederholung<0
+ \errhelp=\gfbsnegwdhhilfe
+ \errmessage{Repetition count cannot be negative, found \string#1}%
+ \else
+ \loop
+ \ifnum\gfbswiederholung>0
+ #2#3#4#5%
+ \advance\gfbswiederholung by -1
+ \repeat
+ \fi
+}
+\def\nzp#1{%
+ \ifvmode\noindent\else\hfil\break\fi
+ \gfbsstrut
+ \hskip#1\gfbselementdimen
+ \relax
+ \global\gfbsfonosenken=0pt
+}
+\let\nlp\nzp
+\def\gfbsstrut{%
+ \relax\ifmmode\copy\gfbsbox\else\unhcopy\gfbsbox\fi
+}
+\def\gfbsabstandzuruecksetzen{%
+ \global\gfbsboxht=\ht\strutbox \global\gfbsboxdp=\dp\strutbox
+ \global\setbox\gfbsbox=\hbox{%
+ \vrule height\the\gfbsboxht depth\the\gfbsboxdp width0pt }%
+}
+\gfbsabstandzuruecksetzen
+\def\gfbssetzeabstand#1#2{%
+ \global\gfbsboxht=#1pt \global\gfbsboxdp=#2pt %
+ \global\setbox\gfbsbox=\hbox{%
+ \vrule height\the\gfbsboxht depth\the\gfbsboxdp width0pt }%
+}
+\def\gfbsreduziereabstandum#1#2{%
+ \global\advance\gfbsboxht by -0.#1#2\gfbsboxht
+ \global\advance\gfbsboxdp by -0.#1#2\gfbsboxdp
+ \global\setbox\gfbsbox=\hbox{%
+ \vrule height\the\gfbsboxht depth\the\gfbsboxdp width0pt }%
+}
+\def\zi#1{%
+ \hbox to \gfbselementdimen{\rm\thinspace #1\hss}\ignorespaces
+}
+\def\ze#1{%
+ \hbox{\rm\thinspace #1}%
+}
+\newif\ifgfbsinnen % false: Zeichen werden mit \ze gesetzt, true: mit \zi
+\def\nzpz#1#2{\nzp{#1}\llap{#2}}
+\let\nlpz\nzpz
+\def\fono#1{%
+ \hfill\lower\gfbsfonosenken\hbox{\rm({\ff #1}\ifgfbsfonoohnepunkt\else.\fi}%
+}
+\def\bss#1/#2#3:#4#5\ess{%
+ \nzp{#1}%
+ \ifx #2l%
+ \ifx #4.%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:}\hss}%
+ \else\ifx #4:%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
+ \else
+ \errhelp=\gfbsdoppelpunkthilfe
+ \errmessage{Either a period or a colon is expected for the number of colons}%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
+ \fi\fi
+ \hskip2\gfbseinheit
+ \else\ifx #2r%
+ \hskip2\gfbseinheit
+ \ifx #4.%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:}\hss}%
+ \else\ifx #4:%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
+ \else
+ \errhelp=\gfbsdoppelpunkthilfe
+ \errmessage{Either a period or a colon is expected for the number of colons}%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
+ \fi\fi
+ \else\ifx #2m%
+ \hskip\gfbseinheit
+ \ifx #4.%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:}\hss}%
+ \else\ifx #4:%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
+ \else
+ \errhelp=\gfbsdoppelpunkthilfe
+ \errmessage{Either a period or a colon is expected for the number of colons}%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
+ \fi\fi
+ \hskip\gfbseinheit
+ \else
+ \errhelp=\gfbspositionunbekannthilfe
+ \errmessage{Only l, m, and r are allowed as position parameter}%
+ \hskip\gfbseinheit
+ \ifx #4.%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:}\hss}%
+ \else\ifx #4:%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
+ \else
+ \errhelp=\gfbsdoppelpunkthilfe
+ \errmessage{Either a period or a colon is expected for the number of colons}%
+ \hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
+ \fi\fi
+ \hskip\gfbseinheit
+ \fi\fi\fi
+ {\let\gfbsrulefill\gfggrulefill #5}%
+ \vadjust{\penalty-15}\ignorespaces
+}
+%
+% ab hier folgt die Zeilennotation
+%
+\newtoks\dsz \dsz={\xi}% wird für Buchstaben ß eingesetzt
+\newcount\gfbstmpcount
+\catcode`@=11
+\def\mynewskip{\alloc@2\skip\skipdef\insc@unt}
+\def\mynewtoks{\alloc@5\toks\toksdef\@cclvi}
+\catcode`@=12
+\gfbstmpcount=\gfbsmaxanzahlzeilen
+\ifgfbskeinesubst
+ \advance\gfbstmpcount by 1
+\else
+ \multiply\gfbstmpcount by 2
+\fi
+\let\rom\romannumeral
+\count255=1
+\loop
+ \expandafter\mynewtoks\csname gfbstoks\rom\count255\endcsname
+ \expandafter\mynewskip\csname gfbsskip\rom\count255\endcsname
+\ifnum\count255<\gfbstmpcount
+ \advance\count255 by 1
+\repeat
+\newcount\gfbshaengtan \newcount\gfbsgehtbis \newcount\gfbsanzahl
+\newif\ifgfbsdannwenn
+\newtoks\gfbselement \newcount\gfbszeile
+\newcount\gfbsanzahlplus \newcount\gfbsanzahlfest
+\newtoks\gfbsprefix
+\newif\ifgfbsaussagesichtbar \gfbsaussagesichtbarfalse
+\newcount\gfbsgrenze \newcount\gfbszaehler
+\newif\ifgfbskeinekompaktehoehlung \gfbskeinekompaktehoehlungfalse
+\newcount\gfbserstezeile \newcount\gfbsersteanzahl \newcount\gfbserstegehtbis
+\newcount\gfbszweitezeile \newcount\gfbszweitegehtbis
+\newif\ifvzzz \newif\ifvzez
+\newcount\gfbseinzug
+\newif\ifgfbsnurterminal
+\newcount\gfbsgrundeinzug \newcount\gfbssubststart
+\gfbsgrundeinzug=0
+\gfbssubststart=\gfbsmaxanzahlzeilen \advance\gfbssubststart by 1
+\newif\ifgfbslognotation \gfbslognotationfalse
+\newif\ifgfbszeigestats \gfbszeigestatsfalse
+\newcount\gfbsmaxformelzeile
+\newcount\gfbsvorgaenger \gfbsvorgaenger=0
+\def\setskip#1#2#3#4{%
+ %\skip-Register = \gfbsanzahl plus \gfbshaengtan minus \gfbsgehtbis
+ \global\csname gfbsskip\rom#1\endcsname=#2pt plus #3pt minus #4pt%
+}
+\def\verschlucke#1#2{\relax}
+\def\getskip#1.#2 #3 #4.#5 #6 #7.#8{%
+ \global\gfbsanzahl=#1%
+ \global\gfbshaengtan=#4%
+ \global\gfbsgehtbis=#7%
+ \verschlucke
+}
+\def\gfbsformel#1#2#3#4#5{%
+ \gfbsdannwennfalse
+ \ifx #1.% dann-wenn Beziehung
+ \gfbsdannwenntrue
+ \else\ifx #1-% dann-wenn
+ \gfbsdannwenntrue
+ \else\ifx #1+% dann-wenn
+ \gfbsdannwenntrue
+ \else\ifx #1*% Höhlung
+ \global\gfbsnurterminalfalse
+ \ifcat \noexpand#3a\else
+ \errhelp=\gfbskeinbuchstabeanhoehlungspositionhilfe
+ \errmessage{Symbol `\string#3' not allowed as variable}%
+ \fi
+ \bgroup\gfbsvorgaenger=2
+ \ifx #2.\ifx #4.\ifgfbskeinekompaktehoehlung\else
+ \gfbsvorgaenger=3
+ \fi\fi\fi \gfbsformel #5{}{}{}{}\egroup
+ \expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
+ \gfbstmpcount=0 % Anzahl der benutzen .
+ \ifx #2-%
+ \ifnum\gfbsvorgaenger<2 \gfbselement={\*,#3}%
+ \else\ifnum\gfbsvorgaenger=2 \gfbselement={\*`#3}%
+ \else\gfbselement={\*7#3}%
+ \fi\fi
+ \else\ifx #2+%
+ \gfbselement={\*;#3}%
+ \else\ifx #2.%
+ \gfbselement={\*.#3}\gfbstmpcount=1
+ \else
+ \errhelp=\gfbsfalschesvzhilfe
+ \errmessage{Symbol `\string#2' not allowed as sign}%
+ \gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
+ \fi\fi\fi
+ \ifx #4-% ebenso nach der Höhlung
+ \gfbselement=\expandafter{\the\gfbselement,}%
+ \else\ifx #4+%
+ \gfbselement=\expandafter{\the\gfbselement;}%
+ \else\ifx #4.%
+ \gfbselement=\expandafter{\the\gfbselement.}%
+ \advance\gfbstmpcount by 1
+ \else
+ \errhelp=\gfbsfalschesvzhilfe
+ \errmessage{Symbol `\string#4' not allowed as sign}%
+ \gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
+ \fi\fi\fi
+ \ifnum\gfbstmpcount=2
+ \ifgfbskeinekompaktehoehlung
+ \gfbsprefix={\*___}\gfbsanzahlfest=3
+ \else\gfbselement={\*$#3$}\gfbsprefix={\*5__}\gfbsanzahlfest=2
+ \fi
+ \else
+ \gfbsprefix={\*___}\gfbsanzahlfest=3
+ \fi
+ \gfbsanzahlplus=3
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
+ \ifgfbskompakt
+ \global\advance\gfbsanzahl by \gfbsanzahlfest
+ \else
+ \global\advance\gfbsanzahl by \gfbsanzahlplus
+ \fi
+ \setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
+ \gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
+ \else\ifx #1=% Aussage
+ \global\gfbsnurterminalfalse
+ \def\gfbstest{#4}%
+ \ifx\gfbstest\empty
+ \def\gfbstest{#5}%
+ \ifx\gfbstest\empty\else
+ \errhelp=\gfbszuvieleparameterhilfe
+ \errmessage{Too many parameters for statement (found `\string#5')}%
+ \fi
+ \else
+ \errhelp=\gfbszuvieleparameterhilfe
+ \errmessage{Too many parameters for statement (found `\string#4')}%
+ \fi
+ \bgroup\gfbsvorgaenger=4 \gfbsformel #3{}{}{}{}\egroup
+ \expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
+ \ifx #2-% auf Negation bzw. doppelte Negation prüfen
+ \ifnum\gfbsvorgaenger>6 \gfbselement={\*484}\else\gfbselement={\*4~4}\fi
+ \gfbsprefix={\*5_5}\gfbsanzahlfest=1
+ \else\ifx #2+%
+ \ifnum\gfbsvorgaenger>6 \gfbselement={\*424}\else\gfbselement={\*4+4}\fi
+ \gfbsprefix={\*5_5}\gfbsanzahlfest=1
+ \else\ifx #2.%
+ \ifgfbsaussagesichtbar
+ \gfbselement={\*4-4}\gfbsprefix={\*5_5}\gfbsanzahlfest=1
+ \else
+ \gfbselement={\*444}\gfbsprefix={\*555}\gfbsanzahlfest=0
+ \fi
+ \else
+ \errhelp=\gfbsfalschesvzhilfe
+ \errmessage{Symbol `\string#2' not allowed as sign}%
+ \gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
+ \fi\fi\fi
+ \gfbsanzahlplus=3
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
+ \ifgfbskompakt
+ \global\advance\gfbsanzahl by \gfbsanzahlfest
+ \else
+ \global\advance\gfbsanzahl by \gfbsanzahlplus
+ \fi
+ \setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
+ \gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
+ \else\ifx #1!% Sequenz oder Makroaufruf
+ \gfbselement=\expandafter{#2#3#4#5}%
+ \edef\gfbstoken{\the\gfbselement}%
+ \bgroup\expandafter\gfbsformel\gfbstoken {}{}{}{}\egroup
+ \else % einzelnes Zeichen
+ \ifgfbsinnen
+ \gfbselement={\zi{$#1#2#3#4#5$}}%
+ \else
+ \gfbselement={\ze{$#1#2#3#4#5$}}%
+ \fi
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
+ \setskip{\the\gfbszeile}3{\the\gfbszeile}{\the\gfbszeile}%
+ \fi\fi\fi\fi\fi\fi
+ \ifgfbsdannwenn
+ \global\gfbsnurterminalfalse
+ \bgroup\gfbsvorgaenger=5 \gfbsformel #3{}{}{}{}\egroup
+ \expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
+ \gfbserstezeile=\gfbszeile
+ \gfbsersteanzahl=\gfbsanzahl
+ \gfbserstegehtbis=\gfbsgehtbis
+ \gfbszeile=\gfbsgehtbis \advance\gfbszeile by 1
+ \bgroup\gfbsvorgaenger=6 \gfbsformel #5{}{}{}{}\egroup
+ \expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
+ \gfbszweitezeile=\gfbszeile
+ \gfbszweitegehtbis=\gfbsgehtbis
+ \global\vzezfalse
+ \ifx #2-%
+ \global\vzeztrue
+ \else\ifx #2+%
+ \global\vzeztrue
+ \else\ifx #2.\else
+ \errhelp=\gfbsfalschesvzhilfe
+ \errmessage{Symbol `\string#2' not allowed as sign}%
+ \gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
+ \fi\fi\fi
+ \global\vzzzfalse
+ \ifx #4-%
+ \global\vzzztrue
+ \else\ifx #4+%
+ \global\vzzztrue
+ \else\ifx #4.\else
+ \errhelp=\gfbsfalschesvzhilfe
+ \errmessage{Symbol `\string#4' not allowed as sign}%
+ \gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
+ \fi\fi\fi
+ {\advance\gfbsersteanzahl by -\gfbsanzahl
+ \ifnum\gfbsersteanzahl>0 % fülle zweite Zeile auf
+ \advance\gfbsersteanzahl by -1
+ \gfbstmpcount=\gfbsersteanzahl
+ \loop
+ \ifnum\gfbstmpcount>2
+ \advance\gfbstmpcount by -3
+ \repeat
+ \ifcase\gfbstmpcount
+ \gfbselement={\*""}\gfbsprefix={\*""_}\gfbsanzahlplus=1 \gfbsanzahlfest=1
+ \or\gfbselement={\*"-}\gfbsprefix={\*"__}\gfbsanzahlplus=2 \gfbsanzahlfest=2
+ \or\gfbselement={\*-}\gfbsprefix={\*___}\gfbsanzahlplus=3 \gfbsanzahlfest=3
+ \fi
+ \advance\gfbsersteanzahl by -\gfbstmpcount
+ \ifnum\gfbstmpcount=2
+ \gfbselement=\expandafter{\the\gfbselement-}%
+ \fi
+ \ifvzzz
+ \ifx #4-%
+ \gfbselement=\expandafter{\the\gfbselement(}%
+ \else
+ \gfbselement=\expandafter{\the\gfbselement+}%
+ \fi
+ \global\vzzzfalse
+ \else
+ \gfbselement=\expandafter{\the\gfbselement-}%
+ \fi
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
+ \ifgfbskompakt
+ \global\advance\gfbsanzahl by \gfbsanzahlfest
+ \else
+ \global\advance\gfbsanzahl by \gfbsanzahlplus
+ \fi
+ \setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
+ \gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
+ \gfbselement={\*---}\gfbsprefix={\*___}\gfbsanzahlfest=3 \gfbsanzahlplus=3
+ \loop
+ \ifnum\gfbsersteanzahl>2
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
+ \ifgfbskompakt
+ \global\advance\gfbsanzahl by \gfbsanzahlfest
+ \else
+ \global\advance\gfbsanzahl by \gfbsanzahlplus
+ \fi
+ \setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
+ \gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
+ \advance\gfbsersteanzahl by -3
+ \repeat
+ \fi
+ \ifnum\gfbsersteanzahl<0 % fülle erste Zeile auf
+ \advance\gfbsersteanzahl by 1
+ \gfbstmpcount=-\gfbsersteanzahl
+ \loop
+ \ifnum\gfbstmpcount>2
+ \advance\gfbstmpcount by -3
+ \repeat
+ \ifcase\gfbstmpcount
+ \gfbselement={\*""}\gfbsprefix={\*""_}\gfbsanzahlplus=1 \gfbsanzahlfest=1
+ \or\gfbselement={\*"-}\gfbsprefix={\*"__}\gfbsanzahlplus=2 \gfbsanzahlfest=2
+ \or\gfbselement={\*-}\gfbsprefix={\*___}\gfbsanzahlplus=3 \gfbsanzahlfest=3
+ \fi
+ \advance\gfbsersteanzahl by \gfbstmpcount
+ \ifnum\gfbstmpcount=2
+ \gfbselement=\expandafter{\the\gfbselement-}%
+ \fi
+ \ifvzez
+ \ifx #2-%
+ \gfbselement=\expandafter{\the\gfbselement(}%
+ \else
+ \gfbselement=\expandafter{\the\gfbselement+}%
+ \fi
+ \global\vzezfalse
+ \else
+ \gfbselement=\expandafter{\the\gfbselement-}%
+ \fi
+ \advance\gfbstmpcount by 1
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbserstezeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbserstezeile\endcsname=\expandafter{\gfbstoken}%
+ \global\advance\csname gfbsskip\rom\gfbserstezeile\endcsname by \number\gfbstmpcount pt
+ \gfbsfuegelinksan{\gfbserstezeile}{\gfbserstegehtbis}%
+ \gfbselement={\*---}\gfbsprefix={\*___}\gfbsanzahlfest=3 \gfbsanzahlplus=3
+ \loop
+ \ifnum\gfbsersteanzahl<-2
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbserstezeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbserstezeile\endcsname=\expandafter{\gfbstoken}%
+ \global\advance\csname gfbsskip\rom\gfbserstezeile\endcsname by 3 pt
+ \gfbsfuegelinksan{\gfbserstezeile}{\gfbserstegehtbis}%
+ \advance\gfbsersteanzahl by 3
+ \repeat
+ \fi}%
+ \gfbszeile=\gfbserstezeile
+ \expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
+ \gfbsanzahlfest=0
+ \gfbsanzahlplus=3
+ \ifx #1-% auf Negation bzw. doppelte Negation prüfen
+ \ifnum\gfbsvorgaenger<2 \gfbselement={\*):}%
+ \else\ifnum\gfbsvorgaenger<4 \gfbselement={\*~:}%
+ \else\ifnum\gfbsvorgaenger<7 \gfbselement={\*8:}%
+ \else\gfbselement={\*0:}\fi\fi\fi
+ \gfbsprefix={\*_!}\gfbsanzahlfest=2
+ \else\ifx #1+%
+ \ifnum\gfbsvorgaenger<2 \gfbselement={\*/:}%
+ \else\ifnum\gfbsvorgaenger>6 \gfbselement={\*1:}%
+ \else\gfbselement={\*+:}%
+ \fi\fi
+ \gfbsprefix={\*_!}\gfbsanzahlfest=2
+ \else\ifx #1.%
+ \gfbselement={\*4:}\gfbsprefix={\*5!}\gfbsanzahlfest=1
+ \fi\fi\fi
+ \ifvzez
+ \ifx #2-%
+ \gfbselement=\expandafter{\the\gfbselement(}%
+ \else
+ \gfbselement=\expandafter{\the\gfbselement+}%
+ \fi
+ \advance\gfbsanzahlfest by 1
+ \gfbsprefix=\expandafter{\the\gfbsprefix_}%
+ \else
+ \ifvzzz
+ \gfbselement=\expandafter{\the\gfbselement-}%
+ \advance\gfbsanzahlfest by 1
+ \gfbsprefix=\expandafter{\the\gfbsprefix_}%
+ \else
+ \gfbselement=\expandafter{\the\gfbselement4}%
+ \gfbsprefix=\expandafter{\the\gfbsprefix5}%
+ \fi
+ \fi
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
+ \ifgfbskompakt
+ \global\advance\gfbsanzahl by \gfbsanzahlfest
+ \else
+ \global\advance\gfbsanzahl by \gfbsanzahlplus
+ \fi
+ \setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
+ \gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
+ \gfbszeile=\gfbszweitezeile
+ \expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
+ \gfbsanzahlplus=3
+ \ifx #1.%
+ \gfbselement={\*5}\gfbsprefix={\*5}\gfbsanzahlfest=0
+ \else
+ \gfbselement={\*_}\gfbsprefix={\*_}\gfbsanzahlfest=1
+ \fi
+ \ifvzzz
+ \ifx #4-%
+ \gfbselement=\expandafter{\the\gfbselement'(}%
+ \else
+ \gfbselement=\expandafter{\the\gfbselement'+}%
+ \fi
+ \advance\gfbsanzahlfest by 2
+ \gfbsprefix=\expandafter{\the\gfbsprefix__}%
+ \else
+ \ifvzez
+ \gfbselement=\expandafter{\the\gfbselement'-}%
+ \advance\gfbsanzahlfest by 2
+ \gfbsprefix=\expandafter{\the\gfbsprefix__}%
+ \else
+ \gfbselement=\expandafter{\the\gfbselement'4}%
+ \advance\gfbsanzahlfest by 1
+ \gfbsprefix=\expandafter{\the\gfbsprefix_5}%
+ \fi\fi
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
+ \ifgfbskompakt
+ \global\advance\gfbsanzahl by \gfbsanzahlfest
+ \else
+ \global\advance\gfbsanzahl by \gfbsanzahlplus
+ \fi
+ \setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
+ \gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
+ \setskip{\the\gfbszweitezeile}{\the\gfbsanzahl}{\the\gfbserstezeile}{\the\gfbsgehtbis}%
+ \gfbszeile=\gfbserstezeile
+ \expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
+ \setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbszweitegehtbis}%
+ \fi
+}
+\def\gfbsfuegelinksan#1#2{\bgroup
+ \gfbstmpcount=0 \advance\gfbstmpcount by #2% höchste zu ändernde Zeilennummer
+ \count255=0 \advance\count255 by #1% Startzeile (nicht zu ändern)
+ \loop
+ \ifnum\gfbstmpcount>\count255
+ \edef\gfbstoken{\the\gfbsprefix\the\csname gfbstoks\rom\gfbstmpcount\endcsname}%
+ \global\csname gfbstoks\rom\gfbstmpcount\endcsname=\expandafter{\gfbstoken}%
+ \ifgfbskompakt
+ \global\advance\csname gfbsskip\rom\gfbstmpcount\endcsname
+ by \number\gfbsanzahlfest pt
+ \else
+ \global\advance\csname gfbsskip\rom\gfbstmpcount\endcsname
+ by \number\gfbsanzahlplus pt
+ \fi
+ \advance\gfbstmpcount by -1
+ \repeat
+\egroup}
+\outer\def\formel p#1#2#3{%
+ \global\gfbseinzug=#1%
+ \global\gfbszeile=1
+ \setskip 1011
+ \gfbsanzahlfest=0 \gfbsanzahlplus=0 \gfbsprefix={}\gfbselement={}%
+ \gfbsnurterminaltrue
+ \bgroup\gfbsvorgaenger=8 \gfbsformel #3{}{}{}{}\egroup
+ \expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
+ \ifx #2|% | markiert ein Urteil, sonst ist es eine Vorstellung
+ \gfbsprefix={\*55_}%
+ \ifnum\gfbsanzahl<4 % Formel besteht nur aus einem Terminal
+ \ifgfbsnurterminal
+ \errhelp=\gfbsnurterminalhilfe
+ \errmessage{No Frege formula entered}%
+ \gfbselement={\*55]}\gfbsanzahlfest=1
+ \else\gfbselement={\*5]9}\gfbsanzahlfest=2
+ \fi
+ \else\gfbselement={\*556}\gfbsanzahlfest=1
+ \fi
+ \else\ifx #2.%
+ \gfbsprefix={\*555}%
+ \ifnum\gfbsanzahl<4 % Formel besteht nur aus einem Terminal
+ \ifgfbsnurterminal
+ \errhelp=\gfbsnurterminalhilfe
+ \errmessage{No Frege formula entered}%
+ \gfbselement={\*555}\gfbsanzahlfest=0
+ \else\gfbselement={\*559}\gfbsanzahlfest=1
+ \fi
+ \else\gfbselement={\*554}\gfbsanzahlfest=0
+ \fi
+ \else
+ \errhelp=\gfbsfalscherstarthilfe
+ \errmessage{Unknown formula type `\string#2'}%
+ \gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
+ \fi\fi
+ \gfbsanzahlplus=3
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
+ \ifgfbskompakt
+ \global\advance\gfbsanzahl by \gfbsanzahlfest
+ \else
+ \global\advance\gfbsanzahl by \gfbsanzahlplus
+ \fi
+ \setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
+ \gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
+ \expandafter\getskip\the\gfbsskipi\relax
+ \ifnum\gfbsmaxformelzeile<\gfbsgehtbis
+ \global\gfbsmaxformelzeile=\gfbsgehtbis
+ \ifgfbszeigestats\zeigezeilenstatistik\fi
+ \fi
+ \gfbszaehler=\gfbshaengtan
+ \gfbsgrenze=1 \advance\gfbsgrenze by \gfbsgehtbis
+ \gfbszeile=\gfbssubststart
+ \ifnum\gfbsgrundeinzug>0
+ \advance\gfbseinzug by -\gfbsgrundeinzug
+ \ifnum\gfbseinzug>0\else
+ \errhelp=\gfbsposabstandhilfe
+ \errmessage{The formula must be positioned to the right of substitutions}%
+ \gfbseinzug=2
+ \fi\fi
+ \par\noindent\leavevmode
+ \vbox\bgroup\offinterlineskip
+ \loop
+ \ifnum\gfbszaehler<\gfbsgrenze
+ \bgroup
+ \count255=\csname gfbsskip\rom\gfbszeile\endcsname
+ \divide\count255 by 65536
+ \gfbstmpcount=\count255
+ \divide\gfbstmpcount by 3
+ \advance\gfbseinzug by -\gfbstmpcount
+ \multiply\gfbstmpcount by -3
+ \advance\gfbstmpcount by \count255
+ \ifcase\gfbstmpcount
+ \edef\gfbstoken{\noexpand\wdh\noexpand{\the\gfbseinzug
+ \noexpand}\noexpand\*___}%
+ \or
+ \advance\gfbseinzug by -1
+ \edef\gfbstoken{\noexpand\*"__\noexpand\wdh\noexpand{\the\gfbseinzug
+ \noexpand}\noexpand\*___}%
+ \or
+ \advance\gfbseinzug by -1
+ \edef\gfbstoken{\noexpand\*""_\noexpand\wdh\noexpand{\the\gfbseinzug
+ \noexpand}\noexpand\*___}%
+ \fi
+ \global\gfbselement=\expandafter{\gfbstoken}%
+ \egroup
+ \hbox{%
+ \nlp{\the\gfbsgrundeinzug}%
+ \the\csname gfbstoks\rom\gfbszeile\endcsname
+ \the\gfbselement
+ \the\csname gfbstoks\rom\gfbszaehler\endcsname
+ }%
+ \ifgfbslognotation
+ \dimen255=\csname gfbsskip\rom\gfbszeile\endcsname
+ \wlog{\string\nlp\string{\the\gfbsgrundeinzug\string}}%
+ \ifdim\dimen255>0pt \wlog{\the\csname gfbstoks\rom\gfbszeile\endcsname}\fi
+ \wlog{\the\gfbselement}%
+ \wlog{\the\csname gfbstoks\rom\gfbszaehler\endcsname}%
+ \fi
+ \global\csname gfbstoks\rom\gfbszaehler\endcsname={}%
+ \global\csname gfbsskip\rom\gfbszaehler\endcsname=0pt
+ \global\advance\gfbszaehler by 1
+ \global\csname gfbstoks\rom\gfbszeile\endcsname={}%
+ \global\csname gfbsskip\rom\gfbszeile\endcsname=0pt
+ \ifgfbskeinesubst\else
+ \global\advance\gfbszeile by 1
+ \fi
+ \repeat
+ \ifgfbskeinesubst\else
+ \loop
+ \ifnum\csname gfbsskip\rom\gfbszeile\endcsname>0
+ \hbox{\nlp{\the\gfbsgrundeinzug}\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \ifgfbslognotation
+ \wlog{\string\nlp\string{\the\gfbsgrundeinzug\string}}%
+ \wlog{\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \fi
+ \global\csname gfbstoks\rom\gfbszeile\endcsname={}%
+ \global\csname gfbsskip\rom\gfbszeile\endcsname=0pt
+ \global\advance\gfbszeile by 1
+ \repeat
+ \fi
+ \egroup
+ \gfbsgrundeinzug=0
+}
+\def\gfbsaus p#1,#2"#3"mit#4\also{%
+ \global\gfbsgrundeinzug=#1%
+ \gfbszeile=\the\gfbssubststart
+ \ifgfbskeinesubst
+ \ifnum #2>0
+ \errhelp=\gfbsnurnullinaushilfe
+ \errmessage{Zero expected; read ``#2''}%
+ \fi
+ \else
+ \advance\gfbszeile by #2%
+ \fi
+ \global\csname gfbstoks\rom\gfbszeile\endcsname={\zi{\hss\thinspace #3\hss}}%
+ \setskip{\the\gfbszeile}3{\the\gfbszeile}{\the\gfbszeile}%
+ \gfbsanzahlfest=0 \gfbsanzahlplus=0 \gfbsprefix={}\gfbselement={}%
+ \def\next{#4}%
+ \ifx\next\empty
+ \else\ifgfbskeinesubst
+ \errhelp=\gfbskeinesubsthilfe
+ \errmessage{Substitutions disabled}%
+ \else
+ \bgroup
+ \gfbsinnentrue
+ \advance\gfbszeile by 1
+ \gfbssubst #4\gfbssubstend
+ \egroup
+ \fi\fi
+}
+\outer\def\aus p#1,#2"#3"mit#4\also{%
+ \gfbsaus p#1,#2"#3"mit#4\also
+}
+\outer\def\verwende p#1"#2"{%
+ \gfbsaus p#1,0"#2"mit\also
+}
+\let\ziehan\verwende
+\def\gfbssubst#1:#2 #3\gfbssubstend{%
+ \def\gfbstest{#1}%
+ \ifx\gfbstest\empty% Ende der Substitutionen
+ \null
+ \else
+ \def\gfbstest{#2}%
+ \ifx\gfbstest\empty
+ \if#1\ \else
+ \errhelp=\gfbsleeresubsthilfe
+ \errmessage{Empty substitution}%
+ \fi
+ \bgroup\gfbsformel \ {}{}{}{}{}\egroup
+ \else
+ \gfbsanzahlplus=0 \gfbsanzahlfest=0 \gfbsprefix={}\gfbselement={}%
+ \bgroup\gfbsvorgaenger=1 \gfbsformel #2{}{}{}{}{}\egroup
+ \fi
+ \expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
+ \gfbselement={\*_|_}\gfbsprefix={\*_|_}\gfbsanzahlfest=3 \gfbsanzahlplus=3
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
+ \ifgfbskompakt
+ \global\advance\gfbsanzahl by \gfbsanzahlfest
+ \else
+ \global\advance\gfbsanzahl by \gfbsanzahlplus
+ \fi
+ \setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
+ \gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
+ \gfbselement={\llap{$#1$}}%
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
+ \def\gfbstest{#3}%
+ \ifx\gfbstest\empty
+ \else
+ \gfbsanzahlplus=0 \gfbsanzahlfest=0 \gfbsprefix={}\gfbselement={}%
+ \bgroup
+ \gfbszeile=\gfbsgehtbis
+ \advance\gfbszeile by 1
+ \gfbssubst #3\gfbssubstend
+ \egroup
+ \fi
+ \fi
+}
+\outer\def\folgtmit p#1"#2"a#3p#4s#5{%
+ \gfbsgrundeinzug=#4 \advance\gfbsgrundeinzug by -#1
+ \advance\gfbsgrundeinzug by -1
+ \ifnum #1<#4\else
+ \errhelp=\gfbszweiteposzugrosshilfe
+ \errmessage{The second p-value must be larger than the first}%
+ \gfbsgrundeinzug=1
+ \fi
+ \ifnum 0>#5
+ \errhelp=\gfbskeinelaengehilfe
+ \errmessage{The s-value must be nonnegative}%
+ \fi
+ \ifx #3.%
+ \else
+ \ifx #3:\else
+ \errhelp=\gfbsdoppelpunktzahlhilfe
+ \errmessage{Invalid symbol `#3' for number of colons}%
+ \fi
+ \fi
+ \bss{#1}/m{#2}:#3\wdh{\the\gfbsgrundeinzug}\*___\wdh{#5}\*---\ess
+ \ifgfbslognotation
+ \wlog{\string\bss\string{#1\string}/m\string{#2\string}:#3%
+ \string\wdh\string{\the\gfbsgrundeinzug\string}\string\*___%
+ \string\wdh\string{#5\string}\string\*---\string\ess}%
+ \fi
+}
+\def\gfbsdurch p#1 #2\folgende{%
+ \ifgfbskeinesubst
+ \errhelp=\gfbskeinesubsthilfe
+ \errmessage{Substitutions disabled}%
+ \fi
+ \global\gfbsgrundeinzug=#1%
+ \gfbszeile=\the\gfbssubststart
+ \setskip{\the\gfbszeile}0{\the\gfbszeile}{\the\gfbszeile}%
+ \gfbsanzahlfest=0 \gfbsanzahlplus=0 \gfbsprefix={}\gfbselement={}%
+ \bgroup\gfbsinnentrue\gfbssubst #2\gfbssubstend\egroup
+}
+\outer\def\durch p#1 #2\folgende{%
+ \gfbsdurch p#1 #2\folgende
+}
+\def\formelName "#1"{%
+ \fono{#1}%
+ \ifgfbslognotation
+ \wlog{\string\fono\string{#1\string}}%
+ \wlog{==========}%
+ \wlog{}%
+ \fi
+ \ignorespaces
+}
+\outer\def\genannt{\formelName}
+\def\zeigezeilenstatistik{\bgroup
+ \message{^^JMaximum number of lines: \the\gfbsmaxformelzeile. }%
+\egroup}
+\def\frege#1#2{%
+ \global\gfbszeile=1
+ \setskip 1011
+ \gfbselement={}\gfbsprefix={}\gfbsanzahlfest=0 \gfbsanzahlplus=0
+ \gfbsnurterminaltrue
+ \bgroup\gfbsvorgaenger=7 \gfbsformel #2{}{}{}{}\egroup
+ \expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
+ \ifx #1|% Urteil
+ \gfbsprefix={\*""_}%
+ \ifnum\gfbsanzahl<4
+ \ifgfbsnurterminal
+ \errhelp=\gfbsnurterminalhilfe
+ \errmessage{No Frege formula entered}%
+ \gfbselement={\*""[}\gfbsanzahlfest=1
+ \else\gfbselement={\*"]9}\gfbsanzahlfest=2
+ \fi
+ \else\gfbselement={\*""6}\gfbsanzahlfest=1
+ \fi
+ \else\ifx #1.%
+ \gfbsprefix={\*""5}%
+ \ifnum\gfbsanzahl<4
+ \ifgfbsnurterminal
+ \errhelp=\gfbsnurterminalhilfe
+ \errmessage{No Frege formula entered}%
+ \gfbselement={\*""5}\gfbsanzahlfest=0
+ \else\gfbselement={\*"--}\gfbsanzahlfest=2
+ \fi
+ \else\gfbselement={\*""4}\gfbsanzahlfest=0
+ \fi
+ \else
+ \errhelp=\gfbsfalscherstarthilfe
+ \errmessage{Unknown formula type `\string#1'}%
+ \gfbselement={\*""-}\gfbsprefix={\*""_}\gfbsanzahlfest=1
+ \fi\fi
+ \gfbsanzahlplus=1
+ \edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
+ \global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
+ \ifgfbskompakt
+ \global\advance\gfbsanzahl by \gfbsanzahlfest
+ \else
+ \global\advance\gfbsanzahl by \gfbsanzahlplus
+ \fi
+ \setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
+ \gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
+ \expandafter\getskip\the\gfbsskipi\relax
+ \gfbszaehler=\gfbshaengtan \gfbsgrenze=1 \advance\gfbsgrenze by \gfbsgehtbis
+ \leavevmode\vtop\bgroup\offinterlineskip
+ \loop
+ \ifnum\gfbszaehler<\gfbsgrenze
+ \hbox{\gfbsstrut\the\csname gfbstoks\rom\gfbszaehler\endcsname}%
+ \global\csname gfbstoks\rom\gfbszaehler\endcsname={}%
+ \global\csname gfbsskip\rom\gfbszaehler\endcsname=0pt
+ \global\advance\gfbszaehler by 1
+ \repeat
+ \egroup
+}
+\def\klammerfrege#1#2#3#4#5#6#7{% \frege#1#2 mit Klammern #3 und #4;
+% #5=1 <=> ohne \frege#1; #6 Boxtyp; #7 Boxnr.
+ \setbox0=\hbox{\ifnum#5=0 \frege#1{#2}\else#2\fi}\dimen0=\ht0
+ \setbox1=\hbox{(}\advance\dimen0 by .5\dp1
+ \setbox0=\hbox{\delimiterfactor=100 \delimitershortfall=8pt
+ $\left#3\vcenter{\box0}\right#4$}%
+ \dimen1=\ht0 \advance\dimen1 by -\dimen0
+ \ifnum#7>0 \ifnum#7<5
+ \global\setbox\csname gg#6box\romannumeral#7\endcsname=\hbox{%
+ \vbox to\dimen0{\hbox{\lower\dimen1\box0}}}%
+ \else\errhelp=\ggunbekannteboxnummer
+ \errmessage{The box number must be 1, 2, 3, or 4}%
+ \fi
+ \else\errhelp=\ggunbekannteboxnummer
+ \errmessage{The box number must be \string>0 and \string<5}%
+ \fi
+ \ignorespaces
+}
+\def\pfrege#1#2#3{\klammerfrege#2{#3}()0p{#1}}%
+\def\bfrege#1#2#3{\klammerfrege#2{#3}[]0b{#1}}%
+\def\pparens#1#2{\klammerfrege{}{$#2$}()1p{#1}}%
+\def\bparens#1#2{\klammerfrege{}{$#2$}[]1b{#1}}%
+\def\ggpoderbboxausgeben#1#2{\ifnum#1>0
+ \ifnum#1<5
+ \copy\csname gg#2box\romannumeral#1\endcsname
+ \else\errhelp=\ggunbekannteboxnummer
+ \errmessage{The box number must be 1, 2, 3, or 4}%
+ ???
+ \fi
+ \else\errhelp=\ggunbekannteboxnummer
+ \errmessage{The box number must be \string>0 and \string<5}%
+ ???
+\fi}
+\def\pfbox#1{\ggpoderbboxausgeben{#1}p}
+\def\bfbox#1{\ggpoderbboxausgeben{#1}b}
+%
+% weitere Einstellungen
+%
+\def\erklaerung p#1#2 #3#4=#5{%
+\ifgfbsuseGGstyle
+ \nlp{#1}\ifx #2|\*_[-\else\*_39\fi
+ $\;
+ \vtop{\hbox{%
+ \ifx #2:%
+ $#3#4$%
+ \else
+ \frege #3{#4}%
+ \fi}}
+ =\vtop{\hbox{$#5$}}$%
+ \else\nlp{#1}\ifx #2|\*_[-\else\*_3-\fi
+ $\left\lgroup
+ \left\lgroup
+ \vcenter{\hbox{\frege #3{#4}}}
+ \right\rgroup
+ \equiv\vcenter{\hbox{$#5$}}%
+ \right\rgroup$%
+ \fi
+}
+\def\gfvererbe#1#2#3#4{{%
+ \setbox0=\vbox{\offinterlineskip\hbox{\gfbsstrut$#1$}\hbox{$\vert$}\hbox{\gfbsstrut$#2$}}%
+ \setbox2=\vbox{\offinterlineskip\hbox{\gfbsstrut$#3$}\hbox{\phantom{$\vert$}}\hbox{\gfbsstrut$#4$}}%
+ \ifdim\ht0>\ht2
+ \global\gfbsfonosenken=0.5\ht0 \global\advance\gfbsfonosenken by -\dp0
+ \else\global\gfbsfonosenken=0.5\ht2 \global\advance\gfbsfonosenken by -\dp2 \fi
+ \vcenter{\unvbox0 }\!\left(\vcenter{\unvbox2 }\right.%
+}}
+\def\gffolgt#1#2#3{%
+ \!\!{\textstyle\phantom t#1\atop\textstyle\phantom)\widetilde#2}#3%
+}
+\def\gfgehoertan#1#2#3{%
+ \!\!{\textstyle\phantom t\underline#1\atop\textstyle\phantom{)}\widetilde#2}#3%
+}
+\def\gfeindeutig#1#2#3{{%
+ \setbox0=\vbox{\offinterlineskip\hbox{\gfbsstrut$#1$}\hbox{\rm I}\hbox{\gfbsstrut$#2$}}%
+ \setbox2=\vbox{\hbox{\gfbsstrut$#3$}}%
+ \ifdim\ht0>\ht2
+ \global\gfbsfonosenken=0.5\ht0 \global\advance\gfbsfonosenken by -\dp0
+ \else\global\gfbsfonosenken=0.5\ht2 \global\advance\gfbsfonosenken by -\dp2 \fi
+ \vcenter{\unvbox0 }\vcenter{\unvbox2 }%
+}}
+\def\G#1{%
+ \ifx#1!% 1. Eintrag
+ \hbox{$\scriptstyle\mathchar"0\hexno\cmbsyfam6E
+ \mkern-9.1mu
+ \mathchar"0\hexno\cmbsyfam6E$}%
+ \else\ifx#1^% 2. Eintrag
+ \mathbin{\raise.5ex
+ \hbox{$\scriptscriptstyle\mathchar"0\hexno\cmmibfam5F$}}%
+ \else\ifx#1>% 3. Eintrag
+ \hbox{$\mathchar"0269\thinspace$}%
+ \else\ifx#10% 4. Eintrag
+ {\rm0\raise.35ex\llap{$\scriptstyle\mathchar"026E$\kern.02em}}%
+ \else\ifx#11% 5. Eintrag
+ {\rm1\raise.35ex\llap{$\scriptscriptstyle\mathchar"026E$\kern.05em}}%
+ \else\ifx#1-% 6. Eintrag
+ \hbox{\lower1ex\hbox{$\acute{\raise1ex\hbox{{\tt\char95 }}}\>$}}%
+ \else\ifx#1~% 7. Eintrag
+ \hbox{%
+ \lower.7ex\hbox{$\acute{\raise.3ex\hbox{\smash{$\mathchar"0\hexno\msafam60$}}}\>$}}%
+ \else\ifx#1_% 8. Eintrag
+ \mathbin{\hbox{%
+ \vrule width0.4pt height0.25ex depth0pt
+ \vrule width0.6em height0.4pt depth0pt
+ \vrule width0.4pt height0.25ex depth0pt}}%
+ \else\ifx#1;% 9. Eintrag
+ \mathbin{\mskip-2mu;}%
+ \else\ifx#1<% 10. Eintrag
+ \mathbin{{\scriptstyle\mathchar"026E}%
+ \hskip-.375em \hbox to.5em{\rm
+ \leaders\hrule height 1.35ex depth -1.22ex\hfill}}%
+ \else\ifx#1*% 11. Eintrag
+ \mathord{{}_{\textstyle*\,}}%
+ \else\ifx#16% 12. Eintrag
+ \mathchar"0\hexno\msbfam67
+ \else\errhelp\ggkeinbekanntessymbol
+ \errmessage{^^JUnknown symbol after \string\G}%
+ ???
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+}
+\newif\ifgefunden
+\def\ist #1 in #2?{%
+ \def\finde##1#1##2\ednif{%
+ \ifx\empty##2\empty
+ \gefundenfalse
+ \else
+ \gefundentrue
+ \fi
+ \ignorespaces}%
+ \finde#2#1\ednif
+}
+\def\gfwerteverlauf#1{%
+ \ist #1 in ae?\ifgefunden
+ \hbox{{$\mathaccent"0027\csname k#1\endcsname$}}%
+ \else\errhelp=\ggkeinvokalbuchstabe
+ \errmessage{The operator must be applied to a lowercase (greek) vowel}%
+ \mathaccent"0027\ka
+ \fi}%
+\def\kasl{\gfwerteverlauf{a}}
+\def\kesl{\gfwerteverlauf{e}}
+\def\GI{\hbox{\rm I\kern.05em}}
+\def\GU{\hbox{\ufont
+ \setbox0=\hbox{\ufont U}\dimen0=\wd0 \advance\dimen0 by.05em
+ \rlap{\raise.1ex\hbox to\dimen0{\leaders\hrule height.11ex\hfill\kern.1em}}\kern-.01em
+ \lower\ufdimii\box0\kern\ufdimi
+ \llap{\raise.4ex\hbox{$\the\gftextfontaenderung\mathchar"0\hexno\msbfam1F$}}%
+ \kern0.1em
+}}
+\ifggsymloaded
+ \let\GUorg=\GU
+ \def\GU{\setbox0=\hbox{$\GUorg$}%
+ \mathord{\hbox to \wd0{\hss$\mathchar"0\hexno\ggfam55$\hss}}}%
+\fi
+\def\Gn{\hbox{\lower.2ex\hbox{\nfont
+ n\kern.1em}%
+ \llap{\raise.2ex\hbox{$\the\gftextfontaenderung\scriptstyle\mathchar"015E$}}}\kern.01em}
+\ifggsymloaded
+ \let\Gnorg=\Gn
+ \def\Gn{\setbox0=\hbox{$\Gnorg$}%
+ \mathord{\hbox to \wd0{\hss$\the\gftextfontaenderung\mathchar"0\hexno\ggfam11$\hss}}}%
+\fi
+\def\Gbf{\mkern0mu \setbox0=\hbox{{\ffont f}}\ffont
+ \kern-.02em\copy0\kern-\wd0 \kern.04em\copy0\kern-\wd0
+ \kern-.02em\raise.03ex\box0 \kern.1em
+ \llap{\raise2ex\hbox{\ffont.}}}
+\let\Gff\Gbf
+\def\Guu{\mathop{\kern0pt
+ \smash{\hbox{$\scriptscriptstyle\mathchar"0\hexno\cmmibfam5E\mkern-4mu\mathchar"0\hexno\cmmibfam5E$}}}%
+ \limits^{\lower.1ex\hbox{{$\the\gftextfontaenderung\mathchar"015F$}}}}
+\def\Gfm{\mathbin{\mathop{\kern0pt \smash{-}}%
+ \limits^{\raise.2ex\hbox{$\scriptstyle\mathchar"2\hexno\msafam61$}}}}
+\def\Gsm{\mathbin{\mathop{\kern0pt \smash{-}}%
+ \limits^{\raise.2ex\hbox{$\scriptstyle\mathchar"2\hexno\msafam60$}}}}
+\newbox\ggunrotbox \newbox\ggrotbox
+\def\ggrotate#1#2#3{\global\setbox\ggunrotbox=\hbox{#1}%
+ \expandafter\ifx\csname rot#2\endcsname\relax
+ \message{^^JCan't do that kind of rotation.^^J}%
+ \global\setbox\ggrotbox=\copy\ggunrotbox
+ \else
+ \ifnum#3=0 \else\ht\ggunrotbox=#3ex \fi
+ \global\setbox\ggrotbox=\hbox{\csname rot#2\endcsname\ggunrotbox}%
+ \global\setbox\ggunrotbox=\hbox to\wd\ggrotbox{\hss#1\hss}%
+ \fi}
+\def\prtggrotbox{\ifggrotiere\box\ggrotbox\else\box\ggunrotbox\fi}
+\def\Gy{\ggrotate{\hbox{\accent22 y}}u1%
+ \mathbin{\prtggrotbox}}
+\def\Ge{\ggrotate{\lower.65ex\hbox{%
+ $\scriptscriptstyle\mathchar"0\hexno\cmmibfam2C$}%
+ \llap{e\kern-.1em}}u1%
+ \mathbin{\,\prtggrotbox\,}}
+\def\Gc{\ggrotate{\lower.64ex\hbox{%
+ $\scriptscriptstyle\mathchar"0\hexno\cmmibfam2C$}%
+ \llap{c\kern-.1em}}u1%
+ \mathbin{\,\prtggrotbox\,}}
+\def\Gmf{\mathbin{\mathop{\kern0pt \smash{\scriptstyle\mathchar"2\hexno\msafam61}}%
+ \limits^{\lower1ex\hbox{$\scriptstyle-$}}}}
+\def\Gf{\ggrotate{$f$}u0%
+ \mathord{\ifggrotiere\rlap{\raise.1ex\hbox{$\scriptstyle\gamma$}}\kern.025em\lower.5ex\box\ggrotbox
+ \else\rlap{\raise.4ex\hbox{$\scriptstyle\gamma$}}\kern.02em\box\ggunrotbox\fi}}
+\def\GF{\ggrotate{$F$}u1%
+ \mathbin{\prtggrotbox}}
+\def\Gl{\mathbin{\hbox{\l}}}
+\def\Gp{\mathord{%
+ \rlap{\raise.45ex\hbox{$\scriptstyle\gamma$}}\kern.15em
+ \hbox{$p$}\,}}
+\def\Gss{\ggrotate{\ss}u0%
+ \mathbin{\ifggrotiere\lower.5ex\box\ggrotbox\else\box\ggunrotbox\fi}}
+\let\Gsz\Gss
+% Zuordnung nach TUGboat, V.9, p.20
+\def\gA{A}
+\def\gB{B}
+\def\gG{{\it\Gamma}}
+\def\gD{{\it\Delta}}
+\def\gL{{\it\Lambda}}
+\def\gM{M}
+\def\gN{N}
+\def\gR{P}
+\def\gS{{\it\Sigma}}
+\def\gF{{\it\Phi}}
+\def\gQ{X}
+\def\gY{{\it\Psi}}
+\def\gE{E}
+\def\gZ{Z}
+\def\gH{H}
+\def\gJ{{\it\Theta}}
+\def\gI{I}
+\def\gK{K}
+\def\gX{{\it\Xi}}
+\def\gO{O}
+\def\gP{{\it\Pi}}
+\def\gT{T}
+\def\gU{{\it\Upsilon}}
+\def\gW{{\it\Omega}}
+\def\ka{\alpha}
+\def\kb{\beta}
+\def\kg{\gamma}
+\def\kd{\delta}
+\def\ke{\epsilon}
+\def\kz{\zeta}
+\def\kh{\eta}
+\def\kj{\vartheta}
+\def\ki{\iota}
+\def\kk{\kappa}
+\def\kl{\lambda}
+\def\km{\mu}
+\def\kn{\nu}
+\def\kx{\xi}
+\def\ko{o}
+\def\kp{\pi}
+\def\kr{\varrho}
+\def\ks{\sigma}
+\def\kt{\tau}
+\def\ku{\upsilon}
+\def\kf{\varphi}
+\def\kq{\chi}
+\def\ky{\psi}
+\def\kw{\omega}
+\def\da{{\frak a}}
+\def\dd{{\frak d}}
+\def\de{{\frak e}}
+\def\df{{\frak f}}
+\def\dF{{\frak F}}
+\def\dc{{\frak c}}
+\def\dg{{\frak g}}
+\def\dm{{\frak m}}
+\def\dn{{\frak n}}
+\def\ddo{{\frak o}}
+\def\ddp{{\frak p}}
+\def\dq{{\frak q}}
+\def\dr{{\frak r}}
+\def\dt{{\frak t}}
+\def\du{{\frak u}}
+\def\trenner #1{%
+ \vskip 0pt plus 0.5\baselineskip minus 0.25\baselineskip
+ \centerline{\hbox to 0.#1\hsize{\leaders\hrule height 1pt\hfill}}%
+ \vskip 2pt plus 0.5\baselineskip minus 0.25\baselineskip
+}
+\def\gfggtrenner{\hbox to 6\gfbseinheit{\leaders\hrule height 1pt\hfill}%
+ \ \lower.5ex\hbox{$\bullet$}\
+ \hbox to 6\gfbseinheit{\leaders\hrule height 1pt\hfill}%
+}
+\def\ggtrenner{%
+ \vskip 0pt plus 0.5\baselineskip minus 0.25\baselineskip
+ \centerline{\hskip\leftskip\gfggtrenner\hskip\rightskip}%
+ \vskip 2pt plus 0.5\baselineskip minus 0.25\baselineskip
+}
+\let\nlpc\nzpz % NewLine Position Character
+\let\ci\zi % Character Inside
+\let\ce\ze % Character End
+\let\rep\wdh % REPeat
+\def\bcc#1/#2#3:#4#5\ecc{% ConClusion
+ \bss#1/#2#3:#4#5\ess
+}
+\let\formula\formel
+\let\followswith\folgtmit
+\let\named\genannt
+\let\use\verwende
+\let\decollator\trenner
+\let\separator\ggtrenner
+\outer\def\outof p#1,#2"#3"with#4\thatis{%
+ \gfbsaus p#1,#2"#3"mit#4\also
+}
+\outer\def\substituting p#1 #2\whichgives{%
+ \gfbsdurch p#1 #2\folgende
+}
+\let\gfdefinition\erklaerung
+% Local Variables:
+% coding: iso-latin-9-unix
+% End:
diff --git a/macros/plain/contrib/gfnotation/README b/macros/plain/contrib/gfnotation/README
new file mode 100644
index 0000000000..04e678e925
--- /dev/null
+++ b/macros/plain/contrib/gfnotation/README
@@ -0,0 +1,33 @@
+GFnotation.tex implements macros to typeset formulas and inferences in
+Gottlob Frege's notation that is used in his book ``Begriffsschrift, eine
+der arithmetischen nachgebildete Formelsprache des reinen Denkens'' or
+in the style of his main work ``Grundgesetze der Arithmetik.''
+
+Besides the two output styles the macros provide two input styles. A
+``symbolic representation'' that codes each element of the notation
+with three symbols. And a ``short form'' that generates the notation
+recursively from a sequential input.
+
+This package is released under the GNU General Public License.
+See the file COPYING.
+
+
+The package requires the following files and packages from CTAN:
+
+ 1) amssym.def (from amstex)
+ 2) amsfonts
+ 3) rotate.tex
+ 4) fge fonts (optional)
+ You need item 4) to compile the users guide.
+
+
+The package consists of the following files:
+
+gfnotation.tex -- the macros for the notation
+ version 2.9, 29.03.2015
+gfnotation-doc.pdf -- a users guide
+gfnotation-doc.tex -- the source of the users guide
+README -- this file
+
+Copyright (C) 2015 Udo Wermuth (author)
+ u dot wermuth (at) icloud dot com
diff --git a/macros/plain/contrib/hanoi/hanoi.tex b/macros/plain/contrib/hanoi/hanoi.tex
new file mode 100644
index 0000000000..fb8ff66d50
--- /dev/null
+++ b/macros/plain/contrib/hanoi/hanoi.tex
@@ -0,0 +1,43 @@
+% Author: Brian Blackmore <blb8@po.cwru.edu>
+% Date: January 1, 2012
+% Version: 20120102
+% License: Public Domain
+% Requirements: Plain TeX
+
+ %
+ % %
+ % %
+ % %
+ % Tower %
+ % of %
+ % Brahma %
+ % (Plain TeX) %
+ % by Brian %
+ % Blackmore %
+ % 20120101 %
+ % %
+ \nopagenumbers\output{}{}
+ \chardef\_13\catcode%edocta
+ 126 \_ \let ^^> \catcode~47 0
+ ~95/_/let_\let~43/__^^k/def ~64
+ 11 ~81\_ ~86 1 ~119 ~86 ~85 2 ~87
+ ~85 ~`/!/_~80\__P/vsize~34 14~83\_+
+ S#1{}~`/X13_X\expandafter\divide\hsize
+ by3 \multiplyP3 \output{\shipout/vbox to
+ 0.34PV\hbox to\z@w\vsplit255 to0.34P\hfil% A
+ \vsplit255 to0.34P\hfil/vbox to0.34Pw\unvbox SVU
+ Sa 255U\hssWU\ifnum/outputpenalty>-10000\else" \font
+ \dosupereject\fiW ~`\>13_^^~\rightline _!\count \font"%
+ /rm=cmr8\rm\baselineskip9pt !2 0 +/AV1 2 3 4 5 6 7 8 9 10 11
+ 12 13 14 15 VW wU}+\BwVU wUW +\CV{U w}}+/spw\vboxw>V Move Sb/the
+ !2U>w/A:U>V\B:W>w\C:}}\vskip8pt plus4pt }+\f#1 #2f{#1U +/nf#1 #2fV%W
+ #2W +\h#1wX\f#1fW +/T#1VX\nf#1f} +\rh#1w\xdef#1V/TV#1}WU SwU+\move#1#2{"
+ \global\advance!2by1 /edef\twX\hV#1}W/rhw#1W\xdef#2VSwby-1 7W\t\space#2}/spW
+ +Q#1#2#3#4w\ifnum#1=1 \moveV#2}w#3U/elseV!0 #1\advance!0by-1 \edef/taV"#7WWVabcd
+ /the!0WQw/ta}V#2Ww#4}{#3W/moveV#2UV#3}QV\ta}w#4Ww#3Ww#2U}/fi}Q V10WV/AUw\C}V/BW \bye
+=======================================================================================
+If you want the full tower with 15 discs, change this number ten ^^ to 15 for 713 pgs.
+
+ Happy TeXing in 2012!
+
+=======================================================================================
diff --git a/macros/plain/contrib/happy4th/happy4th.pdf b/macros/plain/contrib/happy4th/happy4th.pdf
new file mode 100644
index 0000000000..5a643c6598
--- /dev/null
+++ b/macros/plain/contrib/happy4th/happy4th.pdf
Binary files differ
diff --git a/macros/plain/contrib/happy4th/happy4th.tex b/macros/plain/contrib/happy4th/happy4th.tex
new file mode 100644
index 0000000000..121e047614
--- /dev/null
+++ b/macros/plain/contrib/happy4th/happy4th.tex
@@ -0,0 +1,35 @@
+% Author: Brian Blackmore <blb8@po.cwru.edu>
+% Date: July 4, 2007
+% Version: 20120102
+% Original source: efnet #TeX
+% License: Public Domain
+% Requirements: Plain TeX
+%
+\nopagenumbers \centerline{Fireworks Display} \centerline{Brian Blackmore}
+\centerline{Page Down As Quickly As You Wish}\centerline{Enjoy}\vfill\eject
+\catcode`~\active\let~\catcode~`[\active \let[\let~`]\active ~`Y=1[]\active
+~`@=2~`|=][|\expandafter ~`>][>\advance~`:][:\romannumeral~`+][+\count~`H10
+~`&][&\def~`*][*\multiply[~\dimen[]\endcsname[[\csname&\burst{\bst{30}{29@}
+&\bdYO} &\ss{\rsta{-2.2}{.2}{3@H\rstaY-2.2}{-0.5}{8@ \rsta{-2.2}{0.45}{0}@%
+&\ssf{\dra\adva} &\draY+0=1H\loop\dr{x:+0}{y:+0}\vskip-\baselineskip >+0by1
+\ifnum+0<\bc\repeat\vfill\eject}&\msa{\rsta{-2}Y0}{4.24@\rsta{-1.5}0Y4.24}}
+&\adv#1#2#3#4{ ~0=[#1] ~1=[#3] >~0Hby~1 |\edef[#1]{[the]~0@ ~0=[#2] ~1=[#4]
+>~0by~1 |\edef[#2]{[the]~0}~0=[#4]H~1=0.3in>~0by~1|\edef[#4]{\the~0}>+0by1}
+&\sf{[ssf]\ssf\ssf\ssf\ssf\ssf@\catcode`!0&\fs{!let\vyi\vxi&\ssfY\sdra\adva
+~0=\yi >~0by0inH\ifdim~0<8in \elseH&\yi{8in}&\vyi{0in}\fi}\mf@ +3=\the\time
+&\rs{*+3 by12 >+3 by5H+1=+3 [divide]+1by151 *+1by151 >+3by-+1}&\mf{\ssf\ssf
+[ssf]&\bd{o}\ssf\ssf} &\asm{\rsta{-2.3@0Y4.24}&!bd{\ifnum+0=1{\bf\TeX}\else
+o!fi}} &\adva{+0=1H\loop \adv{x:+0@Yy:+0@{vx:+0}{vy:+0}\ifnum+0<\bc\repeat@
+&\ms{[msa][asm][sf]} &\dr#1#2{\vbox to0pt{\parindent0pt\vskip-1in\vskip[#2]
+\hboxHto\hsize{\hskip-1in!hskip[#1]\hbox to 0ptY\hss[bd]\hss}\hss}\vss}@\rs
+&\gen{|\edef[x:+0]{\xi}|\edef[y:+0]{\yi} +1=+3>+3by+0\rs~0=+3pt\rs\divide~0
+by151*~0 by151H>~0by-50.5pt|\edef[vx:+0]Y\the~0}~0=+3pt\rs\divide~0by151*~0
+by151>~0by-60.5pt>+3by+1|!edef[vy:+0]Y\the~0}@&\bst#1#2{+0=1 \loop\gen>+0by
+1 \ifnum+0<#1\repeat&\bc{#2}&\bd{$\bullet$}}&\sdra{\dra~0=\yi \divide~0Hby3
+[font]\tf=cmr10 at~0H!vbox to 0pt{[parindent]0pt\vskip-1in\vskip\yi\hboxHto
+\hsize{\hskip-1in\hskip\xi\hbox to0pt{\hss\tf\TeX\hss@\hss}\vss}}&\mburstY%
+\bst{60}{59@}&\rst#1#2#3Y&\yi{11in@&\xi{#3in}&!vyi{#1in}&\vxiY#2in}&!uat{O@
+\ambd&\bc{1}}&\ambd{&\bdY\ifnum+0=1O\else o\fi}&!bc{10@}H\catcode`\Z\active
+&\rsta{\sbm\rst}&\sbm{\sf\burst\mf}\rstY-2@{-0.2}{5.25}!ss\sf&Z{bye@&!ssY13
+wEbeDonE37}&!bc{1}\rsta{-2.5@0Y4.24}\ms\mburst&\vxi{0in}\fs!sf\sdra[vskip]%
+-\baselineskip\centerline{H\char`\HappyHHJuly 4th\char`\!H}\expandafter[Z]Z
diff --git a/macros/plain/contrib/harvmac/README b/macros/plain/contrib/harvmac/README
new file mode 100644
index 0000000000..f2b46c9326
--- /dev/null
+++ b/macros/plain/contrib/harvmac/README
@@ -0,0 +1,17 @@
+Copyright 1991 Paul Ginsparg
+
+This work may be distributed and/or modified under the
+conditions of the terms of the Creative Commons
+Attribution 3.0 Unported Licence which may be found at
+http://creativecommons.org/licenses/by/3.0/legalcode
+and described in human readable form at
+http://creativecommons.org/licenses/by/3.0/
+The attribution requirement may be satisfied by including
+an acknowledgement that a work is "based on harvmac by
+Paul Ginsparg".
+
+Copyright and licensing information added with the
+permission of the author by Clea F. Rees on 2008/12/20.
+
+
+harvmac provides macros for scientific articles.
diff --git a/macros/plain/contrib/harvmac/harvmac.tex b/macros/plain/contrib/harvmac/harvmac.tex
new file mode 100644
index 0000000000..dd77f09dc6
--- /dev/null
+++ b/macros/plain/contrib/harvmac/harvmac.tex
@@ -0,0 +1,339 @@
+%% Copyright 1991 Paul Ginsparg
+%
+% This work may be distributed and/or modified under the
+% conditions of the terms of the Creative Commons
+% Attribution 3.0 Unported Licence which may be found at
+% http://creativecommons.org/licenses/by/3.0/legalcode
+% and described in human readable form at
+% http://creativecommons.org/licenses/by/3.0/
+% The attribution requirement may be satisfied by including
+% an acknowledgement that a work is "based on harvmac by
+% Paul Ginsparg".
+%
+% Copyright and licensing information added with the
+% permission of the author by Clea F. Rees on 2008/12/20.
+%
+%%%%%%%%%%%%%%%%%% tex macros for preprints, cm version %%%%%%%%%%%%%%
+% (P. Ginsparg, last updated 9/91)
+% if confused, type `b' in response to query
+%
+%---------------------------------------------------------------------%
+%% site dependent options:
+%% \unredoffs and \redoffs define horizontal and vertical offsets
+%% respectively for unreduced and reduced modes. \speclscape defines
+%% the \special{} call that sets printer to landscape (sideways) mode.
+%% from standard set below, leave uncommented as appropriate or redefine
+%
+%%% next 400dpi
+%\def\unredoffs{} \def\redoffs{\voffset=-.31truein\hoffset=-.48truein}
+%\def\speclscape{\special{landscape}}
+%
+%%% apple lw
+\def\unredoffs{} \def\redoffs{\voffset=-.31truein\hoffset=-.59truein}
+\def\speclscape{\special{ps: landscape}}
+%
+%%% qms lasergrafix:
+%\def\unredoffs{} \def\redoffs{\voffset=-.4truein\hoffset=.125truein}
+%\def\speclscape{\special{qms: landscape}}
+%
+%%% saclay A4 paper:
+%\def\unredoffs{\hoffset-.14truein\voffset-.2truein}
+%\def\redoffs{\voffset=-.45truein\hoffset=-.21truein}
+%\def\speclscape{\special{landscape}}
+%
+%---------------------------------------------------------------------%
+%
+\newbox\leftpage \newdimen\fullhsize \newdimen\hstitle \newdimen\hsbody
+\tolerance=1000\hfuzz=2pt\def\fontflag{cm}
+%
+\catcode`\@=11 % This allows us to modify PLAIN macros.
+\def\bigans{b }
+\message{ big or little (b/l)? }\read-1 to\answ
+%
+\ifx\answ\bigans\message{(This will come out unreduced.}
+\magnification=1200\unredoffs\baselineskip=16pt plus 2pt minus 1pt
+\hsbody=\hsize \hstitle=\hsize %take default values for unreduced format
+%
+\else\message{(This will be reduced.} \let\l@r=L
+\magnification=1000\baselineskip=16pt plus 2pt minus 1pt \vsize=7truein
+\redoffs \hstitle=8truein\hsbody=4.75truein\fullhsize=10truein\hsize=\hsbody
+%
+\output={\ifnum\pageno=0 %%% This is the HUTP version
+ \shipout\vbox{\speclscape{\hsize\fullhsize\makeheadline}
+ \hbox to \fullhsize{\hfill\pagebody\hfill}}\advancepageno
+ \else
+ \almostshipout{\leftline{\vbox{\pagebody\makefootline}}}\advancepageno
+ \fi}
+\def\almostshipout#1{\if L\l@r \count1=1 \message{[\the\count0.\the\count1]}
+ \global\setbox\leftpage=#1 \global\let\l@r=R
+ \else \count1=2
+ \shipout\vbox{\speclscape{\hsize\fullhsize\makeheadline}
+ \hbox to\fullhsize{\box\leftpage\hfil#1}} \global\let\l@r=L\fi}
+\fi
+%---------------------------------------------------------------------
+%
+\newcount\yearltd\yearltd=\year\advance\yearltd by -1900
+\def\HUTP#1#2{\Title{HUTP-\number\yearltd/A#1}{#2}}
+\def\Title#1#2{\nopagenumbers\abstractfont\hsize=\hstitle\rightline{#1}%
+\vskip 1in\centerline{\titlefont #2}\abstractfont\vskip .5in\pageno=0}
+%
+\def\Date#1{\vfill\leftline{#1}\tenpoint\supereject\global\hsize=\hsbody%
+\footline={\hss\tenrm\folio\hss}}% restores pagenumbers
+%
+% use following instead of \Date on the preliminary draft,
+% puts date/time on each page in big mode, writes labels in margins
+\def\draft{\draftmode\Date{\draftdate}}
+\def\draftmode{\message{ DRAFTMODE }\def\draftdate{{\rm preliminary draft:
+\number\month/\number\day/\number\yearltd\ \ \hourmin}}%
+\headline={\hfil\draftdate}\writelabels\baselineskip=20pt plus 2pt minus 2pt
+ {\count255=\time\divide\count255 by 60 \xdef\hourmin{\number\count255}
+ \multiply\count255 by-60\advance\count255 by\time
+ \xdef\hourmin{\hourmin:\ifnum\count255<10 0\fi\the\count255}}}
+% use \nolabels to get rid of eqn, ref, and fig labels in draft mode
+\def\nolabels{\def\wrlabeL##1{}\def\eqlabeL##1{}\def\reflabeL##1{}}
+\def\writelabels{\def\wrlabeL##1{\leavevmode\vadjust{\rlap{\smash%
+{\line{{\escapechar=` \hfill\rlap{\sevenrm\hskip.03in\string##1}}}}}}}%
+\def\eqlabeL##1{{\escapechar-1\rlap{\sevenrm\hskip.05in\string##1}}}%
+\def\reflabeL##1{\noexpand\llap{\noexpand\sevenrm\string\string\string##1}}}
+\nolabels
+%
+% tagged sec numbers
+\global\newcount\secno \global\secno=0
+\global\newcount\meqno \global\meqno=1
+%
+\def\newsec#1{\global\advance\secno by1\message{(\the\secno. #1)}
+%\ifx\answ\bigans \vfill\eject \else \bigbreak\bigskip \fi %if desired
+\global\subsecno=0\eqnres@t\noindent{\bf\the\secno. #1}
+\writetoca{{\secsym} {#1}}\par\nobreak\medskip\nobreak}
+\def\eqnres@t{\xdef\secsym{\the\secno.}\global\meqno=1\bigbreak\bigskip}
+\def\sequentialequations{\def\eqnres@t{\bigbreak}}\xdef\secsym{}
+%
+\global\newcount\subsecno \global\subsecno=0
+\def\subsec#1{\global\advance\subsecno by1\message{(\secsym\the\subsecno. #1)}
+\ifnum\lastpenalty>9000\else\bigbreak\fi
+\noindent{\it\secsym\the\subsecno. #1}\writetoca{\string\quad
+{\secsym\the\subsecno.} {#1}}\par\nobreak\medskip\nobreak}
+%
+\def\appendix#1#2{\global\meqno=1\global\subsecno=0\xdef\secsym{\hbox{#1.}}
+\bigbreak\bigskip\noindent{\bf Appendix #1. #2}\message{(#1. #2)}
+\writetoca{Appendix {#1.} {#2}}\par\nobreak\medskip\nobreak}
+%
+% \eqn\label{a+b=c} gives displayed equation, numbered
+% consecutively within sections.
+% \eqnn and \eqna define labels in advance (of eqalign?)
+%
+\def\eqnn#1{\xdef #1{(\secsym\the\meqno)}\writedef{#1\leftbracket#1}%
+\global\advance\meqno by1\wrlabeL#1}
+\def\eqna#1{\xdef #1##1{\hbox{$(\secsym\the\meqno##1)$}}
+\writedef{#1\numbersign1\leftbracket#1{\numbersign1}}%
+\global\advance\meqno by1\wrlabeL{#1$\{\}$}}
+\def\eqn#1#2{\xdef #1{(\secsym\the\meqno)}\writedef{#1\leftbracket#1}%
+\global\advance\meqno by1$$#2\eqno#1\eqlabeL#1$$}
+%
+% footnotes
+\newskip\footskip\footskip14pt plus 1pt minus 1pt %sets footnote baselineskip
+\def\footnotefont{\ninepoint}\def\f@t#1{\footnotefont #1\@foot}
+\def\f@@t{\baselineskip\footskip\bgroup\footnotefont\aftergroup\@foot\let\next}
+\setbox\strutbox=\hbox{\vrule height9.5pt depth4.5pt width0pt}
+%
+\global\newcount\ftno \global\ftno=0
+\def\foot{\global\advance\ftno by1\footnote{$^{\the\ftno}$}}
+%
+%say \footend to put footnotes at end
+%will cause problems if \ref used inside \foot, instead use \nref before
+\newwrite\ftfile
+\def\footend{\def\foot{\global\advance\ftno by1\chardef\wfile=\ftfile
+$^{\the\ftno}$\ifnum\ftno=1\immediate\openout\ftfile=foots.tmp\fi%
+\immediate\write\ftfile{\noexpand\smallskip%
+\noexpand\item{f\the\ftno:\ }\pctsign}\findarg}%
+\def\footatend{\vfill\eject\immediate\closeout\ftfile{\parindent=20pt
+\centerline{\bf Footnotes}\nobreak\bigskip\input foots.tmp }}}
+\def\footatend{}
+%
+% \ref\label{text}
+% generates a number, assigns it to \label, generates an entry.
+% To list the refs on a separate page, \listrefs
+%
+\global\newcount\refno \global\refno=1
+\newwrite\rfile
+%
+\def\ref{[\the\refno]\nref}
+\def\nref#1{\xdef#1{[\the\refno]}\writedef{#1\leftbracket#1}%
+\ifnum\refno=1\immediate\openout\rfile=refs.tmp\fi
+\global\advance\refno by1\chardef\wfile=\rfile\immediate
+\write\rfile{\noexpand\item{#1\ }\reflabeL{#1\hskip.31in}\pctsign}\findarg}
+% horrible hack to sidestep tex \write limitation
+\def\findarg#1#{\begingroup\obeylines\newlinechar=`\^^M\pass@rg}
+{\obeylines\gdef\pass@rg#1{\writ@line\relax #1^^M\hbox{}^^M}%
+\gdef\writ@line#1^^M{\expandafter\toks0\expandafter{\striprel@x #1}%
+\edef\next{\the\toks0}\ifx\next\em@rk\let\next=\endgroup\else\ifx\next\empty%
+\else\immediate\write\wfile{\the\toks0}\fi\let\next=\writ@line\fi\next\relax}}
+\def\striprel@x#1{} \def\em@rk{\hbox{}}
+%
+\def\lref{\begingroup\obeylines\lr@f}
+\def\lr@f#1#2{\gdef#1{\ref#1{#2}}\endgroup\unskip}
+%
+\def\semi{;\hfil\break}
+\def\addref#1{\immediate\write\rfile{\noexpand\item{}#1}} %now unnecessary
+%
+\def\listrefs{\footatend\vfill\supereject\immediate\closeout\rfile\writestoppt
+\baselineskip=14pt\centerline{{\bf References}}\bigskip{\frenchspacing%
+\parindent=20pt\escapechar=` \input refs.tmp\vfill\eject}\nonfrenchspacing}
+%
+\def\startrefs#1{\immediate\openout\rfile=refs.tmp\refno=#1}
+%
+\def\xref{\expandafter\xr@f}\def\xr@f[#1]{#1}
+\def\refs#1{\count255=1[\r@fs #1{\hbox{}}]}
+\def\r@fs#1{\ifx\und@fined#1\message{reflabel \string#1 is undefined.}%
+\nref#1{need to supply reference \string#1.}\fi%
+\vphantom{\hphantom{#1}}\edef\next{#1}\ifx\next\em@rk\def\next{}%
+\else\ifx\next#1\ifodd\count255\relax\xref#1\count255=0\fi%
+\else#1\count255=1\fi\let\next=\r@fs\fi\next}
+%
+\def\figures{\centerline{{\bf Figure Captions}}\medskip\parindent=40pt%
+\def\fig##1##2{\medskip\item{Fig.~##1. }##2}}
+%
+% this is ugly, but moore insists
+\newwrite\ffile\global\newcount\figno \global\figno=1
+%
+\def\fig{fig.~\the\figno\nfig}
+\def\nfig#1{\xdef#1{fig.~\the\figno}%
+\writedef{#1\leftbracket fig.\noexpand~\the\figno}%
+\ifnum\figno=1\immediate\openout\ffile=figs.tmp\fi\chardef\wfile=\ffile%
+\immediate\write\ffile{\noexpand\medskip\noexpand\item{Fig.\ \the\figno. }
+\reflabeL{#1\hskip.55in}\pctsign}\global\advance\figno by1\findarg}
+%
+\def\listfigs{\vfill\eject\immediate\closeout\ffile{\parindent40pt
+\baselineskip14pt\centerline{{\bf Figure Captions}}\nobreak\medskip
+\escapechar=` \input figs.tmp\vfill\eject}}
+%
+\def\xfig{\expandafter\xf@g}\def\xf@g fig.\penalty\@M\ {}
+\def\figs#1{figs.~\f@gs #1{\hbox{}}}
+\def\f@gs#1{\edef\next{#1}\ifx\next\em@rk\def\next{}\else
+\ifx\next#1\xfig #1\else#1\fi\let\next=\f@gs\fi\next}
+%
+\newwrite\lfile
+{\escapechar-1\xdef\pctsign{\string\%}\xdef\leftbracket{\string\{}
+\xdef\rightbracket{\string\}}\xdef\numbersign{\string\#}}
+\def\writedefs{\immediate\openout\lfile=labeldefs.tmp \def\writedef##1{%
+\immediate\write\lfile{\string\def\string##1\rightbracket}}}
+%
+\def\writestop{\def\writestoppt{\immediate\write\lfile{\string\pageno%
+\the\pageno\string\startrefs\leftbracket\the\refno\rightbracket%
+\string\def\string\secsym\leftbracket\secsym\rightbracket%
+\string\secno\the\secno\string\meqno\the\meqno}\immediate\closeout\lfile}}
+%
+\def\writestoppt{}\def\writedef#1{}
+%
+\def\seclab#1{\xdef #1{\the\secno}\writedef{#1\leftbracket#1}\wrlabeL{#1=#1}}
+\def\subseclab#1{\xdef #1{\secsym\the\subsecno}%
+\writedef{#1\leftbracket#1}\wrlabeL{#1=#1}}
+%
+\newwrite\tfile \def\writetoca#1{}
+\def\leaderfill{\leaders\hbox to 1em{\hss.\hss}\hfill}
+% use this to write file with table of contents
+\def\writetoc{\immediate\openout\tfile=toc.tmp
+ \def\writetoca##1{{\edef\next{\write\tfile{\noindent ##1
+ \string\leaderfill {\noexpand\number\pageno} \par}}\next}}}
+% and this lists table of contents on second pass
+\def\listtoc{\centerline{\bf Contents}\nobreak\medskip{\baselineskip=12pt
+ \parskip=0pt\catcode`\@=11 \input toc.tex \catcode`\@=12 \bigbreak\bigskip}}
+%
+\catcode`\@=12 % at signs are no longer letters
+%
+% Unpleasantness in calling in abstract and title fonts
+\edef\tfontsize{\ifx\answ\bigans scaled\magstep3\else scaled\magstep4\fi}
+\font\titlerm=cmr10 \tfontsize \font\titlerms=cmr7 \tfontsize
+\font\titlermss=cmr5 \tfontsize \font\titlei=cmmi10 \tfontsize
+\font\titleis=cmmi7 \tfontsize \font\titleiss=cmmi5 \tfontsize
+\font\titlesy=cmsy10 \tfontsize \font\titlesys=cmsy7 \tfontsize
+\font\titlesyss=cmsy5 \tfontsize \font\titleit=cmti10 \tfontsize
+\skewchar\titlei='177 \skewchar\titleis='177 \skewchar\titleiss='177
+\skewchar\titlesy='60 \skewchar\titlesys='60 \skewchar\titlesyss='60
+%
+\def\titlefont{\def\rm{\fam0\titlerm}% switch to title font
+\textfont0=\titlerm \scriptfont0=\titlerms \scriptscriptfont0=\titlermss
+\textfont1=\titlei \scriptfont1=\titleis \scriptscriptfont1=\titleiss
+\textfont2=\titlesy \scriptfont2=\titlesys \scriptscriptfont2=\titlesyss
+\textfont\itfam=\titleit \def\it{\fam\itfam\titleit}\rm}
+%
+\font\authorfont=cmcsc10 \ifx\answ\bigans\else scaled\magstep1\fi
+%
+\ifx\answ\bigans\def\abstractfont{\tenpoint}\else
+\font\abssl=cmsl10 scaled \magstep1
+\font\absrm=cmr10 scaled\magstep1 \font\absrms=cmr7 scaled\magstep1
+\font\absrmss=cmr5 scaled\magstep1 \font\absi=cmmi10 scaled\magstep1
+\font\absis=cmmi7 scaled\magstep1 \font\absiss=cmmi5 scaled\magstep1
+\font\abssy=cmsy10 scaled\magstep1 \font\abssys=cmsy7 scaled\magstep1
+\font\abssyss=cmsy5 scaled\magstep1 \font\absbf=cmbx10 scaled\magstep1
+\skewchar\absi='177 \skewchar\absis='177 \skewchar\absiss='177
+\skewchar\abssy='60 \skewchar\abssys='60 \skewchar\abssyss='60
+%
+\def\abstractfont{\def\rm{\fam0\absrm}% switch to abstract font
+\textfont0=\absrm \scriptfont0=\absrms \scriptscriptfont0=\absrmss
+\textfont1=\absi \scriptfont1=\absis \scriptscriptfont1=\absiss
+\textfont2=\abssy \scriptfont2=\abssys \scriptscriptfont2=\abssyss
+\textfont\itfam=\bigit \def\it{\fam\itfam\bigit}\def\footnotefont{\tenpoint}%
+\textfont\slfam=\abssl \def\sl{\fam\slfam\abssl}%
+\textfont\bffam=\absbf \def\bf{\fam\bffam\absbf}\rm}\fi
+%
+\def\tenpoint{\def\rm{\fam0\tenrm}% switch back to 10-point type
+\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+\textfont\itfam=\tenit \def\it{\fam\itfam\tenit}\def\footnotefont{\ninepoint}%
+\textfont\bffam=\tenbf \def\bf{\fam\bffam\tenbf}\def\sl{\fam\slfam\tensl}\rm}
+%
+\font\ninerm=cmr9 \font\sixrm=cmr6 \font\ninei=cmmi9 \font\sixi=cmmi6
+\font\ninesy=cmsy9 \font\sixsy=cmsy6 \font\ninebf=cmbx9
+\font\nineit=cmti9 \font\ninesl=cmsl9 \skewchar\ninei='177
+\skewchar\sixi='177 \skewchar\ninesy='60 \skewchar\sixsy='60
+%
+\def\ninepoint{\def\rm{\fam0\ninerm}% switch to footnote font
+\textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+\textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei
+\textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+\textfont\itfam=\ninei \def\it{\fam\itfam\nineit}\def\sl{\fam\slfam\ninesl}%
+\textfont\bffam=\ninebf \def\bf{\fam\bffam\ninebf}\rm}
+%
+%---------------------------------------------------------------------
+%
+\def\noblackbox{\overfullrule=0pt}
+\hyphenation{anom-aly anom-alies coun-ter-term coun-ter-terms}
+%
+\def\inv{^{\raise.15ex\hbox{${\scriptscriptstyle -}$}\kern-.05em 1}}
+\def\dup{^{\vphantom{1}}}
+\def\Dsl{\,\raise.15ex\hbox{/}\mkern-13.5mu D} %this one can be subscripted
+\def\dsl{\raise.15ex\hbox{/}\kern-.57em\partial}
+\def\del{\partial}
+\def\Psl{\dsl}
+\def\tr{{\rm tr}} \def\Tr{{\rm Tr}}
+\font\bigit=cmti10 scaled \magstep1
+\def\biglie{\hbox{\bigit\$}} %pound sterling
+\def\lspace{\ifx\answ\bigans{}\else\qquad\fi}
+\def\lbspace{\ifx\answ\bigans{}\else\hskip-.2in\fi} % $$\lbspace...$$
+\def\boxeqn#1{\vcenter{\vbox{\hrule\hbox{\vrule\kern3pt\vbox{\kern3pt
+ \hbox{${\displaystyle #1}$}\kern3pt}\kern3pt\vrule}\hrule}}}
+\def\mbox#1#2{\vcenter{\hrule \hbox{\vrule height#2in
+ \kern#1in \vrule} \hrule}} %e.g. \mbox{.1}{.1}
+% matters of taste
+%\def\tilde{\widetilde} \def\bar{\overline} \def\hat{\widehat}
+%
+% some sample definitions
+\def\CAG{{\cal A/\cal G}} \def\CO{{\cal O}} % curly letters
+\def\CA{{\cal A}} \def\CC{{\cal C}} \def\CF{{\cal F}} \def\CG{{\cal G}}
+\def\CL{{\cal L}} \def\CH{{\cal H}} \def\CI{{\cal I}} \def\CU{{\cal U}}
+\def\CB{{\cal B}} \def\CR{{\cal R}} \def\CD{{\cal D}} \def\CT{{\cal T}}
+\def\e#1{{\rm e}^{^{\textstyle#1}}}
+\def\grad#1{\,\nabla\!_{{#1}}\,}
+\def\gradgrad#1#2{\,\nabla\!_{{#1}}\nabla\!_{{#2}}\,}
+\def\ph{\varphi}
+\def\psibar{\overline\psi}
+\def\om#1#2{\omega^{#1}{}_{#2}}
+\def\vev#1{\langle #1 \rangle}
+\def\lform{\hbox{$\sqcup$}\llap{\hbox{$\sqcap$}}}
+\def\darr#1{\raise1.5ex\hbox{$\leftrightarrow$}\mkern-16.5mu #1}
+\def\lie{\hbox{\it\$}} %pound sterling
+\def\ha{{1\over2}}
+\def\half{{\textstyle{1\over2}}} %puts a small half in a displayed eqn
+\def\roughly#1{\raise.3ex\hbox{$#1$\kern-.75em\lower1ex\hbox{$\sim$}}}
diff --git a/macros/plain/contrib/harvmac/harvsamp.tex b/macros/plain/contrib/harvmac/harvsamp.tex
new file mode 100644
index 0000000000..45c557389f
--- /dev/null
+++ b/macros/plain/contrib/harvmac/harvsamp.tex
@@ -0,0 +1,288 @@
+%% Copyright 1991 Paul Ginsparg
+%
+% This work may be distributed and/or modified under the
+% conditions of the terms of the Creative Commons
+% Attribution 3.0 Unported Licence which may be found at
+% http://creativecommons.org/licenses/by/3.0/legalcode
+% and described in human readable form at
+% http://creativecommons.org/licenses/by/3.0/
+% The attribution requirement may be satisfied by including
+% an acknowledgement that a work is "based on harvmac by
+% Paul Ginsparg".
+%
+% Copyright and licensing information added with the
+% permission of the author by Clea F. Rees on 2008/12/20.
+%
+\input harvmac
+
+\Title{HUTP-91/A000}{This is the Template}
+
+%For more complicated situations, substitute for {\it either\/} argument:
+%\Title{\vbox{\baselineskip12pt\hbox{HUTP-88/A000}\hbox{SLAC-PUB 88-001}
+% \hbox{photocopy at own risk}}}
+%{\vbox{\centerline{This title is too long to fit}
+% \vskip2pt\centerline{comfortably on one line*}}}
+% \footnote{}{*optional footnote on title}
+
+\centerline{Author One and Author Two\footnote{$^\dagger$}
+{(author@huhepl.hepnet, \ @huhepl.bitnet, \ or \ @huhepl.harvard.edu)}}
+\bigskip\centerline{Lyman Laboratory of Physics}
+\centerline{Harvard University}\centerline{Cambridge, MA 02138}
+
+%if too many authors for abstract on same page, say \vfill\eject\pageno0
+
+\vskip .3in
+This sample is produced by the file `sample.tex' in the directory
+tex\$macros and is intended to exhibit the conventions used
+in the file `harvmac.tex' also in this directory, as inputted above.
+{\it (You do not need to copy {\rm tex\$macros:harvmac.tex} into your own
+directory\/}, nor do you need to explicitly specify its directory as
+long as there is no harvmac.tex in your default directory.)
+The vskips, etc., on this title page have been chosen to give
+a reasonable looking HUTP style preprint in either full-sized or reduced
+format (selected by typing b or $\ell$ in response to the big/little query
+from the macro). Note that the `Title' and `Date' macros should be used
+together to choose fonts and horizontal size appropriately, suppress first
+page number, etc., for `big' and `little' formats with title page. One may
+most easily start a new paper by making a copy of this sample and then
+replacing the dummy text with something potentially more interesting. It is
+useful to read pp.~1--54, 127--201 of Knuth's {\it Texbook\/}.
+
+\Date{4/91} %replace this line by \draft for preliminary versions
+ %or specify \draftmode at some point
+
+%if you want double-space, use e.g. \baselineskip=20pt plus 2pt minus 2pt
+
+\newsec{Introduction}
+
+Sections are begun
+\def\\#1 {{\tt\char'134#1} }% (defines \\ to single backslash in macro names)
+using the macro \\newsec as above. For papers without separate sections,
+leave out \\newsec and equations will automatically be numbered consecutively
+(without section numbers).
+
+References are done using the macro \\ref as follows\ref
+\rIi{John Q. Physicist, Phys. Rev. D20 (1980) 1234.}\ref\rIii{Author
+One and Author Two, Nucl. Phys. B52 (1975) 439.}.
+The labels on the references\rIi\ and \rIii\ (which include the brackets,
+note the second backslash to provide a space) can then be used to refer
+back to them\rIi. (note no extra backslash needed before period\rIii, or
+before comma.) Here is how to put two papers in one reference\ref
+\rAG{L. Alvarez-Gaum\'e and P. Ginsparg, ``The Structure of
+Gauge and Gravitational Anomalies,'' Harvard preprint HUTP-84/A016,
+to appear in Ann. Phys.\semi
+L. Alvarez-Gaum\'e and P. Ginsparg, Nucl. Phys. B243 (1984) 449.}.
+Note the use of the macro \\semi %(= ;\hfil\break)
+to separate them (the macro \\nref can be used to suppress the immediate
+appearance of the bracketed reference number in the text if desired\ref
+\rSP{Seminal Paper.}%
+\nref\rMIF{Moderately Interesting Follow-ups.}%
+--\ref\rCUR{Completely Useless Ripoffs.}). The references are listed in the
+file refs.tmp, and can be of arbitrary length.
+
+The macro \\foot is used for footnotes.\foot{like this} They also get
+automatically numbered\foot{consecutively} throughout the paper.
+
+To do equations we use the macro \\eqn
+%
+\eqn\eIi{R^a{}_b=d\om ab+\om ac\wedge\om cb}
+%
+and
+%
+\eqn\eIii{\om a{{b,\mu}}\equiv e^a{}_\nu\grad\mu e_b{}^\nu=
+-e_b{}^\nu\grad\mu e^a{}_\nu.}
+%
+The equations are then referred to (see \eIi\ or \eIii) using the
+label (which includes the parentheses). In draftmode, the equation
+labels appear in the right margin next to the equation.
+
+%To start in the middle of text, initialize for example with
+%\pageno=5\secno=3\meqno=2\startrefs{24}%\draftmode
+
+\newsec{Body}
+
+Ordinarily one uses equations with internal eqaligns:
+%
+\eqn\eIIx{\eqalign{&d=2+2=4\cr
+&d=2\times 2=4.\cr}}
+%
+(How could Nature fail to avail herself of such a fine opportunity to base
+herself on the remarkable numerical coincidence embodied in eqn.~\eIIx?)
+To specify equation numbers in aligned equations and/or equations
+specified with a's, b's, etc., just tag the equation numbers first
+using the macro \\eqnn or \\eqna and then use \\eqalignno
+\eqna\eIIi %(only for equation labels with a,b type argument)
+\eqnn\eIIii
+%
+$$\eqalignno{\left(\int_{-\infty}^\infty e^{-x^2}\,dx\right)^2
+&={\rm something}&\eIIi a\cr
+&={\rm something\ else}\cr
+&=\pi&\eIIi b\cr
+&=2\pi/2.&\eIIii\cr}$$
+%
+We can then easily refer back to \eIIii\ or \eIIi{a}\ or \eIIi{a,b}\
+or even \eIIi{a\hbox{--}c}\ (\\eqna defines a label which takes an argument
+$\{a,b,\ldots\}$ when used to refer back; it could be used instead of
+\\eqnn if one remembers to type $\{\}$ after the label when referring
+back, e.g., \eIIi{}\ ). (Note also that \\nref and \\eqnn can always be
+used to simulate macro packages that require a separate macro to define
+labels in advance of using them.)
+
+To list the references, use the macro \\listrefs as at the end of
+this file\foot{In draftmode reference labels appear in left margin
+next to reference.}.
+
+\newsec{Conclusion}
+
+\seclab\sconcl % (defines a section label for later use)
+To call Tex on a source file filename.tex, issue the command
+$$\hbox{\$ tex filename}$$
+which creates a file filename.dvi (and also a filename.log file).
+The macro package will ask you whether you want ``big''
+output, ordinary typewritten pages, or ``little,'' reduced two-column pages
+suitable for preprinting.
+(Default is for postscript laserprinters. In order to print out in
+reduced format on qms printer at HEPL, you need to specify \\qms
+after inputting the macros.)
+
+\subsec{At Lyman}
+
+After eliminating any tex errors in your manuscript, issue the command
+%
+$$\hbox{\$ lw filename}$$
+%
+to convert the .dvi file to a postscript file that is then automatically
+sent to the lyman laserwriter.
+(To process only selected portions of a .dvi file,
+type instead \ \$ dvips filename --- then type i for interactive [or
+? for help at any time].
+\$ lw filename.ps with explicit .ps extension then sends the .ps
+file to the Lyman laserwriter.)
+
+\subsec{At HEPL}
+
+\subseclab\shepl % (defines a subsection label for later use)
+(at hepl, use instead
+%
+$$\hbox{\$ qmstex filename}$$
+%
+to convert the .dvi file to a .qms file that is then automatically
+sent to the hepl laserprinter). Before logging off, it is
+probably preferable to get rid of any .ps, .dvi, .qms, and .log files.
+
+
+\bigbreak\bigskip\bigskip\centerline{{\bf Acknowledgements}}\nobreak
+This work was supported in part by various colleagues. We also thank
+NSF contract PHY-82-15249 for discussions.
+
+\appendix{A}{}
+
+Everything same as before, now equations appear as (A.1), etc.
+Appendix A has no title.
+
+\appendix{B}{Enhancements added, 11/88}
+
+For fancier treatment of multiple references, say \refs{\rSP{--}\rCUR},
+\refs{\rIii,\rSP}, or even \refs{\rIi,\rIii,\rAG{--}\rCUR}. (The arguments
+have to be previously defined references, so use \\nref before for any
+first occurrences.) To strip off the brackets from a single reference for
+some reason, use \\xref to give \xref\rIi\ instead of \rIi.
+
+To refer to equations (or references) that occur much later in the
+paper, add \\writedefs after inputting macros.
+This redefines the equation and reference macros so they write all the
+label definitions to a file labeldefs.tmp. Then tex a second time with a
+line inputting this file. To start from the middle of a paper, tex
+the first part with \\writedefs and \\writestop %i.e. \writedefs\writestop
+(the latter adds to labeldefs a line with the pagenumber, section number,
+etc., at the point \\listrefs was called). Inputting labeldefs.tmp then
+starts the continuation where the previous left off, and allows referring
+to any of the previously defined reference and equation labels.
+
+The subsection option in section 3 above is also new.
+
+Another macro, \\footend, redefines \\foot so that it writes the footnotes
+in a file foots.tmp, which is then automatically called in by \\listrefs
+before the references. For journals that prefer the footnotes at the
+end, one can thus add \\footend after inputting harvmac,
+with no other changes necessary.
+
+A new macro \\fig (also \\nfig, \\figs, \\xfig) works for figures just
+as does \\ref. The label is defined to include the abbreviation fig.
+For papers with thousands of figures, the macro
+\fig\flabel{This is the figure caption}. This works exactly as does
+\ref\rlabel{For a compendium of references missing here, see M. Green,
+J. Schwarz, and E. Witten, {\it Superstring theory\/}, Vols. I,II,
+Cambridge Univ. Press (1987).}, with the label defined to include the
+abbreviation `fig.~'. The macro \\nfig suppresses immediate appearance of
+`fig.~x', \nfig\flabi{second dummy figure}\nfig\flabii{third dummy figure}%
+so that one can instead say, for example, \figs{\flabi,\flabii}\
+using the macro \\figs. %(here gives figs.~2,3)
+\\xfig strips off the `fig.~' to leave just the figure number,
+i.e.\ \xfig\flabel, if necessary for some reason.
+The figure captions are written in a file figs.tmp that is called in by
+saying \\listfigs after \\listrefs.
+(Note that the formerly used macro \\figures need not be used if
+\\fig is instead used in conjunction with \\listfigs.)
+
+% Instead of \listfigs, if \fig not used in text, after \listrefs say
+%
+%\figures % former version, still supported
+%\fig{1}{This is the first figure caption.}
+%\fig{2}{This is the second figure caption.}
+%\fig{3}{Note that \\fig automatically types a colon and lines up the
+%text properly.}
+%
+%\parindent=20pt
+
+\appendix{C}{Enhancements added, 6/89}
+
+A macro \\seclab sets a label equal to the current section number, useful
+for referring back to the section, e.g.\ as used in section \sconcl\ above.
+Similarly, \\subseclab sets a label equal to the current
+section.subsection, as in the definition of subsection \shepl\ in the ``at
+HEPL'' subsection above.
+(Using \\writedefs, these definitions will appear in labeldefs.tmp so can
+be used as well to refer forward. In draftmode, the definitions appear in
+the right margin.)
+
+A macro \\writetoc writes a file toc.tmp that contains section and
+subsection numbers and headings with the pagenumbers on which they appear.
+The macro \\listtoc writes the heading {\bf Contents} and inputs the file
+toc.tex. It is evidently necessary to tex in two passes, renaming toc.tmp
+to toc.tex after the first.
+%(Note that the pagenumbers will not come out properly in ``little'' mode
+% --- the easiest (and least elegant) way around this is to set
+% \output={\plainoutput} (after harvmac input) to produce toc.tmp,
+% then remove and tex again with \\listtoc to produce final .dvi file.
+
+\appendix{D}{Enhancements added, 1/91}
+
+A macro \\lref (same syntax as \\ref and \\nref)
+\lref\reflabel{Another reference.}
+defines the reflabel to be a macro that calls \\ref on itself.
+This allows making a list of references via \\lref (in any order) at the
+beginning of a file and only those used in the text will actually appear
+(automatically listed in correct order of first appearance by \\listrefs).
+(In principle \\lref can be used to compile a long standard reference file
+to input, although this might eventually cause problems due to clogging up tex
+memory with too many unused definitions.)
+
+\lref\riii{extra ref three.}
+\lref\rii{extra ref two.}
+\lref\ri{extra ref one.}
+\\refs is defined to not display reference labels that appear in succession
+(i.e.\ without intervening delimiter), so that e.g.\ \refs{\ri\rii{--}\riii}
+can expand the middle reference \rii\ if it hasn't already appeared.
+\\refs will also accept reflabels that are not previously defined so that it is
+possible to tex preliminary versions without inputting full reference list
+(For this mode, even individual refs, e.g.\ \refs{\reflabel}, need to be
+called via \\refs.)
+
+The macro \\sequentialequations inserted at beginning causes
+equations to be numbered sequentially (1)--(n) throughout paper
+(rather than with section numbers (2.1)$\ldots$).
+
+\listrefs
+\listfigs %(if necessary)
+\bye
diff --git a/macros/plain/contrib/histyle/histyle.tex b/macros/plain/contrib/histyle/histyle.tex
new file mode 100644
index 0000000000..57e057ac58
--- /dev/null
+++ b/macros/plain/contrib/histyle/histyle.tex
@@ -0,0 +1,381 @@
+% author: norm
+
+% HISTYLE.TEX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 07/23/1991: -started working on it (ndw)
+% -1.0
+% 07/24/1991: -added \begin{box}...\end{box}
+% -added \setboxthickness
+% -added \in, \inr, \inboth
+% -added \begin{inboth}{}...\end{inboth}{}
+% -1.1
+% 07/25/1991: -added \begin{points}, \begin{bullets}, \begin{list}
+% -cleaned up some comments (there still aren't enough)
+% -1.2
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% make sure we don't get loaded twice
+\ifx\HighStyleLoaded\relax\endinput\fi
+\let\HighStyleLoaded=\relax
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\HighStyleMacrosVer{1.2}
+\message{cLoading HighStyle macros|}
+\input startup % defines bullets used in the \begin{bullets} environment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% this file contains the very rudimentary beginnings of a ``HighStyle''
+% environment for TeX. It is in Plain TeX and not LaTeX ... don't say
+% I didn't warn you!
+%
+% Note: the grouping mechanisms in HighStyle and TeX are fundamentally
+% different and they are, in a small way, incompatible. In
+% HighStyle functions, the function name goes inside the curly
+% braces, in TeX, it must go outside the braces.
+%
+% For example, in HighStyle you would say {q This is in quotes}
+% but in TeX, you must say \q{This is in quotes}. There's not
+% much that we can do about this...
+%
+% The following macros have been defined:
+%
+% \abs{} returns the absolute value of a number (for printing, not
+% for use in math in macros! Also, only for integers)
+% \accept reads from the keyboard and creates a control sequence
+% (variable)
+% \blank{} creates a blank line of the requested length (i.e. \blank{1in}
+% produces a blank line 1 inch long).
+% \bo turns on bold, it should be used within {}'s
+% \begin{boldtext} Like \bo but it does the grouping for you...
+% \end{boldtext}
+% \begin{box} A box environment. It's not real robust but it does handle
+% \end{box} \leftskip and \rightskip's
+% \setboxthickness{} Sets the thickness of the rules used in \begin{box}...
+% \setboxgutter{} Sets the box gutter (\graphboxborder)
+% \center{} Center's text
+% \in{} Moves the left margin in
+% \inr{} Moves the right margin in
+% \inboth{} Moves in the left and right margins
+% \begin{inboth}{} Indents the left and right margins by parameter
+% \end{inboth}
+% \begin{points}width=<dimen> just=<l|r|c|f> text=<i|r|b> Starts a points
+% \end{points} environment. Use \p{} to define points
+% \begin{list} Begins a numbered list. Lists can be nested up to three
+% \end{list} levels deep, level one is numbered 1,2,3..., level two is
+% numbered a,b,c..., and level 3 is numbered i,ii,iii,iv...
+% \begin{bullets} Starts a bulleted environment, six levels are defined.
+% \end{bullets}
+% \q{} Produces quoted text (i.e. typographic ``quotes'')
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% for the duration of of this input file, @ is a letter ... this makes
+% it possible to create control sequences that cannot (easily) be used
+% outside this macro file...neat, sorta...
+\catcode`@=11 % @ is a letter here
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% We're going to screw with the meaning of \end, so make sure we can
+% still use the real one ...
+\let\@end=\end
+% now redefine \bye to use the @end
+\outer\def\bye{\par\vfil\supereject\@end} % just like the real \bye...
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\workreg % just a work integer
+\newdimen\workdim % just another workreg...
+\newread\console % input file for accept
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% My \begin{box} box macro tries to be really clever. It probably
+% isn't, but it's as clever as my TeXnical ability can get me right
+% now. I collect the material in a \vbox then I use the values of
+% \leftskip and \rightskip to trim it down, (the \vbox is always
+% \hsize in width because that's the way TeX set it). From this
+% box, I generate a box with a border that is indented by the
+% appropriate \leftskip amount. Improvements are welcome...
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newbox\graphbox % \begin{box} box
+\newdimen\graphboxwidth % width of box
+\newdimen\graphboxleftmar % left margin of box
+\newdimen\graphboxborder % border distance (from rules to text)
+\graphboxborder=0.25in % defaults to 0.25in
+\newdimen\graphboxthick % border thickness (thickness of rules)
+\graphboxthick=0.4pt % defaults to 0.4pt
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \begin and \end macros, thanks (mostly) to Bert Bos <bert@let.rug.nl>.
+% Thanks Bert!
+\def\begin#1{\begingroup \let\@group\relax%
+ \expandafter\let\expandafter\@group\csname @begin#1\endcsname%
+ \csname @begin#1\endcsname} % execute command
+\def\end#1{\expandafter\ifx\csname @begin#1\endcsname\@group\else%
+ \errmessage{End doesn't match begin: \noexpand\end{#1}}\fi%
+ \expandafter\ifx\csname @end#1\endcsname\relax \else
+ \csname @end#1\endcsname\fi
+ \endgroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Absolute value, no one is ever going to use this but...it was in
+% HighStyle, so here it is. Actually, it was in HighStyle and it was
+% easy to do so here it is (there are lots of things in HighStyle that
+% I haven't (and probably won't) implement.
+\def\abs#1{%
+ \workreg=#1
+ \ifnum0>\workreg
+ \number -\workreg
+ \else
+ \number \workreg
+ \fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% asks the user for a string
+\def\accept{\immediate\read\console to}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% makes a blank rule
+\def\blank#1{\hbox to #1{\hrulefill}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bold faced text
+\def\bo{\bf}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bold faced text in a group
+\def\@beginboldtext{\begingroup\bo}
+\def\@endboldtext{\endgroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is a rather fragile set of macros for handling the \begin{box}...
+% \end{box} environment. It will handle changes in \leftskip and \rightskip
+% and it will handle multiple paragraphs, but I don't think it will
+% handle really complex things like multiple pages or anything like that.
+%
+\def\setboxthickness#1{\global\graphboxthick=#1}
+\def\setboxgutter#1{\global\graphboxborder=#1}
+\def\@beginbox{\par%
+ \global\graphboxleftmar=\leftskip%
+ \global\graphboxwidth=\hsize%
+ \global\advance\graphboxwidth by -\graphboxleftmar%
+ \global\advance\graphboxwidth by -\rightskip%
+ \global\advance\graphboxwidth by 2\graphboxborder%
+ \global\advance\graphboxleftmar by -\graphboxborder%
+ \setbox\graphbox=\vbox\bgroup}
+\def\@endbox{\par\egroup%
+ \setbox\graphbox=\vbox{\hbox to \graphboxwidth{\hss\box\graphbox\hss}}%
+ \hbox{\hskip\graphboxleftmar%
+ \vrule width\graphboxthick%
+ \vbox{%
+ \hrule height\graphboxthick depth0pt%
+ \vskip\graphboxborder%
+ \box\graphbox%
+ \vskip\graphboxborder%
+ \hrule depth\graphboxthick height0pt%
+ }%
+ \vrule width\graphboxthick%
+ }%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\center#1{\hbox to \hsize{\hfil#1\hfil}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\in#1{\global\advance\leftskip by #1}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\inr#1{\global\advance\rightskip by #1}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\inboth#1{\in{#1}\inr{#1}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@begininboth#1{\bgroup\leftskip=#1\rightskip=#1}
+\def\@endinboth{\egroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This defines \begin{points}, \begin{bullets}, and \begin{list}. Of
+% course, it also defines the appropriate \end{}s...
+%
+% \begin{points}width=1in just=f|l|r|c text=i|r|b
+% \begin{list} up to three levels...
+% \begin{bullets} up to six levels...
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Make sure we don't load the file more than once...
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\pointwidth % how wide are the points
+\newdimen\pointindent % how much indentation
+\newdimen\pointgutter % gutter between points and text
+\newcount\listnumnormal % list item number (depth 1)
+\newcount\listnumalpha % list item number (depth 2)
+\newcount\listnumroman % list item number (depth 3)
+\newcount\listdepth % current list depth
+\newcount\bulldepth % current bullet list depth
+\def\pointfulljust{f} % full justification?
+\def\pointrightjust{r} % right justification?
+\def\pointleftjust{l} % left justification?
+\def\pointcenterjust{c} % center justification?
+\def\pointtextitalic{i} % italic text
+\def\pointtextbold{b} % bold text
+\def\pointitalic{\it} % \it is defined in plain tex, change
+% this to use other fonts
+\def\pointbold{\bf} % \bf is for emphasized text, change
+% (or redefine after \input) for other
+% fonts...
+\def\pointedges{\raggedright} % intially, fully justified points are
+% \raggedright
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% These macros let you change the justification of fully justified points.
+% Initially they are \raggedright because it is less likely to be ugly when
+% text is set in the narrow column. If you make it \justifiedpoints, then
+% they will be justified, IF your text is currently being justified. I'm
+% not sure, off the top of my head, how to get justified points if you
+% have said \raggedright somewhere in your document...
+%
+\def\raggedpoints{\global\def\pointedges{\raggedright}}
+\def\justifiedpoints{\global\def\pointedges{\relax}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Now we initialize the things we just defined.
+\listdepth=0 % initial depth is zero
+\bulldepth=0
+\pointgutter=1em % gutterwidth is 1em
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\long\def\@pointpara#1{% %
+ \vtop{\leftskip=0pt\rightskip=0pt % Make width ok
+ \hsize=\pointwidth %
+ \parindent=0pt %
+ \everypar={} %
+ \lineskip=1pt %
+ \lineskiplimit=1pt %
+ \pointedges % setup justification
+ \hbadness=10000 % I don't care about underfull boxes
+ \tolerance=10000 % I don't care about overfull ones
+ \noindent #1\relax % either
+ \vrule width 0pt depth 6pt}% % hold depth of box
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@beginpoints width=#1 just=#2 text=#3{ % starts points environment...
+ \par % end this env. with \@endpoints
+ \bgroup
+ \def\pointjust{#2}
+ \def\pointtext{#3}
+ \pointwidth=#1
+ \pointindent=\leftskip
+ \advance\leftskip by \pointwidth
+ \advance\leftskip by \pointgutter
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@endpoints{\par\egroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\p#1{% % this macro does the grunt work
+ \par\vskip\parskip % workaround, why doesn't \par do
+% the skip here.
+ \def\pointtextstyle{} % initially unchanged text style
+ \ifx\pointtextitalic\pointtext
+ \def\pointtextstyle{\pointitalic}
+ \else
+ \ifx\pointtextbold\pointtext
+ \def\pointtextstyle{\pointbold}
+ \fi
+ \fi
+ \ifx\pointfulljust\pointjust
+ \setbox0=\vbox{\@pointpara{\pointtextstyle #1}}
+ \else
+ \ifx\pointrightjust\pointjust
+ \setbox0=\vbox{\hbox to \pointwidth{\hfil\pointtextstyle #1}}
+ \else
+ \ifx\pointleftjust\pointjust
+ \setbox0=\vbox{\hbox to \pointwidth{\pointtextstyle #1\hfill}}
+ \else
+ \ifx\pointcenterjust\pointjust
+ \setbox0=\vbox{\hbox to \pointwidth{\hfil\pointtextstyle #1\hfil}}
+ \else
+ \message{begin{points}: invalid justification}
+ \setbox0=\vbox{\@pointpara{\pointtextstyle #1}}
+ \fi
+ \fi
+ \fi
+ \fi
+ \workdim=\ht0
+ \advance \workdim by \dp0
+ \vbox{\hbox{\hskip\pointindent\box0}}%
+ \vskip-\workdim
+ \vskip-\parskip
+ \nointerlineskip
+ \indent
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@beginlist{ % starts a list environment. Lists
+ \par % may be nested up to 3 levels deep.
+ \bgroup % end with \@endlist
+ \advance\listdepth by 1
+ \ifcase\listdepth \or % level=0, do nothing (won't happen)
+ \listnumnormal=0%
+ \def\listnumber{\number\listnumnormal.}\or % level=1
+ \listnumalpha=96%
+ \def\listnumber{\char\listnumalpha.}\or % level=2
+ \listnumroman=0%
+ \def\listnumber{\romannumeral\listnumroman.}\or % level=3
+ \errmessage{Lists are nested too deep!}%
+ \fi % level>3, error message...
+ \@beginpoints width=0.4in just=r text=r%
+ \everypar={\hangindent=\parindent\hangafter=1\@listp}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@listp{%
+ \ifcase\listdepth \or% immediately skip the zero case ...
+ \advance\listnumnormal by 1\or % level=1
+ \advance\listnumalpha by 1\or % level=2
+ \advance\listnumroman by 1\or % level=3
+ \fi % do nothing for > 3
+ % redefine \everypar around \p so that we don't get an infinite loop
+ \everypar={\hangindent=\parindent\hangafter=1}%
+ % the \vskips below are a really kludgy workaround. For some reason
+ % the \p macro in a list environment is inserting one extra \baselineskip
+ % and one extra \parskip. Probably need to end a few of the lines in
+ % these macros with %'s to get rid of any extra spaces. In any event,
+ % I use negative space to back them out rather than spending time now
+ % figuring out how to really fix the problem (which I'm afraid might
+ % break something else anyway) Hopefully the list and points environments
+ % are well-defined enough so that lack of robustness won't be a problem...
+ \vskip-\baselineskip
+ \vskip-\parskip
+ \p{\listnumber}%
+ \everypar={\hangindent=\parindent\hangafter=1\@listp}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@endlist{%
+ \@endpoints
+ \egroup
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@beginbullets{ % starts a bullet environment. Lists
+ \par % may be nested up to 3 levels deep.
+ \bgroup % end with \@endbullets
+ \advance\bulldepth by 1
+%
+% If you want/have to use other bullets, just redefine them here...
+% for example $\bullet$ is about the same as \circle (but these come
+% from a special font)
+%
+ \ifcase\bulldepth \or % level=0, do nothing (won't happen)
+ \def\@bullpt{\circle}\or % level=1
+ \def\@bullpt{\ocircle}\or % level=2
+ \def\@bullpt{\square}\or % level=3
+ \def\@bullpt{\osquare}\or % level=4
+ \def\@bullpt{\triangle}\or % level=5
+ \def\@bullpt{\otriangle}\or % level=6
+ \errmessage{Bullets are nested too deep!}%
+ \fi % level>3, error message...
+ \@beginpoints width=0.25in just=r text=r%
+ \everypar={\hangindent=\parindent\hangafter=1\@bullp}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@bullp{%
+ % redefine \everypar around \p so that we don't get an infinite loop
+ \everypar={\hangindent=\parindent\hangafter=1}%
+ % the \vskips below are a really kludgy workaround. For some reason
+ % the \p macro in a list environment is inserting one extra \baselineskip
+ % and one extra \parskip. Probably need to end a few of the lines in
+ % these macros with %'s to get rid of any extra spaces. In any event,
+ % I use negative space to back them out rather than spending time now
+ % figuring out how to really fix the problem (which I'm afraid might
+ % break something else anyway) Hopefully the list and points environments
+ % are well-defined enough so that lack of robustness won't be a problem...
+ \vskip-\baselineskip
+ \vskip-\parskip
+ \p{\@bullpt}%
+ \everypar={\hangindent=\parindent\hangafter=1\@bullp}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@endbullets{% you MUST end the \bulletpoints environment this way!
+ \@endpoints
+ \egroup
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\q#1{``#1''}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\catcode`@=12 % @ is not a letter, this has to be the last thing in the file
+% eof % HISTYLE.TEX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/plain/contrib/histyle/hstest.tex b/macros/plain/contrib/histyle/hstest.tex
new file mode 100644
index 0000000000..9aa140ecd2
--- /dev/null
+++ b/macros/plain/contrib/histyle/hstest.tex
@@ -0,0 +1,137 @@
+% file : hstest.tex (tests histyle.tex)
+% author :
+
+Here is a sample document that uses (in stupid ways) most of the
+features of this set of macros. The only thing missing here is
+the 'startup.tex' file. This file relies on a special font so I
+haven't bothered to include it. You will have to redefine the
+\@bullpt macros in HISTYLE.TEX in order to use the \begin{bullets}
+environment. Something like the following will do just fine for
+a start:
+
+ \ifcase\bulldepth \or % level=0, do nothing (won't happen)
+ \def\@bullpt{*}\or % level=1
+ \def\@bullpt{o}\or % level=2
+ \def\@bullpt{x}\or % level=3
+ \def\@bullpt{-}\or % level=4
+ \def\@bullpt{>}\or % level=5
+ \def\@bullpt{=}\or % level=6
+ \errmessage{Bullets are nested too deep!}%
+ \fi % level>3, error message...
+
+Flavor to taste, obviously. Here's the test file:
+
+%HSTEST.TEX
+\input histyle
+\parskip=\baselineskip
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Here goes...
+\accept\yourname
+\yourname, the absolute value of -4 is \abs{-4}, the absolute value
+of 4 is \abs{4}. You can't ask for the absolute value of real numbers
+with this macro, at least not yet. Here's a one inch blank: \blank{1in}.
+This is {\bo bold faced} and \q{Quoted Text}.
+\begin{boldtext}
+Here's (potentially) a lot of boldfaced text.
+\end{boldtext}
+\vskip1in
+\begin{inboth}{1in}
+ \begin{box}
+ \setboxthickness{0.1in}
+ This text is in a box!
+ \end{box}
+\end{inboth}
+\in{3in}
+This text will be indented 3 inches
+
+\in{-3in}
+This text will be back to normal
+
+\center{this text is centered}
+
+\begin{points}width=1in just=f text=i
+ \p{this is point 1}
+ This some text describing point 1
+ This some text describing point 1
+ This some text describing point 1
+ This some text describing point 1
+ This some text describing point 1
+ This some text describing point 1
+ This some text describing point 1
+ \p{this is point number 2}
+ This is some text describing point 2
+ This is some text describing point 2
+ This is some text describing point 2
+ This is some text describing point 2
+ This is some text describing point 2
+ This is some text describing point 2
+ This is some text describing point 2
+ This is some text describing point 2
+ This is some text describing point 2
+\end{points}
+
+\setboxthickness{0.4pt}
+\begin{inboth}{0.25in}
+ \begin{box}
+ {\par\vskip\parskip\parskip=0pt\parindent=0pt\obeylines
+ \begin{bullets}
+ this is first level
+ this is first level
+ \begin{bullets}
+ this is second level
+ \begin{bullets}
+ this is third level
+ \begin{bullets}
+ this is fourth level
+ \begin{bullets}
+ this is fifth level
+ \begin{bullets}
+ this is sixth level
+ \end{bullets}
+ \end{bullets}
+ \end{bullets}
+ \end{bullets}
+ \end{bullets}
+ this is first level
+ \end{bullets}
+ }
+ \end{box}
+\end{inboth}
+
+\vfill\supereject
+{\par\vskip\parskip\parskip=0pt\parindent=0pt\obeylines
+\pointgutter=.1in
+\begin{list}
+ Item 1
+ Item 2
+ Item 3
+ \begin{list}
+ Item a
+ Item b
+ Item c
+ \end{list}
+ Item 4
+ \begin{list}
+ Item a
+ \begin{list}
+ Item i
+ Item ii
+ Item iii
+ Item iv
+ \end{list}
+ Item b
+ \end{list}
+ Item 5
+ Item 6
+\end{list}
+}
+
+This is some normal paragraph text.
+This is some normal paragraph text.
+This is some normal paragraph text.
+This is some normal paragraph text.
+This is some normal paragraph text.
+This is some normal paragraph text.
+This is some normal paragraph text.
+\bye
+% eof % HSTEST.TEX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/plain/contrib/hyplain/README b/macros/plain/contrib/hyplain/README
new file mode 100644
index 0000000000..016e342f27
--- /dev/null
+++ b/macros/plain/contrib/hyplain/README
@@ -0,0 +1,11 @@
+This is the HyPlain package, which provides basic support for
+multiple languages in Plain TeX.
+
+Author: Enrico Gregorio (Enrico dot Gregorio at univr dot it)
+Version 1.0 of October 17, 2006 (2006/10/17)
+
+The package is public domain. Users are kindly requested to acknowledge
+source and to change the name of the files in case of modifications.
+The file hylang.tex is site dependent and can be modified as it is needed.
+
+Read the enclosed file hydoc.pdf for (basic) documentation
diff --git a/macros/plain/contrib/hyplain/hydoc.pdf b/macros/plain/contrib/hyplain/hydoc.pdf
new file mode 100644
index 0000000000..3f4f307449
--- /dev/null
+++ b/macros/plain/contrib/hyplain/hydoc.pdf
Binary files differ
diff --git a/macros/plain/contrib/hyplain/hydoc.tex b/macros/plain/contrib/hyplain/hydoc.tex
new file mode 100644
index 0000000000..3a6c37c6a1
--- /dev/null
+++ b/macros/plain/contrib/hyplain/hydoc.tex
@@ -0,0 +1,191 @@
+%%% This is part of the hyplain package by Enrico Gregorio
+%%% You are allowed to do anything you want with this as long
+%%% as you cite the source and change name to the file
+
+\hoffset=.46truecm
+\hsize=15truecm
+\advance\voffset by -2.5\baselineskip
+\advance\vsize by 5\baselineskip
+
+\font\tensf=cmss10
+
+\def\manyhyphens{%
+\hyphenpenalty=-1000
+\pretolerance=-1
+\tolerance=1000
+\doublehyphendemerits=-100000
+\finalhyphendemerits=-100000
+}
+
+\def\LaTeX{L\kern-.36em\setbox0=\hbox{T}\vbox to\ht0
+ {\hbox{\sevenrm A}\vss}\kern-.15em\TeX}
+\def\LaTeXe{\LaTeX$2_{\textstyle\varepsilon}$}
+
+\def\cs#1{\char`\\#1}
+\def\ar#1{\char`\{#1\char`\}}
+\def\showcommand#1{\par\nobreak\medskip\begingroup\tt#1\endgroup\par\medskip
+ \noindent\ignorespaces}
+
+\addto{it}{IT}{\frenchspacing}{\nonfrenchspacing}
+
+\begingroup\manyhyphens
+
+\centerline{\bf How to use hyplain --- version 1.0}
+
+\medskip
+
+Many (well, at least more than twelve) years ago, \LaTeX{} was not as usable as it is today.
+So we were forced to use AMS-\TeX{} for typesetting mathematical papers.
+
+At the very beginning there were two plain formats to use, the original one and the one
+(called plainit) for Italian hyphenation. With the advent of \TeX3 we could use only one and
+define some switch for selecting the language.
+
+I found a package called HyMaster that could be used for this purpose; it was developed by
+Daniel Flipo and Laurent Siebenmann for French. Since Italian typesetting rules do not
+require the contortions of the French, it was simple to adapt only one file for canning a
+format file.
+
+With the advent of \LaTeXe, everything was forgotten. Until recently, when a user in a
+discussion forum showed some code that I recognized as my modifications to HyMaster! He
+proposed some procedure to build the format which was very complicated (you see, at that
+time we were using Oz\TeX; nowadays, te\TeX{} or MiK\TeX{} require different actions). So I
+tried to rethink to the business.
+
+\IT
+
+\bigskip
+
+\hrule
+
+\medskip
+
+\centerline{\bf Come usare hyplain}
+
+\medskip
+
+Parecchi (be', almeno dodici) anni fa, \LaTeX{} non era cos\`{\i} facile da usare come \`e
+oggi. Per comporre testi matematici eravamo quindi costretti a usare AMS-\TeX{}.
+
+All'inizio c'erano due formati plain da usare, l'originale e quello (chiamato plainit) per
+la sillabazione italiana. Con l'avvento di \TeX3, si pot\'e usare un solo formato con la
+possibilit\`a di cambiare le regole di sillabazione con un comando.
+
+Trovai un pacchetto chiamato HyMaster che poteva essere usato per questo scopo; era stato
+sviluppato da Daniel Flipo e Laurent Siebenmann per il francese. Siccome la tipografia
+italiana non richiede le contorsioni di quella francese, fu semplice adattare un solo {\it
+file\/} per costruire un formato.
+
+Con l'avvento di \LaTeXe, tutto fu dimenticato. Finch\'e, recentemente, un utente di un
+gruppo di discussione esib\`{\i} del codice che riconobbi come le mie modifiche a HyMaster!
+Proponeva una procedura piuttosto complicata per costruire il formato (a quel tempo usavamo
+Oz\TeX; ora te\TeX{} e MiK\TeX{} richiedono azioni diverse). Perci\`o ho provato a ripensare
+alla faccenda.
+
+\medskip
+
+\hrule
+
+\bigskip
+
+\endgroup
+
+\US
+
+As you can see, hyphenation in US~English and in Italian behave properly. The text above has
+been typeset with more hyphens than usual.
+
+\medskip
+
+The package consists of three files: {\tt hyplain.tex}, {\tt hyrules.tex} and {\tt
+hylang.tex}. Only the third one needs to be modified by the users who want to define
+languages to employ.
+
+The basic definition of a language is given by a command
+\showcommand{\cs{definelanguage}\ar{xx}\ar{YY}\ar{filename}} where {\tt xx} is the ISO
+abbreviation for the language ({\tt en} for English, {\tt it} for Italian, {\tt de} for
+German), {\tt YY} is the ISO abbreviation for the nation and {\tt filename} is the name of
+the hyphenation pattern file. Thus
+\showcommand{\cs{definelanguage}\ar{it}\ar{IT}\ar{ithyph}} defines Italian.
+
+There is also {\tt\cs{definedialect}} for defining a language which shares hyphenation
+patterns with another; for example
+\showcommand{\cs{definedialect}\ar{de}\ar{AT}\ar{de}\ar{DE}} defines ``German for Austria'',
+assuming that \showcommand{\cs{definelanguage}\ar{de}\ar{DE}\ar{dehypht}} has already been
+given.
+
+After a {\tt\cs{definelanguage}} command, {\tt\cs{refinelanguage}} should be given; it has
+four arguments
+
+\nobreak\smallskip
+\item{\tt\#1} the two-letter language abbreviation,
+
+\item{\tt\#2} the two-letter nation abbreviation,
+
+\item{\tt\#3} the code to be executed when the language comes into action,
+
+\item{\tt\#4} the code to be executed when another language is called.
+\smallskip
+
+This command should always contain in the third argument the left and right hyphenation
+minima: for example, we set
+\showcommand{\cs{refinelanguage}\ar{en}\ar{US}%
+ \ar{\cs{hyphenmins}\ar{2}\ar{3}}\ar{}}
+in order to enforce the usual conventions for American English; as another example, we set
+\showcommand{\cs{refinelanguage}\ar{it}\ar{IT}%
+ \ar{\cs{hyphenmins}\ar{2}\ar{2}\cs{lccode}`\char`\\'=`\char`\\'}%
+ \ar{\cs{lccode}`\char`\\'=0 }}
+because the lower case code of the right quote should not be zero for correct Italian
+hyphenation. We need to ``undo'' the effect since we don't know whether the user calls the
+language switch inside a group or not. The command
+\showcommand{\cs{hyphenmins}\ar{x}\ar{y}}
+is an abbreviation for {\tt\cs{lefthyphenmin}=x\cs{righthyphenmin}=y} and it is not
+necessary to ``undo'' it.
+
+The commands {\tt\cs{definedialect}} and {\tt\cs{refinedialect}} (analog to
+{\tt\cs{refinelanguage}}) can be given also in the user's document where, of course, it is
+too late to define new languages with their hyphenation patterns. Anyway, users can simulate
+new language definitions by defining a dialect to language {\tt\cs{zz\_ZZ}}, which is a
+fallback without hyphenation tables.
+
+If one wants to extend the functionalities of a language, there is also the command
+\showcommand{\cs{addto}\ar{xx}\ar{YY}\ar{do}\ar{undo}}
+which can be used, for example, in the following way
+\showcommand{\cs{addto}\ar{it}\ar{IT}%
+ \ar{\cs{frenchspacing}}\ar{\cs{nonfrenchspacing}}}
+in order to enforce French spacing for Italian (in Italy).
+
+Finally, there is a command to choose a defined language (or even an undefined one, try it)
+\showcommand{\cs{selectlanguage}\ar{xx}\ar{YY}}
+which selects language {\tt xx} for {\tt YY}. Users can add aliases for this with
+\showcommand{\cs{addalias}\ar{\cs{command}}\ar{xx}\ar{YY}}
+(see {\tt hylang.tex} for examples). After saying
+\showcommand{\cs{addalias}\ar{\cs{IT}}\ar{it}\ar{IT}}
+you can simply say {\tt\cs{IT}} to switch to Italian. This alias is actually predefined in
+the present version of {\tt hylang.tex} as well as {\tt\cs{US}} for US~English.
+
+\bigskip
+
+\centerline{\bf Installation}
+
+\nobreak\medskip
+
+Put the three files in some directory and process with
+\showcommand{tex -ini hyplain}
+and after this put the produced format in some suitable place of the \TeX{} tree. After this
+\showcommand{tex -fmt hyplain filename}
+will typeset {\tt filename.tex} using the new format. This is for a *nix system and a
+{\tensf Web2C} distribution like te\TeX{} or \TeX{}Live; for MiK\TeX{} find the way, I don't
+use it. You can use also {\tt pdftex} and you can use the newly created {\tt hyplain.fmt} to
+build AMS-\TeX{} over it. For {\tt pdftex} you should use
+\showcommand{pdftex -ini hypdfplain.ini}
+and then
+\showcommand{pdftex -fmt hypdfplain filename}
+If you want to access the extended features of $\varepsilon$-\TeX{}, then do
+\showcommand{pdftex -ini '*hypdfplain.ini'}
+
+\vfill
+
+\rightline{Enrico Gregorio}
+\rightline{October 17, 2006}
+\bye
diff --git a/macros/plain/contrib/hyplain/hylang.tex b/macros/plain/contrib/hyplain/hylang.tex
new file mode 100644
index 0000000000..0571439926
--- /dev/null
+++ b/macros/plain/contrib/hyplain/hylang.tex
@@ -0,0 +1,57 @@
+%%% This is hylang.tex (version 1.0), where language definitions
+%%% actually occur. The first one should always be
+%%% American English, for compatibility with plain TeX.
+%%%
+%%% Users can modify this file in order to define the
+%%% languages they need.
+%%%
+%%% Every language definition should be followed by a
+%%% \refinelanguage command where conventions specific to
+%%% the language are set; users should at least provide
+%%% the left and right hyphenation minima using
+%%% \hyphenmins{<left>}{<right>}
+%%%
+%%% In the third argument one puts what has to be done
+%%% when activating the language; in the fourth argument
+%%% what needs to be undone.
+
+%%% US English must always come first
+\definebaselanguage{en}{US}{hyphen} %%% <--- don't modify
+\refinelanguage{en}{US}{\hyphenmins{2}{3}}{}
+
+%%% Italian
+\definelanguage{it}{IT}{ithyph}
+\refinelanguage{it}{IT}{\hyphenmins{2}{2}\lccode`\'=`\'}{\lccode`\'=0 }
+
+%%% Add other languages if needed
+%%%
+%%% The arguments to \definelanguage are:
+%%% #1: the language code; it is an arbitrary string, use the
+%%% ISO two-letter language code for uniformity, or `nde' for
+%%% new orthography German
+%%% #2: the nation code; use the uppercase ISO two-letter code
+%%% #3: the file with hyphenation patterns
+%%%
+%%% The arguments to \refinelanguage and \refinedialect are:
+%%% #1 and #2: a pair defined through \definelanguage or \definedialect
+%%% #3: commands to be executed when entering the language
+%%% #4: commands to be undone when entering a new language
+%%%
+% \definelanguage{xx}{YY}{xxhyph}
+% \refinelanguage{xx}{YY}{<something>}{<something>}
+%
+% \definedialect{aa}{BB}{xx}{XX}
+% \refinedialect{aa}{BB}{<something>}{<something>}
+
+% At last the fallback, a language with no patterns
+\definelanguage{zz}{ZZ}{zerohyph}
+% \refinelanguage{zz}{ZZ}{}{} % no need to set conventions
+
+%%% Aliases
+\addalias\US{en}{US}
+\addalias\IT{it}{IT}
+\addalias\ZZ{zz}{ZZ}
+\addalias\nohyphens{zz}{ZZ}
+
+\endinput
+
diff --git a/macros/plain/contrib/hyplain/hypdfplain.ini b/macros/plain/contrib/hyplain/hypdfplain.ini
new file mode 100644
index 0000000000..25671da553
--- /dev/null
+++ b/macros/plain/contrib/hyplain/hypdfplain.ini
@@ -0,0 +1,9 @@
+%%% This is part of the hyplain package by Enrico Gregorio
+%%% You are allowed to do anything you want with this as long
+%%% as you cite the source and change name to the file
+%%%
+%%% The purpose of this file is to provide an initialization
+%%% for pdfTeX
+\pdfoutput=1
+\input hyplain
+
diff --git a/macros/plain/contrib/hyplain/hyplain.tex b/macros/plain/contrib/hyplain/hyplain.tex
new file mode 100644
index 0000000000..64423ba8fb
--- /dev/null
+++ b/macros/plain/contrib/hyplain/hyplain.tex
@@ -0,0 +1,39 @@
+%%% This is part of the hyplain package by Enrico Gregorio
+%%% You are allowed to do anything you want with this as long
+%%% as you cite the source and change name to the file
+%%% (but don't rename it plain.tex)
+%%%
+%%% Its purpose is to load plain.tex but not hyphen.tex
+%%% in order to be able to define more languages than
+%%% American English.
+%%%
+%%% By running iniTeX on this file, you end up with a
+%%% plain TeX format with some new facilities for changing
+%%% the language (see hyrules.tex and hydoc.tex)
+
+\catcode`\{=1 % left brace is begin-group character
+\catcode`\}=2 % right brace is end-group character
+\catcode`\@=11 % Now @ is a letter
+
+%%% Save the original meaning of \input
+\let\orig@input\input
+
+%%% D. E. Knuth has decreed that plain.tex cannot be modified
+%%% except for preloaded fonts. But we can always use some
+%%% TeX trick; since the file is immutable, it will contain
+%%% the line `\input hyphen'; at that point we restore the
+%%% original meaning of \input and input hyrules.tex instead
+%%% of hyphen.tex
+\def\input hyphen {\let\input\orig@input \input hyrules }
+
+%%% Here we load plain.tex
+\orig@input plain
+
+%%% We change the contents of \fmtname
+\def\fmtname{plain (multiple language support)}
+%%% Just a reminder for \fmtversion which we keep identical
+%%% to the plain TeX version number
+% \def\fmtversion{3.14159265}
+\def\hyplainversion{1.0}
+
+\dump
diff --git a/macros/plain/contrib/hyplain/hyrules.tex b/macros/plain/contrib/hyplain/hyrules.tex
new file mode 100644
index 0000000000..25e627c5ca
--- /dev/null
+++ b/macros/plain/contrib/hyplain/hyrules.tex
@@ -0,0 +1,112 @@
+%%% This is part of the hyplain package by Enrico Gregorio, version 1.0
+%%% You are allowed to do anything you want with this as long
+%%% as you cite the source and change name to the file
+%%%
+%%% (Based on HyMaster.tex by Daniel Flipo and Laurent Siebenmann)
+%%%
+%%% The interface is primitive, of course. But plain TeX users
+%%% are at their ease with primitive interfaces ;-)
+%%%
+%%% Note: every language is defined as a pair (<language>,<nation>)
+%%% with ISO two-letter abbreviations to accommodate for national
+%%% variations (for example, (de,DE) and (de,AT) or (de,CH) for German
+%%% in Germany, Austria or Switzerland)
+%%% For New Ortography German, use the three-letter abbreviation `nde'
+%%% A fallback language (zz,ZZ) is provided, with no hyphenation
+%%% patterns
+
+\chardef\myh@us@catcode=\the\catcode`\_
+\catcode`\_=11
+\def\myh@us{_}
+
+%%% \addalias{<control sequence>}{<language>}{<nation>}
+%%% define a new alias for a language; for example
+%%% \addalias{\italiano}{it}{IT}
+\def\addalias#1#2#3{\expandafter\let\expandafter#1\csname #2\myh@us#3\endcsname}
+
+\def\myh@glet{\global\let}
+\def\selectlanguage#1#2{%
+ \expandafter\ifx\csname #1_#2\endcsname\relax
+ \expandafter\myh@glet\csname #1_#2\endcsname\zz_ZZ
+ \myh@nel{#1}{#2}%
+ \fi
+ \csname #1_#2\endcsname
+ \ignorespaces}
+\def\myh@nel#1#2{\message{^^Jhyplain warning: Language #1 for #2 undefined,
+ using fallback instead^^J}}
+
+%%% A primitive interface for adding to extras and noextras
+\newtoks\myh@toks
+\def\addto#1#2#3#4{%
+ \expandafter\let\expandafter\myh@temp\csname extras@#1\myh@us#2\endcsname
+ \myh@toks=\expandafter{\myh@temp}%
+ \myh@toks=\expandafter{\the\myh@toks #3}
+ \expandafter\edef\csname extras@#1\myh@us#2\endcsname{\the\myh@toks}%
+ \expandafter\let\expandafter\myh@temp\csname noextras@#1\myh@us#2\endcsname
+ \myh@toks=\expandafter{\myh@temp}%
+ \myh@toks=\expandafter{\the\myh@toks #4}
+ \expandafter\edef\csname noextras@#1\myh@us#2\endcsname{\the\myh@toks}%
+}
+
+\def\myh@undo{\csname noextras@\myh@lan\endcsname}
+
+%%% \definelanguage has 3 parameters:
+%%% #1: <language> (lowercase ISO abbreviation)
+%%% #2: <nation> (uppercase ISO abbreviation)
+%%% #3: pattern and hyphenation exception file
+\newlinechar`^^J
+\def\definebaselanguage#1#2#3{%
+ \message{***^^JDefining language #1 for #2 using^^J}%
+ \expandafter\chardef\csname l@#1_#2\endcsname=0
+ \expandafter\language\csname l@#1_#2\endcsname
+ \input #3%
+ \message{This is \string\language
+ \expandafter\the\csname l@#1_#2\endcsname^^J***^^J}%
+ \myh@initialize{#1}{#2}}
+\def\definelanguage#1#2#3{%
+ \message{***^^JDefining language #1 for #2 using^^J}%
+ \csname newlanguage\expandafter\endcsname\csname l@#1_#2\endcsname
+ \expandafter\language\csname l@#1_#2\endcsname
+ \input #3%
+ \message{This is \string\language
+ \expandafter\the\csname l@#1_#2\endcsname^^J***^^J}%
+ \myh@initialize{#1}{#2}}
+%%% \definedialect has 4 parameters:
+%%% (#1,#2) is the pair to be defined, (#3,#4) is the pair over
+%%% which the dialect is defined (\definedialect{de}{AT}{de}{DE})
+\def\definedialect#1#2#3#4{%
+ \expandafter\let\csname l@#1_#2\expandafter\endcsname
+ \csname l@#3_#4\endcsname
+ \myh@initialize{#1}{#2}}
+
+\def\myh@initialize#1#2{%
+ \expandafter\def\csname #1_#2\endcsname{%
+ \expandafter\language\csname l@#1_#2\endcsname
+ \myh@undo
+ \def\myh@lan{#1_#2}%
+ \csname extras@#1_#2\endcsname}%
+ \expandafter\def\csname extras@#1_#2\endcsname{}%
+ \expandafter\def\csname noextras@#1_#2\endcsname{}}
+
+%%% \refinelanguage defines the extras for a language
+%%% It has 4 parameters: <language>,<nation>,<extras>,<noextras>
+\def\refinelanguage#1#2#3#4{%
+ \expandafter\def\csname extras@#1_#2\endcsname{#3}%
+ \expandafter\def\csname noextras@#1_#2\endcsname{#4}}
+\let\refinedialect=\refinelanguage
+
+\def\hyphenmins#1#2{\lefthyphenmin=#1\relax\righthyphenmin=#2\relax}
+
+\input hylang
+
+%%% Initialize and restore the underscore
+\let\definebaselanguage\undefined
+\let\definelanguage\undefined
+
+\def\myh@lan{} % initialization
+\def\noextras@{} % initialization
+\en_US
+
+\catcode`\_=\myh@us@catcode
+
+\endinput
diff --git a/macros/plain/contrib/jns/index b/macros/plain/contrib/jns/index
new file mode 100644
index 0000000000..fc58a7d2ba
--- /dev/null
+++ b/macros/plain/contrib/jns/index
@@ -0,0 +1,59 @@
+# ....Plain TeX....
+#
+# jns.doc general instructions, this is the TeX source
+# for the documentation. Please TeX it if you
+# have the paper version not at hand
+# jns.dem an example showing how to code the front matter
+# jns.amm the macro package with am-fonts (the old \TeX{} fonts)
+# jns.cmm the macro package with cm-fonts (newer and preferable)
+# (these are both macro files and should not be changed)
+#
+# Include the macros and the cm-fonts by inserting the command
+# \input jns.cmm
+# at the beginning of your text file
+# (also called input or source file)
+#
+# If you do not have the cm-fonts which are preferable,
+# please insert at the beginning of your text file
+# \input jns.amm
+#
+#
+# If you use PC \TeX
+#
+# In PC TeX default memory capacity is not sufficient to accommodate our
+# fonts. To cope with this problem, invoke TeX with the following
+# command:
+# tex file.tex /f=26000 /m=65000
+#
+#
+#
+#
+# ....LaTeX....
+#
+# jnsl.dem an example showing how to code
+# jnsl.doc general instructions
+# jnsldoc.sty documentstyle
+#
+#
+#
+#
+# ....AmSTeX....
+#
+# jnsa.doc general instructions, this is the AmSTeX source
+# for the documentation. Please TeX it if you
+# have the paper version not at hand
+# jnsa.dem an example showing how to code
+# jnsams.cmm the macro package
+#
+# Include the macros and the cm-fonts by inserting the command
+# \input jnsams.cmm
+# at the beginning of your text file
+# (also called input or source file)
+#
+# If you use PC \TeX
+#
+# In PC TeX default memory capacity is not sufficient to accommodate our
+# fonts. To cope with this problem, invoke TeX with the following
+# command:
+# tex file.tex /f=26000 /m=65000
+#
diff --git a/macros/plain/contrib/jns/jns.amm b/macros/plain/contrib/jns/jns.amm
new file mode 100644
index 0000000000..09af01d2de
--- /dev/null
+++ b/macros/plain/contrib/jns/jns.amm
@@ -0,0 +1,540 @@
+% This is JNS.AMM the plain TeX macro package
+% (AM version) from Springer-Verlag
+% for the Journal of Nonlinear Science
+% version of 16 July 1990
+\font \tbfontt = ambx10 scaled\magstep1
+\font \tafontt = ambx10 scaled\magstep2
+\font \tbfontss = ambx5 scaled\magstep1
+\font \tafontss = ambx5 scaled\magstep2
+\font \sixbf = ambx6
+\font \tbfonts = ambx7 scaled\magstep1
+\font \tafonts = ambx7 scaled\magstep2
+\font \ninebf = ambx9
+\font \tasys = amex10 scaled\magstep1
+\font \tasyt = amex10 scaled\magstep2
+\font \sixi = ammi6
+\font \ninei = ammi9
+\font \tams = ambi10
+\font \tbmss = ambi10 scaled 600
+\font \tamss = ambi10 scaled 700
+\font \tbms = ambi10 scaled 833
+\font \tbmt = ambi10 scaled\magstep1
+\font \tamt = ambi10 scaled\magstep2
+\font \smallescriptscriptfont = amr5
+\font \smalletextfont = amr5 at 10pt
+\font \smallescriptfont = amr5 at 7pt
+\font \sixrm = amr6
+\font \ninerm = amr9
+\font \ninesl = amsl9
+\font \tensans = amss10
+\font \fivesans = amss10 at 5pt
+\font \sixsans = amss10 at 6pt
+\font \sevensans = amss10 at 7pt
+\font \ninesans = amss10 at 9pt
+\font \tbst = amsy10 scaled\magstep1
+\font \tast = amsy10 scaled\magstep2
+\font \tbsss = amsy5 scaled\magstep1
+\font \tasss = amsy5 scaled\magstep2
+\font \sixsy = amsy6
+\font \tbss = amsy7 scaled\magstep1
+\font \tass = amsy7 scaled\magstep2
+\font \ninesy = amsy9
+\font \markfont = amti10 at 11pt
+\font \nineit = amti9
+\font \ninett = amtt9
+%-----------------------------------------------------------------------
+\magnification=\magstep0
+\hsize=12.2truecm
+\vsize=19.4truecm
+\hfuzz=2pt
+\tolerance=500
+\abovedisplayskip=3 mm plus6pt minus 4pt
+\belowdisplayskip=3 mm plus6pt minus 4pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\predisplaypenalty=0
+\clubpenalty=10000
+\widowpenalty=10000
+\frenchspacing
+\newdimen\oldparindent\oldparindent=1.5em
+\parindent=1.5em
+%-----------------------------------------------------------------------
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.8pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.3pt}<\cr}}}}}
+\def\bbbr{{\rm I\!R}} %reelle Zahlen
+\def\bbbm{{\rm I\!M}}
+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
+\def\bbbf{{\rm I\!F}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbe{{\mathchoice {\setbox0=\hbox{\smalletextfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.4\wd0\vrule width0.3pt height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{\smalletextfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.4\wd0\vrule width0.3pt height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{\smallescriptfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.5\wd0\vrule width0.2pt height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{\smallescriptscriptfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.4\wd0\vrule width0.2pt height0.7\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+\def\bbbz{{\mathchoice {\hbox{$\sans\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sans\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sans\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\sans\scriptscriptstyle Z\kern-0.2em Z$}}}}
+%--------------------------------------------------------------------------
+% petit-fonts
+\skewchar\ninei='177 \skewchar\sixi='177
+\skewchar\ninesy='60 \skewchar\sixsy='60
+\hyphenchar\ninett=-1
+\def\newline{\hfil\break}%
+%--------------------------------------------------------------------------
+\catcode`@=11
+\def\folio{\ifnum\pageno<\z@
+\uppercase\expandafter{\romannumeral-\pageno}%
+\else\number\pageno \fi}
+\catcode`@=12 % at signs are no longer letters
+%-------------------------------------------------------
+% Definition der versal griechischen Buchstaben
+%===============================================================================
+ \mathchardef\Gamma="0100
+ \mathchardef\Delta="0101
+ \mathchardef\Theta="0102
+ \mathchardef\Lambda="0103
+ \mathchardef\Xi="0104
+ \mathchardef\Pi="0105
+ \mathchardef\Sigma="0106
+ \mathchardef\Upsilon="0107
+ \mathchardef\Phi="0108
+ \mathchardef\Psi="0109
+ \mathchardef\Omega="010A
+%-------------------------------------------------------------------------------
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+%---------------------------------------------------------------------------
+\newfam\sansfam
+\textfont\sansfam=\tensans\scriptfont\sansfam=\sevensans
+\scriptscriptfont\sansfam=\fivesans
+\def\sans{\fam\sansfam\tensans}
+%---------------------------------------------------------------------------
+\def\stackfigbox{\if
+Y\FIG\global\setbox\figbox=\vbox{\unvbox\figbox\box1}%
+\else\global\setbox\figbox=\vbox{\box1}\global\let\FIG=Y\fi}
+%
+\def\placefigure{\dimen0=\ht1\advance\dimen0by\dp1
+\advance\dimen0by5\baselineskip
+\advance\dimen0by0.4true cm
+\ifdim\dimen0>\vsize\pageinsert\box1\vfill\endinsert
+\else%keine seitenhohe Abbildung
+\if Y\FIG\stackfigbox\else
+\dimen0=\pagetotal\ifdim\dimen0<\pagegoal%aktuelle Seite ist noch nicht voll
+\advance\dimen0by\ht1\advance\dimen0by\dp1\advance\dimen0by1.7true cm
+\ifdim\dimen0>\pagegoal\stackfigbox
+\else\box1\vskip7true mm\fi
+\else\box1\vskip7true mm\fi\fi\fi\let\firstleg=Y}
+%
+% Abbildungen
+\def\begfig#1cm#2\endfig{\par
+\setbox1=\vbox{\dimen0=#1true cm\advance\dimen0
+by1true cm\kern\dimen0\vskip-.8333\baselineskip#2}\placefigure}
+%
+\def\begdoublefig#1cm #2 #3 \enddoublefig{\begfig#1cm%
+\line{\vtop{\hsize=0.46\hsize#2}\hfill
+\vtop{\hsize=0.46\hsize#3}}\endfig}
+%-------------------------------------------------------------------
+\let\firstleg=Y
+% Abbildungslegenden
+% Falls Text kleiner als eine volle Zeile, zentriert.
+\def\figure#1#2{\if Y\firstleg\vskip1true cm\else\vskip1.7true mm\fi
+\let\firstleg=N\setbox0=\vbox{\noindent\petit{\bf
+Fig.\ts#1\unskip.\ }\ignorespaces #2\smallskip
+\count255=0\global\advance\count255by\prevgraf}%
+\ifnum\count255>1\box0\else
+\centerline{\petit{\bf Fig.\ts#1\unskip.\
+}\ignorespaces#2}\smallskip\fi}
+%-----------------------------------------------------------------
+% Tabellenkoepfe
+\def\tabcap#1#2{\smallskip\vbox{\noindent\petit{\bf Table\ts#1\unskip.\
+}\ignorespaces #2\medskip}}
+%-------------------------------------------------------------------
+\def\begtab#1cm#2\endtab{\par
+ \ifvoid\topins\midinsert\medskip\vbox{#2\kern#1true cm}\endinsert
+ \else\topinsert\vbox{#2\kern#1true cm}\endinsert\fi}
+%-------------------------------------------------------------------
+\def\begpet{\vskip6pt\bgroup\petit}
+\def\endpet{\vskip6pt\egroup}
+%-------------------------------------------------------------------
+% Referenzen
+\newdimen\refindent
+\newlinechar=`\|
+\def\begref#1#2{\titlea{}{#1}%
+\bgroup\petit
+\setbox0=\hbox{#2\enspace}\refindent=\wd0\relax
+\if!#2!\else
+\ifdim\refindent>0.5em\else
+\message{|Something may be wrong with your references;}%
+\message{probably you missed the second argument of \string\begref.}%
+\fi\fi}
+\def\ref{\goodbreak
+\hangindent\oldparindent\hangafter=1
+\noindent\ignorespaces}
+\def\refno#1{\goodbreak
+\setbox0=\hbox{#1\enspace}\ifdim\refindent<\wd0\relax
+\message{|Your reference `#1' is wider than you pretended in using
+\string\begref.}\fi
+\hangindent\refindent\hangafter=1
+\noindent\kern\refindent\llap{#1\enspace}\ignorespaces}
+\def\refmark#1{\goodbreak
+\setbox0=\hbox{#1\enspace}\ifdim\refindent<\wd0\relax
+\message{|Your reference `#1' is wider than you pretended in using
+\string\begref.}\fi
+\hangindent\refindent\hangafter=1
+\noindent\hbox to\refindent{#1\hss}\ignorespaces}
+\def\endref{\goodbreak\endpet}% Ende der Referenzen
+%-------------------------------------------------------------------
+\def\vec#1{{\textfont1=\tenbf\scriptfont1=\sevenbf
+\textfont0=\tenbf\scriptfont0=\sevenbf
+\mathchoice{\hbox{$\displaystyle#1$}}{\hbox{$\textstyle#1$}}
+{\hbox{$\scriptstyle#1$}}{\hbox{$\scriptscriptstyle#1$}}}}
+%---------------------------------------------------------------------
+\def\petit{\def\rm{\fam0\ninerm}%
+\textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ \def\it{\fam\itfam\nineit}%
+ \textfont\itfam=\nineit
+ \def\sl{\fam\slfam\ninesl}%
+ \textfont\slfam=\ninesl
+ \def\bf{\fam\bffam\ninebf}%
+ \textfont\bffam=\ninebf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\sans{\fam\sansfam\ninesans}%
+ \textfont\sansfam=\ninesans \scriptfont\sansfam=\sixsans
+ \scriptscriptfont\sansfam=\fivesans
+ \def\tt{\fam\ttfam\ninett}%
+ \textfont\ttfam=\ninett
+ \normalbaselineskip=11pt
+ \setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
+ \normalbaselines\rm
+\def\vec##1{{\textfont1=\tbms\scriptfont1=\tbmss
+\textfont0=\ninebf\scriptfont0=\sixbf
+\mathchoice{\hbox{$\displaystyle##1$}}{\hbox{$\textstyle##1$}}
+{\hbox{$\scriptstyle##1$}}{\hbox{$\scriptscriptstyle##1$}}}}}
+%-------------------------------------------------------------------
+\nopagenumbers
+%
+% Der Schalter \header gibt an, ob ein "running head" gedruckt werden
+% soll; wenn er nicht auf "N" steht kommt ein solcher.
+\let\header=Y
+\let\FIG=N
+\newbox\figbox
+\output={\if N\header\headline={\hfil}\fi\plainoutput\global\let\header=Y
+\if Y\FIG\topinsert\unvbox\figbox\endinsert\global\let\FIG=N\fi}
+%------------------------------------------------------
+\let\lasttitle=N
+%---------------------------------------------------------------
+\catcode`\@=\active
+\def\author#1{\bgroup
+\baselineskip=13.2pt
+\lineskip=0pt
+\pretolerance=10000
+\markfont
+\ignorespaces#1\bigskip\egroup
+{\def@##1{}%
+\setbox0=\hbox{\petit\kern2.5true cc\ignorespaces#1\unskip}%
+\ifdim\wd0>\hsize
+\message{The names of the authors exceed the headline, please use a }%
+\message{short form with AUTHORRUNNING}\gdef\leftheadline{%
+\hbox to2.5true cc{\folio\hfil}\hfil AUTHORS suppressed due to excessive
+length}%
+\else
+\xdef\leftheadline{\hbox to2.5true
+cc{\noexpand\folio\hfil}\hfill\ignorespaces#1\unskip}%
+\fi
+}\let\INS=E}
+\def\address#1{\bgroup\petit
+\ignorespaces#1\bigskip\egroup
+\catcode`\@=12
+\vskip2cm\noindent\ignorespaces}
+%---------------------------------------------------------------------
+\let\INS=N%
+% Aktionen, die bei Antreffen des @-Zeichens zu machen sind;
+% drei Faelle a) @ bei AUTHOR, b) 1.@ bei ADDRESS, c) alle weiteren @'s
+\def@#1{\if N\INS\unskip$\,^{#1}$\else\global\footcount=#1\relax
+\if E\INS\hangindent0.5\parindent\noindent\hbox
+to0.5\parindent{$^{#1}$\hfil}\let\INS=Y\ignorespaces
+\else\par\hangindent0.5\parindent\noindent\hbox
+to0.5\parindent{$^{#1}$\hfil}\ignorespaces\fi\fi}%
+\catcode`\@=12
+%-------------------------------------------------------------------
+% "running head"
+\headline={\petit\def\newline{ }\def\fonote#1{}\ifodd\pageno
+\rightheadline\else\leftheadline\fi}
+\def\rightheadline{Missing CONTRIBUTION
+title\hfil\hbox to2.5true cc{\hfil\folio}}
+\def\leftheadline{\hbox to2.5true cc{\folio\hfil}\hfil Missing name(s) of the
+author(s)}
+\nopagenumbers
+%
+\let\header=Y
+%------------------------------------------------------
+\def\contributionrunning#1{\message{Running head on right hand sides
+(CONTRIBUTION)
+has been changed}\gdef\rightheadline{\ignorespaces#1\unskip\hfil
+\hbox to2.5true cc{\hfil\folio}}}
+\def\authorrunning#1{\message{Running head on left hand sides (AUTHOR)
+has been changed}\gdef\leftheadline{\hbox to2.5true cc{\folio
+\hfil}\hfil\ignorespaces#1\unskip}}
+%------------------------------------------------------
+\let\lasttitle=N
+ \def\contribution#1{\vfill\eject
+ \let\header=N\bgroup
+ \textfont0=\tafontt \scriptfont0=\tafonts \scriptscriptfont0=\tafontss
+ \textfont1=\tamt \scriptfont1=\tams \scriptscriptfont1=\tams
+ \textfont2=\tast \scriptfont2=\tass \scriptscriptfont2=\tasss
+ \par\baselineskip=16pt
+ \lineskip=16pt
+ \tafontt
+ \raggedright
+ \pretolerance=10000
+ \noindent
+ \ignorespaces#1
+ \vskip17pt\egroup
+ \nobreak
+ \parindent=0pt
+ \everypar={\global\parindent=1.5em
+ \global\let\lasttitle=N\global\everypar={}}%
+ \global\let\lasttitle=A%
+ \setbox0=\hbox{\petit\def\newline{ }\def\fonote##1{}\kern2.5true
+ cc\ignorespaces#1}\ifdim\wd0>\hsize
+ \message{Your CONTRIBUTIONtitle exceeds the headline,
+please use a short form
+with CONTRIBUTIONRUNNING}\gdef\rightheadline{CONTRIBUTION title
+suppressed due to excessive length\hfil\hbox to2.5true cc{\hfil\folio}}%
+\else
+\gdef\rightheadline{\ignorespaces#1\unskip\hfil\hbox to2.5true
+cc{\hfil\folio}}\fi
+\catcode`\@=\active
+ \ignorespaces}
+%------------------------------------------------------
+% Beginn Ueberschrift 1. Ordnung
+\def\titlea#1#2{\if N\lasttitle\else\vskip-28pt
+ \fi
+ \vskip18pt plus 4pt minus4pt
+ \bgroup
+\textfont0=\tbfontt \scriptfont0=\tbfonts \scriptscriptfont0=\tbfontss
+\textfont1=\tbmt \scriptfont1=\tbms \scriptscriptfont1=\tbmss
+\textfont2=\tbst \scriptfont2=\tbss \scriptscriptfont2=\tbsss
+\textfont3=\tasys \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \baselineskip=16pt
+ \lineskip=0pt
+ \pretolerance=10000
+ \noindent
+ \tbfontt
+ \rightskip 0pt plus 6em
+ \setbox0=\vbox{\vskip23pt\def\fonote##1{}%
+ \noindent
+ \if!#1!\ignorespaces#2
+ \else\ignorespaces#1\unskip\enspace\ignorespaces#2\fi
+ \vskip18pt}%
+ \dimen0=\pagetotal\advance\dimen0 by-\pageshrink
+ \ifdim\dimen0<\pagegoal
+ \dimen0=\ht0\advance\dimen0 by\dp0\advance\dimen0 by
+ 3\normalbaselineskip
+ \advance\dimen0 by\pagetotal
+ \ifdim\dimen0>\pagegoal\eject\fi\fi
+ \noindent
+ \if!#1!\ignorespaces#2
+ \else\ignorespaces#1\unskip\enspace\ignorespaces#2\fi
+ \vskip12pt plus4pt minus4pt\egroup
+ \nobreak
+ \parindent=0pt
+ \everypar={\global\parindent=\oldparindent
+ \global\let\lasttitle=N\global\everypar={}}%
+ \global\let\lasttitle=A%
+ \ignorespaces}
+%------------------------------------------------------
+ % Beginn Ueberschrift 2. Ordnung
+ \def\titleb#1#2{\if N\lasttitle\else\vskip-22pt
+ \fi
+ \vskip18pt plus 4pt minus4pt
+ \bgroup
+\textfont0=\tenbf \scriptfont0=\sevenbf \scriptscriptfont0=\fivebf
+\textfont1=\tams \scriptfont1=\tamss \scriptscriptfont1=\tbmss
+ \lineskip=0pt
+ \pretolerance=10000
+ \noindent
+ \bf
+ \rightskip 0pt plus 6em
+ \setbox0=\vbox{\vskip23pt\def\fonote##1{}%
+ \noindent
+ \if!#1!\ignorespaces#2
+ \else\ignorespaces#1\unskip\enspace\ignorespaces#2\fi
+ \vskip10pt}%
+ \dimen0=\pagetotal\advance\dimen0 by-\pageshrink
+ \ifdim\dimen0<\pagegoal
+ \dimen0=\ht0\advance\dimen0 by\dp0\advance\dimen0 by
+ 3\normalbaselineskip
+ \advance\dimen0 by\pagetotal
+ \ifdim\dimen0>\pagegoal\eject\fi\fi
+ \noindent
+ \if!#1!\ignorespaces#2
+ \else\ignorespaces#1\unskip\enspace\ignorespaces#2\fi
+ \vskip8pt plus4pt minus4pt\egroup
+ \nobreak
+ \parindent=0pt
+ \everypar={\global\parindent=\oldparindent
+ \global\let\lasttitle=N\global\everypar={}}%
+ \global\let\lasttitle=B%
+ \ignorespaces}
+%------------------------------------------------------
+ % Beginn Ueberschrift 3. Ordnung
+ \def\titlec#1{\if N\lasttitle\else\vskip-\baselineskip
+ \fi
+ \vskip18pt plus 4pt minus4pt
+ \bgroup
+\textfont0=\tenbf \scriptfont0=\sevenbf \scriptscriptfont0=\fivebf
+\textfont1=\tams \scriptfont1=\tamss \scriptscriptfont1=\tbmss
+ \bf
+ \noindent
+ \ignorespaces#1\unskip\ \egroup
+ \ignorespaces}
+%-------------------------------------------------------------------
+ % Beginn Ueberschrift 4. Ordnung
+ \def\titled#1{\if N\lasttitle\else\vskip-\baselineskip
+ \fi
+ \vskip12pt plus 4pt minus 4pt
+ \bgroup
+ \it
+ \noindent
+ \ignorespaces#1\unskip\ \egroup
+ \ignorespaces}
+%-------------------------------------------------------------------
+\let\ts=\thinspace
+\def\footnoterule{\kern-3pt\hrule width 2true cm\kern2.6pt}
+% Fussnoten-macros
+\newcount\footcount \footcount=0
+\def\advftncnt{\advance\footcount by1\global\footcount=\footcount}
+% Automatisch numerierte Fussnote, Fussnotentex in petit
+\def\fonote#1{\advftncnt$^{\the\footcount}$\begingroup\petit
+\parfillskip=0pt plus 1fil
+\def\textindent##1{\hangindent0.5\oldparindent\noindent\hbox
+to0.5\oldparindent{##1\hss}\ignorespaces}%
+\vfootnote{$^{\the\footcount}$}{#1\vskip-9.69pt}\endgroup}
+%-------------------------------------------------------------------
+\def\item#1{\par\noindent
+\hangindent6.5 mm\hangafter=0
+\llap{#1\enspace}\ignorespaces}
+%-------------------------------------------------------------------
+\def\itemitem#1{\par\noindent
+\hangindent11.5 mm\hangafter=0
+\llap{#1\enspace}\ignorespaces}
+%-------------------------------------------------------------------
+\def\newenvironment#1#2#3#4{\long\def#1##1##2{\removelastskip
+\vskip\baselineskip\noindent{#3#2\if!##1!.\else\unskip\ \ignorespaces
+##1\unskip\fi\ }{#4\ignorespaces##2}\vskip\baselineskip}}
+% Lemma, Proposition, Theorem, Corollary
+\newenvironment\lemma{Lemma}{\bf}{\it}
+\newenvironment\proposition{Proposition}{\bf}{\it}
+\newenvironment\theorem{Theorem}{\bf}{\it}
+\newenvironment\corollary{Corollary}{\bf}{\it}
+%---------------------------------------------------------------------
+% Example, Exercise, Problem, Solution, Definition
+\newenvironment\example{Example}{\it}{\rm}
+\newenvironment\exercise{Exercise}{\bf}{\rm}
+\newenvironment\problem{Problem}{\bf}{\rm}
+\newenvironment\solution{Solution}{\bf}{\rm}
+\newenvironment\definition{Definition}{\bf}{\rm}
+%---------------------------------------------------------------------
+%Note, Question
+\newenvironment\note{Note}{\it}{\rm}
+\newenvironment\question{Question}{\it}{\rm}
+%---------------------------------------------------------------------
+%Proof, Remark
+\long\def\remark#1{\removelastskip\vskip\baselineskip\noindent{\it
+Remark.\ }\ignorespaces}
+\long\def\proof#1{\removelastskip\vskip\baselineskip\noindent{\it
+Proof\if!#1!\else\ \ignorespaces#1\fi.\ }\ignorespaces}
+%------------------------------------------------------------------
+\def\typeset{\petit\noindent This article was processed by the author
+using the \TeX\ macro package from Springer-Verlag.\par}
+\outer\def\byebye{\bigskip\bigskip\typeset
+\footcount=1\ifx\speciali\undefined\else
+\loop\smallskip\noindent special character No\number\footcount:
+\csname special\romannumeral\footcount\endcsname
+\advance\footcount by 1\global\footcount=\footcount
+\ifnum\footcount<11\repeat\fi
+\vfill\supereject\end}
diff --git a/macros/plain/contrib/jns/jns.cmm b/macros/plain/contrib/jns/jns.cmm
new file mode 100644
index 0000000000..0842e27a92
--- /dev/null
+++ b/macros/plain/contrib/jns/jns.cmm
@@ -0,0 +1,556 @@
+% This is JNS.CMM the plain TeX macro package
+% (CM version) from Springer-Verlag
+% for the Journal of Nonlinear Science
+% version of 16 July 1990
+\font \tafontt = cmbx10 scaled\magstep2
+\font \tafontss = cmbx5 scaled\magstep2
+\font \sixbf = cmbx6
+\font \tafonts = cmbx7 scaled\magstep2
+\font \eightbf = cmbx8
+\font \sixi = cmmi6
+\font \eighti = cmmi8
+\font \tams = cmmib10
+\font \tbmss = cmmib10 scaled 600
+\font \tamss = cmmib10 scaled 700
+\font \tbms = cmmib10 scaled 833
+\font \tamt = cmmib10 scaled\magstep2
+\font \smallescriptscriptfont = cmr5
+\font \smalletextfont = cmr5 at 10pt
+\font \smallescriptfont = cmr5 at 7pt
+\font \sixrm = cmr6
+\font \eightrm = cmr8
+\font \tensans = cmss10
+\font \fivesans = cmss10 at 5pt
+\font \sixsans = cmss10 at 6pt
+\font \sevensans = cmss10 at 7pt
+\font \eightsans = cmss10 at 8pt
+\font \tast = cmsy10 scaled\magstep2
+\font \tasss = cmsy5 scaled\magstep2
+\font \sixsy = cmsy6
+\font \tass = cmsy7 scaled\magstep2
+\font \eightsy = cmsy8
+\font \eightit = cmti8
+\font \eighttt = cmtt8
+%-----------------------------------------------------------------------
+\magnification=\magstep0
+\hsize=12.2cm
+\vsize=19.4cm
+\hfuzz=2pt
+\tolerance=500
+\abovedisplayskip=3 mm plus6pt minus 4pt
+\belowdisplayskip=3 mm plus6pt minus 4pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\predisplaypenalty=0
+\clubpenalty=10000
+\widowpenalty=10000
+\frenchspacing
+\newdimen\oldparindent\oldparindent=1.5em
+\parindent=1.5em
+%-----------------------------------------------------------------------
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.8pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.3pt}<\cr}}}}}
+\def\bbbr{{\rm I\!R}} %reelle Zahlen
+\def\bbbm{{\rm I\!M}}
+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
+\def\bbbf{{\rm I\!F}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbe{{\mathchoice {\setbox0=\hbox{\smalletextfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.4\wd0\vrule width0.3pt height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{\smalletextfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.4\wd0\vrule width0.3pt height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{\smallescriptfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.5\wd0\vrule width0.2pt height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{\smallescriptscriptfont e}\hbox{\raise
+0.1\ht0\hbox to0pt{\kern0.4\wd0\vrule width0.2pt height0.7\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+\def\bbbz{{\mathchoice {\hbox{$\sans\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sans\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sans\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\sans\scriptscriptstyle Z\kern-0.2em Z$}}}}
+%--------------------------------------------------------------------------
+% petit-fonts
+\skewchar\eighti='177 \skewchar\sixi='177
+\skewchar\eightsy='60 \skewchar\sixsy='60
+\hyphenchar\eighttt=-1
+\def\newline{\hfil\break}%
+%--------------------------------------------------------------------------
+\catcode`@=11
+\def\folio{\ifnum\pageno<\z@
+\uppercase\expandafter{\romannumeral-\pageno}%
+\else\number\pageno\fi}
+\catcode`@=12 % at signs are no longer letters
+%-------------------------------------------------------
+% Definition der versal griechischen Buchstaben
+%===============================================================================
+ \mathchardef\Gamma="0100
+ \mathchardef\Delta="0101
+ \mathchardef\Theta="0102
+ \mathchardef\Lambda="0103
+ \mathchardef\Xi="0104
+ \mathchardef\Pi="0105
+ \mathchardef\Sigma="0106
+ \mathchardef\Upsilon="0107
+ \mathchardef\Phi="0108
+ \mathchardef\Psi="0109
+ \mathchardef\Omega="010A
+%-------------------------------------------------------------------------------
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+%---------------------------------------------------------------------------
+\newfam\sansfam
+\textfont\sansfam=\tensans\scriptfont\sansfam=\sevensans
+\scriptscriptfont\sansfam=\fivesans
+\def\sans{\fam\sansfam\tensans}
+%---------------------------------------------------------------------------
+\def\stackfigbox{\if
+Y\FIG\global\setbox\figbox=\vbox{\unvbox\figbox\box1}%
+\else\global\setbox\figbox=\vbox{\box1}\global\let\FIG=Y\fi}
+%
+\def\placefigure{\dimen0=\ht1\advance\dimen0by\dp1
+\advance\dimen0by5\baselineskip
+\advance\dimen0by0.4true cm
+\ifdim\dimen0>\vsize\pageinsert\box1\vfill\endinsert
+\else%keine seitenhohe Abbildung
+\if Y\FIG\stackfigbox\else
+\dimen0=\pagetotal\ifdim\dimen0<\pagegoal%aktuelle Seite ist noch nicht voll
+\advance\dimen0by\ht1\advance\dimen0by\dp1\advance\dimen0by1.7true cm
+\ifdim\dimen0>\pagegoal\stackfigbox
+\else\box1\vskip7true mm\fi
+\else\box1\vskip7true mm\fi\fi\fi\let\firstleg=Y}
+%
+% Abbildungen
+\def\begfig#1cm#2\endfig{\par
+\setbox1=\vbox{\dimen0=#1true cm\advance\dimen0
+by1true cm\kern\dimen0\vskip-.8333\baselineskip#2}\placefigure}
+%
+\def\begdoublefig#1cm #2 #3 \enddoublefig{\begfig#1cm%
+\line{\vtop{\hsize=0.46\hsize#2}\hfill
+\vtop{\hsize=0.46\hsize#3}}\endfig}
+%-------------------------------------------------------------------
+\let\firstleg=Y
+% Abbildungslegenden
+% Falls Text kleiner als eine volle Zeile, zentriert.
+\def\figure#1#2{\if Y\firstleg\vskip1true cm\else\vskip1.7true mm\fi
+\let\firstleg=N\setbox0=\vbox{\noindent\petit{\bf
+Fig.\ts#1\unskip.\ }\ignorespaces #2\smallskip
+\count255=0\global\advance\count255by\prevgraf}%
+\ifnum\count255>1\box0\else
+\centerline{\petit{\bf Fig.\ts#1\unskip.\
+}\ignorespaces#2}\smallskip\fi}
+%-----------------------------------------------------------------
+% Tabellenkoepfe
+\def\tabcap#1#2{\smallskip\vbox{\noindent\petit{\bf Table\ts#1\unskip.\
+}\ignorespaces #2\medskip}}
+%-------------------------------------------------------------------
+\def\begtab#1cm#2\endtab{\par
+ \ifvoid\topins\midinsert\medskip\vbox{#2\kern#1true cm}\endinsert
+ \else\topinsert\vbox{#2\kern#1true cm}\endinsert\fi}
+%-------------------------------------------------------------------
+\def\begpet{\vskip6pt\bgroup\petit}
+\def\endpet{\vskip6pt\egroup}
+%-------------------------------------------------------------------
+% Referenzen
+\newdimen\refindent
+\newlinechar=`\|
+\def\begref#1#2{\titlea{}{#1}%
+\bgroup\petit
+\setbox0=\hbox{#2\enspace}\refindent=\wd0\relax
+\if!#2!\else
+\ifdim\refindent>0.5em\else
+\message{|Something may be wrong with your references;}%
+\message{probably you missed the second argument of \string\begref.}%
+\fi\fi}
+\def\ref{\goodbreak
+\hangindent\oldparindent\hangafter=1
+\noindent\ignorespaces}
+\def\refno#1{\goodbreak
+\setbox0=\hbox{#1\enspace}\ifdim\refindent<\wd0\relax
+\message{|Your reference `#1' is wider than you pretended in using
+\string\begref.}\fi
+\hangindent\refindent\hangafter=1
+\noindent\kern\refindent\llap{#1\enspace}\ignorespaces}
+\def\refmark#1{\goodbreak
+\setbox0=\hbox{#1\enspace}\ifdim\refindent<\wd0\relax
+\message{|Your reference `#1' is wider than you pretended in using
+\string\begref.}\fi
+\hangindent\refindent\hangafter=1
+\noindent\hbox to\refindent{#1\hss}\ignorespaces}
+\def\endref{\goodbreak\endpet}% Ende der Referenzen
+%-------------------------------------------------------------------
+\def\vec#1{{\textfont1=\tenbf\scriptfont1=\sevenbf
+\textfont0=\tenbf\scriptfont0=\sevenbf
+\mathchoice{\hbox{$\displaystyle#1$}}{\hbox{$\textstyle#1$}}
+{\hbox{$\scriptstyle#1$}}{\hbox{$\scriptscriptstyle#1$}}}}
+%---------------------------------------------------------------------
+\def\petit{\def\rm{\fam0\eightrm}%
+\textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ \def\it{\fam\itfam\eightit}%
+ \textfont\itfam=\eightit
+ \def\bf{\fam\bffam\eightbf}%
+ \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\sans{\fam\sansfam\eightsans}%
+ \textfont\sansfam=\eightsans \scriptfont\sansfam=\sixsans
+ \scriptscriptfont\sansfam=\fivesans
+ \def\tt{\fam\ttfam\eighttt}%
+ \textfont\ttfam=\eighttt
+ \normalbaselineskip=10pt
+ \setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
+ \normalbaselines\rm
+\def\vec##1{{\textfont1=\tbms\scriptfont1=\tbmss
+\textfont0=\eightbf\scriptfont0=\sixbf
+\mathchoice{\hbox{$\displaystyle##1$}}{\hbox{$\textstyle##1$}}
+{\hbox{$\scriptstyle##1$}}{\hbox{$\scriptscriptstyle##1$}}}}}
+%-------------------------------------------------------------------
+\nopagenumbers
+%
+% Der Schalter \header gibt an, ob ein "running head" gedruckt werden
+% soll; wenn er nicht auf "N" steht kommt ein solcher.
+\let\header=Y
+\let\FIG=N
+\newbox\figbox
+\output={\if N\header\headline={\hfil}\fi\plainoutput
+\global\let\header=Y
+\if Y\FIG\topinsert\unvbox\figbox\endinsert\global\let\FIG=N\fi}
+%------------------------------------------------------
+\let\lasttitle=N
+%------------------------------------------------------
+% "running head"
+\headline={\petit\def\newline{ }\def\fonote#1{}\ifodd\pageno
+\rightheadline\else\leftheadline\fi}
+\def\rightheadline{Missing MAINTITLE\hfil\hbox to2.5true
+cc{\hfil\folio}}
+\def\leftheadline{\hbox to2.5true cc{\folio\hfil}\hfil Missing name(s)
+of the author(s)}
+\nopagenumbers
+%
+\let\header=Y
+%------------------------------------------------------
+\def\Logo{\setbox254=\hbox{ THE JOURNAL OF }%
+\vbox{\hrule\hbox{\vrule\vbox{\kern3pt
+\copy254
+\hbox to\wd254{\hfil NONLINEAR\hfil}
+\hbox to\wd254{\hfil SCIENCE\hfil}
+\hbox to\wd254{\hfil\number\day.\number\month.\number\year\hfil}
+\kern3pt}\vrule}\hrule}}
+%------------------------------------------------------
+\def\makelogo{\hbox to\hsize{\hfil
+\Logo}\vskip2.1cm}
+%------------------------------------------------------
+ \def\maintitle#1{\vfill\eject
+ \makelogo
+ \let\header=N\bgroup
+ \textfont0=\tafontt \scriptfont0=\tafonts \scriptscriptfont0=\tafontss
+ \textfont1=\tamt \scriptfont1=\tams \scriptscriptfont1=\tamss
+ \textfont2=\tast \scriptfont2=\tass \scriptscriptfont2=\tasss
+ \par\baselineskip=16pt
+ \lineskip=0pt
+ \tafontt
+ \raggedright
+ \pretolerance=10000
+ \noindent
+ \ignorespaces#1
+ \vskip10.8pt\egroup
+ \nobreak
+ \parindent=0pt
+ \everypar={\global\parindent=1.5em
+ \global\let\lasttitle=N\global\everypar={}}%
+ \global\let\lasttitle=A%
+ \setbox0=\hbox{\petit\def\newline{ }\def\fonote##1{}\kern2.5true
+ cc\ignorespaces#1}\ifdim\wd0>\hsize
+ \message{Your MAINTITLE exceeds the headline,
+please use a short form
+with MAINRUNNING}\gdef\rightheadline{MAIN title
+suppressed due to excessive length\hfil\hbox to2.5true cc{\hfil\folio}}%
+\else
+\gdef\rightheadline{\ignorespaces#1\unskip\hfil\hbox to2.5true
+cc{\hfil\folio}}\fi
+\catcode`\@=\active
+ \ignorespaces}
+%------------------------------------------------------
+\def\mainrunning#1{\message{Running head on right hand sides
+(MAINTITLE)
+has been changed}\gdef\rightheadline{\ignorespaces#1\unskip\hfil
+\hbox to2.5true cc{\hfil\folio}}}
+\def\authorrunning#1{\message{Running head on left hand sides (AUTHOR)
+has been changed}\gdef\leftheadline{\hbox to2.5true cc{\folio
+\hfil}\hfil\ignorespaces#1\unskip}}
+%------------------------------------------------------
+\def\subtitle#1{\vskip-5.7pt
+ \bgroup
+\textfont0=\tenbf \scriptfont0=\sevenbf \scriptscriptfont0=\fivebf
+\textfont1=\tams \scriptfont1=\tamss \scriptscriptfont1=\tbmss
+ \pretolerance=10000
+ \noindent
+ \bf
+ \rightskip 0pt plus 6em
+ \ignorespaces#1
+ \vskip10.8pt\egroup
+ \nobreak
+ \parindent=0pt
+ \everypar={\global\parindent=1.5em
+ \global\let\lasttitle=N\global\everypar={}}%
+ \global\let\lasttitle=A%
+ \ignorespaces}
+%------------------------------------------------------
+\catcode`\@=\active
+\def\author#1{\bgroup
+\pretolerance=10000
+\bf
+\noindent
+\ignorespaces#1\vskip.1cm\egroup
+{\def@##1{}%
+\setbox0=\hbox{\petit\kern2.5true cc\ignorespaces#1\unskip}%
+\ifdim\wd0>\hsize
+\message{The names of the authors exceed the headline, please use a }%
+\message{short form with AUTHORRUNNING}\gdef\leftheadline{%
+\hbox to2.5true cc{\folio\hfil}\hfil AUTHORS suppressed due to excessive
+length}%
+\else
+\xdef\leftheadline{\hbox to2.5true
+cc{\noexpand\folio\hfil}\hfill\ignorespaces#1\unskip}%
+\fi
+}\let\INS=E}
+\def\address#1{\bgroup\petit
+\ignorespaces#1\vskip8pt\egroup
+\catcode`\@=12}
+%---------------------------------------------------------------------
+\let\INS=N%
+% Aktionen, die bei Antreffen des @-Zeichens zu machen sind;
+% drei Faelle a) @ bei AUTHOR, b) 1.@ bei ADDRESS, c) alle weiteren @'s
+\def@#1{\if N\INS\unskip$\,^{#1}$\else\global\footcount=#1\relax
+\if E\INS\hangindent0.5\parindent\noindent\hbox
+to0.5\parindent{$^{#1}$\hfil}\let\INS=Y\ignorespaces
+\else\par\hangindent0.5\parindent\noindent\hbox
+to0.5\parindent{$^{#1}$\hfil}\ignorespaces\fi\fi}%
+\catcode`\@=12
+%-------------------------------------------------------------------
+\def\received#1{\bgroup\petit\noindent Received #1
+\vskip24pt\egroup}
+%---------------------------------------------------------------
+\long\def\summary#1{\noindent{\bf Summary. }\ignorespaces#1
+\vskip12pt}
+%---------------------------------------------------------------
+\def\keywords#1{\noindent{\bf Key words. }\ignorespaces#1
+\par}
+%---------------------------------------------------------------
+% Beginn Ueberschrift 1. Ordnung
+\def\titlea#1#2{\if N\lasttitle\else\vskip-28pt
+ \fi
+ \vskip18pt plus 4pt minus4pt
+ \bgroup
+\textfont0=\tenbf \scriptfont0=\sevenbf \scriptscriptfont0=\fivebf
+\textfont1=\tams \scriptfont1=\tamss \scriptscriptfont1=\tbmss
+ \pretolerance=10000
+ \noindent
+ \bf
+ \rightskip 0pt plus 6em
+ \setbox0=\vbox{\vskip23pt\def\fonote##1{}%
+ \noindent
+ \if!#1!\ignorespaces#2
+ \else\ignorespaces#1\unskip\enspace\ignorespaces#2\fi
+ \vskip18pt}%
+ \dimen0=\pagetotal\advance\dimen0 by-\pageshrink
+ \ifdim\dimen0<\pagegoal
+ \dimen0=\ht0\advance\dimen0 by\dp0\advance\dimen0 by
+ 3\normalbaselineskip
+ \advance\dimen0 by\pagetotal
+ \ifdim\dimen0>\pagegoal\eject\fi\fi
+ \noindent
+ \if!#1!\ignorespaces#2
+ \else\ignorespaces#1\unskip\enspace\ignorespaces#2\fi
+ \vskip14pt plus4pt minus4pt\egroup
+ \nobreak
+ \parindent=0pt
+ \everypar={\global\parindent=\oldparindent
+ \global\let\lasttitle=N\global\everypar={}}%
+ \global\let\lasttitle=A%
+ \ignorespaces}
+%------------------------------------------------------
+ % Beginn Ueberschrift 2. Ordnung
+ \def\titleb#1#2{\if N\lasttitle\else\vskip-20pt
+ \fi
+ \vskip18pt plus 4pt minus4pt
+ \bgroup
+ \pretolerance=10000
+ \noindent
+ \it
+ \rightskip 0pt plus 6em
+ \setbox0=\vbox{\vskip23pt\def\fonote##1{}%
+ \noindent
+ \if!#1!\ignorespaces#2
+ \else\ignorespaces#1\unskip\enspace\ignorespaces#2\fi
+ \vskip10pt}%
+ \dimen0=\pagetotal\advance\dimen0 by-\pageshrink
+ \ifdim\dimen0<\pagegoal
+ \dimen0=\ht0\advance\dimen0 by\dp0\advance\dimen0 by
+ 3\normalbaselineskip
+ \advance\dimen0 by\pagetotal
+ \ifdim\dimen0>\pagegoal\eject\fi\fi
+ \noindent
+ \if!#1!\ignorespaces#2
+ \else\ignorespaces#1\unskip\enspace\ignorespaces#2\fi
+ \vskip8pt plus4pt minus4pt\egroup
+ \nobreak
+ \parindent=0pt
+ \everypar={\global\parindent=\oldparindent
+ \global\let\lasttitle=N\global\everypar={}}%
+ \global\let\lasttitle=B%
+ \ignorespaces}
+%------------------------------------------------------
+ % Beginn Ueberschrift 3. Ordnung
+ \def\titlec#1{\if N\lasttitle\else\vskip-\baselineskip
+ \fi
+ \vskip18pt plus 4pt minus4pt
+ \bgroup
+\textfont0=\tenbf \scriptfont0=\sevenbf \scriptscriptfont0=\fivebf
+\textfont1=\tams \scriptfont1=\tamss \scriptscriptfont1=\tbmss
+ \bf
+ \noindent
+ \ignorespaces#1\unskip\ \egroup
+ \ignorespaces}
+%-------------------------------------------------------------------
+ % Beginn Ueberschrift 4. Ordnung
+ \def\titled#1{\if N\lasttitle\else\vskip-\baselineskip
+ \fi
+ \vskip12pt plus 4pt minus 4pt
+ \bgroup
+ \it
+ \noindent
+ \ignorespaces#1\unskip\ \egroup
+ \ignorespaces}
+%-------------------------------------------------------------------
+\let\ts=\thinspace
+\def\footnoterule{\kern-3pt\hrule width 2true cm\kern2.6pt}
+% Fussnoten-macros
+\newcount\footcount \footcount=0
+\def\advftncnt{\advance\footcount by1\global\footcount=\footcount}
+% Automatisch numerierte Fussnote, Fussnotentex in petit
+\def\fonote#1{\advftncnt$^{\the\footcount}$\begingroup\petit
+\parfillskip=0pt plus 1fil
+\def\textindent##1{\hangindent0.5\oldparindent\noindent\hbox
+to0.5\oldparindent{##1\hss}\ignorespaces}%
+\vfootnote{$^{\the\footcount}$}{#1\vskip-9.69pt}\endgroup}
+%-------------------------------------------------------------------
+\def\item#1{\par\noindent
+\hangindent6.5 mm\hangafter=0
+\llap{#1\enspace}\ignorespaces}
+%-------------------------------------------------------------------
+\def\itemitem#1{\par\noindent
+\hangindent11.5 mm\hangafter=0
+\llap{#1\enspace}\ignorespaces}
+%-------------------------------------------------------------------
+\def\newenvironment#1#2#3#4{\long\def#1##1##2{\removelastskip
+\vskip\baselineskip\noindent{#3#2\if!##1!.\else\unskip\ \ignorespaces
+##1\unskip\fi\ }{#4\ignorespaces##2}\vskip\baselineskip}}
+% Lemma, Proposition, Theorem, Corollary
+\newenvironment\lemma{Lemma}{\bf}{\it}
+\newenvironment\proposition{Proposition}{\bf}{\it}
+\newenvironment\theorem{Theorem}{\bf}{\it}
+\newenvironment\corollary{Corollary}{\bf}{\it}
+%---------------------------------------------------------------------
+% Example, Exercise, Problem, Solution, Definition
+\newenvironment\example{Example}{\it}{\rm}
+\newenvironment\exercise{Exercise}{\bf}{\rm}
+\newenvironment\problem{Problem}{\bf}{\rm}
+\newenvironment\solution{Solution}{\bf}{\rm}
+\newenvironment\definition{Definition}{\bf}{\rm}
+%---------------------------------------------------------------------
+%Note, Question
+\newenvironment\note{Note}{\it}{\rm}
+\newenvironment\question{Question}{\it}{\rm}
+%---------------------------------------------------------------------
+%Proof, Remark
+\long\def\remark#1{\removelastskip\vskip\baselineskip\noindent{\it
+Remark.\ }\ignorespaces}
+\long\def\proof#1{\removelastskip\vskip\baselineskip\noindent{\it
+Proof\if!#1!\else\ \ignorespaces#1\fi.\ }\ignorespaces}
+%------------------------------------------------------------------
+\def\typeset{\petit\noindent This article was processed by the author
+using the \TeX\ macro package from Springer-Verlag.\par}
+\outer\def\byebye{\bigskip\bigskip\typeset
+\footcount=1\ifx\speciali\undefined\else
+\loop\smallskip\noindent special character No\number\footcount:
+\csname special\romannumeral\footcount\endcsname
+\advance\footcount by 1\global\footcount=\footcount
+\ifnum\footcount<11\repeat\fi
+\vfill\supereject\end}
diff --git a/macros/plain/contrib/jns/jns.dem b/macros/plain/contrib/jns/jns.dem
new file mode 100644
index 0000000000..a989acf3a8
--- /dev/null
+++ b/macros/plain/contrib/jns/jns.dem
@@ -0,0 +1,331 @@
+% This is JNS.DEM the demonstration file of
+% the plain TeX macro package from Springer-Verlag
+% for the Journal of Nonlinear Science
+% version of 16 July 1990
+\def\12{{1\ov 2}}
+\def\al{\alpha}
+\def\Aun{A_\un}
+\def\aun{a_\un}
+\def\bullet{\cdot}
+\def\Bun{B_\un}
+\def\bun{b_\un}
+\def\de{\delta}
+\def\dx{\dot x}
+\def\ep{\epsilon}
+\def\fa{\forall}
+\def\for{{\rm for}}
+\def\Lai{\Lambda}
+\def\lb{\left[}
+\def\lg{\left\{}
+\def\degr{\hbox{$^\circ$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\liminfuu{{\rm lim inf}$\,$}
+\def\liminfu{\mathop{\vphantom{\tst\sum}\hbox{\liminfuu}}}
+\def\limsupuu{{\rm lim sup}$\,$}
+\def\limsupu{\mathop{\vphantom{\tst\sum}\hbox{\limsupuu}}}
+\def\lr{\left(}
+\def\lss{\left\|}
+\def\Min{{\rm Min\,}}
+\def\NN{\bbbn}
+\def\ol{\overline}
+\def\om{\omega}
+\def\ov{\over}
+\def\rb{\right]}
+\def\rg{\right\}}
+\def\RRn{\bbbr^{2n}}
+\def\RR{\bbbr}
+\def\rr{\right)}
+\def\rss{\right\|}
+\def\sm{\setminus}
+\def\tst{\textstyle}
+\def\tx{\wt x}
+\def\un{\infty}
+\def\wt{\widetilde}
+\def\ZZ{\bbbz}
+\ifx\BlankIsSpace\undefined % <| Is this file
+\input jns.cmm %<---| called by
+\else\vfill\eject\pageno=26\relax %<---|
+\def\ident{Macro Package for Authors %<---| JNS.DOC
+Coding with Plain\TeX{} -- %<---|
+Demonstration File}\let\INS=N %<---| or
+\let\speciali=\undefined\fi %<| standalone?
+%
+\maintitle{Haupttitel 14pt halbfett/Title boldface -- 14/16}
+\mainrunning{Expression of Cellular Oncogenes}
+\subtitle{Untertitel 10pt halbfett/Subtitle boldface -- 10/11}
+
+\author{Ivar Ekeland@{1} and Roger Temam@{2}}
+\authorrunning{R. M\"uller}
+
+\address{@1Princeton University, Princeton NJ 08544, USA
+@2Universit\'e de Paris-Sud,
+Laboratoire d'Analyse Num\'erique, B\^atiment 425,\newline
+F-91405 Orsay Cedex, France}
+
+\received{June 5, 1989}
+
+\summary{A new variant of the multi-grid algorithms is presented. It
+uses multiple coarse-grid corrections with particularly associated
+prolongations and restrictions. In this paper the robustness with
+respect to anisotropic problems is considered.}
+
+\keywords{multi-grid method -- coarse--grid correction --
+singular perturbation -- robustness.}
+
+\titlea{1.}{The Anisotropic Equation and Standard Multi-Grid Methods}
+\titleb{1.1.}{Introduction}
+Multi-grid methods are known as very fast solvers of a large class of
+discretised partial differential equations. However, the multi-grid
+method cannot be understood as a fixed algorithm. Usually, the
+components of the multi-grid iteration have to be adapted to the given
+problem and sometimes the problems are modified in order to make them
+acceptable for multi-grid methods. In particular, the smoothing
+iteration is the most delicated part of the multi-grid process.
+
+An iteration is called a {\it robust} one, if it works for a sufficient
+large class of problems. Attempts have been made to construct robust
+multi-grid iterations by means of sophisticated smoothing processes\dots
+\vfil\eject
+With this chapter, the preliminaries are over, and we begin the search
+for periodic solutions to Hamiltonian systems. All this will be done in
+the convex case; that is, we shall study the boundary-value problem
+$$\eqalign{\dot x &= JH' (t,x)\cr x(0) &= x(T)\cr}$$
+with $H(t,\bullet )$ a convex function of $x$, going to $+\un$ when
+$\lss x\rss \to \un$.
+
+\titleb{1.2.}{Autonomous Systems}
+In this section, we will consider the case when the Hamiltonian $H(x)$
+is autonomous. For the sake of simplicity, we shall also assume that it
+is $C^1$.
+
+We shall first consider the question of nontriviality, within the
+general framework of $\lr \Aun , \Bun\rr$-subquadratic Hamiltonians. In
+the second subsection, we shall look into the special case when $H$ is
+$\lr 0,\bun\rr$-subquadratic, and we shall try to derive additional
+information.
+\titlec{ The General Case: Nontriviality.}
+We assume that $H$ is $\lr \Aun , \Bun \rr$-sub\-qua\-dra\-tic at infinity,
+for some constant symmetric matrices $\Aun$ and $\Bun$, with $\Bun
+-\Aun$ positive definite. Set:
+$$\eqalignno{
+\gamma :& = {\rm smallest\ eigenvalue\ of}\ \ \Bun - \Aun & (1)\cr
+\lambda : & = {\rm largest\ negative\ eigenvalue\ of}\ \ J {d\ov dt} +\Aun\
+. & (2)\cr}$$
+
+Theorem 21 tells us that if $\lambda +\gamma < 0$, the boundary-value
+problem:
+$$\eqalign{ \dx &= JH' (x)\cr
+x(0) &= x (T)\cr}\eqno(3)$$
+has at least one solution $\ol x$, which is found by minimizing the dual
+action functional:
+$$ \psi (u) = \int_o^T \lb \12 \lr \Lai_o^{-1} u,u\rr + N^\ast (-u)\rb
+dt\eqno(4)$$
+on the range of $\Lai$, which is a subspace $R (\Lai )\sb L^2$ with
+finite codimension. Here
+$$ N(x) := H(x) - \12 \lr \Aun x,x\rr\eqno(5)$$
+is a convex function, and
+$$ N(x) \le \12 \lr \lr \Bun - \Aun\rr x,x\rr + c\ \ \ \fa x\
+.\eqno(6)$$
+
+\proposition{ 1.} { Assume $H'(0)=0$ and $ H(0)=0$. Set:
+$$ \de := \liminfu_{x\to 0} 2 N (x) \lss x\rss^{-2}\ .\eqno(7)$$
+
+If $\gamma < - \lambda < \de$, the solution $\ol u$ is non-zero:
+$$ \ol x (t) \ne 0\ \ \ \fa t\ .\eqno(8)$$}
+\proof{} Condition (7) means that, for every $\de ' > \de$, there is
+some $\ep > 0$ such that
+$$ \lss x\rss \le \ep \Rightarrow N (x) \le {\de '\ov 2} \lss x\rss^2\
+.\eqno(9)$$
+
+It is an exercise in convex analysis, into which we shall not go, to
+show that this implies that there is an $\eta > 0$ such that
+$$ f\lss x\rss \le \eta \Rightarrow N^\ast (y) \le {1\ov 2\de '} \lss
+y\rss^2\ .\eqno(10)$$
+
+\begfig 1.5cm
+\figure{1}{This is the caption of the figure displaying a white eagle
+and a white horse on a snow field}
+\endfig
+
+Since $u_1$ is a smooth function, we will have $\lss hu_1\rss_\un \le
+\eta$ for $h$ small enough, and inequality (10) will hold, yielding
+thereby:
+$$ \psi (hu_1) \le {h^2\ov 2} {1\ov \lambda} \lss u_1 \rss_2^2 + {h^2\ov 2}
+{1\ov \de '} \lss u_1\rss^2\ .\eqno(11)$$
+
+If we choose $\de '$ close enough to $\de$, the quantity $\lr {1\ov \lambda}
++ {1\ov \de '}\rr$ will be negative, and we end up with
+$$ \psi (hu_1) < 0\ \ \ \ \ \for\ \ h\ne 0\ \ {\rm small}\ .\eqno(12)$$
+
+On the other hand, we check directly that $\psi (0) = 0$. This shows
+that 0 cannot be a minimizer of $\psi$, not even a local one. So $\ol u
+\ne 0$ and $\ol u \ne \Lai_o^{-1} (0) = 0$. \qed
+
+\corollary{ 2.} { Assume $H$ is $C^2$ and $\lr \aun
+,\bun\rr$-subquadratic at infinity. Let
+$\xi_1,\allowbreak\dots,\allowbreak\xi_N$ be the
+equilibria, that is, the solutions of $H' (\xi ) = 0$. Denote by $\om_k$
+the smallest eigenvalue of $H'' \lr \xi_k\rr$, and set:
+$$ \om : = \Min \lg \om_1 , \dots , \om_k\rg\ .\eqno(13)$$
+If:
+$$ {T\ov 2\pi} \bun < - E \lb - {T\ov 2\pi}\aun\rb < {T\ov
+2\pi}\om\eqno(14)$$
+then minimization of $\psi$ yields a non-constant $T$-periodic solution
+$\ol x$.}
+We recall once more that by the integer part $E [\al ]$ of $\al \in
+\RR$, we mean the $a\in \ZZ$ such that $a< \al \le a+1$. For instance,
+if we take $\aun = 0$, Corollary 2 tells us that $\ol x$ exists and is
+non-constant provided that:
+$$ {T\ov 2\pi} \bun < 1 < {T\ov 2\pi}\eqno(15)$$
+or
+$$ T\in \lr {2\pi\ov \om},{2\pi\ov \bun}\rr\ .\eqno(16)$$
+\proof{} The spectrum of $\Lai$ is ${2\pi\ov T} \ZZ +\aun$. The
+largest negative eigenvalue $\lambda$ is given by ${2\pi\ov T}k_o +\aun$,
+where
+$$ {2\pi\ov T}k_o + \aun < 0\le {2\pi\ov T} (k_o +1) + \aun\
+.\eqno(17)$$
+Hence:
+$$ k_o = E \lb - {T\ov 2\pi} \aun\rb \ .\eqno(18)$$
+
+The condition $\gamma < -\lambda < \de$ now becomes:
+$$ \bun - \aun < - {2\pi\ov T} k_o -\aun < \om -\aun\eqno(19)$$
+which is precisely condition (14).\qed
+
+\lemma {3.} { Assume that $H$ is $C^2$ on $\RRn \sm \{ 0\}$ and
+that $H'' (x)$ is non-degenerate for any $x\ne 0$. Then any local
+minimizer $\tx$ of $\psi$ has minimal period $T$.}
+\proof{} We know that $\tx$, or $\tx + \xi$ for some constant $\xi
+\in \RRn$, is a $T$-periodic solution of the Hamiltonian system:
+$$ \dx = JH' (x)\ .\eqno(20)$$
+
+There is no loss of generality in taking $\xi = 0$. So $\psi (x) \ge
+\psi (\tx )$ for all $\tx$ in some neighbourhood of $x$ in $W^{1,2} \lr
+\RR / T\ZZ ; \RRn\rr$.
+
+But this index is precisely the index $i_T (\tx )$ of the $T$-periodic
+solution $\tx$ over the interval $(0,T)$, as defined in Sect.~2.6. So
+$$ i_T (\tx ) = 0\ .\eqno(21)$$
+
+Now if $\tx$ has a lower period, $T/k$ say, we would have, by Corollary
+31:
+$$ i_T (\tx ) = i_{kT/k}(\tx ) \ge ki_{T/k} (\tx ) + k-1 \ge k-1 \ge
+1\ .\eqno(22)$$
+
+This would contradict (21), and thus cannot happen.\qed
+\titled{Notes and Comments.} The results in this section are a
+refined
+version of [CE1]; the minimality result of Proposition 14 was the first
+of its kind.
+
+To understand the nontriviality conditions, such as the one in formula
+(16), one may think of a one-parameter family $x_T$, $T\in \lr
+2\pi\om^{-1}, 2\pi \bun^{-1}\rr$ of periodic solutions, $x_T (0) = x_T
+(T)$, with $x_T$ going away to infinity when $T\to 2\pi \om^{-1}$, which
+is the period of the linearized system at 0.
+\vskip8 true mm
+\tabcap{1}{Observational results from NGC 4827}
+\vbox{\petit\hrule\smallskip
+\vbox{\halign{\enspace#\hfil\enspace&&#\hfil\enspace\cr
+&&\multispan3{RA (1950)}\hfil&\ &\multispan3{Dec (1950)}\hfil
+ & $S$ & Pol & \% & $\log P$\cr
+\noalign{\vskip-2mm}
+&&\multispan3\hrulefill\quad&&\multispan3\hrulefill\quad&&\cr
+\noalign{\vskip-0.5mm}
+ & &(h) &(m) & (s) & & (\degr) & (\arcmin) & (\arcsec)
+ & (mJy) & (mJy) & & (W Hz$^{-1}$)\cr
+\noalign{\smallskip}
+\noalign{\hrule}
+\noalign{\smallskip}
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \cr
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \cr
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \cr
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \cr}
+\smallskip\hrule}}
+\vskip 8 true mm
+
+\theorem{4 (Ghoussoub-Preiss).} { Assume $H(t,x)$ is
+$(0,\ep )$-subquadratic at
+infinity for all $\ep > 0$, and $T$-periodic in $t$
+$$ H (t,\bullet )\ \ \ \ \ {\rm is\ convex}\ \ \fa t\eqno(23)$$
+$$ H (\bullet ,x)\ \ \ \ \ {\rm is}\ \ T{\rm -periodic}\ \ \fa x
+\eqno(24)$$
+$$ H (t,x)\ge n\lr \lss x\rss\rr\ \ \ \ \ {\rm with}\ \ n (s)s^{-1}\to
+\un\ \ {\rm as}\ \ s\to \un\eqno(25)$$
+$$ \fa \ep > 0\ ,\ \ \ \exists c\ :\ H(t,x) \le {\ep\ov 2}\lss x\rss^2 +
+c\ .\eqno(26)$$
+
+Assume also that $H$ is $C^2$, and $H'' (t,x)$ is positive definite
+everywhere. Then there is a sequence $x_k$, $k\in \NN$, of $kT$-periodic
+solutions of the system
+$$ \dx = JH' (t,x)\eqno(27)$$
+such that, for every $k\in \NN$, there is some $p_o\in\NN$ with:
+$$ p\ge p_o\Rightarrow x_{pk} \ne x_k\ .\eqno(28)$$\qed}
+\example {1 {\rm(External forcing).}}{ Consider the system:
+$$ \dx = JH' (x) + f(t)\eqno(29)$$
+where the Hamiltonian $H$ is $\lr 0,\bun\rr$-subquadratic, and the
+forcing term is a distribution on the circle:
+$$ f = {d\ov dt} F + f_o\ \ \ \ \ {\rm with}\ \ F\in L^2 \lr \RR / T\ZZ
+; \RRn\rr\ ,\eqno(30)$$
+where $f_o : = T^{-1}\int_o^T f (t) dt$. For instance,
+$$ f (t) = \sum_{k\in \NN} \de_k \xi\ ,\eqno(31)$$
+where $\de_k$ is the Dirac mass at $t= k$ and $\xi \in \RRn$ is a
+constant, fits the prescription. This means that the system $\dx = JH'
+(x)$ is being excited by a series of identical shocks at interval $T$.}
+
+\definition{5.}{Let $A_\un (t)$ and $B_\un (t)$ be symmetric
+operators in $\RRn$, depending continuously on $t\in [0,T]$, such that
+$A_\un (t) \le B_\un (t)$ for all $t$.
+
+A Borelian function $H: [0,T]\times \RRn \to \RR$ is called $\lr A_\un
+,B_\un\rr$-{\it subquadratic at infinity} if there exists a function
+$N(t,x)$ such that:
+$$ H (t,x) = \12 \lr A_\un (t) x,x\rr + N(t,x)\eqno(32)$$
+$$ \fa t\ ,\ \ \ N(t,x)\ \ \ \ \ {\rm is\ convex\ with\ respect\ to}\
+\ x\eqno(33)$$
+$$ N(t,x) \ge n\lr \lss x\rss\rr\ \ \ \ \ {\rm with}\ \ n(s)s^{-1}\to
++\un\ \ {\rm as}\ \ s\to +\un\eqno(34)$$
+$$ \exists c\in \RR\ :\ \ \ H (t,x) \le \12 \lr B_\un (t) x,x\rr + c\ \
+\ \fa x\ .\eqno(35)$$
+}
+If $A_\un (t) = a_\un I$ and $B_\un (t) = b_\un I$, with $a_\un \le
+b_\un \in \RR$, we shall say that $H$ is $\lr a_\un
+,b_\un\rr$-subquadratic at infinity. As an example, the function $\lss x
+\rss^\al$, with $1\le \al < 2$, is $(0,\ep )$-subquadratic at infinity
+for every $\ep > 0$. Similarly, the Hamiltonian
+$$ H (t,x) = \12 k \lss k\rss^2 +\lss x\rss^\al\eqno(36)$$
+is $(k,k+\ep )$-subquadratic for every $\ep > 0$. Note that, if $k<0$,
+it is not convex.
+
+\titled{Notes and Comments.} The first results on subharmonics were
+obtained by Rabinowitz in [Ra1], who showed the existence of infinitely
+many subharmonics both in the subquadratic and superquadratic case, with
+suitable growth conditions on $H'$. Again the duality approach enabled
+Clarke and Ekeland in [CE2] to treat the same problem in the
+convex-subquadratic case, with growth conditions on $H$ only.
+
+Recently, Michalek and Tarantello (see [MT1] and [Ta1]) have obtained
+lower bound on the number of subharmonics of period $kT$, based on
+symmetry considerations and on pinching estimates, as in Sect.~5.2 of
+this article.
+\begref{References}{[MT1]}
+\refmark{[CE1]} Clarke, F., Ekeland, I.: Nonlinear oscillations and
+boundary-value problems for Hamiltonian systems. Arch. Rat. Mech. Anal.
+{\bf 78} (1982) 315--333
+\refmark{[CE2]} Clarke, F., Ekeland, I.: Solutions p\'eriodiques, du
+p\'eriode donn\'ee, des \'equations hamiltoiennes. Note CRAS Paris {\bf
+287} (1978) 1013--1015
+\refmark{[MT1]} Michalek, R., Tarantello, G.: Subharmonic solutions with
+prescribed minimal period for nonautonomous Hamiltonian systems. J.
+Diff. Eq. {\bf 72} (1988) 28--55
+\refmark{[Ta1]} Tarantello, G.: Subharmonic solutions for Hamiltonian
+systems via a $\bbbz_p$ pseudoindex theory. Annali di Mathematica Pura
+(to appear)
+\refmark{[Ra1]} Rabinowitz, P.: On subharmonic solutions of a Hamiltonian
+system. Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+\endref
+\byebye
diff --git a/macros/plain/contrib/jns/jns.doc b/macros/plain/contrib/jns/jns.doc
new file mode 100644
index 0000000000..1ea5a58cfe
--- /dev/null
+++ b/macros/plain/contrib/jns/jns.doc
@@ -0,0 +1,1188 @@
+% This is JNS.DOC the documentation file of
+% the plain TeX macro package from Springer-Verlag
+% for the Journal of Nonlinear Science
+% version of 16 July 1990
+\input jns.cmm
+\def\degr{\hbox{$^\circ$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\bs{\ifmmode\backslash\else$\backslash$\fi}
+\newdimen\einrueck\setbox0=\hbox{\kern6.5mm DATEX-P dial: }
+\einrueck=\wd0\relax
+\def\jtem#1{\par\hangindent\einrueck\hangafter=1\noindent\hbox
+to\einrueck{\kern6.5mm#1\hss}\ignorespaces}
+\chardef\other=12
+\def\BlankIsSpace{\def\blankmeaning{\space}}
+\def\BlankIsControlSpace{\def\blankmeaning{\ }}
+\def\BlankIsVisible{\def\blankmeaning{{\tt\char32}}}
+\def\theblankmeaning{\blankmeaning}
+{\obeyspaces\global\let =\theblankmeaning}
+\def\obeyspaces{\BlankIsSpace\catcode`\ =\active}
+{\catcode`\`=\active \gdef`{\relax\lq}}
+\def\setupverbatim{\begingroup\catcode`\\=\other \catcode`\{=\other
+ \catcode`\}=\other \catcode`\$=\other \catcode`\&=\other
+ \catcode`\#=\other \catcode`\%=\other \catcode`\~=\other
+ \catcode`\_=\other \catcode`\^=\other
+ \obeyspaces \tt}
+\def\doverbatim#1{\def\next##1#1{##1\endgroup}\next}
+\def\verb{\setupverbatim\doverbatim}
+\def\verbb{\setupverbatim\BlankIsVisible\doverbatim}
+{\catcode`\|=0 |catcode`|\=\other
+ |obeylines
+ |gdef|ttfinish#1\endtt{#1|strut|endgroup|smallskip}}
+\def\begintt{\strut\smallskip\let\par=\endgraf
+\setupverbatim\parindent=0pt\obeylines
+\parskip=0pt\catcode`\|=0 \ttfinish}
+\def\listing#1{\par\setupverbatim\obeylines\input#1 \endgroup}
+\def\ident{Macro Package for Authors Coding with Plain\TeX}
+\headline={\hfill}
+\let\header=N
+\output={\if N\header%gar nix
+\else\if F\header\headline={{\petit\rm \ifodd\pageno\hfil
+\folio\else\folio\hfil\fi}}
+\else\headline={{\petit\rm \ifodd\pageno\ident\hfil
+\folio\else\folio\hfil\ident\fi}}\fi\fi\plainoutput\global\let\header=Y
+\if Y\FIG\topinsert\unvbox\figbox\endinsert\global\let\FIG=N\fi}
+\def\leaderfill{\kern0.5em\leaders\hbox to 0.5em{\hss.\hss}\hfill\kern
+0.5em}
+\newdimen\chapindent
+\newdimen\sectindent
+\newdimen\subsecindent
+\newdimen\thousand
+\setbox0=\hbox{\bf 10. }\chapindent=\wd0\advance\chapindent by-4true pt
+\setbox0=\hbox{10.10 }\sectindent=\wd0\advance\sectindent by-4true pt
+\setbox0=\hbox{10.10.1 }\subsecindent=\wd0
+\advance\subsecindent by-4true pt
+\setbox0=\hbox{\enspace 100}\thousand=\wd0
+%
+\def\conttitlea#1#2#3{\if N\lasttitle\if!#1!\else\vskip8true pt\fi
+\fi\let\lasttitle=N\line{\hbox to
+\chapindent{\strut\bf#1\hss}{\textfont1=\tams
+\scriptfont1=\tamss\scriptscriptfont1=\tbmss\bf#2}%
+\if!#3!\hfill\else\leaderfill\hbox to\thousand{\hss#3}\fi}}
+%
+\def\conttitleb#1#2#3{\line{\kern\chapindent\hbox
+to\sectindent{\strut#1\hss}{#2}%
+\if!#3!\hfill\else\leaderfill\hbox to\thousand{\hss#3}\fi}\par}
+%
+\def\conttitlec#1#2#3{\line{\kern\chapindent\kern\sectindent
+\hbox to\subsecindent{\strut#1\hss}{#2}%
+\if!#3!\hfill\else\leaderfill\hbox to\thousand{\hss#3}\fi}\par}
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\petit A}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}%
+\def\AmSTeX{{\tensy A}\kern-.1667em\lower.5ex\hbox
+ {\tensy M}\kern-.125em{\tensy S}-\TeX}
+\font \titelfont = cmr10 scaled\magstep3
+\font \titelbffont = cmbx10 scaled\magstep4%at 20true pt
+\font \titelbigfont = cmr10 scaled\magstep5%at 24true pt
+{\parindent=0pt\titelbffont
+Macro Package for\medskip
+\leftline{Authors Coding with Plain\TeX}
+\vskip2.2cm
+\hrule height1pt\bigskip\bigskip
+\rightline{\vbox{\titelbigfont\hbox{The Journal of}\bigskip
+\hbox{Nonlinear Science}}}
+\bigskip\bigskip\hrule height1pt
+\vfil
+\rightline{\vbox{\titelfont\hbox{Springer-Verlag}\bigskip
+\hbox{New \kern-4pt Y\kern-2pt ork Berlin Heidelberg Tokyo}
+\smallskip\vskip1true mm
+\hbox{London Paris Hong \kern-3pt Kong}}}\eject}%
+\titlea{}{For further information please contact us:}
+\noindent\hbox to6.5mm{$\bullet$\hfil}{\bf Springer-Verlag
+New \kern-3pt York}
+\vskip0.5\baselineskip
+\jtem{Springer-Verlag} New \kern-2pt York, 175 Fifth Avenue,\newline
+New \kern-2pt York, New \kern-2pt York 10010 USA
+\vskip0.5\baselineskip
+\jtem{Telex:} 232235
+\jtem{Fax:} (212)437-6272
+\jtem{Editorial:} (Mon--Fr; preferably between 9 a.m.
+ and 4 p.m. --\newline
+ Eastern Standard Time)\newline
+ Telephone (212)460-1565
+\jtem{net-address:} TROWBRIDGE@COMPUSERVE.COM
+\vskip0.5\baselineskip
+\noindent\hbox to6.5mm{$\bullet$\hfil}{\bf Springer-Verlag Heidelberg}
+\vskip0.5\baselineskip
+\item{}Springer-Verlag, Postfach 105280, D-6900 Heidelberg 1, FRG
+\vskip0.5\baselineskip
+\jtem{DATEX-P dial:} FRG 456 221 4305
+If you do not yet have an account, press RETURN
+when asked for your name; then simply leave a message.
+The file name should be your name and country
+or state, e.g.\ smith-texas
+\jtem{Telex:} 461723
+\jtem{Telefax:} (06221)43982
+\jtem{Editorial:} (Mon--Fr; preferably between 9 a.m.
+and\newline 4 p.m. - European local time),\newline Telephone
+(0049)(0)6221-487534
+\item{}\TeX{}nical information (Mon--Fri; preferably between\newline
+9 a.m. and 1 p.m. -- European local time):\newline
+Telephone (0049)(0)6221-487478
+\jtem{bitnet:} SPRINGER@DHDSPRI6
+\bigskip\hrule
+\titlea{}{Mailing address for your disk/magnetic tape and output:}
+{\leftskip=\oldparindent
+Springer-Verlag New \kern-2pt York, Inc.\newline
+175 Fifth Avenue,\newline
+New \kern-2pt York, New \kern-2pt York 10010 USA
+\medskip}
+The following formats are acceptable: 5.25$^{\prime\prime}$ diskette
+MS-DOS, 5.25$^{\prime\prime}$ CP/M, 3.5$^{\prime\prime}$ diskette
+MS-DOS, 3.5$^{\prime\prime}$ diskette Apple MacIntosh, 9-track 1600
+bpi magnetic tape VAX/VMS, 9-track 1600 bpi magnetic tape ANSI with
+label, 9-track 1600 bpi magnetic tape, SUN-Streamer Tape.
+
+Once you have completed your work using this macro package, please
+submit your own printout of the {\it final version together with the
+disk or magnetic tape}, containing your \TeX{} input (source) file
+and the final DVI-file and make sure that the text is {\it identical in
+both cases.}
+
+Contributions coded with \TeX{} but not with the JNS style, cannot be
+accepted for electronic processing; they will be typeset in the
+conventional way.
+\vfill\eject
+\titlea{}{Table of Contents}
+\conttitlea{1}{Introduction}{4}
+\conttitlea{2}{General Remarks}{4}
+\vskip2truept
+\conttitleb{2.1}{How to Proceed}{4}
+\conttitleb{2.2}{Contributions Coded with Plain\TeX{} without the}{}
+\conttitleb{}{Springer-Verlag \TeX{} Macro Package}{4}
+\conttitleb{2.3}{Problems with PC \TeX}{5}
+\conttitleb{2.4}{General Rules for Coding Mathematics}{5}
+\conttitlec{2.4.1}{Italic and Roman in Math Mode}{6}
+\conttitleb{2.5}{Capitalization and Non-capitalization in the}{}
+\conttitleb{}{Input (Source) File}{6}
+\conttitleb{2.6}{Abbreviations of Words in the Input (Source) File}{6}
+\conttitlea{3}{How to Handle Your Contribution}{7}
+\conttitlea{4}{How to Code}{7}
+\vskip2truept
+\conttitleb{4.1}{Headings}{7}
+\conttitlec{4.1.1}{Defining Your Own Environments}{9}
+\conttitleb{4.2}{Text}{13}
+\conttitleb{4.3}{Special Typefaces}{13}
+\conttitleb{4.4}{Footnotes}{14}
+\conttitleb{4.5}{Lists}{14}
+\conttitleb{4.6}{Figures}{15}
+\conttitlec{4.6.1}{Two Figures Next to Each Other}{16}
+\conttitlec{4.6.2}{Modified Legend Arrangements}{17}
+\conttitleb{4.7}{Tables}{18}
+\conttitlec{4.7.1}{Tables Coded with \TeX{}}{18}
+\conttitlec{4.7.2}{Tables Not Coded with \TeX{}}{19}
+\conttitleb{4.8}{Signs and Special Characters}{19}
+\conttitlec{4.8.1}{Special Signs}{19}
+\conttitlec{4.8.2}{Gothic (Fraktur)}{20}
+\conttitlec{4.8.3}{Script}{20}
+\conttitlec{4.8.4}{Special Roman}{20}
+\conttitlec{4.8.5}{Sans Serif}{20}
+\conttitlec{4.8.6}{Invented Characters}{20}
+\conttitlea{5}{How to Code References}{21}
+\vskip2truept
+\conttitleb{5.1}{Author--Year System}{21}
+\conttitleb{5.2}{References by Number Only and
+by Letter--Number}{22}
+\conttitleb{5.3}{Examples}{22}
+\conttitlea{6}{Demonstration File}{26}
+\vfill\eject
+\titlea{1.}{Introduction}
+Authors wishing to code their contribution for the
+\medskip
+\centerline{\it Journal of Nonlinear Science,}
+\medskip\noindent
+with \TeX{}, as well as those who have already coded with \TeX{}, will
+be provided with macros that will give the text the desired layout.
+Using the macros will ease considerably your coding with \TeX.{} Authors
+are requested to adhere strictly to these instructions; {\it the macros
+must not be changed}.
+
+The text output area is 12.2\ts cm horizontal and 19.4\ts cm vertical;
+excluding running heads.
+\titlea {2.}{General Remarks}
+\titleb {2.1.}{How to Proceed}
+Please insert the enclosed diskette or tape into your computer. You will
+find the following files:
+\medskip
+\settabs \+xxxxxxxxxxx&xxxxxxxxxxxxxxxxxxxxxxxxxxx &xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \cr
+\+{\it jns.doc}&general instructions (this document)\cr
+\+{\it jns.amm}&the macro package with am-fonts (the old \TeX{} fonts)\cr
+\+{\it jns.cmm}&the macro package with cm-fonts (newer and preferable)\cr
+\+&(these are both macro files and
+should not be changed)\cr
+\+{\it jns.dem}&an example showing how to code the
+text\cr
+\smallskip
+Please insert at the beginning of your text file (also called
+input or source file) the macro file with:
+\medskip\noindent
+\verb|\input jns.amm| or \newline
+\verb|\input jns.cmm| (preferable).
+\medskip
+Now some settings will be carried out automatically: for example, the
+horizontal and vertical sizes, the page layout, the running heads and
+other features. Some of \TeX's internal variables are changed.
+\titleb{2.2.}{Contributions Already Coded with Plain\TeX{} without the
+\newline Springer-Verlag \TeX{} Macro Package}
+If your file already contains \TeX\ coding,
+then:
+\item{--\kern2.5true mm} you will need to replace some of {\it your\/}
+\TeX{} commands by {\it our\/} codes listed in section {\it 4 How to
+Code};
+\item{--\kern2.5true mm} you need only to insert \verb|\input jns.cmm|
+to get the desired page layout and fonts if your layout is close to the
+one you can see in our demonstration file. It is most important to
+change your macros for the headings (see \verb|\titlea| \dots). Making
+further improvements by using more of our macros is still better.
+\titled{Very important:} If your text or your own macros contain layout
+codes such as \verb|\hsize|, \verb|\goodbreak|, \verb|\eject| and
+\verb|\magnification|, or special fonts, these should be taken out.
+(There may nevertheless be exceptional occasions on which to use some of
+them.)
+
+If you have your {\it own macros\/} or definitions, insert them {\it
+before\/} the call \verb|\input jns.cmm|, so that some of them may be
+replaced or tailored according to Springer style. Please put in
+sufficient comments with your macros to help us understand them.
+\titleb {2.3.}{Problems with PC \TeX{} }
+In PC \TeX{} the default memory capacity is not sufficient to
+accommodate our fonts. To cope with this problem, invoke \TeX{} with the
+following command:\newline
+{\tt tex myfile.tex /f=26000 /m=65000}
+\titleb {2.4.}{General Rules for Coding Mathematics}
+For mathematical expressions and tables please follow Plain\TeX\ from
+{\it The \TeX{}book\/} by Donald E. Knuth (1986), Addison-Wesley
+Publishing Company (a comprehensive general reference).
+
+In the case of long equations in the text (enclosed in single $\$ $)
+that extend beyond the type area (12.2\ts cm), insert an
+\verb|\allowbreak| where the equation can be divided. For displayed
+equations (enclosed in \verb|$$|) please refer to Section {\it 3.\ts
+Long Formulas\/} in Chap.\ts 19, p. 195 of {\it The \TeX{}book}.
+
+Equations should be numbered consecutively throughout your contribution
+e.g. (1), (2) etc., on the right-hand side. Place e.g. \verb|\eqno(1)|
+etc. as the last item in a displayed (\verb|$$|) equation.
+
+If you include elements of ordinary text in math mode, please enclose
+them in \verb|\hbox{\rm text}|, e.g.
+\medskip\noindent
+{\it Input }
+\begintt $$\left({a^2 + b^2 \over c^2}\right)^2 = 1 \quad\hbox{\rm
+only when}\quad c\neq 0\enspace .\eqno (1)$$ \endtt
+\medskip\noindent
+{\it Output }
+$$\left({a^2 + b^2 \over c^2}\right)^2 = 1 \quad\hbox{\rm
+only when}\quad c\neq 0\enspace .\eqno (1)$$
+
+Please note that the sizes of the parentheses or other so-called
+delimiter symbols used in equations should ideally match the formulas
+they enclose (see p.\ts 145\ts ff. of {\it The \TeX{}book}).
+
+After a displayed equation you have to insert a blank line or to give
+the command \verb|\par| if you want a new paragraph with an indention.
+If there is no new paragraph either do not insert a blank line or code
+\verb|\noindent| immediately before continuing the text.
+
+Please punctuate a displayed equation the same way as any other written
+statement but with an \verb|\enspace| before end punctuation.
+\vfill\eject
+\titlec{2.4.1.\enspace Italic and Roman in Math Mode}
+\vskip0.5\baselineskip
+\item{a)}In math mode \TeX{} treats all letters as though
+they were mathematical or physical variables, hence they are typeset in
+italics. However, for certain components of formulas, like short texts,
+this would be incorrect and therefore coding in roman is required.
+Roman should also be used for
+subscripts and superscripts {\it in formulas\/} where these are
+merely labels and not in themselves variables,
+e.g.\ $T_{\rm eff}$ \ not \ $T_{eff}$,
+$T_{\rm K}$ \ not \ $T_K$ (K = Kelvin),
+$m_{\rm e}$ \ not \ $m_e$ (e = electron).
+However, do not code for roman
+if the sub/superscripts represent variables,
+e.g.\ $\sum_{i=1}^{n} a_{i}$.
+\item{b)}Please ensure that {\it physical units\/} (e.g.\ pc, erg
+s$^{-1}$ K, cm$^{-3}$, W m$^{-2}$ Hz$^{-1}$, m kg s$^{-2}$ A$^{-2}$) and
+{\it abbreviations\/} such as Ord, Var, GL, SL, Aut, Ker, sgn, const.\
+are always set in roman type. To ensure this use the \verb|\rm| command:
+\verb|{\rm Hz}|. On p.\ts 162 of {\it The \TeX{}book\/} by Donald
+E.~Knuth you will find the names of common mathe\-matical functions,
+such as log, sin, exp, max and sup. These should be coded as
+\verb|\log|, \verb|\sin|, \verb|\exp|, \verb|\max|, \verb|\sup| and will
+appear in roman.
+\item{c)}
+Chemical symbols and formulas should be coded for roman,
+e.g.\ Fe not $Fe$, H$_2$O not {\it H$_2$O\/}.
+\item{d)} Familiar foreign words and phrases, e.g. et al., a priori,
+in situ, brems\-strah\-lung, eigenvalues should appear also in roman.
+\titleb {2.5.}{Capitalization and Non-capitalization in the Input
+(Source) File}
+\item {a)} The following should always be capitalized:
+\itemitem {--} Headings [see {\it 4.1 Headings}]
+\itemitem {--} Abbreviations and expressions in the text such as
+Fig(s)., Table(s), Sect(s)., Chap(s)., Theorem, Corollary, Definition
+etc. when used with numbers, e.g. Fig.\ts 3, Table\ts 1, Theorem 2.
+\item{} Please see below the special rules for referring to equations.
+\item {b)} The following should {\it not\/} be capitalized:
+\itemitem {--} The words figure(s), table(s), equation(s), theorem(s) in
+the text when used without an accompanying number
+\itemitem {--} Figure legends and table captions except for names and
+abbreviations.
+\titleb {2.6.} {Abbreviation of Words in the Input (Source) File}
+\item{a)} The following should be abbreviated in the text {\it unless\/}
+they come at the beginning of a sentence: Chap., Sect., Fig.; e.g. The
+results are shown in Fig.\ts 5. Figure 9 reveals that \dots . \newline
+{\it Please note\/}: Equations should be referred to solely by their
+number in parentheses: e.g. (14). However, when the reference comes at
+the beginning of a sentence, the unabbreviated word ``Equation'' should
+be used: e.g. Equation (14) is very important. However, (15) makes it
+clear that \dots .
+\item{b)} If abbreviations of names or concepts are used throughout the
+text, they should be defined at first mention, e.g. Plurisubharmonic
+(PSH) Functions, Strong Optimization (SOPT) Problem.
+\titlea {3.}{How to Handle Your Contribution}
+Once you have completed your work using this macro package, you should
+send your printout {\it together\/} with the disk or magnetic tape
+(concerning the acceptable formats see remark on p. 2) to the
+editorial (see address on p.2). Please make sure
+that the text of your printout and the disk or magnetic tape is {\it
+identical}.
+
+Your contribution should begin with the following coding
+(see {\it 4 How to Code}), and please adhere strictly to this sequence:
+\medskip
+\settabs \+xxxxxxxxxxxxxxxxxxxxxxxxxx &xxxxxxxxxxxxxxxxxxxxxxxxx \cr
+\+\verb|\input ...|&your own macros if you have any \cr
+\medskip
+\+\verb|\input jns.cmm|&call for the macros and fonts\cr
+\medskip
+\+\verb|\maintitle{...}|&the title of your article\cr
+\medskip
+\+\verb|\subtitle{...}|&the subtitle of your article (it is
+optional)\cr
+\medskip
+\+\verb|\author{...}|&author(s) name(s)\cr
+\medskip
+\+\verb|\address{...}|&address(es) of the author(s)\cr
+\medskip
+\+\verb|\received{...}|&date of receipt of your article \cr
+\medskip
+\+\verb|\summary{...}| &text of the summary \cr
+\medskip
+\+\verb|\keywords{...}| &appropriate keywords \cr
+\medskip
+\+\verb|\titlea{...}{...}|&see {\it 4 How to Code} \cr
+\+\quad\vdots&\raise 1mm\hbox{(here goes the body of your article)}\cr
+\+\verb|\begref{...}{...}|&see {\it 5 How to Code References}\cr
+\titlea{4.}{How to Code}
+\titleb{4.1.} {Headings}
+No blank line should be left in the input between titles or headings and
+the following text. Otherwise you will get an indentation which is not
+allowed after a heading. If you want to structure the source text for
+easier reading please use lines that begin with a percent sign
+(\verb|%|) at such places.
+
+If a long title must be divided please use the code: \verb|\newline|.
+\begingroup\petit
+\parfillskip=0pt plus 1fil
+\def\textindent#1{\hangindent0.5\oldparindent\noindent\hbox
+to0.5\oldparindent{#1\hss}\ignorespaces}%
+\vfootnote{$^1$}{Other initials are optional and may be inserted if this
+is the usual way of writing your name, e.g. Alfred J.~Holmes, E.~Henry
+Green.}\endgroup
+
+All words in titles should be capitalized except for conjunctions,
+prepositions (e.g. on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+
+\smallskip{\parindent=0pt\obeylines
+\verb|\maintitle{<Your contribution title>}|
+\verb|\subtitle{<Your subtitle>}|, it is optional
+\verb|\author{<Your name including forename(s)|$^1$\verb| and surname>}|
+\verb|\address{<Your address including street name and postal code>}|
+\verb|\received{<Date of receipt of your manuscript>}|
+\verb|\summary{<The summary of your article>}|
+\verb|\keywords{<Key words for your contribution>}|
+\verb|\titlea{no.}{Text of first-order heading}|
+\verb|\titleb{no.}{Text of second-order heading}|
+\verb|\titlec{Text of third-order or bold run-in heading.}|
+\verb|\titled{Text of fourth-order or italic run-in heading.}|
+\verb|\begref{Your heading of References}{widest mark therein}|}
+\titled{In general:}
+If you need a heading without numbering, suppress the first argument
+(the number) by coding an empty pair of braces:
+\smallskip\noindent
+\verb|\title|$n$\verb|{}{Another title}|\qquad $n$ means {\tt a} or {\tt
+b} here.
+\smallskip
+The text elements of \verb|\titlea| and \verb|\titleb| have no end
+punctuation, but their preceding number as any other numbering of a
+section must be completed by a period. The text elements of
+\verb|\titlec|\enspace and \verb|\titled|\enspace require end
+punctuation.
+\titled{More than one author:}
+If there are more than one author, and the address of each is different,
+the following coding may be used to indicate by a small superscript
+number which author has which address (see also {\it jns.dem}):
+\begintt
+\author{Ivar Ekeland@1 and Roger Temam@2}
+\address{@1Princeton University, Princeton, NJ 08544, USA
+@2Universit\'e de Paris-Sud, Laboratoire d'Analyse Num\'erique,
+B\^atiment 425, F-91405 Orsay Cedex, France}
+\endtt
+Note that \verb|\maintitle| and \verb|\author| will create the page
+header (running head), but it may happen that you need to shorten your
+title for the page header, because only one line is allowed (our macro
+will produce an error message whereupon you must provide a shortened
+version of the title for the page header). In this case you should use
+the following coding directly after the coding of \verb|\maintitle|
+or \verb|\author|.
+\smallskip
+\noindent\verb|\mainrunning{Abbreviated contribution title}|\newline
+\verb|\authorrunning{Abbreviated author}|
+\bigskip\noindent
+The following bold run-in headings with italicized text are available
+as built-in environments:
+\begintt
+\proposition{no.}{Text}
+\corollary{no.}{Text}
+\lemma{no.}{Text}
+\theorem{no.}{Text}
+|medskip
+|bgroup|rm The following will generally appear as italic run-in heading:|egroup|smallskip
+\proof{additional Text} Text \qed|vfill|eject
+|bgroup|rm Further italic or bold run-in headings may also occur:|egroup|smallskip
+\definition{no.}{Text}
+\example{no.}{Text}
+\remark{Text}
+\exercise{no.}{Text}
+\problem{no.}{Text}
+\solution{no.}{Text}
+\note{no.}{Text}
+\question{no.}{Text}\endtt\removelastskip
+\titlec{4.1.1.\enspace Defining Your Own Environments.}
+You can define additional environments like these using the command
+\verb|\newenvironment| which has four parameters. The first is the name
+your environment should have (e.g. \verb|\conjecture|). Then the run-in
+heading is to be given (e.g. \verb|Conjecture|). After this follows
+the font family used for this heading (please use only \verb|\bf|
+for bold or \verb|\it| for italic). Finally comes
+the font family to use for the text of this new environment (e.g.
+\verb|\it| or \verb|\rm|).
+
+\noindent Sample definition:
+\smallskip
+\verb|\newenvironment\conjecture {Conjecture} {\bf} {\it}|
+\newenvironment\conjecture {Conjecture} {\bf} {\it}
+\smallskip
+\noindent Use of that definition:
+\smallskip
+\verb|\conjecture{no.}{Text}| e.g. \verb|\conjecture{17.}{It is
+clear that...}|
+\smallskip
+\noindent It's output:
+\conjecture{17.}{It is clear that\dots}
+\noindent
+{\it Sample Input:}
+\begintt
+\maintitle{Hamiltonian Mechanics}
+\author{Ivar Ekeland@{1} and Roger Temam@{2}}
+\address{@1Princeton University, Princeton NJ 08544, USA
+@2Universit\'e de Paris-Sud,
+Laboratoire d'Analyse Num\'erique, B\^atiment 425,\newline
+F-91405 Orsay Cedex, France}
+\received{June 5, 1989}
+\summary{A new variant of the multi-grid algorithms is presented.
+\dots\ to anisotropic problems is considered.}
+\keywords{multi-grid method -- coarse-grid correction --
+singular perturbation -- robustness.}
+\titlea{1.}{Fixed-Period Problems: The Sublinear Case}
+With this chapter, the preliminaries are over, and we begin the
+search for periodic solutions \dots
+\titleb{1.1.}{Autonomous Systems}
+In this section we will consider the case when the Hamiltonian
+$H(x)$ \dots
+\titlec{The General Case: Nontriviality.}
+We assume that $H$ is $(A_\infty, B_\infty)$-subqua\-dra\-tic at
+infinity, for some constant \dots
+\titled{Notes and Comments.}
+The chronology is as follows. Palais and Smale introduced their
+celebrated condition (PS) to extend \dots
+\proposition{1.}{Assume $H'(0)=0$ and $ H(0)=0$. Set \dots}
+\proof{of proposition.} Condition (8) means that, for every
+$\delta'>\delta$, there is some $\varepsilon>0$
+such that \dots \qed
+\example{1}{(External forcing). Consider the system \dots}
+\corollary{2.}{Assume $H$ is $C^2$ and $(a_\infty,
+b_\infty)$-subquadratic at infinity. Let \dots}
+\lemma{3.}{Assume that $H$ is $C^2$ on $\bbbr^{2n}\backslash\{0\}$
+and that $H''(x)$ is non-degenerate \dots}
+\theorem{4 \rm(Ghoussoub-Preiss).}{Let $X$ be a Banach Space and
+$\Phi:X\to\bbbr$ \dots}
+\definition{5.}{We shall say that a $C^1$ function
+$\Phi:X\to\bbbr$ satisfies \dots}
+\endtt
+\bigskip \noindent
+{\it Sample Output\/} (follows on the next two pages together with
+examples of the above run-in headings)
+\maintitle{Hamiltonian Mechanics}
+\author{Ivar Ekeland@{1} and Roger Temam@{2}}
+\address{@1Princeton University, Princeton NJ 08544, USA
+@2Universit\'e de Paris-Sud,
+Laboratoire d'Analyse Num\'erique, B\^atiment 425,\newline
+F-91405 Orsay Cedex, France}
+\received{June 5, 1989}
+\summary{A new variant of the multi-grid algorithms is presented.
+\dots\ to anisotropic problems is considered.}
+\keywords{multi-grid method -- coarse-grid correction --
+singular perturbation -- robustness.}
+\titlea{1.}{Fixed-Period Problems: The Sublinear Case}
+With this chapter, the preliminaries are over, and we begin the
+search for periodic solutions \dots
+\titleb{1.1.}{Autonomous Systems}
+In this section we will consider the case when the Hamiltonian
+$H(x)$ \dots
+\titlec{The General Case: Nontriviality.}
+We assume that $H$ is $(A_\infty, B_\infty)$-subqua\-dra\-tic at
+infinity, for some constant \dots
+\titled{Notes and Comments.}
+The chronology is as follows. Palais and Smale introduced their
+celebrated condition (PS) to extend \dots
+\proposition{1.}{Assume $H'(0)=0$ and $ H(0)=0$. Set \dots}
+\proof{of proposition.} Condition (8) means that, for every
+$\delta'>\delta$, there is some $\varepsilon>0$
+such that \dots \qed
+\example{1}{(External forcing). Consider the system \dots}
+\corollary{2.}{Assume $H$ is $C^2$ and $(a_\infty,
+b_\infty)$-subquadratic at infinity. Let \dots}
+\lemma{3.}{Assume that $H$ is $C^2$ on $\bbbr^{2n}\backslash\{0\}$
+and that $H''(x)$ is non-degenerate \dots}
+\theorem{4 \rm(Ghoussoub-Preiss).}{Let $X$ be a Banach Space and
+$\Phi:X\to\bbbr$ \dots}
+\definition{5.}{We shall say that a $C^1$ function
+$\Phi:X\to\bbbr$ satisfies \dots}
+\bigskip\hrule\bigskip
+\noindent{\it This completes the demonstration output. We go on with the
+instructions.}
+\vfill\eject
+\titleb {4.2.}{Text}
+The following should be used to improve the readability of the
+text:\smallskip
+\settabs \+xxxxxxxxxxxx &xxxxxxxxxxxxxxxxxxx &xxxxxxxxxxxxxx \cr
+\+\verb|\ts|&a thin space, e.g. between numbers or
+between \cr
+\+&units and numbers; furthermore, a line division will\cr
+\+&not be made following this space\cr \smallskip
+\+{\tt -}&hyphen: one stroke, no space at either end\cr\smallskip
+\+{\tt --} & en-dash: two strokes ({\it without\/} a space at
+either end)\cr\smallskip
+\+&Please note: in \TeX{}, {\tt ---} gives an em-dash ``---'';\cr
+\+&Springer does not use this.\cr
+\+& Instead, please use the following:\cr
+\+{\tt\char'40 --\char'40} & en-dash: two strokes ({\it with\/}
+a space at either end)\cr\smallskip
+\+{\tt \$-\$}& minus: in the text {\it only}\cr
+\smallskip \bigskip\noindent
+\+{\it Input}
+ & \verb|21\ts $^{\circ}$C etc.,|\cr
+\+ & \verb|Dr h.\ts c.\ts Rockefellar-Smith \dots|\cr
+\+ & \verb|20,000\ts km and Prof.\ts Dr Mallory \dots|\cr
+\+ & \verb|1950--1985 \dots|\cr
+\+ & \verb|this -- written on a computer -- is now printed|\cr
+\+ & \verb|$-30$\ts K \dots|\cr
+\bigskip
+\+{\it Output}
+ & 21\ts $^{\circ}$C etc., Dr h.\ts c.\ts Rockefellar-Smith \dots\cr
+\+ & 20,000\ts km and Prof.\ts Dr Mallory \dots\cr
+\+ & 1950--1985 \dots\cr
+\+ & this -- written on a computer -- is now printed\cr
+\+ & $-30$\ts K \dots\cr
+\titleb{4.3.}{Special Typefaces}
+Normal type (roman) need not be marked. Preferably {\it italic\/} (not
+{\sl slanted}) or, if necessary, {\bf boldface} should be used to
+emphasize words and expressions.
+\smallskip\noindent
+\settabs \+xxxxxxxxxxxxxxxxxxxxxxxxxx &xxxxxxxxxxxxxxxxxxx
+&xxxxxxxxxxxxxx \cr
+\+\verb|{\it Text}|&{\it Text}\ \ \ (preferable)\cr
+\smallskip
+\+\verb|{\bf Text}|&{\bf Text}\cr\smallskip
+\+\verb|\begpet ...text...\endpet|&
+\vtop{\hbox to.6\hsize{\hsize=.6\hsize\vtop{\noindent \petit Paragraph
+in small print (petit) for passages in the text that the reader may skip
+on first reading or for exercises or sections of similar
+importance.}}}\cr
+\medskip
+\+\verb|\vec{Symbol}|& Vectors may only appear
+in math mode\cr
+\+&\verb|$\vec{A\times B\cdot C}$| yields
+$\vec{A\times B\cdot C}$\cr
+\+&or\quad \verb|$\vec{A^a B\hat D\tilde S}$|\quad yields\cr
+\+&$\vec{A^a B\hat D\tilde S}$ \cr
+\titleb {4.4.}{Footnotes}
+\line{\verb|\fonote{...text...}|\hfil Footnote within text
+({\it no\/} blank before \verb|\fonote|)}
+\smallskip\smallskip\noindent
+{\it Input}\smallskip\noindent
+Text with a footnote\verb|\fonote{The footnote
+is automatically numbered.}|
+and the text continues. You will find the footnote below.
+\smallskip\smallskip\noindent
+{\it Output}
+\smallskip\noindent
+Text with a footnote\fonote{The footnote is automatically numbered.}
+ and the text continues. You will find the footnote below.
+\smallskip \noindent
+{\it Remark\/}: Please avoid using footnotes in headings.
+\smallskip \smallskip \noindent
+\titleb{4.5.}{Lists}
+{{\it Input}}
+\begintt This is ordinary text extending over several lines and
+interrupted by a list. The text continues ...
+
+\medskip |bgroup|rm Do not forget to type |egroup\medskip
+\item {1.} |bgroup|rm Start of list and first item|egroup
+\item {2.} |bgroup|rm Second item in list|egroup
+\itemitem {a)} |bgroup|rm Start of subdivision and its first item|egroup
+\itemitem {b)} |bgroup|rm Second item in subdivision|egroup
+\item {n.} |bgroup|rm Item |it n |rm in list|egroup
+\medskip |bgroup|rm Do not forget to type |egroup\medskip
+
+The text continues...
+\endtt
+\noindent
+{\it Output}\medskip \smallskip\noindent
+This is ordinary text extending over several lines and
+interrupted by a list. The text continues \dots \medskip
+\item{1.}Start of list and first item
+\item{2.}Second item in list
+\itemitem{a)}Start of subdivision and its first item
+\itemitem{b)}Second item in subdivision
+\item{{\it n.}}Item {\it n\/} in list
+\medskip The text continues \dots
+\titleb{4.6.}{ Figures}
+Figure legends should be inserted at the end of (not in) the paragraph
+in which the figure is first mentioned. They should be numbered (using
+arabic numerals) sequentially throughout your contribution, as shown
+below.
+
+Figures should {\it never\/} be surrounded by text.
+
+{\it The figures\/} (line drawings and those containing halftone inserts
+as well as halftone figures) {\it should not be pasted into your
+laserprinter output}. They should be enclosed separately in camera-ready
+form (original artwork, glossy prints, photographs and/or slides). The
+lettering should be suitable for reproduction, and after reduction the
+capital letters should be at least 1.8\ts mm and not more than 2.5\ts mm
+in height. Check that lines and other details are uniformly black and
+that the lettering on figures is clearly legible.
+
+To leave the desired amount of space for the height of
+your figures,
+please use the following coding.
+As can be seen in the output, we will automatically
+provide 1\ts cm space above and below the figure,
+so that you should only leave the space corresponding to the size of the
+figure itself.
+\smallskip
+\settabs \+xxxxxxxxxxxxxxxxxxxxxxxxxx &xxxxxxxxxxxxxxxxxxxx \cr
+\+\verb|\begfig x cm|&Begin space of {\it x\/} cm (use only cm)\cr
+\+\verb|\figure{no.}{...text...}|&Figure legend\ \ (no
+capitalization, see Sect. 2.5)\cr
+\+\verb|\endfig|&End space\cr
+\bigskip\noindent
+{\it Sample Input} \smallskip
+\+\verbb|\begfig 1.5 cm|&(This is the space
+required for your figure)\cr
+\+\verb|\figure{1}{This is a figure legend}| \cr
+\+\verb|\endfig |\cr
+\bigskip\noindent
+{\it Output}
+\begfig 1.5 cm
+\figure{1}{This is a figure legend}
+\endfig
+The text continues \dots
+\vfill\eject
+\titlec {4.6.1.\enspace Two Figures Next to Each Other.}
+If you
+have two narrow figures that you
+want
+to insert side by side in one
+``paragraph",
+and if the total width is sufficient (type area 12.2\ts cm),
+ then, giving the height of the larger figure, please code:
+\settabs \+xxxxxxxxxxxxxxxxxxxxxxxx &xxxxxxxxxxxxxxxxxxxx \cr
+\bigskip\medskip\noindent
+{\it Sample Input} \smallskip\smallskip\smallskip
+\+\verbb|\begdoublefig 6.5 cm|&(This
+is the space required for the larger figure)\cr
+\+\verbb|\figure{1}{...text...} |
+&First figure legend (no capitalization, see Sect. 2.5)\cr
+\+\verbb|\figure{2}{...text...} |&Second figure legend\cr
+\+\verb|\enddoublefig|\cr
+\medskip\bigskip\medskip\noindent
+\settabs \+xxxxxxxxxxxxxxxxxxxxxxxxxx &xxxxxxxxxxxxxxxxxxxx \cr
+\noindent
+{\it Sample Output}
+\begdoublefig 6.5 cm
+\figure{1}{This is the first figure legend.
+The width of this legend
+is the same as for the second figure}
+\figure{2}{This is the legend of the second figure.
+At the present stage of macro development it is not possible for
+two figures side by side to have legends occupying different line
+widths}
+\enddoublefig
+The text continues \dots
+\vfill\eject
+\titlec {4.6.2.\enspace Modified Legend Arrangements.}
+If the amount of text in the legends of two figures
+(to be placed side by side)
+is quite different,
+please use the following coding:
+\bigskip\noindent
+{\it Sample Input}
+\bigskip
+\+\verbb|\begfig 5.3 cm |\qquad(This
+is the space required for the larger figure)\cr
+\+\verb|\figure{1}{This is the first short figure legend}|\cr
+\+\verb|\figure{2}{This is the extremely long legend of the
+second...}|\cr
+\+\verb|\endfig|\cr
+\medskip\bigskip\noindent
+{\it Sample Output}
+\begfig 5.3 cm
+\figure{1}{This is the first short figure legend}
+\figure{2}{This is the extremely long legend of the second figure
+and should therefore be typeset using the full width of the type area. For
+typographical and aesthetic reasons it would be unacceptable if these
+legends were
+set next to one another in two columns, with a legend
+of 2 lines for the first figure and a legend of 16 lines for the
+second. Therefore we suggest that the legends for the
+two figures should be placed one
+ below the other. It is not necessary to place
+the figure numbers below or beside the two figures because it should
+be clear
+that the left one is the first figure and the right one the second }
+\endfig
+The text continues \dots
+\vfill\eject
+\settabs \+xxxxxxxxxxxxxxxxxxxxxxxxx &xxxxxxxxxxxxxxxxxxx &xxxxxxxxxxxxxx \cr
+\titleb {4.7.}{Tables}
+Table captions should be treated
+in the same way as figure legends, except that
+the table captions appear above the tables. The tables
+should also be numbered (using arabic numerals) sequentially,
+throughout your contribution.
+\titlec{4.7.1.\enspace Tables Coded with \TeX.} The comand
+\smallskip\noindent\verb|\tabcap{no}{text of the table caption}|
+\smallskip\noindent will produce a table caption. Thereafter you should
+code your table with \TeX{}. Leave 8 mm (not more) additional space
+before the table caption and at the end of your table (\verb|\vskip 8
+true mm|). Please make sure that all the material of your table will be
+set in small print by using the command \verb|\petit| inside a box or
+a group.
+\medskip\noindent{\it Sample Input}
+\begintt
+\vskip8 true mm
+\vbox{\tabcap{1}{Observational results from NGC 4827}
+\vbox{\petit\hrule\smallskip
+\halign{\enspace#\hfil\enspace&&#\hfil\enspace\cr
+&&\multispan3{RA (1950)}\hfil&\ &\multispan3{Dec (1950)}\hfil
+ & $S$ & Pol & \% & $\log P$\cr
+\noalign{\vskip-2mm}
+&&\multispan3\hrulefill\quad&&\multispan3\hrulefill\quad&&\cr
+\noalign{\vskip-0.5mm}
+& &(h) &(m) & (s) & & (\degr) & (\arcmin) & (\arcsec)
+& (mJy) & (mJy) & & (W Hz$^{-1}$)\cr
+\noalign{\smallskip}
+\noalign{\hrule}
+\noalign{\smallskip}
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \cr
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \cr
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \cr
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \cr}
+\smallskip\hrule}}
+\vskip 8 true mm
+\endtt
+\vfill\eject\noindent
+{\it Sample Output}\vskip8 true mm
+\vbox{\tabcap{1}{Observational results from NGC 4827}
+\vbox{\petit\hrule\smallskip
+\halign{\enspace#\hfil\enspace&&#\hfil\enspace\cr
+&&\multispan3{RA (1950)}\hfil&\ &\multispan3{Dec (1950)}\hfil
+ & $S$ & Pol & \% & $\log P$\cr
+\noalign{\vskip-2mm}
+&&\multispan3\hrulefill\quad&&\multispan3\hrulefill\quad&&\cr
+\noalign{\vskip-0.5mm}
+& &(h) &(m) & (s) & & (\degr) & (\arcmin) & (\arcsec)
+& (mJy) & (mJy) & & (W Hz$^{-1}$)\cr
+\noalign{\smallskip}
+\noalign{\hrule}
+\noalign{\smallskip}
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \cr
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \cr
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \cr
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \cr}
+\smallskip\hrule}}
+\vskip 8 true mm
+Here your text continues \dots
+\titlec {4.7.2.\enspace Tables Not Coded with \TeX.}
+If you do not wish to code your table using \TeX{}
+but prefer to have it reproduced separately,
+proceed as for figures and use the following coding:
+\smallskip
+\settabs \+xxxxxxxxxxxxxxxxxxxxxxxxxx &xxxxxxxxxxxxxxxxxxxx \cr
+\+\verb|\begtab x cm|&{Begin table of {\it x\/} cm (please use cm
+only)}\cr
+\+\verb|\tabcap{no}{text}|
+&Table caption (no capitalization, see Sect. 2.5) \cr
+\+\verb|\endtab|&End table\cr
+\noindent{\it Input}\smallskip
+\+\verbb|\begtab 2.5 cm|&(This is the space required for your
+table)\cr
+\+\verb|\tabcap{2}{This is another table caption}|\cr
+\+\verb|\endtab|\cr
+\smallskip\smallskip\smallskip \noindent
+{\it Output}\vskip1 true cm
+\vbox{\tabcap{2}{This is another
+table caption}\vbox to 2.5true cm{\hrule
+width2truecm\vfil\vbox{\noindent The distance between these two
+lines indicates the height of your table.
+In this case 2.5 true cm}%
+\vfil\hrule width 2truecm}}
+\titleb {4.8.}{Signs and Characters}
+\titlec{4.8.1.\enspace Special Signs.}
+You may need to use special signs. The available ones are listed in
+{\it The \TeX{}book}, by Donald E. Knuth (1986), Addison-Wesley
+Publishing Company, pp. 434\ts ff.
+We have created further symbols for math mode (enclosed in \$):
+\medskip
+{\tabskip=0pt\openup1\jot
+\centerline{\hbox{\vbox{\halign{{$\backslash$\tt #}\quad\hfil
+&yields $#$\hfil\qquad\qquad\qquad
+&\quad{$\backslash$\tt #}\quad\hfil
+&yields $#$\hfil\cr
+grole&\grole&getsto&\getsto\cr
+lid&\lid&gid&\gid\cr}}}}}
+\titlec{4.8.2.\enspace Gothic (Fraktur).}
+If gothic letters are {\it necessary},
+please use those of the relevant \AmSTeX{} (American Mathematical
+Society)
+alphabet.
+
+The
+\AmSTeX{} gothic alphabet is available from the American Mathematical
+Society.
+
+In Plain\TeX{} only the following gothic letters are
+available: \verb|$\Re$| yields $\Re$ and \verb|$\Im$| yields $\Im$.
+These should {\it not\/} be used when you need gothic letters for your
+contribution. Use \AmSTeX{} gothic as explained above.
+For the real and the imaginary parts of a complex number within math mode
+ you should use instead: \verb|$\rm Re$| (which yields Re) or
+\verb|$\rm Im$| (which yields Im).
+\titlec{4.8.3.\enspace Script.}
+For script capitals use the coding \newline
+{\tt $\$\backslash$cal AB$\$$,}\ \ which yields\ \ $\cal AB$\ \ \ \
+(see p. 164 of {\it The \TeX{}book\/}).
+\titlec{4.8.4.\enspace Special Roman.}
+If you need other or more than the symbols below please use throughout the
+blackboard bold characters of \AmSTeX.
+The following characters are built up by the use of combined symbols and signs:
+\smallskip \smallskip
+%
+\tabskip=0pt
+\halign to\hsize{{$\backslash$\tt #}\ \hfil
+&#\hfil&\ yields \hfil$#$\hfil\tabskip=0pt plus1fil
+&\tabskip=0pt{$\backslash$\tt #}\ \hfil
+&#\hfil&\ yields \hfil$#$\hfil\cr
+bbbc&(complex numbers)&\bbbc&
+bbbf&(blackboard bold F)&\bbbf\cr
+bbbh&(blackboard bold H)&\bbbh&
+bbbk&(blackboard bold K)&\bbbk\cr
+bbbm&(blackboard bold M)&\bbbm&
+bbbn&(natural numbers N)&\bbbn\cr
+bbbp&(blackboard bold P)&\bbbp&
+bbbq&(rational numbers)&\bbbq\cr
+bbbr&(real numbers)&\bbbr&
+bbbs&(blackboard bold S)&\bbbs\cr
+bbbt&(blackboard bold T)&\bbbt&
+bbbz&(whole numbers)&\bbbz\cr
+bbbone&(symbol one)&\bbbone&
+bbbe&(e symbol)&\bbbe\cr}
+\bigskip \noindent
+\line{\rlap{e.g.}\hfil$\displaystyle\bbbc^{\bbbc^\bbbc}\otimes
+\bbbf_{\bbbf_\bbbf} \otimes
+\bbbh_{\bbbh_\bbbh} \otimes
+\bbbk_{\bbbk_\bbbk} \otimes
+\bbbm^{\bbbm^\bbbm} \otimes
+\bbbn_{\bbbn_\bbbn} \otimes
+\bbbp^{\bbbp^\bbbp}$\hfil}
+\vskip0.5\baselineskip
+\centerline{$\displaystyle \otimes
+\bbbq_{\bbbq_\bbbq} \otimes
+\bbbr^{\bbbr^\bbbr} \otimes
+\bbbs^{\bbbs_\bbbs} \otimes
+\bbbt^{\bbbt^\bbbt} \otimes
+\bbbz^{\bbbz_\bbbz} \otimes
+\bbbone^{\bbbone_\bbbone} \otimes
+\bbbe^{\bbbe_\bbbe}$}
+\titlec{4.8.5.\enspace Sans Serif.}
+Using our macros you will also be able to choose the font family of this
+style; use the command \verb|\sans| for \ \ {\sans sans serif}\
+\ (like \verb|\it| for {\it italic style}).
+\titlec{4.8.6.\enspace Invented Characters.}
+If you need to invent a special character not available in this list,
+please start your coding as shown below.
+Be sure your coding works without math mode; the characters invented
+should be numbered using lower-case roman numerals. \smallskip
+\smallskip
+\def\speciali{\hbox{$ = \!\!\! > $ }}
+{\tt \+$\backslash$def$\backslash$speciali$\{$ $\backslash$hbox$\{ \$ $=
+$\backslash$!$\backslash$!$\backslash$! $> \$ $
+$\} \}$\ \ \ \ {\rm yields} \ \ \ \ \speciali \cr
+\+$\backslash$def$\backslash$specialii$\{$ Your definition of special ii
+$\}$ \cr
+\+$\backslash$def$\backslash$specialiii$\{$ Your definition of special iii
+$\}$ \cr
+\+$\backslash$def$\backslash$specialiv$\{$ Your definition of special
+iv $\}$ \ \ \ \ {\rm etc.} \cr }
+\vfill\eject
+\titlea {5.}{How to Code References}
+There are three reference systems available; only one, of course,
+should be used for your contribution. With each system (by author--year,
+by number only or by letter--number) a reference list,
+preferably headed ``References" and containing all citations in the
+text, should be included at the end of the your contribution.
+\smallskip
+\settabs \+xxxxxxxxxxxxxxxxxxxx&xxxxxxxxxxxxxxxxxxxx \cr
+\+\verb|\begref{name}{mark}|&Beginning of reference list: the
+heading;\cr
+\+&the argument {\tt name} stands for the chosen heading:\cr
+\+&References (preferable), Literature or Bibliography;\cr
+\+&the argument {\tt mark} stands for the largest number or\cr
+\+&widest mark of your list, it is used for references\cr
+\+&by number only and by letter--number by the\cr
+\+&macros \verb|\refno| and \verb|\refmark|. In the\cr
+\+&author--year system it is not used but you have to\cr
+\+&code at least an empty pair of braces yet.\cr
+\medskip\noindent Use only one of the following three codings throughout
+your reference list:
+\smallskip
+\+\verb|\ref text|&The coding in author--year system\cr
+\+\verb|\refno{no.} text|&The coding in number only system\cr
+\+\verb|\refmark{mark} text|&The coding in letter--number
+system\cr
+\medskip
+\+\verb|\endref|&End of reference list\cr
+\bigskip
+For detailed examples please see below, and also refer to the demo-file
+({\it jns.dem}).
+
+{\it Very important\/}: For each entry in the reference list please
+follow
+{\it exactly\/} the order shown in the examples.
+\titleb {5.1.}{Author--Year System}
+References are cited in the text by name and year in parentheses, e.g.
+(Smith 1970, 1980), (Ekeland et al. 1985, Theorem 2), (Jones and Jaffe
+1986; Farrow 1988, Chap.\ts 2) or only the year in parentheses if the
+name is part of the sentence, e.g. Ekeland et al. (1985, Sect.\ts 2.1).
+The reference list should contain all citations contained in the text,
+ordered alphabetically by surname (with initials following). If there
+are several works by the same author(s) the references should be listed
+in the appropriate order indicated below:
+\medskip
+\item{a)} One author: list works chronologically;
+\item{b)} Author and same co-author(s): list works chronologically;
+\item{c)} Author and different co-authors: list works alphabetically
+according to co-authors.
+\medskip
+If there are several works by the same author(s) and in the same year,
+but which are cited separately, they should be distinguished by
+the use of ``a", ``b" etc., e.g. (Smith 1982a), (Ekeland et al. 1982b).
+\vfill\eject
+\settabs \+xxxxxxxxxxxxxxxxxxx&xxxxxxxxxxxxxxxxxxxx \cr
+\+\verb|\begref{name}{}|&Do not forget to code at least an empty pair of
+braces\cr
+\+&otherwise the first entry is not correctly indented\cr
+\+\verb|\ref text|&First entry in reference list\cr
+\+\verb|\ref text|&Second entry in reference list\cr
+\+\quad$\vdots$\cr
+\+\verb|\ref text|&{\it n\/}-th entry in reference list\cr
+\+\verb|\endref|&End of reference list\cr
+\titleb {5.2.}{References by Number Only or by Letter--Number}
+The author--year system is probably of more help to the reader.
+However, refer\-en{}ces may instead be cited in the text by numbers in
+square brackets, e.g. [1], [2] etc. used sequentially throughout your
+contribution or by letter--number, e.g. [E1, S2], [P1] etc. or a
+similar version.
+For example, the first two references are given as [1] and [2] in the
+text, and as 1. and 2. (i.e. the brackets are dropped) in the reference
+list.
+The coding is as follows:
+\medskip
+\settabs \+xxxxxxxxxxxxxxxxxxxx &xxxxxxxxxxxxxxxx &xxxxxxxxxxxxxx \cr
+\+\verb|\begref{name}{mark}|\cr
+\+\verb|\refno{no.} text|\cr
+\+\verb|\refno{no.} text|\cr
+\+\quad$\vdots$\cr
+\+\verb|\refno{no.} text|\cr
+\+\verb|\endref|\cr
+\medskip\noindent
+Instead of \verb|\refno| in the number--only system use the coding
+\verb|\refmark| for the letter--number system (e.g.:
+\verb|\refmark{[MB1]} this is the text of your reference|, then you
+should have coded the start of your references with
+\verb|\begref{References}{[MB1]}|, supposed ``[MB1]'' is your widest
+mark).
+\bigskip\noindent
+{\it Important\/}:
+You must ensure that the references cited in the text (name--year,
+number or letter--number) correspond exactly with the entries
+in the reference list.
+\titleb{5.3.}{Examples}
+The following examples show the three ways of organizing a reference list.
+Naturally, you will choose only one for your contribution.
+\bigskip\noindent
+{\it Examples of Typical Text Containing Reference Citations}
+\medskip\noindent
+This is implicit in recent work of Arnold (1968) and Lerch et al. (1983)
+\dots\newline
+Consider as an example the following theorem [1].\newline
+We refer now to the hypothesis as given in [S1].
+\vfill\eject
+\noindent
+{\it Input of Coding for Author--Year Reference List}
+\begintt
+\begref{References}{here is no mark at all}
+\ref Arnold, V.I. (1968): Singularities of smooth mappings. Usp.
+Mat. Nauk {\bf 23}, 3--44 (Russian). [English transl.: Russ. Math.
+Surv. {\bf 23} (1968) 1--43]
+\ref Dirac, P.A.M. (1950): On generalized Hamiltonian dynamics.
+Can. J. Math. {\bf 2}(2), 129--148
+\ref Gr\"otschel, M., Lov\'asz, L., Schrijver, A. (1988):
+Geometric algorithms and combinatorial optimization. (Algorithms
+and Combinatorics, vol.2.) Springer, Berlin Heidelberg
+\ref Lerch, F.J., Klosko, S.M., Patel, G.B. (1983): A refined
+gravity model from LAGEOS (GEM-L2). NASA, Tech. Memo. TM 84986
+\ref Rham, G. de (1931): Sur l'analysis situs de vari\'et\'es
+\`a $n$ dimensions. J. Math. Pures Appl. {\bf 10}, 115--200
+\endref
+\endtt
+\bigskip\noindent
+{\it Output for Author--Year Reference List}
+\begref{References}{here is no mark at all}
+\ref Arnold, V.I. (1968): Singularities of smooth mappings. Usp.
+Mat. Nauk {\bf 23}, 3--44 (Russian). [English transl.: Russ. Math.
+Surv. {\bf 23} (1968) 1--43]
+\ref Dirac, P.A.M. (1950): On generalized Hamiltonian dynamics.
+Can. J. Math. {\bf 2}(2), 129--148
+\ref Gr\"otschel, M., Lov\'asz, L., Schrijver, A. (1988):
+Geometric algorithms and combinatorial optimization. (Algorithms
+and Combinatorics, vol.2.) Springer, Berlin Heidelberg
+\ref Lerch, F.J., Klosko, S.M., Patel, G.B. (1983): A refined
+gravity model from LAGEOS (GEM-L2). NASA, Tech. Memo. TM 84986
+\ref Rham, G. de (1931): Sur l'analysis situs de vari\'et\'es
+\`a $n$ dimensions. J. Math. Pures Appl. {\bf 10}, 115--200
+\endref
+\vfill\eject\noindent
+{\it Input of Coding for Number-Only Reference List}
+\begintt
+\begref{References}{5.}
+\refno {1.} Dieck, T. tom: Bordism of $G$-manifolds and
+integrality theorems. Topology {\bf 9} (1970) 345--358
+\refno{2.} Gantmacher, F.R., Krein, M.G.: Oscillation matrices and
+kernels and small vibrations of mechanical systems. State Press
+for Technical Literature, Moscow Leningrad, 1950 (Russian).
+[German transl.: Oszillationsmatrizen, Oszillations\-kerne
+und kleine Schwingungen mechanischer Systeme. Akademie-Verlag,
+Berlin, 1960]
+\refno{3.} Hoare, C.A.R.: Procedures and parameters: An axiomatic
+approach. In: Engeler, E. (ed.) Symposium on Semantics of
+Algorithmic Languages. (Lecture Notes in Mathematics, vol.188.)
+Springer, New York Berlin Heidelberg, 1971, pp.102--116
+\refno{4.} Peitgen, H.-O., Walther, H.-O. (eds.): Functional
+differential equations and approximation of fixed points. (Lecture
+Notes in Mathematics, vol.730.) Springer, New York Berlin
+Heidelberg, 1979
+\refno {5.} Redwood, R.: Personal communication, 1986
+\endref
+\endtt
+\noindent
+{\it Output for Number-Only Reference List}
+\begref{References}{5.}
+\refno {1.} Dieck, T. tom: Bordism of $G$-manifolds and
+integrality theorems. Topology {\bf 9} (1970) 345--358
+\refno{2.} Gantmacher, F.R., Krein, M.G.: Oscillation matrices and
+kernels and small vibrations of mechanical systems. State Press
+for Technical Literature, Moscow Leningrad, 1950 (Russian).
+[German transl.: Oszillationsmatrizen, Oszillations\-kerne
+und kleine Schwingungen mechanischer Systeme. Akademie-Verlag,
+Berlin, 1960]
+\refno{3.} Hoare, C.A.R.: Procedures and parameters: An axiomatic
+approach. In: Engeler, E. (ed.) Symposium on Semantics of
+Algorithmic Languages. (Lecture Notes in Mathematics, vol.188.)
+Springer, New York Berlin Heidelberg, 1971, pp.102--116
+\refno{4.} Peitgen, H.-O., Walther, H.-O. (eds.): Functional
+differential equations and approximation of fixed points. (Lecture
+Notes in Mathematics, vol.730.) Springer, New York Berlin
+Heidelberg, 1979
+\refno {5.} Redwood, R.: Personal communication, 1986
+\endref
+\vfill\eject\noindent
+{\it Input of Coding for Letter--Number List}
+\begintt
+\begref{References}{[GP1]}
+\refmark{[B1]} Brooks, M.: Automatic generation of test
+data for recursive programs having simple errors. PhD thesis,
+Stanford University, 1980
+\refmark{[GP1]} Griswold, R.E., Poage, J.F., Polonsky, I.P.:
+The SNOBOL4 programming language, 2nd edn. Prentice-Hall,
+Englewood Cliffs, NJ, 1971
+\refmark{[R1]} Rapp, R.H.: The development of the January
+1983 $1^\circ\times1^\circ$ mean free-air anamoly data tape.
+Dept. of Geod. Sci. and Surv., Ohio State University, Columbus,
+OH. Internal report, 1983
+\refmark{[T1]} Thompson, d'A.: On growth and form. (Abriged
+edition: J.T. Bonner, ed.) Cambridge University Press, 1961
+\refmark{[T2]} Thompson, d'A.: Personal communication, 1963
+\endref
+\endtt
+\noindent
+{\it Output of Coding for Letter--Number List}
+\begref{References}{[GP1]}
+\refmark{[B1]} Brooks, M.: Automatic generation of test
+data for recursive programs having simple errors. PhD thesis,
+Stanford University, 1980
+\refmark{[GP1]} Griswold, R.E., Poage, J.F., Polonsky, I.P.:
+The SNOBOL4 programming language, 2nd edn. Prentice-Hall,
+Englewood Cliffs, NJ, 1971
+\refmark{[R1]} Rapp, R.H.: The development of the January
+1983 $1^\circ\times1^\circ$ mean free-air anamoly data tape.
+Dept. of Geod. Sci. and Surv., Ohio State University, Columbus,
+OH. Internal report, 1983
+\refmark{[T1]} Thompson, d'A.: On growth and form. (Abriged
+edition: J.T. Bonner, ed.) Cambridge University Press, 1961
+\refmark{[T2]} Thompson, d'A.: Personal communication, 1963
+\endref
+\bigskip\bigskip\bigskip\bigskip
+\centerline{\vbox{\hrule\hbox{\vrule\vbox{\kern5pt
+\hbox{\enspace \bf To end your text you must use the \TeX{} command
+{\tt\bs byebye}\enspace}\kern5pt}\vrule}\hrule}}
+\input jns.dem
+\bye
+
+
diff --git a/macros/plain/contrib/jns/jns.sty b/macros/plain/contrib/jns/jns.sty
new file mode 100644
index 0000000000..dc116ac792
--- /dev/null
+++ b/macros/plain/contrib/jns/jns.sty
@@ -0,0 +1,801 @@
+% JNS DOCUMENT STYLE -- Released 16 July 1990
+% i.e. Journal of Nonlinear Science document style
+% for LaTeX version 2.09
+
+% This style file is an adaptation of
+% the original LaTeX article.sty, by:
+% Frank Holzwarth, Springer-Verlag Heidelberg,
+% Tiergartenstrasse 17, D-6900 Heidelberg.
+
+\typeout{Document Style `jns' <16 Jul 90>.}
+
+\frenchspacing
+\def~{\penalty\@M\kern3pt}
+
+\def\thebibliography#1{\section*{References}\small\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\ds@citeauthoryear{\def\thebibliography##1{\section*{References}%
+ \small\list{}{\settowidth\labelwidth{}\leftmargin\parindent
+ \itemindent=-\parindent
+ \labelsep=\z@
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus -.07em}%
+ \sloppy
+ \sfcode`\.=1000\relax}%
+ \def\@cite##1{##1}%
+ \def\@lbibitem[##1]##2{\item[]\if@filesw
+ {\def\protect####1{\string ####1\space}\immediate
+ \write\@auxout{\string\bibcite{##2}{##1}}}\fi\ignorespaces}}%
+
+\newif\if@envcountreset\@envcountresetfalse
+\def\ds@envcountreset{\@envcountresettrue}
+
+\def\@mbi{cmmib10}
+\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
+
+\ds@twoside
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip=3 mm plus6pt minus 4pt
+\belowdisplayskip=3 mm plus6pt minus 4pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt}
+
+\mathchardef\Gamma="0100
+\mathchardef\Delta="0101
+\mathchardef\Theta="0102
+\mathchardef\Lambda="0103
+\mathchardef\Xi="0104
+\mathchardef\Pi="0105
+\mathchardef\Sigma="0106
+\mathchardef\Upsilon="0107
+\mathchardef\Phi="0108
+\mathchardef\Psi="0109
+\mathchardef\Omega="010A
+
+\def\small{\@setsize\small{10pt}\viiipt\@viiipt
+\abovedisplayskip=2.5 mm plus5pt minus 3pt
+\belowdisplayskip=2.5 mm plus5pt minus 3pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt}}
+
+\def\footnotesize{\@setsize\footnotesize{10pt}\viiipt\@viiipt
+\abovedisplayskip=2.5 mm plus5pt minus 3pt
+\belowdisplayskip=2.5 mm plus5pt minus 3pt
+\abovedisplayshortskip=0mm plus6pt minus 2pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt}}
+
+\def\scriptsize{\@setsize\scriptsize{8.4pt}\viipt\@viipt}
+
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{13.2pt}\xipt\@xipt}
+\def\Large{\@setsize\Large{14.4pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{16pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{22pt}\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 11pt \headheight 12pt \headsep 13.66pt
+\footheight 12pt \footskip 30pt
+\textwidth 12.2cm
+\textheight 19.4cm
+\columnsep 1cc \columnseprule 0pt
+
+\footnotesep 7.7pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 8mm plus 2pt minus 4pt
+\intextsep 8mm plus 2pt minus 2pt
+\@maxsep 8mm
+
+\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
+\@dblfptop0pt plus1fil \@dblfpsep8pt plus2fil\@dblfpbot 0pt plus1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 1.5em \topsep 8pt plus 2pt minus 4pt
+\partopsep 2pt plus 1pt minus 1pt \itemsep \z@
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty-\@lowpenalty\@endparpenalty -\@lowpenalty\@itempenalty
+-\@lowpenalty
+
+\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle\bf#1$}}
+{\mbox{\boldmath$\textstyle\bf#1$}}
+{\mbox{\boldmath$\scriptstyle\bf#1$}}
+{\mbox{\boldmath$\scriptscriptstyle\bf#1$}}}
+
+\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. }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \noindent{\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\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@}{-18pt plus -4pt minus
+-4pt}{12pt plus 4pt minus 4pt}{\normalsize\bf\boldmath
+\pretolerance=10000\relax\rightskip=0pt plus8em}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-18pt plus-4pt minus
+ -4pt}{8pt plus 4pt minus 4pt}{\normalsize\it
+\pretolerance=10000\relax\rightskip=0pt plus8em}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-18pt plus-4pt
+ minus -4pt}{-0.5em plus -.22em minus -0.1em}{\normalsize\bf\boldmath}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}{-12pt plus -4pt minus
+ -4pt}{-0.5em plus -.22em minus -0.1em}{\normalsize\it}}
+\def\subparagraph#1{\typeout{JNS Warning: You should not use
+\protect\subparagraph \space in this style.}\vskip0.5cm
+You should not use $\backslash${\tt subparagraph} in this
+style.\vskip0.5cm}
+
+\setcounter{secnumdepth}{2}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+% Define \keywords
+\def\keywords{\par\vspace{12pt}\noindent{\bf Key words: }\ignorespaces}
+
+% Define \acknowledgements
+\def\acknowledgements{\vspace{12pt}\noindent{\em Acknowledgements.\/ }}
+
+% The `abstract' environment has been renamed to `abstr' so a new environment
+% `abstract' can be defined in terms of the old one.
+\def\abstr{{\noindent \bf Summary. }%
+\ignorespaces}
+\def\endabstr{\relax}
+
+\newenvironment{abstract}{\begin{abstr}}{\end{abstr}}
+
+\leftmargini 17pt \leftmarginii 17pt
+\leftmarginiii 17pt \leftmarginiv 17pt
+\leftmarginv 10pt \leftmarginvi 10pt
+\leftmargin\leftmargini \labelwidth\leftmargini
+\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt plus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt}
+
+\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{\bf --}
+\def\labelitemii{$\bullet$}
+\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}\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 1.4pt \tabcolsep 1.4pt \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]
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Table of 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\numberline#1{\advance\hangindent by\@tempdima%
+\hbox to\@tempdima{\hss#1\enspace}}
+%
+\def\bf@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 \advance\leftskip \@tempdima \hbox{}\hskip -\leftskip
+{\bf#4}\nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern \@dotsep
+ mu$}\hfill \nobreak \hbox to\@pnumwidth{\hfil\rm #5}\par}\fi}
+%
+\def\l@section{\vskip2mm\bf@dottedtocline{1}{0em}{1.7em}}
+\def\l@subsection{\@dottedtocline{2}{1.7em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{4em}{2em}}
+\def\l@paragraph{\@dottedtocline{4}{6em}{2em}}
+\def\l@subparagraph{\@dottedtocline{5}{8em}{2em}}
+\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\endthebibliography{\endlist\normalsize}
+
+\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 2 true cm\kern 2.6\p@}
+
+\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+ \advance\@tempdima-1em\parshape \@ne 1em\@tempdima}\par
+ \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$\ }#1}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.15}
+\def\floatpagefraction{.85}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.85}
+\def\dblfloatpagefraction{.85}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{{\bf #1} #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\box\@tempboxa\hfil}
+ \fi\vskip5pt}
+
+\long\def\@caption#1[#2]#3{\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\par
+ \begingroup
+ \@parboxrestore
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{htbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.\thinspace\thefigure.}
+\def\figure{\@float{figure}\small\rm}
+\def\endfigure{\vskip-5pt\end@float}
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{htbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable.}
+\def\table{\@float{table}\small\rm}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% LaTeX does not provide a command to enter the authors institute
+% addresses. The \institute command is defined here.
+
+\newcounter{@inst}
+\newcounter{@auth}
+\newdimen\instindent
+
+\def\institute#1{\gdef\@institute{#1}}
+
+\def\institutename{\par
+ \begingroup
+ \parskip=0pt
+ \setcounter{@inst}{1}%
+ \def\and{\par\stepcounter{@inst}%
+ \hangindent\instindent\hangafter=0\noindent
+ \llap{$^{\the@inst}$\enspace}\ignorespaces}%
+ \setbox0=\vbox{\def\thanks##1{}\@institute}%
+ \ifnum\c@@inst>9\relax\setbox0=\hbox{$^{88}$\enspace}%
+ \else\setbox0=\hbox{$^{8}$\enspace}\fi
+ \instindent=\wd0\relax
+ \ifnum\c@@inst=1\relax\else
+ \setcounter{footnote}{\c@@inst}%
+ \setcounter{@inst}{1}%
+ \hangindent\instindent\hangafter=0\noindent
+ \llap{$^{\the@inst}$\enspace}\fi\ignorespaces
+ \@institute\par
+ \endgroup}
+
+\def\@thanks{}
+
+\def\@fnsymbol#1{\ifcase#1\or\star\or{\star\star}\or{\star\star\star}%
+ \or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger\else\@ctrerr\fi\relax}
+
+\def\inst#1{\unskip\/$^{#1}$}
+
+\def\subtitle#1{\gdef\@subtitle{#1}}
+\def\@subtitle{}
+
+\def\titlerunning#1{\gdef\@titlerunning{#1}}
+\def\@titlerunning{}
+
+\def\authorrunning#1{\gdef\@authorrunning{#1}}
+\def\@authorrunning{}
+
+\def\Logo{\setbox254=\hbox{ THE JOURNAL OF }%
+\vbox{\hrule\hbox{\vrule\vbox{\kern3pt
+\copy254
+\hbox to\wd254{\hfil NONLINEAR\hfil}
+\hbox to\wd254{\hfil SCIENCE\hfil}
+\hbox to\wd254{\hfil\number\day.\number\month.\number\year\hfil}
+\kern3pt}\vrule}\hrule}}
+\def\makeheadbox{\hbox to\hsize{\hfil
+\Logo}}
+
+\def\maketitle{\par
+ \begingroup
+ \parindent=\z@
+ \def\thefootnote{\fnsymbol{footnote}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{empty}\@thanks
+ \endgroup
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}%
+ \let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \rm
+ \makeheadbox
+ {\LARGE \bf\boldmath
+ \pretolerance=10000
+ \rightskip=0pt plus 4cm
+ \vskip2.1cm
+ \@title \par}\vskip .4cm
+\if!\@subtitle!\else {\bf\boldmath
+ \vskip -.2cm
+ \pretolerance=10000
+ \rightskip=0pt plus 3cm
+ \@subtitle \par}\vskip .4cm\fi
+{\bf\@author\vskip.1cm
+\def\\{ }\def\inst##1{}\def\thanks##1{}\def\and{}%
+\setcounter{@auth}{1}%
+\if!\@titlerunning!\else\def\@title{\@titlerunning}\fi
+\if!\@authorrunning!\else\def\@author{\@authorrunning}\fi
+\xdef\@author{\@author\unskip\unskip}%
+\xdef\@title{\ignorespaces\@title}%
+\instindent=\hsize\advance\instindent by-1cm\relax
+\setbox0=\hbox{\small\@author}\ifdim\wd0>\instindent
+\typeout{Warning: The running head produced by the
+\protect\author \space command}\typeout{exceeds the pagewidth,
+please supply a short form with \protect\authorrunning.}%
+\def\@author{Author(s) suppressed due to excessive length,
+please use {\tt$\backslash$authorrunning}.}\fi
+\setbox0=\hbox{\small\@title}\ifdim\wd0>\instindent
+\typeout{Warning: The running head produced by the
+\protect\title \space command}\typeout{exceeds the pagewidth,
+please supply a short form with \protect\titlerunning.}%
+\def\@title{Title suppressed due to excessive length,
+please use {\tt$\backslash$titlerunning}.}\fi
+\markboth{\@author}{\@title}}
+ {\small\rm\institutename
+ \par
+ \vskip 0.3cm
+ \@date
+ \par}
+ \vskip 0.8cm}
+
+\mark{{}{}}
+
+\if@twoside
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}%
+\def\@evenhead{\small\rm
+\thepage\hfil\leftmark}\def\@oddhead{\hbox{}\small\rm\rightmark \hfil
+\thepage}\def\sectionmark##1{}%
+\def\subsectionmark##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{\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@headings \pagenumbering{arabic} \onecolumn
+\if@twoside\else\raggedbottom\fi
+
+% new environments and theorems
+% borrowed form the LTMP-style of Springer-Verlag
+% designed by Dr. Christoph Ender
+%
+% define the new theorem like environments
+% define a new style of environments where it is possible to define
+% the font % used as the theorem name and the fontfamily for the text.
+%
+% \newstytheorem{name}{thefont}{txtfont}{Text}[Counter]
+% \newstytheorem{name}{thefont}{txtfont}[oldname]{Text}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+%
+\def\newstytheorem#1#2#3{%
+\@ifnextchar[{\che@othm{#1}{#2}{#3}}{\che@nthm{#1}{#2}{#3}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of theorem name
+%
+\def\che@nthm#1#2#3#4{%
+\@ifnextchar[{\che@xnthm{#1}{#2}{#3}{#4}}{\che@ynthm{#1}{#2}{#3}{#4}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of thorem name
+% #5 - add theorem counter to reset list of another counter
+%
+\def\che@xnthm#1#2#3#4[#5]{\expandafter
+\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\if@envcountreset\@addtoreset{#1}{#5}\fi
+\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+\global\@namedef{#1}{\che@thm{#1}{#4}{#2}{#3}}\global
+\@namedef{end#1}{\@endtheorem}}}
+%
+% #1 - name of theorem
+% #2 - theorem font
+% #3 - text font
+% #4 - text string of thorem name
+%
+\def\che@ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}%
+\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+\global\@namedef{#1}{\che@thm{#1}{#2}{#3}{#4}}\global
+\@namedef{end#1}{\@endtheorem}}}
+%
+% change oldthm if oldname in specification is '*'
+% then don't use a counter
+% #1 - countername
+% #2 - theorem font
+% #3 - text font
+% #4 - counter used
+% #5 - string containing theorem name to print
+%
+\def\che@othm#1#2#3[#4]#5{\expandafter\@ifdefinable
+\csname#1\endcsname%
+{\@@othm@{#1}{#2}{#3}{#4}{#5}\global\@namedef{end#1}{\@endtheorem}}}
+%
+\def\@@othm@#1#2#3#4#5{\if *#4{\global\@namedef{the#1}{\relax}
+\global\@namedef{#1}{\@bthm@{}{#5}{#2}{#3}}}\else
+{\global\@namedef{the#1}{\@nameuse{the#4}}% define the counter
+\global\@namedef{#1}{\che@thm{#4}{#5}{#2}{#3}}}\fi}
+%
+% new defs for theorem environment che 17-MAR-1989
+% it improves the option possible
+%
+% #1 - countername = theorem name
+% #2 - string containing theorem name to print
+% #3 - theorem font
+% #4 - text font
+\def\che@thm#1#2#3#4{\@ifnextchar({\@athm{#1}{#2}{#3}{#4}}{%
+\@ifnextchar *{\@bthm{#1}{#2}{#3}{#4}}%
+{\@@thm{#1}{#2}{#3}{#4}}}}
+%
+% \begin{thm}(A.1)[test] results in:
+% \end{thm} thm A.1 (test) ....
+% #1 - theorem
+% #2 - string of theorem name
+% #3 - font for theorem name and label
+% #4 - Text font
+% #5 - is the new label
+% #6 - optional string
+%
+\def\@athm#1#2#3#4(#5){\@ifnextchar[{%
+\@aythm{#1}{#2}{#3}{#4}{#5}}{\@axthm{#1}{#2}{#3}{#4}{#5}}}
+\def\@axthm#1#2#3#4#5{\@@locthmlab{#1}{#5}%
+\@begintheorem{#2}{#5}{#3}{#4}\ignorespaces}
+\def\@aythm#1#2#3#4#5[#6]{\@@locthmlab{#1}{#5}%
+\fuh@opargbegintheorem{#2}{#5}{#6}{#3}{#4}\ignorespaces}
+%
+% \begin{thm}*[xytest] results in:
+% \end{thm} thm (xytest) ....
+% #1 - theorem
+% #2 - string of theorem name
+% #3 - font for theorem name and label
+% #4 - Text font
+% #5 - optional string
+%
+\def\@bthm@#1#2#3#4{\@ifnextchar[{\@bythm{#1}{#2}{#3}{#4}}{%
+\@bxthm{#1}{#2}{#3}{#4}}}
+\def\@bthm#1#2#3#4*{\@ifnextchar[{\@bythm{#1}{#2}{#3}{#4}}{%
+\@bxthm{#1}{#2}{#3}{#4}}}
+\def\@bxthm#1#2#3#4{\if !#1!\relax\else\@@locthmlab{#1}{}\fi
+\@@begintheorem{#2}{#3}{#4}\ignorespaces}
+\def\@bythm#1#2#3#4[#5]{%
+\@@opargbegintheorem{#2}{#3}{#4}{#5}\ignorespaces}
+%
+% define local label
+% if no number or a user specified label occured
+%
+\def\@@locthmlab#1#2{\expandafter\def\csname the#1\endcsname{#2}
+\let\@chetempa\protect\def\protect{\noexpand\protect\noexpand}%
+\edef\@currentlabel{\csname p@#1\endcsname\csname the#1\endcsname}%
+\let\protect\@chetempa}
+%
+% #1 - counter = theorem name
+% #2 - string with name
+% #3 - font for theorem name and label
+% #4 - font for text
+\def\@@thm#1#2#3#4{\refstepcounter
+ {#1}\@ifnextchar[{\che@ythm{#1}{#2}{#3}{#4}}{%
+ \che@xthm{#1}{#2}{#3}{#4}}}
+%
+\def\che@xthm#1#2#3#4{\che@begintheorem{#2}{\csname
+the#1\endcsname}{#3}{#4}\ignorespaces}
+\def\che@ythm#1#2#3#4[#5]{\che@opargbegintheorem{#2}{\csname
+ the#1\endcsname}{#5}{#3}{#4}\ignorespaces}
+%
+% #1 - name of theorem
+% #2 - label string
+% #3 - font for name and lable
+% #4 - text fomt
+%
+\def\che@begintheorem#1#2#3#4{#4\trivlist\item[#3 #1\ts #2.]}
+%
+% #1 - name of theorem
+% #2 - label string
+% #3 - additonal text
+% #4 - font for name and lable
+% #5 - text fomt
+%
+\def\che@opargbegintheorem#1#2#3#4#5{#5 \trivlist
+\item[#4 #1\ts #2\ #3.]}
+%
+\def\fuh@opargbegintheorem#1#2#3{\it \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\ (#3).}]}
+%
+\def\@@begintheorem#1#2#3{#3\trivlist\item[#2 #1.]}
+\def\@@opargbegintheorem#1#2#3#4{#3\trivlist\item[#2 #1 #4.]}
+
+\newstytheorem{theorem}{\bf}{\it}{Theorem}[section]
+\newstytheorem{example}{\it}{\rm}{Example}[section]
+\newstytheorem{proposition}{\bf}{\it}[theorem]{Proposition}
+\newstytheorem{corollary}{\bf}{\it}[theorem]{Corollary}
+\newstytheorem{lemma}{\bf}{\it}[theorem]{Lemma}
+\newstytheorem{proof}{\it}{\rm}[*]{Proof}
+\newstytheorem{definition}{\bf}{\rm}[theorem]{Definition}
+\newstytheorem{remark}{\it}{\rm}[*]{Remark}
+\newstytheorem{exercise}{\it}{\rm}[theorem]{Exercise}
+\newstytheorem{problem}{\it}{\rm}[theorem]{Problem}
+\newstytheorem{solution}{\it}{\rm}[theorem]{Solution}
+\newstytheorem{note}{\it}{\rm}[theorem]{Note}
+\newstytheorem{question}{\it}{\rm}[theorem]{Question}
+
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.8pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.3pt}<\cr}}}}}
+\def\bbbr{{\rm I\!R}} %reelle Zahlen
+\def\bbbm{{\rm I\!M}}
+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
+\def\bbbf{{\rm I\!F}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+\def\bbbz{{\mathchoice {\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\sf\scriptscriptstyle Z\kern-0.2em Z$}}}}
+\def\ts{\thinspace}
+
+\def\typeset{\vfill\small\noindent This article was processed using
+the \LaTeX{} macro package with JNS style\par}
+
+\def\enddocument{\par\typeset
+\@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}
diff --git a/macros/plain/contrib/jns/jnsl.dem b/macros/plain/contrib/jns/jnsl.dem
new file mode 100644
index 0000000000..2bdea91d07
--- /dev/null
+++ b/macros/plain/contrib/jns/jnsl.dem
@@ -0,0 +1,354 @@
+% This is JNSL.DEM the demonstration file of
+% the LaTeX macro package from Springer-Verlag
+% for the Journal of Nonlinear Science
+% version of 16 July 1990
+\def\12{{1\ov 2}}
+\def\al{\alpha}
+\def\Aun{A_\un}
+\def\aun{a_\un}
+\def\bullet{\cdot}
+\def\Bun{B_\un}
+\def\bun{b_\un}
+\def\de{\delta}
+\def\dx{\dot x}
+\def\ep{\varepsilon}
+\def\fa{\forall}
+\def\for{{\rm for}}
+\def\Lai{\Lambda}
+\def\lb{\left[}
+\def\lg{\left\{}
+\def\degr{\hbox{$^\circ$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+\def\liminfuu{{\rm lim inf}\,}
+\def\liminfu{\mathop{\vphantom{\tst\sum}\hbox{\liminfuu}}}
+\def\limsupuu{{\rm lim sup}\,}
+\def\limsupu{\mathop{\vphantom{\tst\sum}\hbox{\limsupuu}}}
+\def\lr{\left(}
+\def\lss{\left\|}
+\def\Min{{\rm Min\,}}
+\def\NN{\bbbn}
+\def\ol{\overline}
+\def\om{\omega}
+\def\ov{\over}
+\def\rb{\right]}
+\def\rg{\right\}}
+\def\RRn{\bbbr^{2n}}
+\def\RR{\bbbr}
+\def\rr{\right)}
+\def\rss{\right\|}
+\def\sm{\setminus}
+\def\tst{\textstyle}
+\def\tx{\wt x}
+\def\un{\infty}
+\def\wt{\widetilde}
+\def\ZZ{\bbbz}
+\documentstyle{jns}
+\begin{document}
+
+\title{Haupttitel 14 pt halbfett/Title boldface -- 14/16}
+\titlerunning{Expression of Cellular Oncogenes}
+\subtitle{Untertitel 10 pt halbfett/Subtitle boldface -- 10/11}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+\authorrunning{R. M\"uller}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'e de Paris-Sud,
+Laboratoire d'Analyse Num\'erique, B\^atiment 425,\\
+F-91405 Orsay Cedex, France}
+
+\date{Received June 5, 1989}
+
+\maketitle
+
+\begin{abstract}
+A new variant of the multi-grid algorithms is presented. It uses
+multiple coarse-grid corrections with particularly associated
+prolongations and restrictions. In this paper the robustness with
+respect to anisotropic problems is considered.
+
+\keywords multi-grid method -- coarse--grid correction --
+singular perturbation -- robustness.
+\end{abstract}
+
+\section{The Anisotropic Equation and Standard Multi-Grid Methods}
+\subsection{Introduction}
+Multi-grid methods are known as very fast solvers of a large class of
+discretised partial differential equations. However, the multi-grid
+method cannot be understood as a fixed algorithm. Usually, the
+components of the multi-grid iteration have to be adapted to the given
+problem and sometimes the problems are modified in order to make them
+acceptable for multi-grid methods. In particular, the smoothing
+iteration is the most delicated part of the multi-grid process.
+
+An iteration is called a {\em robust} one, if it works for a sufficient
+large class of problems. Attempts have been made to construct robust
+multi-grid iterations by means of sophisticated smoothing processes\dots
+\newpage
+With this chapter, the preliminaries are over, and we begin the search
+for periodic solutions to Hamiltonian systems. All this will be done in
+the convex case; that is, we shall study the boundary-value problem
+\begin{eqnarray*}\dot x&=&JH' (t,x)\\ x(0) &=& x(T)
+\end{eqnarray*}
+with $H(t,\bullet )$ a convex function of $x$, going to $+\un$ when
+$\lss x\rss \to \un$.
+
+\subsection{Autonomous Systems}
+In this section, we will consider the case when the Hamiltonian $H(x)$
+is autonomous. For the sake of simplicity, we shall also assume that it
+is $C^1$.
+
+We shall first consider the question of nontriviality, within the
+general framework of $\lr \Aun , \Bun\rr$-subquadratic Hamiltonians. In
+the second subsection, we shall look into the special case when $H$ is
+$\lr 0,\bun\rr$-subquadratic, and we shall try to derive additional
+information.
+\subsubsection{ The General Case: Nontriviality.}
+We assume that $H$ is $\lr \Aun , \Bun \rr$-sub\-qua\-dra\-tic at infinity,
+for some constant symmetric matrices $\Aun$ and $\Bun$, with $\Bun
+-\Aun$ positive definite. Set:
+\begin{eqnarray}
+\gamma :&=&{\rm smallest\ eigenvalue\ of}\ \ \Bun - \Aun \\
+\lambda : &=& {\rm largest\ negative\ eigenvalue\ of}\ \ J {d\ov dt}
++\Aun\ . \end{eqnarray}
+
+Theorem 21 tells us that if $\lambda +\gamma < 0$, the boundary-value
+problem:
+\begin{equation}\begin{array}{rcl} \dx&=&JH' (x)\\
+x(0)&=&x (T)\end{array}\end{equation}
+has at least one solution $\ol x$, which is found by minimizing the dual
+action functional:
+\begin{equation} \psi (u) = \int_o^T \lb \12 \lr \Lai_o^{-1} u,u\rr + N^\ast (-u)\rb
+dt\end{equation}
+
+\noindent on the range of $\Lai$, which is a subspace $R (\Lai )\sb L^2$ with
+finite codimension. Here
+\begin{equation} N(x) := H(x) - \12 \lr \Aun x,x\rr\end{equation}
+is a convex function, and
+\begin{equation} N(x) \le \12 \lr \lr \Bun - \Aun\rr x,x\rr + c\ \ \ \fa x\
+.\end{equation}
+
+\begin{proposition} Assume $H'(0)=0$ and $ H(0)=0$. Set:
+\begin{equation} \de := \liminfu_{x\to 0} 2 N (x) \lss x\rss^{-2}\ .
+\label{eq:one}
+\end{equation}
+
+If $\gamma < - \lambda < \de$, the solution $\ol u$ is non-zero:
+\begin{equation} \ol x (t) \ne 0\ \ \ \fa t\ .\end{equation}
+\end{proposition}
+\begin{proof} Condition (\ref{eq:one}) means that, for every $\de ' >
+\de$, there is some $\ep > 0$ such that
+\begin{equation} \lss x\rss \le \ep \Rightarrow N (x) \le {\de '\ov 2} \lss x\rss^2\
+.\end{equation}
+
+It is an exercise in convex analysis, into which we shall not go, to
+show that this implies that there is an $\eta > 0$ such that
+\begin{equation} f\lss x\rss \le \eta \Rightarrow N^\ast (y) \le {1\ov 2\de '} \lss
+y\rss^2\ .\label{eq:two}\end{equation}
+
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white eagle and
+a white horse on a snow field}
+\end{figure}
+
+Since $u_1$ is a smooth function, we will have $\lss hu_1\rss_\un \le
+\eta$ for $h$ small enough, and inequality (\ref{eq:two}) will hold,
+yielding thereby:
+\begin{equation} \psi (hu_1) \le {h^2\ov 2} {1\ov \lambda} \lss u_1 \rss_2^2 + {h^2\ov 2}
+{1\ov \de '} \lss u_1\rss^2\ .\end{equation}
+
+If we choose $\de '$ close enough to $\de$, the quantity $\lr {1\ov \lambda}
++ {1\ov \de '}\rr$ will be negative, and we end up with
+\begin{equation} \psi (hu_1) < 0\ \ \ \ \ \for\
+\ h\ne 0\ \ {\rm small}\ .\end{equation}
+
+On the other hand, we check directly that $\psi (0) = 0$. This shows
+that 0 cannot be a minimizer of $\psi$, not even a local one. So $\ol u
+\ne 0$ and $\ol u \ne \Lai_o^{-1} (0) = 0$. \qed
+\end{proof}
+\begin{corollary} Assume $H$ is $C^2$ and $\lr \aun
+,\bun\rr$-subquadratic at infinity. Let
+$\xi_1,\allowbreak\dots,\allowbreak\xi_N$ be the
+equilibria, that is, the solutions of $H' (\xi ) = 0$. Denote by $\om_k$
+the smallest eigenvalue of $H'' \lr \xi_k\rr$, and set:
+\begin{equation} \om : = \Min \lg \om_1 , \dots , \om_k\rg\ .\end{equation}
+If:
+\begin{equation} {T\ov 2\pi} \bun < - E \lb - {T\ov 2\pi}\aun\rb < {T\ov
+2\pi}\om\label{eq:three}\end{equation}
+then minimization of $\psi$ yields a non-constant $T$-periodic solution
+$\ol x$.\end{corollary}
+
+We recall once more that by the integer part $E [\al ]$ of $\al \in
+\RR$, we mean the $a\in \ZZ$ such that $a< \al \le a+1$. For instance,
+if we take $\aun = 0$, Corollary 2 tells us that $\ol x$ exists and is
+non-constant provided that:
+
+\begin{equation} {T\ov 2\pi} \bun < 1 < {T\ov 2\pi}\end{equation}
+or
+\begin{equation} T\in \lr {2\pi\ov \om},{2\pi\ov \bun}\rr\ .
+\label{eq:four}\end{equation}
+
+\begin{proof} The spectrum of $\Lai$ is ${2\pi\ov T} \ZZ +\aun$. The
+largest negative eigenvalue $\lambda$ is given by ${2\pi\ov T}k_o +\aun$,
+where
+\begin{equation} {2\pi\ov T}k_o + \aun < 0\le {2\pi\ov T} (k_o +1) + \aun\
+.\end{equation}
+Hence:
+\begin{equation} k_o = E \lb - {T\ov 2\pi} \aun\rb \ .\end{equation}
+
+The condition $\gamma < -\lambda < \de$ now becomes:
+\begin{equation} \bun - \aun < - {2\pi\ov T} k_o -\aun < \om -\aun\end{equation}
+which is precisely condition (\ref{eq:three}).\qed
+\end{proof}
+
+\begin{lemma} Assume that $H$ is $C^2$ on $\RRn \sm \{ 0\}$ and
+that $H'' (x)$ is non-de\-gen\-er\-ate for any $x\ne 0$. Then any local
+minimizer $\tx$ of $\psi$ has minimal period $T$.\end{lemma}
+\begin{proof} We know that $\tx$, or $\tx + \xi$ for some constant $\xi
+\in \RRn$, is a $T$-periodic solution of the Hamiltonian system:
+\begin{equation} \dx = JH' (x)\ .\end{equation}
+
+There is no loss of generality in taking $\xi = 0$. So $\psi (x) \ge
+\psi (\tx )$ for all $\tx$ in some neighbourhood of $x$ in $W^{1,2} \lr
+\RR / T\ZZ ; \RRn\rr$.
+
+But this index is precisely the index $i_T (\tx )$ of the $T$-periodic
+solution $\tx$ over the interval $(0,T)$, as defined in Sect.~2.6. So
+\begin{equation} i_T (\tx ) = 0\ .\label{eq:five}\end{equation}
+
+Now if $\tx$ has a lower period, $T/k$ say, we would have, by Corollary
+31:
+\begin{equation} i_T (\tx ) = i_{kT/k}(\tx ) \ge ki_{T/k} (\tx ) + k-1 \ge k-1 \ge
+1\ .\end{equation}
+
+This would contradict (\ref{eq:five}), and thus cannot happen.\qed
+\end{proof}
+\paragraph{Notes and Comments.} The results in this section are a
+refined version of \cite{clar:eke}; the minimality result of Proposition
+14 was the first of its kind.
+
+To understand the nontriviality conditions, such as the one in formula
+(\ref{eq:four}), one may think of a one-parameter family $x_T$, $T\in
+\lr 2\pi\om^{-1}, 2\pi \bun^{-1}\rr$ of periodic solutions, $x_T (0) =
+x_T (T)$, with $x_T$ going away to infinity when $T\to 2\pi \om^{-1}$,
+which is the period of the linearized system at 0.
+
+\begin{table}
+\caption[ ]{Observational results from NGC 4827}
+\begin{flushleft}
+\renewcommand{\arraystretch}{1.2}
+\begin{tabular}{llllllllllllll}
+\hline
+ & & \multicolumn{3}{l}{RA (1950)} &\ & \multicolumn{3}{l}{Dec (1950)}
+ & $S$ & Pol & \% & $\log P$\\
+\cline{3-5}\cline{7-9}
+ & &(h) &(m) & (s) & & (\degr) & (\arcmin) & (\arcsec)
+ & (mJy) & (mJy) & & (W Hz$^{-1}$)\\
+\hline
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \\
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \\
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \\
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+\end{table}
+\begin{theorem} [(Ghoussoub-Preiss)] Assume $H(t,x)$ is
+$(0,\ep )$-subquadratic at
+infinity for all $\ep > 0$, and $T$-periodic in $t$
+\begin{equation} H (t,\bullet )\ \ \ \ \ {\rm is\ convex}\ \ \fa t\end{equation}
+\begin{equation} H (\bullet ,x)\ \ \ \ \ {\rm is}\ \ T{\rm -periodic}\ \ \fa x
+\end{equation}
+\begin{equation} H (t,x)\ge n\lr \lss x\rss\rr\ \ \ \ \ {\rm with}\ \ n (s)s^{-1}\to
+\un\ \ {\rm as}\ \ s\to \un\end{equation}
+\begin{equation} \fa \ep > 0\ ,\ \ \ \exists c\ :\ H(t,x) \le {\ep\ov 2}\lss x\rss^2 +
+c\ .\end{equation}
+
+Assume also that $H$ is $C^2$, and $H'' (t,x)$ is positive definite
+everywhere. Then there is a sequence $x_k$, $k\in \NN$, of $kT$-periodic
+solutions of the system
+\begin{equation} \dx = JH' (t,x)\end{equation}
+such that, for every $k\in \NN$, there is some $p_o\in\NN$ with:
+\begin{equation} p\ge p_o\Rightarrow x_{pk} \ne x_k\ .
+\end{equation}
+\qed
+\end{theorem}
+\begin{example} [{\rm(External forcing)}] Consider the system:
+\begin{equation} \dx = JH' (x) + f(t)\end{equation}
+where the Hamiltonian $H$ is $\lr 0,\bun\rr$-subquadratic, and the
+forcing term is a distribution on the circle:
+\begin{equation} f = {d\ov dt} F + f_o\ \ \ \ \ {\rm with}\ \ F\in L^2 \lr \RR / T\ZZ
+; \RRn\rr\ ,\end{equation}
+where $f_o : = T^{-1}\int_o^T f (t) dt$. For instance,
+\begin{equation} f (t) = \sum_{k\in \NN} \de_k \xi\ ,\end{equation}
+where $\de_k$ is the Dirac mass at $t= k$ and $\xi \in \RRn$ is a
+constant, fits the prescription. This means that the system $\dx = JH'
+(x)$ is being excited by a series of identical shocks at interval $T$.
+\end{example}
+\begin{definition} Let $A_\un (t)$ and $B_\un (t)$ be symmetric
+operators in $\RRn$, depending continuously on $t\in [0,T]$, such that
+$A_\un (t) \le B_\un (t)$ for all $t$.
+
+A Borelian function $H: [0,T]\times \RRn \to \RR$ is called $\lr A_\un
+,B_\un\rr$-{\it subquadratic at infinity} if there exists a function
+$N(t,x)$ such that:
+\begin{equation} H (t,x) = \12 \lr A_\un (t) x,x\rr + N(t,x)\end{equation}
+\begin{equation} \fa t\ ,\ \ \ N(t,x)\ \ \ \ \ {\rm is\ convex\ with\ respect\ to}\
+\ x\end{equation}
+\begin{equation} N(t,x) \ge n\lr \lss x\rss\rr\ \ \ \ \ {\rm with}\ \ n(s)s^{-1}\to
++\un\ \ {\rm as}\ \ s\to +\un\end{equation}
+\begin{equation} \exists c\in \RR\ :\ \ \ H (t,x) \le \12 \lr B_\un (t) x,x\rr + c\ \
+\ \fa x\ .\end{equation}
+
+If $A_\un (t) = a_\un I$ and $B_\un (t) = b_\un I$, with $a_\un \le
+b_\un \in \RR$, we shall say that $H$ is $\lr a_\un
+,b_\un\rr$-subquadratic at infinity. As an example, the function $\lss x
+\rss^\al$, with $1\le \al < 2$, is $(0,\ep )$-subquadratic at infinity
+for every $\ep > 0$. Similarly, the Hamiltonian
+\begin{equation} H (t,x) = \12 k \lss k\rss^2 +\lss x\rss^\al\end{equation}
+is $(k,k+\ep )$-subquadratic for every $\ep > 0$. Note that, if $k<0$,
+it is not convex.
+\end{definition}
+
+\paragraph{Notes and Comments.} The first results on subharmonics were
+obtained by Rabinowitz in \cite{rab}, who showed the existence of
+infinitely many subharmonics both in the subquadratic and superquadratic
+case, with suitable growth conditions on $H'$. Again the duality
+approach enabled Clarke and Ekeland in \cite{clar:eke:2} to treat the
+same problem in the convex-subquadratic case, with growth conditions on
+$H$ only.
+
+Recently, Michalek and Tarantello (see \cite{mich:tar} and \cite{tar})
+have obtained lower bound on the number of subharmonics of period $kT$,
+based on symmetry considerations and on pinching estimates, as in
+Sect.~5.2 of this article.
+
+\begin{thebibliography}{MT1}
+\bibitem[CE1]{clar:eke} Clarke, F., Ekeland, I.: Nonlinear oscillations
+and
+boundary-value problems for Hamiltonian systems. Arch. Rat. Mech. Anal.
+{\bf 78} (1982) 315--333
+\bibitem[CE2]{clar:eke:2} Clarke, F., Ekeland, I.: Solutions
+p\'eriodiques, du
+p\'eriode donn\'ee, des \'equations hamiltoniennes. Note CRAS Paris {\bf
+287} (1978) 1013--1015
+\bibitem[MT1]{mich:tar} Michalek, R., Tarantello, G.: Subharmonic
+solutions with
+prescribed minimal period for nonautonomous Hamiltonian systems. J.
+Diff. Eq. {\bf 72} (1988) 28--55
+\bibitem[Ta1]{tar} Tarantello, G.: Subharmonic solutions for Hamiltonian
+systems via a $\bbbz_p$ pseudoindex theory. Annali di Matematica Pura
+(to appear)
+\bibitem[Ra1]{rab} Rabinowitz, P.: On subharmonic solutions of a
+Hamiltonian
+system. Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+\end{thebibliography}
+\end{document}
diff --git a/macros/plain/contrib/jns/jnsl.doc b/macros/plain/contrib/jns/jnsl.doc
new file mode 100644
index 0000000000..0e4e7801b9
--- /dev/null
+++ b/macros/plain/contrib/jns/jnsl.doc
@@ -0,0 +1,1162 @@
+% This is JNSL.DOC the documentation file of
+% the LaTeX macro package from Springer-Verlag
+% for the Journal of Nonlinear Science
+% version of 16 July 1990
+\documentstyle[jnsldoc]{jns}
+%
+\newfont{\titelfont}{cmr10 scaled 1728}
+\newfont{\titelbffont}{cmbx10 scaled 2074}
+\newfont{\titelbigfont}{cmr10 scaled 2488}
+\markboth{Style File for Authors Coding with \LaTeX{}}{Style File
+for Authors Coding with \LaTeX{}}
+%
+\begin{document}
+\thispagestyle{empty}
+\begin{flushleft}
+{\titelbffont Style File}\\[6pt]
+{\titelbffont for Authors Coding with \LaTex{}}\\[2cm]
+\end{flushleft}
+\rule{\textwidth}{1pt}
+\vspace{2pt}
+\begin{flushright}
+\begin{tabular}{@{}l}
+{\titelbigfont The Journal of}\\[9pt]
+{\titelbigfont Nonlinear Science}\\[10pt]
+\end{tabular}
+\end{flushright}
+\rule{\textwidth}{1pt}
+\vfill
+\begin{flushright}
+\begin{tabular}{@{}l}
+{\titelfont Springer-Verlag}\\[5pt]
+{\titelfont New \kern-4pt York Berlin Heidelberg Tokyo}\\[5pt]
+{\titelfont London Paris Hong \kern-3pt Kong}
+\end{tabular}
+\end{flushright}
+\newpage
+%
+\section*{For further information please contact us:}
+%
+\begin{flushleft}
+\begin{tabular}{l@{\quad}l@{\hspace{3mm}}l}
+$\bullet$ & \multicolumn{2}{l}{\bf Springer-Verlag New \kern-3pt
+York}\\[0.5mm]
+ & \multicolumn{2}{l}{Springer-Verlag New \kern-2pt York, 175 Fifth
+ Avenue,}\\
+ & & New \kern-2pt York, New \kern-2pt York 10010
+ USA\\[0.5mm]
+ & Telex: & 232235\\
+ & Fax: & (212)437-6272\\
+ & Editorial: & (Mon--Fr; preferably between 9 a.m.
+ and 4 p.m. --\\
+ & & Eastern Standard Time)\\
+ & & Telephone (212)460-1565\\
+ & net-address: & TROWBRIDGE@COMPUSERVE.COM\\[1mm]
+$\bullet$ & \multicolumn{2}{l}{\bf Springer-Verlag Heidelberg}\\[1mm]
+ & \multicolumn{2}{l}{Springer-Verlag, Postfach 105280, D-6900 Heidelberg
+ 1, FRG}\\[0.5mm]
+ & DATEX-P dial: & FRG 456 221 4305\\
+ & & If you do not yet have an account, press RETURN\\
+ & & when asked for your name; then simply leave a message.\\
+ & & The file name should be your name and country\\
+ & & or state, e.g.\ smith-texas\\
+ & Telex: & 461723\\
+ & Telefax: & (06221)43982\\
+ & Editorial: & (Mon--Fr; preferably between 9 a.m.\\
+ & & and 4 p.m. -- European local time)\\
+ & & Telephone (0049)(0)6221-487534\\
+ & \multicolumn{2}{l}{\TeX{}nical and \LaTeX{}nical information
+ (Mon--Fri; preferably between}\\
+ & & 9 a.m. and 1 p.m. -- European local time):\\
+ & & Telephone (0049)(0)6221-487478\\
+ &bitnet/EARN:& SPRINGER@DHDSPRI6
+\end{tabular}
+\end{flushleft}
+\rule{\textwidth}{1pt}
+%
+\section*{Mailing address for your disk/magnetic tape and output:}
+%
+\begin{quote}
+Springer-Verlag New \kern-2pt York, Inc.\\
+175 Fifth Avenue\\
+New \kern-2pt York, New \kern-2pt York 10010 USA
+\end{quote}
+The following formats are acceptable: 5.25$^{\prime\prime}$ diskette
+MS-DOS, 5.25$^{\prime\prime}$ CP/M, 3.5$^{\prime\prime}$ diskette
+MS-DOS, 3.5$^{\prime\prime}$ diskette Apple MacIntosh, 9-track 1600
+bpi magnetic tape VAX/VMS, 9-track 1600 bpi magnetic tape ANSI with
+label, 9-track 1600 bpi magnetic tape, SUN-Streamer Tape.
+
+Once you have completed your work using this macro package,
+please submit your own printout of the {\it final
+version together with the disk or magnetic tape}, containing your
+\LaTeX{} input (source) file und the final DVI-file and make sure
+that the text is {\it identical in both cases.}
+
+Contributions coded with \LaTeX{} but not with the JNS style, cannot be
+accepted for electronic processing; they will be typeset in the
+conventional way.
+%
+\newpage
+\tableofcontents
+\newpage
+%
+\section{Introduction}
+%
+Authors wishing to code their contribution
+for the
+\begin{center}
+{\it Journal of Nonlinear Science,}
+\end{center}
+with \LaTeX{}, as well as those who have already coded with \LaTeX{},
+will be provided with a style file that will give the text the
+desired layout. Authors are requested to
+adhere strictly to these instructions; {\it the style
+file must not be changed}.
+
+The text output area is automatically set within an area of
+12.2\,cm horizontally and 19.4\,cm vertically, excluding
+running heads.
+
+If you are already familiar with \LaTeX{}, then the
+JNS style file should not give you any major difficulties.
+This style file will change the layout to the required JNS style
+(it will for instance define the layout of \verb|\section|).
+We had to invent some extra commands,
+which are not provided by \LaTeX{} (e.g.\
+\verb|\institute|, see also Sect.\,\ref{contbegin})
+
+For the main body of the paper (the text) you
+should use the commands of the standard \LaTeX{} ``article'' style.
+Even if you are familiar with those commands, we urge you to read
+this entire documentation thoroughly. It contains many suggestions on
+how to use our commands properly; thus your paper
+will be formatted exactly to JNS standard.
+For the input of the references at the end of your contribution,
+please follow our instructions given in Sect.\,\ref{refer} References.
+
+The majority of these hints are not specific for JNS; they may improve
+your use of \LaTeX{} in general.
+Furthermore, the documentation provides suggestions about the proper
+editing and use
+of the input files (capitalization, abbreviation etc.) (see
+Sect.\,\ref{refedit} How to Edit Your Input File).
+%
+\section{How to Proceed}
+%
+Please insert the enclosed diskette or tape into your computer. You will
+find the following files:
+\begin{flushleft}
+\begin{tabular}{@{}p{2.5cm}l}
+{\it jnsl.doc} & General instructions (this document),\\
+ & {\it jnsl.doc} means jns latex.documentation\\
+{\it jnsl.dem} & An example showing how to code the text\\
+{\it jns.sty} & Style file to invoke \LaTeX{}
+\end{tabular}
+\end{flushleft}
+You have to run each file twice with: \verb|latex file.name|.
+%
+\subsection{How to Invoke the JNS Style File}
+%
+The JNS style file is an adaptation of the \LaTeX{} ``article'' style.
+Therefore you may use all ``article'' style commands to prepare your
+manuscript.
+JNS style is invoked by replacing ``article'' by ``jns'' in the first
+line of your document:
+\begin{verbatim}
+\documentstyle{jns}|
+%
+\begin{document}
+ <Your contribution>
+\end{document}
+\end{verbatim}
+%
+\subsection{Contributions Already Coded with \protect\LaTeX{} without
+the JNS Style File}
+%
+If your file is already coded with \LaTeX{} you can easily
+adapt it a posteriori to JNS style. Contributions submitted
+to us in \LaTeX{} but not adapted to JNS style,
+cannot be accepted for electronic processing; they will be typeset
+in the conventional way.
+
+Please refrain from using any \LaTeX{} or \TeX{} commands
+that affect the layout or formatting of your document (i.e. commands
+like \verb|\textheight|, \verb|\vspace|, \verb|\hoffset| etc.).
+There may nevertheless be exceptional occasions on which to
+use some of them.
+
+The JNS style has been carefully designed to produce the right layout
+from your \LaTeX{} input. If there is anything specific you would like
+to do and for which the style file does not provide a command,
+{\em please contact us.\/}
+%
+\section{General Rules for Coding Formulas}
+%
+With mathematical formulas you may proceed as described
+in Sect.\,3.3 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport (1986), Addison-Wesley Publishing
+Company, Reading, Mass.
+
+Equations are automatically numbered sequentially throughout
+your contribution using arabic numerals in parentheses on the right-hand side.
+
+When you are working in math mode everything is typeset in italics.
+Sometimes you need to insert non-mathematical elements (e.g.\
+words or phrases). Such insertions should be coded in roman
+(with \verb|\mbox|) as illustrated in the following example:
+\begin{flushleft}
+{\it Sample Input}
+\end{flushleft}
+\begin{verbatim}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr \enspace .
+\end{equation}
+\end{verbatim}
+{\it Sample Output}
+\begin{equation}
+ \left(\frac{a^{2} + b^{2}}{c^{3}} \right) = 1 \quad
+ \mbox{ if } c\neq 0 \mbox{ and if } a,b,c\in \bbbr \enspace .
+\end{equation}
+
+If you wish to start a new paragraph immediately after a displayed
+equation, insert a blank line so as to produce the required
+indentation. If there is no new paragraph either do not insert
+a blank line or code \verb|\noindent| immediately before
+continuing the text. Titles have no end punctuation.
+
+Please punctuate a displayed equation in the same way as other
+ordinary text but with an \verb|\enspace| before end punctuation.
+
+Note that the sizes of the parentheses or other delimiter
+symbols used in equations should ideally match the height of the
+formulas being enclosed. This is automatically taken care of by
+the following \LaTeX{} commands:\\[2mm]
+\verb|\left(| or \verb|\left[| and
+\verb|\right)| or \verb|\right]|.
+%
+\subsection{Italic and Roman Type in Math Mode}
+%
+\begin{alpherate}
+\item
+In math mode \TeX{} and \LaTeX{} treat all letters as though they
+were mathematical or physical variables, hence they are typeset in
+italics. However, for certain components of formulas, like short texts,
+this would be incorrect and therefore coding in roman is required.
+Roman should also be used for
+subscripts and superscripts {\it in formulas\/} where these are
+merely labels and not in themselves variables,
+e.g.\ $T_{\rm eff}$ \ not \ $T_{eff}$,
+$T_{\rm K}$ \ not \ $T_K$ (K = Kelvin),
+$m_{\rm e}$ \ not \ $m_e$ (e = electron).
+However, do not code for roman
+if the sub/superscripts represent variables,
+e.g.\ $\sum_{i=1}^{n} a_{i}$.
+\item
+Please ensure that {\em physical units\/} (e.g.\ pc, erg s$^{-1}$
+K, cm$^{-3}$, W m$^{-2}$ Hz$^{-1}$, m kg s$^{-2}$ A$^{-2}$) and
+{\it abbreviations} such as Ord, Var, GL, SL, sgn, const.\
+are always set in roman type. To ensure
+this use the \verb|\rm| command: \verb|{\rm Hz}|.
+On p.\ 46 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport you will find the names of
+common mathe\-matical functions, such as log, sin, exp, max and sup.
+These should be coded as \verb|\log|,
+\verb|\sin|, \verb|\exp|, \verb|\max|, \verb|\sup|
+and will appear in roman.
+\item
+Chemical symbols and formulas should be coded for roman,
+e.g.\ Fe not $Fe$, H$_2$O not {\em H$_2$O\/}.
+\item
+Familiar foreign words and phrases, e.g.\ et al.,
+a priori, in situ, brems\-strah\-lung, eigenvalues should not be
+italicized.
+\end{alpherate}
+%
+\section{How to Edit Your Input (Source) File}
+\label{refedit}
+%
+\subsection{Headings}
+%
+All words in headings should be capitalized except for
+conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+%
+\subsection{Capitalization and Non-capitalization}
+%
+\begin{alpherate}
+\item
+The following should always be capitalized:
+\begin{itemize}
+\item
+Headings (see preceding Sect.\,4.1)
+\item
+Abbreviations and expressions
+in the text such as Fig(s)., Table(s), Sect(s)., Chap(s).,
+Theorem, Corollary, Definition etc. when used with numbers, e.g.\
+Fig.\,3, Table\,1, Theorem 2.
+\end{itemize}
+Please follow the special rules in Sect.\,4.3 for referring to equations.
+\item
+The following should {\it not\/} be capitalized:
+\begin{itemize}
+\item
+The words figure(s), table(s), equation(s),
+theorem(s) in the text when used without an accompanying number
+\item
+Figure legends and table captions except for names and
+abbreviations.
+\end{itemize}
+\end{alpherate}
+%
+\subsection{Abbreviation of Words}
+%
+\begin{alpherate}
+\item
+The following {\it should} be abbreviated
+when they appear in running text {\it
+unless\/} they come at the beginning of a sentence: Chap., Sect., Fig.;
+e.g.\ The results are depicted in Fig.\,5. Figure 9 reveals that \dots .\\
+{\it Please note\/}: Equations should usually be referred to solely by their
+number in parentheses: e.g.\ (14). However, when the reference comes at the
+beginning of a sentence, the unabbreviated word ``Equation''
+should be used: e.g.\ Equation (14) is very important. However, (15)
+makes it clear that \dots .
+\item
+If abbreviations of names or concepts are used
+throughout the text, they should be defined at first occurrence,
+e.g.\ Plurisubharmonic (PSH) Functions, Strong Optimization (SOPT)
+Problem.
+\end{alpherate}
+%
+\section{How to Code the Beginning of Your Contribution}
+\label{contbegin}
+%
+The title of your contribution should be coded as follows:
+\begin{verbatim}
+\title{<Your contribution title>}
+\end{verbatim}
+All words in titles should be capitalized except for
+conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+Titles have no end punctuation.
+
+If a long \verb|\title| must be divided please use the
+code \verb|\\| (for new line).\\[6mm]
+Now the name(s) of the authors(s) must be given:
+\begin{verbatim}
+\author{<author(s) name(s)>}
+\end{verbatim}
+Numbers referring to different addresses are
+to be attached to each author.
+If you have done this correctly, the entry now reads, for example:
+\begin{verbatim}
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+\end{verbatim}
+The first name\footnote{Other initials are optional
+and may be inserted if this is the usual
+way of writing your name, e.g.\ Alfred J.~Holmes, E.~Henry Green.}
+is followed by the surname.
+
+If there is more than one author, the order is up to you.
+However, if there are more than two authors, you must separate the names
+by commas. If the authors have different affiliations,
+each name has to be followed by:
+\begin{verbatim}
+\inst{no}
+\end{verbatim}
+\newpage
+Next the address(es) of institute(s), company etc. is (are) required.
+If there is more than one address, the entries are numbered
+automatically with \verb|\and|, in the order in which you type them.
+Please make sure that the numbers match those placed next to
+to the authors' names.
+\begin{verbatim}
+\institute{<name of an institute>
+\and <name of the next institute>
+\and <name of the next institute>}
+\end{verbatim}
+Unlike usual \LaTeX{} the \verb|\and| command is used with the
+\verb|\institute| and not with the \verb|\author| command.
+
+\medskip
+If footnotes are needed in \verb|\title| please code
+(immediately after the word where the footnote
+indicator should be placed):
+\begin{verbatim}
+\thanks{<text>}
+\end{verbatim}
+\verb|\thanks| may only appear in \verb|\title|, \verb|\author|
+and \verb|\institute| (see below) to footnote anything.
+
+\medskip\noindent
+The command
+\begin{verbatim}
+\maketitle
+\end{verbatim}
+formats the complete heading of your article. If you leave
+it out the work done so far will produce {\bf no} text,
+see {\it Sample Input} on p.~\pageref{samppage}.
+%
+\section{How to Code Your Text}
+%
+The contribution title and all headings should be capitalized
+except for conjunctions, prepositions
+(e.g.\ on, of, by, and, or, but, from, with, without, under)
+and definite and indefinite articles (the, a, an) unless they appear at
+the beginning. Formula letters must be typeset as in the text.
+
+Headings will be automatically numbered by the following codes.\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\section{This is a First-Order Title}
+\subsection{This is a Second-Order Title}
+\subsubsection{This is a Third-Order Title.}
+\paragraph{This is a Fourth-Order Title.}
+\end{verbatim}
+\verb|\section| and \verb|\subsection| have no end punctuation.\\
+\verb|\subsubsection| and \verb|\paragraph|
+need to be punctuated at the end.
+
+Note that \verb|\title| and \verb|\author| will create the page
+header (running head), but it may happen that you need to shorten your
+title for the page header, because only one line is allowed (our macro
+will produce an error message whereupon you must provide a shortened
+version of the title for the page header). In this case you should use
+the following coding directly after the coding of \verb|\title|
+or \verb|\author|.
+\begin{verbatim}
+\titlerunning{Abbreviated contribution title}
+\authorrunning{Abbreviated authors}
+\end{verbatim}
+\newpage
+In addition to the above-mentioned headings your text may be structured
+by subsections indicated by run-in headings (theorem-like environments).
+All the theorem-like environments are numbered automatically
+throughout the sections of your file.
+If you call lemma once, this will be numbered 1; if corollary follows,
+this will be numbered 2; if you then call lemma again, this will be
+numbered 3.
+
+But in case you want to reset this counter at 1 in each section,
+please give the document style option \verb|envcountreset|:
+\begin{verbatim}
+\documentstyle[envcountreset]{jns}
+\end{verbatim}
+
+\vspace{.5cm}\noindent
+The following possibilities for run-in headings are available:
+\begin{flushleft}
+\verb|\begin{lemma} Text of the lemma \end{lemma}|\quad (see Output
+Sample 1)\\[2mm]
+%
+\verb|\begin{lemma}[additional explanation of lemma] Text of
+lemma \end{lemma}| \quad (see Output Sample 2)\\[2mm]
+%
+\verb|\begin{lemma}(overriding automatic numbering.) Text of the lemma
+\end{lemma}| \quad (see Output Sample 3)\\[2mm]
+%
+\verb|\begin{lemma}(x)[additional explanation of lemma] Text of
+lemma\end{lemma}| \quad (see Output Sample 4)\\[2mm]
+%
+\verb|\begin{lemma}* Text of lemma \end{lemma}| \quad (see Output
+Sample 5)\\[2mm]
+%
+\verb|\begin{lemma}*[additional explanation of lemma] Text of
+lemma\end{lemma}| \quad (see Output Sample 6)
+\end{flushleft}
+%
+\begin{flushleft}
+{\it Output Sample 1}
+\begin{lemma}Text of lemma\end{lemma}
+%
+{\it Output Sample 2}
+\begin{lemma}[additional explanation of lemma] Text of lemma\end{lemma}
+%
+{\it Output Sample 3}
+\begin{lemma}(overriding automatic numbering.) Text of lemma\end{lemma}
+%
+{\it Output Sample 4}
+\begin{lemma}(x)[additional explanation of lemma] Text of lemma\end{lemma}
+%
+{\it Output Sample 5}
+\begin{lemma}* Text of lemma\end{lemma}
+%
+{\it Output Sample 6}
+\begin{lemma}*[additional explanation of lemma] Text of lemma\end{lemma}
+\end{flushleft}
+\newpage
+\noindent
+The following variety of run-in headings are at your disposal:
+\begin{alpherate}
+\item
+{\bf Bold} run-in headings with italicized text
+as built-in environments:
+\begin{verbatim}
+\begin{proposition} <text> \end{proposition}
+\begin{corollary} <text> \end{corollary}
+\begin{lemma} <text> \end{lemma}
+\begin{theorem} <text> \end{theorem}
+\end{verbatim}
+\item
+The following must generally appear as {\it italic} run-in heading:
+\begin{verbatim}
+\begin{proof} <text> \qed \end{proof}
+\end{verbatim}
+\item
+Further {\it italic} or {\bf bold} run-in headings may also occur:
+\begin{verbatim}
+\begin{definition} <text> \end{definition}
+\begin{example} <text> \end{example}
+\begin{remark} <text> \end{remark}
+\begin{exercise} <text> \end{exercise}
+\begin{problem} <text> \end{problem}
+\begin{solution} <text> \end{solution}
+\begin{note} <text> \end{note}
+\begin{question} <text> \end{question}
+\end{verbatim}
+\end{alpherate}
+%
+\subsubsection*{Defining Your Own Environments.}
+%
+You can define additional environments using the command
+\verb|\newstytheorem| which has five parameters. The first is the name
+your environment should have (e.g.\ \verb|conjecture|).
+After this follows the
+font family used for this heading (please use only \verb|\bf| for bold
+or \verb|\it| for italic) and the font family to use for the text of
+this new environment (e.g.\ \verb|\it| or \verb|\rm|). Then the name of
+an already known environment should be given in brackets (e.g.\
+\verb|[theorem]|). Your new environment will be numbered like the old
+one. Finally comes the real text of the new run-in heading (e.g.\
+\verb|Conjecture|).\\
+Sample definition:
+\begin{verbatim}
+\newstytheorem{conjecture}{\bf}{\it}[theorem]{Conjecture}
+\end{verbatim}
+\newstytheorem{conjecture}{\bf}{\it}[theorem]{Conjecture}
+Use of that definition:
+\begin{verbatim}
+\begin{conjecture} <text> \end{conjecture}
+\end{verbatim}
+e.g.
+\begin{verbatim}
+\begin{conjecture} It is clear that ...\end{conjecture}
+\end{verbatim}
+Its output:
+\begin{conjecture}
+It is clear that \dots
+\end{conjecture}
+\newpage
+%
+\noindent
+{\it Sample Input}
+\label{samppage}
+\begin{verbatim}
+\title{Hamiltonian Mechanics}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'{e} de Paris-Sud,
+Laboratoire d'Analyse Num\'{e}rique, B\^{a}timent 425,\\
+F-91405 Orsay Cedex, France}
+
+\maketitle
+%
+\section{Fixed-Period Problems: The Sublinear Case}
+%
+With this chapter, the preliminaries are over, and we begin the
+search for periodic solutions \dots
+%
+\subsection{Autonomous Systems}
+%
+In this section we will consider the case when the Hamiltonian
+$H(x)$ \dots
+%
+\subsubsection*{The General Case: Nontriviality.}
+%
+We assume that $H$ is
+$\left(A_{\infty}, B_{\infty}\right)$-subqua\-dra\-tic
+at infinity, for some constant \dots
+%
+\paragraph{Notes and Comments.}
+The first results on subharmonics were \dots
+%
+\begin{proposition}
+Assume $H'(0)=0$ and $ H(0)=0$. Set \dots
+\end{proposition}
+\begin{proof}[of proposition]
+Condition (8) means that, for every $\delta'>\delta$, there is
+some $\varepsilon>0$ such that \dots \qed
+\end{proof}
+%
+\begin{example}[\rm (External forcing)]
+Consider the system \dots
+\end{example}
+\begin{corollary}
+Assume $H$ is $C^{2}$ and
+$\left(a_{\infty}, b_{\infty}\right)$-subquadratic
+at infinity. Let \dots
+\end{corollary}
+\begin{lemma}
+Assume that $H$ is $C^{2}$ on $\bbbr^{2n}\backslash \{0\}$
+and that $H''(x)$ is \dots
+\end{lemma}
+\begin{theorem}[(Ghoussoub-Preiss)]
+Let $X$ be a Banach Space and $\Phi:X\to\bbbr$ \dots
+\end{theorem}
+\begin{definition}
+We shall say that a $C^{1}$ function $\Phi:X\to\bbbr$
+satisfies \dots
+\end{definition}
+\end{verbatim}
+{\it Sample Output\/} (follows on the next page together with
+examples of the above run-in headings)
+%
+\setcounter{theorem}{0}
+\title{Hamiltonian Mechanics}
+
+\author{Ivar Ekeland\inst{1} and Roger Temam\inst{2}}
+
+\institute{Princeton University, Princeton NJ 08544, USA
+\and
+Universit\'{e} de Paris-Sud,
+Laboratoire d'Analyse Num\'{e}rique, B\^{a}timent 425,\\
+F-91405 Orsay Cedex, France}
+
+\maketitle
+%
+\section*{1 \ Fixed-Period Problems: The Sublinear Case}
+%
+With this chapter, the preliminaries are over, and we begin the search
+for periodic solutions \dots
+%
+\subsection*{1.1 \ Autonomous Systems}
+%
+In this section we will consider the case when the Hamiltonian
+$H(x)$ \dots
+%
+\subsubsection*{The General Case: Nontriviality.}
+%
+We assume that $H$ is
+$\left(A_{\infty}, B_{\infty}\right)$-subqua\-dra\-tic at
+infinity, for some constant \dots
+%
+\paragraph{Notes and Comments.}
+The first results on subharmonics were \dots
+%
+\begin{proposition}
+Assume $H'(0)=0$ and $ H(0)=0$. Set \dots
+\end{proposition}
+\begin{proof}[of proposition]
+Condition (8) means that, for every $\delta'>\delta$, there is
+some $\varepsilon>0$ such that \dots \qed
+\end{proof}
+%
+\begin{example}[\rm (External forcing)]
+Consider the system \dots
+\end{example}
+\begin{corollary}
+Assume $H$ is $C^{2}$ and
+$\left(a_{\infty}, b_{\infty}\right)$-subquadratic
+at infinity. Let \dots
+\end{corollary}
+\begin{lemma}
+Assume that $H$ is $C^{2}$ on $\bbbr^{2n}\backslash \{0\}$
+and that $H''(x)$ is \dots
+\end{lemma}
+\begin{theorem}[(Ghoussoub-Preiss)]
+Let $X$ be a Banach Space and $\Phi:X\to\bbbr$ \dots
+\end{theorem}
+\begin{definition}
+We shall say that a $C^{1}$ function $\Phi:X\to\bbbr$ satisfies \dots
+\end{definition}
+\newpage
+%
+\markboth{Style File for Authors Coding with \LaTeX{}}{Style File
+for Authors Coding with \LaTeX{}}
+\section{Fine Tuning of the Text}
+%
+The following should be used to improve the readability of the text:
+\begin{flushleft}
+\begin{tabular}{@{}p{.19\textwidth}p{.79\textwidth}}
+\verb|\,| & a thin space, e.g.\ between numbers or between units
+ and num\-bers; a line division will not be made
+ following this space\\
+\verb|--| & en dash; two strokes, without a space at either end\\
+\verb*| -- | & en dash; two strokes, with a space at either end\\
+\verb|-| & hyphen; one stroke, no space at either end\\
+\verb|$-$| & minus, in the text {\em only} \\[8mm]
+{\em Input} & \verb|21\,$^{\circ}$C etc.,|\\
+ & \verb|Dr h.\,c.\,Rockefellar-Smith \dots|\\
+ & \verb|20,000\,km and Prof.\,Dr Mallory \dots|\\
+ & \verb|1950--1985 \dots|\\
+ & \verb|this -- written on a computer -- is now printed|\\
+ & \verb|$-30$\,K \dots|\\[3mm]
+{\em Output} & 21\,$^{\circ}$C etc., Dr h.\,c.\,Rockefellar-Smith \dots\\
+ & 20,000\,km and Prof.\,Dr Mallory \dots\\
+ & 1950--1985 \dots\\
+ & this -- written on a computer -- is now printed\\
+ & $-30$\,K \dots
+\end{tabular}
+\end{flushleft}
+%
+\section {Special Typefaces}
+%
+Normal type (roman) need not be coded. {\it Italic}
+(not {\sl slanted}) or, if necessary, {\bf boldface}
+should be used for emphasis in the text.
+\begin{flushleft}
+\begin{tabular}{@{}p{.19\textwidth}p{.79\textwidth}}
+\verb|{\it Text}| & {\it Italicized Text}\\
+\verb|{\em Text}| & {\em Emphasized Text}\\
+ & {\it If you would like to emphasize a {\em definition} within an
+ italicized text (e.g.\ of a {\em theorem)} you should code the
+ expression to be emphasized by} \verb|\em|.\\
+\verb|{\bf Text}| & {\bf Important Text}\\
+\verb|\vec{Symbol}| & Vectors may only appear in math mode. The default
+ \LaTeX{} vector symbol has been adapted to JNS conventions.\\
+ & \verb|$\vec{A times B\cdot C}| yields $\vec{A\times B\cdot C}$\\
+ & \verb|$\vec{A}^{T} \otimes \vec{B} \otimes \vec{\hat{D}}$|\\
+ & yields $\vec{A}^{T} \otimes \vec{B} \otimes \vec{\hat{D}}$
+\end{tabular}
+\end{flushleft}
+\newpage
+%
+\section {Footnotes}
+%
+Footnotes within the text should be coded:
+\begin{verbatim}
+\footnote{Text}
+\end{verbatim}
+{\it Sample Input}
+\begin{flushleft}
+Text with a footnote\verb|\footnote{The footnote is automatically
+numbered.}| and text continues \dots
+\end{flushleft}
+{\it Sample Output}
+\begin{flushleft}
+Text with a footnote\footnote{The footnote is automatically numbered.}
+and text continues \dots
+\end{flushleft}
+%
+\section {Lists}
+%
+Please code lists as described below:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{enumerate}
+ \item First item
+ \item Second item
+ \begin{enumerate}
+ \item First nested item
+ \item Second nested item
+ \end{enumerate}
+ \item Third item
+\end{enumerate}
+\end{verbatim}
+{\it Sample Output}
+ \begin{enumerate}
+\item First item
+\item Second item
+ \begin{enumerate}
+ \item First nested item
+ \item Second nested item
+ \end{enumerate}
+\item Third item
+\end{enumerate}
+\newpage
+%
+\section {Figures}
+%
+Figure legends should be inserted after (not in)
+the paragraph in which the figure is first mentioned.
+They will be numbered automatically.
+
+{\it The figures\/} (line drawings and those containing halftone inserts
+as well as halftone figures) {\it should not be pasted into your
+laserprinter output}. They should be enclosed separately in camera-ready
+form (original artwork, glossy prints, photographs and/or slides). The
+lettering should be suitable for reproduction, and after reduction the
+height of capital letters should be at least
+1.8\,mm and not more than 2.5\,mm.
+Check that lines and other details are uniformly black and
+that the lettering on figures is clearly legible.
+
+To leave the desired amount of space for the height of
+your figures, please use the coding described below.
+As can be seen in the output, we will automatically
+provide 1\,cm space above and below the figure,
+so that you should only leave the space equivalent to the size of the
+figure itself. Please note that ``\verb|x|'' in the following
+coding stands for the actual height of the figure:
+\begin{verbatim}
+\begin{figure}
+\vspace{x cm}
+\caption[ ]{...text of caption...} (Do type [ ])
+\end{figure}
+\end{verbatim}
+\begin{flushleft}
+{\it Sample Input}
+\end{flushleft}
+\begin{verbatim}
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white
+eagle and a white horse on a snow field}
+\end{figure}
+\end{verbatim}
+\begin{flushleft}
+{\it Sample Output}
+\end{flushleft}
+\begin{figure}
+\vspace{2.5cm}
+\caption{This is the caption of the figure displaying a white eagle and
+a white horse on a snow field}
+\end{figure}
+%
+\section{Tables}
+%
+Table captions should be treated
+in the same way as figure legends, except that
+the table captions appear {\it above} the tables. The tables
+will be numbered automatically.
+%
+\subsection{Tables Coded with \protect\LaTeX{}}
+%
+Please use the following coding:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{table}
+\caption[ ]{Observational results from NGC 4827}
+\begin{flushleft}
+\begin{tabular}{llllllllllllll}
+\hline
+ & & \multicolumn{3}{l}{RA (1950)} &\
+ & \multicolumn{3}{l}{Dec (1950)}
+ & $S$ & Pol & \% & $\log P$\\
+\cline{3-5}\cline{7-9}
+ & &(h) &(m) & (s) & & (\degr)
+ & (\arcmin) & (\arcsec)
+ & (mJy) & (mJy) & & (W Hz$^{-1}$)\\
+\hline
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \\
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \\
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \\
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \\
+\hline
+\end{tabular}
+\end{flushleft}
+\end{table}
+
+Before continuing your text you need an empty line. \dots
+\end{verbatim}
+
+\begin{table}
+\caption[ ]{Observational results from NGC 4827}
+\begin{flushleft}
+\renewcommand{\arraystretch}{1.2}
+\begin{tabular}{llllllllllllll}
+\hline
+ & & \multicolumn{3}{l}{RA (1950)} &\ & \multicolumn{3}{l}{Dec (1950)}
+ & $S$ & Pol & \% & $\log P$\\
+\cline{3-5}\cline{7-9}
+ & &(h) &(m) & (s) & & (\degr) & (\arcmin) & (\arcsec)
+ & (mJy) & (mJy) & & (W Hz$^{-1}$)\\
+\hline
+Core & (5 GHz) & 12 & 54 & 18.0 & & 27 & 26 & 56.2
+ & 8 & & & 21.64 \\
+Total&(327 MHz)& & & & & & &
+ & 210 & & & 23.13 \\
+ &(1.4 GHz)& & & & & & &
+ & 57 & 1.3 & 2 & 22.49 \\
+ & (5 GHz) & & & & & & &
+ & 26 & 0.73 & 3 & 22.15 \\
+\hline
+\end{tabular}
+\renewcommand{\arraystretch}{1}
+\end{flushleft}
+\end{table}
+
+Before continuing your text you need an empty line. \dots
+
+\vspace{3mm}
+For further information you will find a complete description of
+the tabular environment
+on p.~63~ff. and p.~182 of the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport.
+%
+\subsection{Tables Not Coded with \protect\LaTeX{}}
+%
+If you do not wish to code your table using \LaTeX{}
+but prefer to have it reproduced separately,
+proceed as for figures and use the following coding:\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+\begin{table}
+\caption{text of your caption}
+\vspace{x cm} % the actual height needed for your table
+\end{table}
+\end{verbatim}
+%
+\subsection{Signs and Characters}
+%
+\subsubsection*{Special Signs.}
+%
+You may need to use special signs. The available ones are listed in the
+{\em \LaTeX{} User's Guide \& Reference Manual\/} by Leslie Lamport,
+pp.~44\,ff.
+We have created further symbols for math mode (enclosed in \$):
+\begin{center}
+\begin{tabular}{l@{\hspace{1em}yields\hspace{1em}}
+c@{\hspace{3em}}l@{\hspace{1em}yields\hspace{1em}}c}
+\verb|\grole| & $\grole$ & \verb|\getsto| & $\getsto$\\
+\verb|\lid| & $\lid$ & \verb|\gid| & $\gid$
+\end{tabular}
+\end{center}
+%
+\subsubsection*{Gothic (Fraktur).}
+%
+If gothic letters are {\it necessary}, please use those of the
+relevant \AmSTeX{} alphabet which are available from the
+American Mathematical Society.
+
+In \LaTeX{} only the following gothic letters are
+available: \verb|$\Re$| yields $\Re$ and \verb|$\Im$| yields $\Im$.
+These should {\it not\/} be used when you need gothic letters for your
+contribution. Use \AmSTeX{} gothic as explained above.
+For the real and the imaginary parts of a complex number within math mode
+you should use instead: \verb|$\rm Re$| (which yields Re) or
+\verb|$\rm Im$| (which yields Im).
+%
+\subsubsection*{Script.}
+%
+For script capitals use the coding
+\begin{center}
+\begin{tabular}{l@{\hspace{1em}which yields\hspace{1em}}c}
+\verb|$\cal AB$| & $\cal AB$
+\end{tabular}
+\end{center}
+(see p.~43 of the \LaTeX{} book).
+%
+\subsubsection*{Special Roman.}
+%
+If you need other symbols than those below, you could use
+the blackboard bold characters of \AmSTeX{}, but there might arise
+capacity problems
+in loading additional \AmSTeX{} fonts. Therefore we created
+the blackboard bold characters listed below.
+\begin{flushleft}
+\begin{tabular}{@{}ll@{ yields }
+c@{\hspace{1.1em}}ll@{ yields }c}
+\verb|\bbbc| & (complex numbers) & $\bbbc$
+ & \verb|\bbbf| & (blackboard bold F) & $\bbbf$\\
+\verb|\bbbh| & (blackboard bold H) & $\bbbh$
+ & \verb|\bbbk| & (blackboard bold K) & $\bbbk$\\
+\verb|\bbbm| & (blackboard bold M) & $\bbbm$
+ & \verb|\bbbn| & (natural numbers N) & $\bbbn$\\
+\verb|\bbbp| & (blackboard bold P) & $\bbbp$
+ & \verb|\bbbq| & (rational numbers) & $\bbbq$\\
+\verb|\bbbr| & (real numbers) & $\bbbr$
+ & \verb|\bbbs| & (blackboard bold S) & $\bbbs$\\
+\verb|\bbbt| & (blackboard bold T) & $\bbbt$
+ & \verb|\bbbz| & (whole numbers) & $\bbbz$\\
+\verb|\bbbone| & (symbol one) & $\bbbone$
+\end{tabular}
+\end{flushleft}
+\begin{displaymath}
+\begin{array}{c}
+\bbbc^{\bbbc^{\bbbc}} \otimes
+\bbbf_{\bbbf_{\bbbf}} \otimes
+\bbbh_{\bbbh_{\bbbh}} \otimes
+\bbbk_{\bbbk_{\bbbk}} \otimes
+\bbbm^{\bbbm^{\bbbm}} \otimes
+\bbbn_{\bbbn_{\bbbn}} \otimes
+\bbbp^{\bbbp^{\bbbp}}\\[2mm]
+\otimes
+\bbbq_{\bbbq_{\bbbq}} \otimes
+\bbbr^{\bbbr^{\bbbr}} \otimes
+\bbbs^{\bbbs_{\bbbs}} \otimes
+\bbbt^{\bbbt^{\bbbt}} \otimes
+\bbbz \otimes
+\bbbone^{\bbbone_{\bbbone}}
+\end{array}
+\end{displaymath}
+%
+\subsubsection*{Sans Serif.}
+%
+Using our macros you can also choose this font family;
+use the command \verb|\sf| for {\sf sans serif}
+(like \verb|\it| for {\it italic style}).
+%
+\section{References}
+\label{refer}
+%
+There are three reference systems available; only one, of course,
+should be used for your contribution. With each system (by author-year,
+by number only or by letter-number) a reference list
+containing all citations in the
+text, should be included at the end of your contribution placing the
+\LaTeX{} environment \verb|thebibliography| there.
+For an overall information on that environment
+see the {\em \LaTeX{} User's Guide \& Reference
+Manual\/} by Leslie Lamport, p.~73.
+%
+\subsection{Author-Year System}
+%
+References are cited in the text by name and year in parentheses
+and should look as follows:
+(Smith 1970, 1980), (Ekeland et al. 1985, Theorem 2), (Jones and Jaffe
+1986; Farrow 1988, Chap.\,2). If the name is part of the sentence
+only the year may appear in parentheses,
+e.g.\ Ekeland et al. (1985, Sect.\,2.1)
+The reference list should contain all citations occurring in the text,
+ordered alphabetically by surname (with initials following). If there
+are several works by the same author(s) the references should be listed
+in the appropriate order indicated below:
+\begin{alpherate}
+\item
+One author: list works chronologically;
+\item
+Author and same co-author(s): list works chronologically;
+\item
+Author and different co-authors: list works alphabetically
+according to co-authors.
+\end{alpherate}
+If there are several works by the same author(s) and in the same year,
+but which are cited separately, they should be distinguished by
+the use of ``a'', ``b'' etc., e.g.\ (Smith 1982a), (Ekeland et al. 1982b).
+%
+\subsubsection*{How to Code Author-Year System.}
+%
+If you want to use this system you have to specify in \verb|documentstyle|
+the option \verb|[citeauthoryear]|, like:
+\begin{verbatim}
+\documentstyle[citeauthoryear]{jns}
+\end{verbatim}
+Write your citations in the
+text explicitly except for the year, leaving that up to \LaTeX{} with the
+\verb|\cite| command. Then give only the appropriate year as the optional
+argument (i.e. the label in square brackets) with the \verb|\bibitem|
+command(s).\\[2mm]
+{\it Sample Input}
+\begin{verbatim}
+The results in this section are a refined version
+of Clarke and Ekeland (\cite{clar:eke}); the minimality result of
+Proposition~14 was the first of its kind.
+\end{verbatim}
+The above input produces the citation: ``\dots\ refined version of
+Clarke and Ekeland (1982); the minimality\dots''. Then the
+\verb|\bibitem|
+entry of the \verb|thebibliography| environment should read:
+\begin{verbatim}
+\begin{thebibliography}{} % (do not forget {})
+..
+..
+\bibitem[1982]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+..
+..
+\end{thebibliography}
+\end{verbatim}
+{\it Sample Output}
+\bibauthoryear
+%
+\subsection{References by Letter-Number or by Number Only}
+%
+References are cited in the text -- using the \verb|\cite|
+command of \LaTeX{} -- by number or by letter-number in square
+brackets, e.g.\ [1] or [E1, S2], [P1], according to your use of the
+\verb|\bibitem| command in the \verb|thebibliography| environment. The
+coding is as follows: if you choose your own label for the sources by
+giving an optional argument to the \verb|\bibitem| command the citations
+in the text are marked with the label you supplied. Otherwise a simple
+numbering is done.
+\begin{verbatim}
+The results in this section are a refined version
+of \cite{clar:eke}; the minimality result of Proposition~14
+was the first of its kind.
+\end{verbatim}
+The above input produces the citation: ``\dots\ refined version of
+[CE1]; the min\-i\-mality\dots''. Then the \verb|\bibitem| entry of
+the \verb|thebibliography| environment should read:
+\begin{verbatim}
+\begin{thebibliography}{MT1}
+..
+..
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+..
+..
+\end{thebibliography}
+\end{verbatim}
+The complete bibliography looks like this:
+%
+\begin{thebibliography}{MT1}
+%
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and
+boundary-value problems for Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+%
+\bibitem[CE2]{clar:eke:2}
+Clarke, F., Ekeland, I.:
+Solutions p\'{e}riodiques, du
+p\'{e}riode donn\'{e}e, des \'{e}quations hamiltoniennes.
+Note CRAS Paris {\bf 287} (1978) 1013--1015
+%
+\bibitem[MT1]{mich:tar}
+Michalek, R., Tarantello, G.:
+Subharmonic solutions with prescribed minimal
+period for nonautonomous Hamiltonian systems.
+J. Diff. Eq. {\bf 72} (1988) 28--55
+%
+\bibitem[Ta1]{tar}
+Tarantello, G.:
+Subharmonic solutions for Hamiltonian
+systems via a $\bbbz_{p}$ pseudoindex theory.
+Annali di Matematica Pura (to appear)
+%
+\bibitem[Ra1]{rab}
+Rabinowitz, P.:
+On subharmonic solutions of a Hamiltonian system.
+Comm. Pure Appl. Math. {\bf 33} (1980) 609--633
+\end{thebibliography}
+%
+\subsubsection*{Number-Only System.}
+%
+For this system do not use the optional argument
+in the \verb|\bibitem| command: then, only numbers will
+appear for the citations in the text (enclosed in square brackets)
+as well as for the marks in your
+bibliography (here the number is only end-punctuated without
+square brackets).
+\begin{verbatim}
+\begin{thebibliography}{1}
+\bibitem[CE1]{clar:eke}
+Clarke, F., Ekeland, I.:
+Nonlinear oscillations and boundary-value problems for
+Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+\end{thebibliography}
+\end{verbatim}
+%
+\end{document}
diff --git a/macros/plain/contrib/jns/jnsldoc.sty b/macros/plain/contrib/jns/jnsldoc.sty
new file mode 100644
index 0000000000..a925c7d774
--- /dev/null
+++ b/macros/plain/contrib/jns/jnsldoc.sty
@@ -0,0 +1,39 @@
+% This is JNSLDOC.STY the modification of the
+% JNS style file for the documentation of
+% the LaTeX macro package from Springer-Verlag
+% for the Journal of Nonlinear Science
+% version of 16 July 1990
+\def\LaTex{{\xxvpt
+\def\psc{\@getfont\psc\scfam\@xxvpt{\@mcsc\@magscale5}}\LaTeX}}
+\def\textfontii{\the\textfont\tw@}
+\def\AmSTeX{{\textfontii A}\kern-.1667em\lower.5ex\hbox
+ {\textfontii M}\kern-.125em{\textfontii S}-\TeX}
+%
+\def\degr{\hbox{$^\circ$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+%
+\renewcommand{\labelitemi}{--}
+\newenvironment{alpherate}%
+{\renewcommand{\labelenumi}{\alph{enumi})}\begin{enumerate}}%
+{\end{enumerate}\renewcommand{\labelenumi}{enumi}}
+%
+\def\bibauthoryear{\begingroup
+\def\thebibliography##1{\section*{References}%
+ \small\list{}{\settowidth\labelwidth{}\leftmargin\parindent
+ \itemindent=-\parindent
+ \labelsep=\z@
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus -.07em}%
+ \sloppy
+ \sfcode`\.=1000\relax}%
+ \def\@cite##1{##1}%
+ \def\@lbibitem[##1]##2{\item[]\if@filesw
+ {\def\protect####1{\string ####1\space}\immediate
+ \write\@auxout{\string\bibcite{##2}{##1}}}\fi\ignorespaces}%
+\begin{thebibliography}{}
+\bibitem[1982]{clar:eke} Clarke, F., Ekeland, I.: Nonlinear
+oscillations and boundary-value problems for Hamiltonian systems.
+Arch. Rat. Mech. Anal. {\bf 78} (1982) 315--333
+\end{thebibliography}
+\endgroup}
diff --git a/macros/plain/contrib/js-misc/History b/macros/plain/contrib/js-misc/History
new file mode 100644
index 0000000000..dfa7bbf787
--- /dev/null
+++ b/macros/plain/contrib/js-misc/History
@@ -0,0 +1,25 @@
+plain/js-misc/History 30 Jul 95 -*- Indented-Text -*-
+---------------------------------------------------------------------------
+
+
+ deutsch.tex uses german.sty. (With babel 3.5, germanb.sty
+ cannot be used with plain TeX any more.) [1]
+
+
+Version 1.3 07 May 95
+
+ xfig.tex handles \SetFigFont variants (from transfig versions
+ 2.1 & 3.1) automatically.
+
+
+Version 1.2 17 Apr 95
+
+ Typo in sperr.tex prevented it from working.
+
+ Don't allocate registers in xfig.tex globally, to allow
+ reading it several times in a group.
+
+
+Version 1.1 16 Mar 95
+
+ First public release.
diff --git a/macros/plain/contrib/js-misc/INSTALL b/macros/plain/contrib/js-misc/INSTALL
new file mode 100644
index 0000000000..540e67301c
--- /dev/null
+++ b/macros/plain/contrib/js-misc/INSTALL
@@ -0,0 +1,65 @@
+$Id: INSTALL,v 1.1 1995/03/16 01:18:22 schrod Exp $
+------------------------------------------------------------
+
+These instructions are written for the installation of this package on
+a TDS-compliant TeX system. (TDS is the forthcoming standard for TeX
+installations, refer to ftp.th-darmstadt.de:/pub/tex/TDS-compliant/draft/
+for more information.) If you don't have such a system, you have to
+figure out your directory names yourself.
+
+If you're on a Unix system and want to use make for installation, read
+further. Otherwise skip forward to ``MANUAL INSTALLATION''.
+
+
+------------------------------------------------------------
+INSTALLATION BY MAKE:
+
+Edit the Makefile and adapt the values of the following variables to
+your system. Sorry, but the values are not collected at the top of the
+Makefile, use your editor to locate them. (The Makefile is generated
+by Imake, I don't touch it... :-)
+
+ MAKEDIR [Default: mkdir -p]
+ A command to create a directory, including all
+ non-existent intermediate ones.
+
+ DESTDIR [Default is empty]
+ This is a prefix that's prepended in front of all
+ destination directories, in case your installation
+ structure is somewhere else than your run-time
+ location.
+
+ INSTALL [Default depends on the machine I generated the distribution]
+ A BSD install program.
+ If you have a System V Unix, and you have X11, you can
+ use a script named bsdinst.sh or bsdinst or
+ install.sh that's located your X11 bin directory.
+ If you don't have a BSD install program, you must use
+ the manual installation, described below.
+
+ TEXMF [Default: /usr/local/lib/texmf]
+ The root of your (TDS) TeX tree.
+
+Now, type "make install" and everything should be OK.
+
+
+
+------------------------------------------------------------
+MANUAL INSTALLATION:
+
+
+The Imakefile features definitions that look like
+InstallTeX<category>(<package>,<files>).
+
+Copy all <files> to a directory that is appropriate for this
+<category> and this <package>. (The <category> `Generic' denotes macro
+files that can be used with many TeX formats, including plain TeX,
+LaTeX, and AmS-TeX.)
+ The TDS directory names are $TEXMF/tex/<category>/<package>/,
+where $TEXMF is your TDS root directory and <category> is
+all-lowercase.
+
+
+------------------------------------------------------------
+# LocalWords: tex MAKEDIR DESTDIR bsdinst sh usr lib texmf Imakefile AmS
+# LocalWords: InstallTeX
diff --git a/macros/plain/contrib/js-misc/Imakefile b/macros/plain/contrib/js-misc/Imakefile
new file mode 100644
index 0000000000..4592d64acc
--- /dev/null
+++ b/macros/plain/contrib/js-misc/Imakefile
@@ -0,0 +1,96 @@
+XCOMM $Id: Imakefile,v 1.5 1995/05/28 00:30:55 schrod Exp $
+/* ---------------------------------------------------------------------- */
+
+/*
+ * Imakefile for plain TeX macro package `js-misc'
+ *
+ * (history at end)
+ */
+
+
+/* needed modules */
+#include <install/TeX.imk>
+#include <makeprog.imk>
+#include <TeX.imk>
+
+XCOMM ------------------------------------------------------------
+XCOMM continue in Imakefile
+
+
+/*
+ * The plain TeX package `js-misc' consists of the following macro files:
+ *
+ * cassette -- Labels for audio cassettes
+ * deutsch -- German texts with plain TeX
+ * idverb -- Verbatim identifiers a la WEB
+ * names.sty -- Logos
+ * schild -- Make a label (for doors, books, etc.)
+ * sperr -- Letterspace text (but don't steel sheep...)
+ * xfig -- Incorporate xfig output in plain TeX documents
+ */
+
+#ifdef ITI_Site
+ DESTDIR = /archives/tex/Install
+#endif
+
+InstallTeXPlain(js-misc,cassette.tex deutsch.tex idverb.tex \
+ schild.tex sperr.tex xfig.tex)
+InstallTeXGeneric(misc,names.sty)
+InstallTeXDoc(plain,js-misc.dvi)
+
+
+MpDoc2TeXTarget(deutsch,tex)
+MpDoc2TeXTarget(idverb,tex)
+
+TeXTarget(ftex,js-misc)
+
+
+/*
+ * creating a source-distribution of this macro package
+ */
+
+TeXFileTarget(tex,deutsch,doc)
+TeXFileTarget(tex,idverb,doc)
+
+export:: deutsch.dvi idverb.dvi
+ $(MAKE) all
+ $(RM) *.log
+
+/* This will get a module, too. */
+export::
+ touch site.imk
+ $(MAKE) Makefile IMAKE_INCLUDES=-I.
+ $(RM) -r site.imk Makefile.bak
+ cp $(HOME)/Notes/Copying.gpl License
+ pwd=`pwd` ; pwd=`suffix $$pwd /` ; cd .. ; \ @@\
+ gtar -czvf $$pwd.tar.gz \ @@\
+ --exclude=CVS --exclude=.cvsignore $$pwd ; \ @@\
+ cp $$pwd/README $$pwd.README
+
+
+/* ============================================================
+ *
+ * $Log: Imakefile,v $
+ * Revision 1.5 1995/05/28 00:30:55 schrod
+ * On export, exclude CVS files by gtar options, not be removing
+ * them. Do also export the README file.
+ *
+ * Revision 1.4 1995/04/16 23:21:04 schrod
+ * Moved itinames.sty & TH viscards to plain-iti package.
+ *
+ * Revision 1.3 1995/03/16 02:22:12 schrod
+ * Export also DVI versions of DOC files.
+ *
+ * Revision 1.2 1995/03/16 01:17:45 schrod
+ * Use TeX module.
+ * Add export target.
+ *
+ * Revision 1.1 1995/03/13 23:18:09 schrod
+ * Started to manage this package with CVS. Made minor code cleanup.
+ *
+
+ * ------------------------------------------------------------
+ * Local Variables:
+ * mode: Indented-Text
+ * End:
+ */
diff --git a/macros/plain/contrib/js-misc/License b/macros/plain/contrib/js-misc/License
new file mode 100644
index 0000000000..a43ea2126f
--- /dev/null
+++ b/macros/plain/contrib/js-misc/License
@@ -0,0 +1,339 @@
+ 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/plain/contrib/js-misc/Makefile b/macros/plain/contrib/js-misc/Makefile
new file mode 100644
index 0000000000..492717b770
--- /dev/null
+++ b/macros/plain/contrib/js-misc/Makefile
@@ -0,0 +1,288 @@
+# Makefile generated by imake - do not edit!
+# $XConsortium: imake.c,v 1.91 95/01/12 16:15:47 kaleb Exp $
+
+# $ITI: Imake.tmpl,v 1.5 1995/01/24 17:48:12 schrod Exp $
+#----------------------------------------------------------------------
+# Makefile generated from "Imake.tmpl" and <Imakefile>
+#
+# Top level imake template of `Imake module edition'.
+#
+
+default: all
+
+# ======================================================================
+# MIT & XFree configuration files
+# $ITI: MIT-config.imk,v 1.3 1994/12/19 19:16:35 schrod Exp $
+
+# -------------------------------------------------------------------------
+# site-specific configuration parameters that need to come before
+# the platform-specific parameters - edit site.def to change
+
+# $ITI: site.def,v 1.7 1995/03/27 14:41:35 herr Exp $
+#
+# ITI site definitions
+#
+# starting from original MIT version
+
+# site: $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
+
+# -------------------------------------------------------------------------
+# platform-specific configuration parameters - edit x386.cf to change
+
+# $ITI: x386.cf,v 1.3 1994/06/30 17:03:54 schrod Exp $
+# $XFree86: mit/config/x386.cf,v 2.44 1994/04/16 04:20:56 dawes Exp $
+# platform: $XConsortium: x386.cf,v 1.7 91/08/16 19:30:10 gildea Exp $
+
+# operating system: Linux
+
+# -------------------------------------------------------------------------
+# site-specific configuration parameters that go after
+# the platform-specific parameters - edit site.def to change
+
+# $ITI: site.def,v 1.7 1995/03/27 14:41:35 herr Exp $
+#
+# ITI site definitions
+#
+# starting from original MIT version
+
+# site: $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
+
+ KMEMGROUP = kmem
+
+# ======================================================================
+# Imake template with basic definitions
+# $ITI: Base.imk,v 1.5 1994/11/28 20:57:37 schrod Exp $
+
+ LOCALDIR = /usr/local
+
+# ------------------------------------------------------------
+# Imake template for operations on files
+# $ITI: files.imk,v 1.5 1994/12/02 19:46:44 schrod Exp $
+
+ COPYIF = copyif
+ CPP = /lib/cpp
+ LN = ln -s
+ MAKEDIR = mkdir -p
+ MV = mv
+ RM = /bin/rm -f
+
+
+
+# ------------------------------------------------------------
+# Imake template for use of imake & makedepend
+# $ITI: imake.imk,v 1.9 1995/06/30 16:29:13 schrod Exp $
+
+
+
+ IMAKE = imake
+
+ IMAKE_STD_OPTIONS =
+ IMAKE_STD_INCLUDES = -I$(LOCALDIR)/lib/imake
+ IMAKE_STD_DEFINES =
+
+ IMAKE_FLAGS = $(IMAKE_OPTIONS) $(IMAKE_EXTRA_OPTIONS) $(IMAKE_STD_OPTIONS) $(IMAKE_INCLUDES) $(IMAKE_EXTRA_INCLUDES) $(IMAKE_STD_INCLUDES) $(IMAKE_DEFINES) $(IMAKE_EXTRA_DEFINES) $(IMAKE_STD_DEFINES)
+
+
+
+ MAKE = make
+ SHELL = /bin/sh
+
+
+
+ TOPDIR = .
+ CURDIR = .
+ THISDIR = `basename $(CURDIR)`
+
+ MAKEOVERRIDES =
+
+
+
+depend::
+ touch .dependdummy
+ $(DEPEND) $(DEPENDFLAGS) -s "# DO NOT DELETE" .dependdummy
+ $(RM) .dependdummy
+
+ DEPEND = makedepend
+ DEPENDFLAGS =
+
+
+
+ SUBDIRS =
+
+###########################################################################
+# start of Imakefile
+
+# $Id: Imakefile,v 1.5 1995/05/28 00:30:55 schrod Exp $
+
+# ======================================================================
+# Imake template for installation of TeX files
+# $ITI: TeX.imk,v 1.2 1995/03/14 12:55:51 schrod Exp $
+
+# ======================================================================
+# Imake template for software installation
+# $ITI: install.imk,v 1.2 1995/03/14 12:56:05 schrod Exp $
+
+ DESTDIR =
+
+ INSTALL = install
+ INSTALL_OWNER = $(USER)
+ INSTALL_GROUP = `id -gn`
+
+ INSTALL_DATA_RIGHTS = 644
+ INSTALL_PROGRAM_RIGHTS = 755
+ INSTALL_SCRIPT_RIGHTS = 755
+
+ TEXMF = /usr/local/lib/texmf
+
+# ======================================================================
+# Imake template for MAKEPROG, the Literate Documentation system
+# $ITI: makeprog.imk,v 1.2 1995/03/14 12:55:29 schrod Exp $
+
+ MP_DOC2TEX = doc2tex
+ MP_TEX2DOC = tex2doc
+
+# ======================================================================
+# Imake template for TeX & friends
+# $ITI: TeX.imk,v 1.1 1995/03/14 19:40:12 schrod Exp $
+
+ TEX_IT = tex-it
+
+# ------------------------------------------------------------
+# continue in Imakefile
+
+install::
+ $(MAKEDIR) $(DESTDIR)/$(TEXMF)/tex/plain/js-misc
+ @test "cassette.tex deutsch.tex idverb.tex schild.tex sperr.tex xfig.tex" -o "cassette.tex deutsch.tex idverb.tex schild.tex sperr.tex xfig.tex" = "NullParameter" && \
+ for file in cassette.tex deutsch.tex idverb.tex schild.tex sperr.tex xfig.tex '' ; \
+ do if [ empty$$file != empty ] ; \
+ then (set -x; $(INSTALL) -c -o $(INSTALL_OWNER) -g $(INSTALL_GROUP) -m $(INSTALL_DATA_RIGHTS) $$file $(DESTDIR)/$(TEXMF)/tex/plain/js-misc) ; \
+ fi ; \
+ done || \
+ exit 0
+
+install::
+ $(MAKEDIR) $(DESTDIR)/$(TEXMF)/tex/generic/misc
+ @test "names.sty" -o "names.sty" = "NullParameter" && \
+ for file in names.sty '' ; \
+ do if [ empty$$file != empty ] ; \
+ then (set -x; $(INSTALL) -c -o $(INSTALL_OWNER) -g $(INSTALL_GROUP) -m $(INSTALL_DATA_RIGHTS) $$file $(DESTDIR)/$(TEXMF)/tex/generic/misc) ; \
+ fi ; \
+ done || \
+ exit 0
+
+install::
+ $(MAKEDIR) $(DESTDIR)/$(TEXMF)/doc/plain
+ @test "js-misc.dvi" -o "js-misc.dvi" = "NullParameter" && \
+ for file in js-misc.dvi '' ; \
+ do if [ empty$$file != empty ] ; \
+ then (set -x; $(INSTALL) -c -o $(INSTALL_OWNER) -g $(INSTALL_GROUP) -m $(INSTALL_DATA_RIGHTS) $$file $(DESTDIR)/$(TEXMF)/doc/plain) ; \
+ fi ; \
+ done || \
+ exit 0
+
+deutsch.tex: deutsch.doc
+ $(MP_DOC2TEX) deutsch.doc deutsch.tex
+
+all:: deutsch.tex
+
+clean::
+ $(RM) deutsch.tex
+
+idverb.tex: idverb.doc
+ $(MP_DOC2TEX) idverb.doc idverb.tex
+
+all:: idverb.tex
+
+clean::
+ $(RM) idverb.tex
+
+all:: js-misc.dvi
+
+js-misc.dvi: js-misc.tex
+ $(TEX_IT) ftex js-misc.tex
+
+clean::
+ $(RM) js-misc.dvi js-misc.log js-misc.aux js-misc.toc js-misc.blg
+
+realclean::
+ $(RM) js-misc.bbl
+
+deutsch.dvi: deutsch.doc
+ $(TEX_IT) tex deutsch.doc
+
+clean::
+ $(RM) deutsch.dvi deutsch.log deutsch.aux deutsch.toc deutsch.blg
+
+realclean::
+ $(RM) deutsch.bbl
+
+idverb.dvi: idverb.doc
+ $(TEX_IT) tex idverb.doc
+
+clean::
+ $(RM) idverb.dvi idverb.log idverb.aux idverb.toc idverb.blg
+
+realclean::
+ $(RM) idverb.bbl
+
+export:: deutsch.dvi idverb.dvi
+ $(MAKE) all
+ $(RM) *.log
+
+export::
+ touch site.imk
+ $(MAKE) Makefile IMAKE_INCLUDES=-I.
+ $(RM) -r site.imk Makefile.bak
+ cp $(HOME)/Notes/Copying.gpl License
+ pwd=`pwd` ; pwd=`suffix $$pwd /` ; cd .. ; \
+ gtar -czvf $$pwd.tar.gz \
+ --exclude=CVS --exclude=.cvsignore $$pwd ; \
+ cp $$pwd/README $$pwd.README
+
+# -------------------------------------------------------------------------
+# common rules for all Makefiles - do not edit
+
+Makefile::
+ @if [ -f Makefile ]; \
+ then set -x; \
+ $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
+ else set -x; fi ; \
+ $(IMAKE) $(IMAKE_FLAGS) -DImakeTopDir=$(TOPDIR) -DImakeCurrentDir=$(CURDIR); \
+ set +x
+
+Makefiles::
+ @case "$(MAKEFLAGS)" in *[ik]*) set +e;; esac; \
+ case "$(TOPDIR)" in \
+ /?*) newtop=$(TOPDIR) ;; \
+ *) newtop=../$(TOPDIR) ;; \
+ esac; \
+ test "$(SUBDIRS)" -o "$(SUBDIRS)" = "NullParameter" && \
+ for d in $(SUBDIRS) '' ; \
+ do if [ empty$$d != empty ] ; \
+ then echo "making Makefiles in $(CURDIR)/$$d ..."; \
+ $(MAKE) subdirMakefiles SUBDIR=$$d TOPDIR=$$newtop CURDIR=$(CURDIR)/$$d ; \
+ fi ; \
+ done || \
+ exit 0
+
+subdirMakefiles::
+ @cd $(SUBDIR) ; \
+ if [ -f Makefile ]; \
+ then set -x; \
+ $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
+ else set -x; fi ; \
+ $(IMAKE) $(IMAKE_FLAGS) -DImakeTopDir=$(TOPDIR) -DImakeCurrentDir=$(CURDIR); \
+ set +x ; \
+ $(MAKE) Makefiles
+
+clean::
+ $(RM) $(CLEAN_EXTRA_FILES) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut "#"*
+
+# -------------------------------------------------------------------------
+# default rules for Imakefiles that do not generate them - do not edit
+
+all::
+
+# -------------------------------------------------------------------------
+# dependencies generated by makedepend
+
diff --git a/macros/plain/contrib/js-misc/README b/macros/plain/contrib/js-misc/README
new file mode 100644
index 0000000000..14e8bf3f5c
--- /dev/null
+++ b/macros/plain/contrib/js-misc/README
@@ -0,0 +1,45 @@
+$Id: README,v 1.2 1995/05/07 16:58:21 schrod Exp $
+------------------------------------------------------------
+
+
+The plain/js-misc package collects some small miscellaneous plain TeX
+macros I wrote and use quite regularly. You'll find a complete list of
+the package's macro files at the start of Imakefile.
+
+In my opinion, of particular importance are
+
+ idverb.tex Typesetting verbatim by |...|
+ xfig.tex Typeset figures created by xfig (transfig, actually)
+
+There does not exist a user manual for most macros. A German
+description of two minor macro files (cassette.tex & schild.tex) is
+available in js-misc.{tex,dvi}. Other DVI files in this distribution
+feature explanations of specific macro files, typically with
+implementation info as well. The rest has user documentation at the
+top of the macro files, as comments.
+
+For installation instructions, check the file INSTALL.
+
+
+Reference anonymous ftp site:
+ ftp.th-darmstadt.de [130.83.47.112]
+ directory pub/tex/plain
+ file js-misc-<version>.tar.gz
+ where <version> is the current version number
+ (a gzipped tar file)
+
+CTAN directory:
+ macros/plain/contrib/js-misc/
+ version info is in file History
+
+
+Enjoy,
+ Joachim
+
+--
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Joachim Schrod Email: schrod@iti.informatik.th-darmstadt.de
+Computer Science Department
+Technical University of Darmstadt, Germany
+
+
diff --git a/macros/plain/contrib/js-misc/TODO b/macros/plain/contrib/js-misc/TODO
new file mode 100644
index 0000000000..dc42a352ab
--- /dev/null
+++ b/macros/plain/contrib/js-misc/TODO
@@ -0,0 +1,2 @@
+
+------------------------------------------------------------
diff --git a/macros/plain/contrib/js-misc/cassette.tex b/macros/plain/contrib/js-misc/cassette.tex
new file mode 100644
index 0000000000..828260153b
--- /dev/null
+++ b/macros/plain/contrib/js-misc/cassette.tex
@@ -0,0 +1,166 @@
+% $Id: cassette.tex,v 1.2 1995/03/16 01:17:54 schrod Exp $
+%--------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% Put into public domain.
+
+
+\catcode`\@=11
+
+\font\norm=cmss8
+\font\intfont=cmssi8
+\font\titfont@page=cmcsc10 scaled 800
+\font\titfont=cmss10
+\font\titintfont=cmssi10
+\font\cassfont=cmcsc10
+
+\newdimen\colwidth \colwidth=50 true mm
+\newdimen\backheight \backheight=10 true mm
+\newdimen\titheight \titheight=14 true mm
+\newdimen\pagheight \pagheight=66 true mm
+
+\def\@seite#1{%
+ \global\setbox\@page=\vbox{\hsize=\colwidth
+ \everypar={\global\hangindent=1em }%
+ \vskip \tw@\p@
+ #1\endgraf
+ \vfil
+ }%
+ }
+
+\def\cnt#1:{[#1]}
+\def\von#1:{{\intfont #1\/}:\penalty -100 } % <== Space!
+\def\nl{\hfill\break}
+
+\def\@titel#1{%
+ \global\setbox\@title=\vbox{\hsize=\colwidth
+ \let\intfont=\titintfont % Font fuer Interpret
+ \vfill
+ \unvbox\@title
+ \titfont #1\endgraf
+ \vfill
+ }%
+ {\titfont@page
+ \def\von##1:{\uppercase{##1}:\penalty -100 }% % <== Space!
+ #1%
+ }}
+
+
+\newbox\@seitea
+\newbox\@seiteb
+\newbox\@titela
+\newbox\@titelb
+\def\seitea{\let\@page=\@seitea \let\titel=\titela \obeylines \@seite}
+\def\seiteb{\let\@page=\@seiteb \let\titel=\titelb \obeylines \@seite}
+\def\titela{\let\@title=\@titela \@titel}
+\def\titelb{\let\@title=\@titelb \@titel}
+
+\def\titelcass#1{%
+ \global\setbox\@titela=\vbox{\hsize=\colwidth
+ \vfill
+ \unvbox\@titela
+ \titfont #1\endgraf
+ \vfill
+ }%
+ }
+
+
+
+
+\def\begincassette#1{%
+ \def\cassname{#1}%
+ \setbox\@seitea\vbox{\hrule width\colwidth height\z@ depth\z@ \vfil}%
+ \setbox\@seiteb\vbox{\hrule width\colwidth height\z@ depth\z@ \vfil}%
+ \setbox\@titela\vbox{\hrule width\colwidth height\z@ depth\z@ \vfil}%
+ \setbox\@titelb\vbox{\hrule width\colwidth height\z@ depth\z@ \vfil}%
+ \splittopskip\baselineskip
+ }
+
+\newif\if@text@left@
+\def\endcassette{%
+ \hbox{%
+ \vrule
+ \vbox{%
+ \hrule
+ \vbox to \backheight{\hsize2\colwidth \advance\hsize by 4.4\p@
+ \vfill
+ \centerline{\cassfont \cassname}%
+ \vfill
+ }%
+ \hrule
+ \col{\titheight}{@titel}%
+ \hrule
+ \loop
+ \global\@text@left@false
+ \one@page
+ \if@text@left@ \repeat
+ }%
+ \vrule
+ }%
+ }
+\def\one@page{%
+ \col{\pagheight}{@seite}%
+ \hrule
+ }%
+\def\col#1#2{%
+ \hbox{%
+ \hskip \p@
+ \split@col{#2a}{#1}%
+ \hskip \p@
+ \vrule
+ \hskip \p@
+ \split@col{#2b}{#1}%
+ \hskip \p@
+ }%
+ }
+\def\split@col#1#2{%
+ \expandafter \ifvoid \csname #1\endcsname
+ \vbox to #2{\hrule width\colwidth height\z@ depth\z@ \vfil}%
+ \else
+ \vbox to #2{\hsize\colwidth
+ \setbox\z@ \vsplit \csname #1\endcsname to #2\relax
+ \unvbox\z@
+ \vskip 2pt plus 1fil minus 2pt
+ }%
+ \expandafter \ifvoid \csname #1\endcsname
+ \else \global\@text@left@true
+ \fi
+ \fi
+ }
+
+
+\norm \baselineskip=9pt \lineskip=0pt \lineskiplimit=0pt
+\parindent=\z@ \parskip=\tw@\p@ minus \tw@\p@
+\rightskip=\z@ plus 0.7\colwidth \linepenalty=100
+\r@ggedbottomtrue
+\frenchspacing
+\nopagenumbers
+
+
+\endinput
+
+
+
+% ============================================================
+%
+% $Log: cassette.tex,v $
+% Revision 1.2 1995/03/16 01:17:54 schrod
+% Support for magnified typesetting.
+% Might be more changes as well, they looked sensible.
+%
+% Revision 1.1 1995/03/13 23:18:10 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+
+%
+% Pre-CVS Log:
+%
+% 87-09-20 js Initial revision
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Local Variables:
+mode: plain-TeX
+TeX-master: t
+TeX-brace-indent-level: 4
+End:
diff --git a/macros/plain/contrib/js-misc/deutsch.doc b/macros/plain/contrib/js-misc/deutsch.doc
new file mode 100644
index 0000000000..8285a980c3
--- /dev/null
+++ b/macros/plain/contrib/js-misc/deutsch.doc
@@ -0,0 +1,329 @@
+% $Id: deutsch.doc,v 1.4 1995/07/30 13:23:56 schrod Exp $
+%----------------------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% This file is distributed without any copyright restriction.
+
+%
+% deutsch.doc -- typeset German documents with plain TeX.
+%
+% [TeX in MAKEPROG]
+% (history at end)
+
+
+\input progdoc
+
+\input names.sty
+\def\babel{{\sf babel}}
+
+
+
+\title{Typesetting German Documents with Plain \TeX{}}
+
+
+
+\chap Introduction.
+
+There are several defencies of plain \TeX{} if used for German
+documents:
+
+\item{---} Mappings of national characters (`umlauts' and `sharp~s')
+to macros or to other character codes (if special fonts are available)
+are missing.
+
+\item{---} \TeX{} produces lots of overfull hboxes for German texts.
+That's because the words there are usually longer than English ones.
+Furthermore we have to use much more hyphenation for German texts than
+for English ones, narrow typesetting is more important than few
+hyphenations. In particular, words with umlauts are not hyphenated
+often anyhow, even with the `multiple-word' approach from |german.sty|.
+
+\item{---} It is typographic usage that between compound words
+ligatures are not built. Plain~\TeX{} has no easy, readable way to
+provide this.
+
+\noindent This file does the according definitions. They are quite
+often only a kludge. But it is hard to make the restrictions
+disappear, sometimes it is even impossible within the current
+implementation of \TeX{}---and there will never be any other
+implementation. So we must live with these kludges.
+
+
+\sect Of course, there is more to German typesetting. Hyphenation,
+also for words with umlauts and sharp~s, etc. This basic
+functionality is supplied by the \babel{} system and DANTE's
+|german.sty|, we have to load the appropriate module.
+
+There's one problem, though. \babel{}~3.5 defines
+|\DeclareTextSymbol|, a symbol used by |german.sty| to decide if it
+shall use NFSS code to access symbols. But that usage will lead to an
+endless recursion, because some text symbols are defined by
+themselves. I don't know if that problem is caused by \babel{}'s code
+or by its usage in |german.sty| -- turning it off seems to be an
+appropriate fix.
+
+\beginprog
+\let\DeclareTextSymbol\undefined
+\input german.sty
+\endprog
+
+
+\sect 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 control
+sequences. This method is better than to use
+a group because not all macros have to be defined global this way.
+
+\beginprog
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+\catcode`\_=\CatLetter
+\endprog
+
+
+\sect Let's identify this macro file against the user and in the Log file.
+
+\beginprog
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{Support for German documents, $Revision: 1.4 $}
+\endgroup
+\endprog
+
+
+
+\chap National Characters.
+
+By default no extended characters are available, except those defined
+below. I.e., we start to treat all characters from |"7F| to |"FF| as
+invalid characters.
+
+\beginprog
+\count@="7F
+\loop
+ \catcode \the\count@ = \CatInvalid
+ \advance\count@ by 1
+ \ifnum \count@ < "100
+\repeat
+\endprog
+
+
+\sect We provide a command for the definition of non-ASCII characters:
+|\ExtendChar|. A sample definition of an ``Umlaut-a''~(\"a) in the
+extended code of an IBM~PC (hex code~|"84|) is:
+$$
+ |\ExtendChar\^^84: {^^84}{\"a}|
+$$
+First the hex code is given as a control sequence, followed by a
+colon. Afterwards come two parameters, the first is again the hex
+code, the second is the token list which should be used instead of the
+hex code.
+
+The macro definition is rather easy, we just have to make the
+respective character active and bind it to it's new meaning.
+
+\beginprog
+\def\ExtendChar #1:{%
+ \catcode`#1 \CatActive
+ \extend_char
+ }
+\def\extend_char #1#2{%
+ \def #1{#2}%
+ }
+\endprog
+
+
+\sect Now we can define some replacements.
+
+The braces after the control sequences are needed when characters from
+the extended character set are written to an auxiliary file and read
+in later. During the |\write| they are expanded and following white
+space would be gobbled if the braces would not be there.
+
+\beginprog
+% ISO-Latin-1
+\ExtendChar\^^c4: {^^c4}{\"A}
+\ExtendChar\^^d6: {^^d6}{\"O}
+\ExtendChar\^^dc: {^^dc}{\"U}
+\ExtendChar\^^df: {^^df}{\ss{}}
+\ExtendChar\^^e4: {^^e4}{\"a}
+\ExtendChar\^^f6: {^^f6}{\"o}
+\ExtendChar\^^fc: {^^fc}{\"u}
+
+% IBM PC (code page 850)
+\ExtendChar\^^81: {^^81}{\"u}
+\ExtendChar\^^84: {^^84}{\"a}
+\ExtendChar\^^8e: {^^8e}{\"A}
+\ExtendChar\^^94: {^^94}{\"o}
+\ExtendChar\^^99: {^^99}{\"O}
+\ExtendChar\^^9a: {^^9a}{\"U}
+\ExtendChar\^^e1: {^^e1}{\ss{}} % actually \beta, used as \ss in Germany
+
+% Atari ST (like IBM PC, but with a real `sharp~s')
+\ExtendChar\^^9e: {^^9e}{\ss{}}
+\endprog
+
+
+
+\chap Paragraph Breaking.
+
+As outlined in the introduction, we allow longer interword spaces. A
+line now may have a badness up to 2500, over 1500 a warning is to be
+given. Furthermore the penalties for hyphenation are lowered because a
+narrow typesetting is preferred against few hyphenations.
+
+These values are still experimental and should be tuned.
+
+As |german.sty| uses \babel{} compatible structure, the german
+language hook is a good place to store such definitions. But to
+use \babel{}'s convenient macros, too, we have to assure that it's
+kernel code is loaded first.
+
+\beginprog
+\ifx \babel@core@loaded\undefined
+ \input babel.def
+\fi
+\addto\extrasgerman{%
+ \babel@savevariable\tolerance
+ \babel@savevariable\hbadness
+ \babel@savevariable\doublehyphendemerits
+ \babel@savevariable\finalhyphendemerits
+ \babel@savevariable\adjdemerits
+ \tolerance 2500 \hbadness 1500
+ \doublehyphendemerits 50000
+ \finalhyphendemerits 25000
+ \adjdemerits 50000
+ }
+\endprog
+
+
+\sect In some languages ligatures should not appear between compound
+words. We use {\tt \string\|\/} to mark those places. This is only
+done within text mode, in math mode {\tt \string\|\/} is still
+`$\|$'. But it is sure that one can always hyphenate between compound
+words, so we insert |\-|. To allow the hyphenation in other parts of
+the word though, we use |\allowhyphens| again.
+
+\beginprog
+\def\|{% % break open a ligature (if not in math mode)
+ \relax
+ \ifmmode \Vert
+ \else \allowhyphens\-\allowhyphens
+ \fi
+ }
+\endprog
+
+
+\sect Don't use the dreaded `double quote special meaning' stuff of
+|german.sty|. And use original umlauts. Already in M\"unster I voted
+against it\dots
+
+\beginprog
+\addto\extrasgerman{%
+ \mdqoff
+ \umlautlow
+ }
+\endprog
+
+
+\sect Define |\SwitchtoLanguage| for upward compatibility. It does
+not really do the same, the old definition was more similar to
+|\selectlanguage|. But other languages have to be declared
+explicitely, that's not done by this macro file. So we just want to
+make old documents processable.
+
+\beginprog
+\def\SwitchtoLanguage#1{\language \csname l@#1\endcsname}
+\endprog
+
+
+\sect We are finished; switch to german language (to enable the new
+extras defined above), restore the catcodes and prevent from following
+garbage.
+
+\beginprog
+\selectlanguage{german}
+
+\catcode`\@=\CatAtCode
+\catcode`\_=\CatUsCode
+
+\endinput
+\endprog
+
+
+%% \sect {\it Acknowledgements:}\quad I would like to thank XXX
+
+
+\bye
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% $Log: deutsch.doc,v $
+% Revision 1.4 1995/07/30 13:23:56 schrod
+% Discard babel definition of \DeclareTextCommand before including
+% german.sty, they are incompatible.
+%
+% Revision 1.3 1995/07/29 17:58:24 schrod
+% Use german.sty, not germanb.sty. (babel 3.5 is not functional for
+% plain TeX any more.) But we still want to use babel's macros, we have
+% to load it's kernel for that.
+%
+% Revision 1.2 1995/03/13 23:18:10 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+% Revision 1.1 1994/10/16 16:57:30 schrod
+% Merged macros from local.tex, codes.tex, and language.tex. This
+% new file is mainly there to provide upward compatibility for our old
+% documents.
+%
+%
+%
+% pre-CVS Version History:
+%
+% DATE WHO REMARKS
+% 91-01-18 js set all extended characters to code invalid
+% 90-12-23 js added the definition of \ExtendChar for usage in codes.tex.
+% 90-10-06 js renamed from dlocal to local, it's now international,
+% adapted to TeX 3:
+% included codes.tex and langdef.tex if they exist,
+% assumed that language.tex is already loaded,
+% defined German parameters as a language hook,
+% removed first \allowhyphens in \uml@ut,
+% documented it with MAKEPROG.
+% 89-10-27 js was reworked for ILaTeX
+% 89-05-31 js defined \| as a separator for ligatures in text mode
+% 87-10-01 js introduced \protect,
+% set parameters for German page makeup
+% 87-??-?? kg first release
+%
+% kg: Klaus Guntermann <gunterma@<schrod@iti.informatik.th-darmstadt.de>
+% js: Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Local Variables:
+mode: plain-TeX
+TeX-master: t
+TeX-brace-indent-level: 4
+End:
diff --git a/macros/plain/contrib/js-misc/deutsch.dvi b/macros/plain/contrib/js-misc/deutsch.dvi
new file mode 100644
index 0000000000..057f173fc1
--- /dev/null
+++ b/macros/plain/contrib/js-misc/deutsch.dvi
Binary files differ
diff --git a/macros/plain/contrib/js-misc/deutsch.tex b/macros/plain/contrib/js-misc/deutsch.tex
new file mode 100644
index 0000000000..26f3e3719d
--- /dev/null
+++ b/macros/plain/contrib/js-misc/deutsch.tex
@@ -0,0 +1,350 @@
+% $Id: deutsch.doc,v 1.4 1995/07/30 13:23:56 schrod Exp $
+%----------------------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% This file is distributed without any copyright restriction.
+
+%
+% deutsch.doc -- typeset German documents with plain TeX.
+%
+% [TeX in MAKEPROG]
+% (history at end)
+
+
+%%%%
+%%%%
+%%%% 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 ;
+%%%%
+%%%% If you just want to print 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 in a documented form...
+%%%%
+%%%%
+%%% \input progdoc
+
+%%% \input names.sty
+%%% \def\babel{{\sf babel}}
+
+
+
+%%% \title{Typesetting German Documents with Plain \TeX{}}
+
+
+
+%%% \chap Introduction.
+
+%%% There are several defencies of plain \TeX{} if used for German
+%%% documents:
+
+%%% \item{---} Mappings of national characters (`umlauts' and `sharp~s')
+%%% to macros or to other character codes (if special fonts are available)
+%%% are missing.
+
+%%% \item{---} \TeX{} produces lots of overfull hboxes for German texts.
+%%% That's because the words there are usually longer than English ones.
+%%% Furthermore we have to use much more hyphenation for German texts than
+%%% for English ones, narrow typesetting is more important than few
+%%% hyphenations. In particular, words with umlauts are not hyphenated
+%%% often anyhow, even with the `multiple-word' approach from |german.sty|.
+
+%%% \item{---} It is typographic usage that between compound words
+%%% ligatures are not built. Plain~\TeX{} has no easy, readable way to
+%%% provide this.
+
+%%% \noindent This file does the according definitions. They are quite
+%%% often only a kludge. But it is hard to make the restrictions
+%%% disappear, sometimes it is even impossible within the current
+%%% implementation of \TeX{}---and there will never be any other
+%%% implementation. So we must live with these kludges.
+
+
+%%% \sect Of course, there is more to German typesetting. Hyphenation,
+%%% also for words with umlauts and sharp~s, etc. This basic
+%%% functionality is supplied by the \babel{} system and DANTE's
+%%% |german.sty|, we have to load the appropriate module.
+
+%%% There's one problem, though. \babel{}~3.5 defines
+%%% |\DeclareTextSymbol|, a symbol used by |german.sty| to decide if it
+%%% shall use NFSS code to access symbols. But that usage will lead to an
+%%% endless recursion, because some text symbols are defined by
+%%% themselves. I don't know if that problem is caused by \babel{}'s code
+%%% or by its usage in |german.sty| -- turning it off seems to be an
+%%% appropriate fix.
+
+%%% \beginprog
+\let\DeclareTextSymbol\undefined
+\input german.sty
+%%% \endprog
+
+
+%%% \sect 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 control
+%%% sequences. This method is better than to use
+%%% a group because not all macros have to be defined global this way.
+
+%%% \beginprog
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+\catcode`\_=\CatLetter
+%%% \endprog
+
+
+%%% \sect Let's identify this macro file against the user and in the Log file.
+
+%%% \beginprog
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{Support for German documents, $Revision: 1.4 $}
+\endgroup
+%%% \endprog
+
+
+
+%%% \chap National Characters.
+
+%%% By default no extended characters are available, except those defined
+%%% below. I.e., we start to treat all characters from |"7F| to |"FF| as
+%%% invalid characters.
+
+%%% \beginprog
+\count@="7F
+\loop
+ \catcode \the\count@ = \CatInvalid
+ \advance\count@ by 1
+ \ifnum \count@ < "100
+\repeat
+%%% \endprog
+
+
+%%% \sect We provide a command for the definition of non-ASCII characters:
+%%% |\ExtendChar|. A sample definition of an ``Umlaut-a''~(\"a) in the
+%%% extended code of an IBM~PC (hex code~|"84|) is:
+%%% $$
+%%% |\ExtendChar\^^84: {^^84}{\"a}|
+%%% $$
+%%% First the hex code is given as a control sequence, followed by a
+%%% colon. Afterwards come two parameters, the first is again the hex
+%%% code, the second is the token list which should be used instead of the
+%%% hex code.
+
+%%% The macro definition is rather easy, we just have to make the
+%%% respective character active and bind it to it's new meaning.
+
+%%% \beginprog
+\def\ExtendChar #1:{%
+ \catcode`#1 \CatActive
+ \extend_char
+ }
+\def\extend_char #1#2{%
+ \def #1{#2}%
+ }
+%%% \endprog
+
+
+%%% \sect Now we can define some replacements.
+
+%%% The braces after the control sequences are needed when characters from
+%%% the extended character set are written to an auxiliary file and read
+%%% in later. During the |\write| they are expanded and following white
+%%% space would be gobbled if the braces would not be there.
+
+%%% \beginprog
+% ISO-Latin-1
+\ExtendChar\^^c4: {^^c4}{\"A}
+\ExtendChar\^^d6: {^^d6}{\"O}
+\ExtendChar\^^dc: {^^dc}{\"U}
+\ExtendChar\^^df: {^^df}{\ss{}}
+\ExtendChar\^^e4: {^^e4}{\"a}
+\ExtendChar\^^f6: {^^f6}{\"o}
+\ExtendChar\^^fc: {^^fc}{\"u}
+
+% IBM PC (code page 850)
+\ExtendChar\^^81: {^^81}{\"u}
+\ExtendChar\^^84: {^^84}{\"a}
+\ExtendChar\^^8e: {^^8e}{\"A}
+\ExtendChar\^^94: {^^94}{\"o}
+\ExtendChar\^^99: {^^99}{\"O}
+\ExtendChar\^^9a: {^^9a}{\"U}
+\ExtendChar\^^e1: {^^e1}{\ss{}} % actually \beta, used as \ss in Germany
+
+% Atari ST (like IBM PC, but with a real `sharp~s')
+\ExtendChar\^^9e: {^^9e}{\ss{}}
+%%% \endprog
+
+
+
+%%% \chap Paragraph Breaking.
+
+%%% As outlined in the introduction, we allow longer interword spaces. A
+%%% line now may have a badness up to 2500, over 1500 a warning is to be
+%%% given. Furthermore the penalties for hyphenation are lowered because a
+%%% narrow typesetting is preferred against few hyphenations.
+
+%%% These values are still experimental and should be tuned.
+
+%%% As |german.sty| uses \babel{} compatible structure, the german
+%%% language hook is a good place to store such definitions. But to
+%%% use \babel{}'s convenient macros, too, we have to assure that it's
+%%% kernel code is loaded first.
+
+%%% \beginprog
+\ifx \babel@core@loaded\undefined
+ \input babel.def
+\fi
+\addto\extrasgerman{%
+ \babel@savevariable\tolerance
+ \babel@savevariable\hbadness
+ \babel@savevariable\doublehyphendemerits
+ \babel@savevariable\finalhyphendemerits
+ \babel@savevariable\adjdemerits
+ \tolerance 2500 \hbadness 1500
+ \doublehyphendemerits 50000
+ \finalhyphendemerits 25000
+ \adjdemerits 50000
+ }
+%%% \endprog
+
+
+%%% \sect In some languages ligatures should not appear between compound
+%%% words. We use {\tt \string\|\/} to mark those places. This is only
+%%% done within text mode, in math mode {\tt \string\|\/} is still
+%%% `$\|$'. But it is sure that one can always hyphenate between compound
+%%% words, so we insert |\-|. To allow the hyphenation in other parts of
+%%% the word though, we use |\allowhyphens| again.
+
+%%% \beginprog
+\def\|{% % break open a ligature (if not in math mode)
+ \relax
+ \ifmmode \Vert
+ \else \allowhyphens\-\allowhyphens
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect Don't use the dreaded `double quote special meaning' stuff of
+%%% |german.sty|. And use original umlauts. Already in M\"unster I voted
+%%% against it\dots
+
+%%% \beginprog
+\addto\extrasgerman{%
+ \mdqoff
+ \umlautlow
+ }
+%%% \endprog
+
+
+%%% \sect Define |\SwitchtoLanguage| for upward compatibility. It does
+%%% not really do the same, the old definition was more similar to
+%%% |\selectlanguage|. But other languages have to be declared
+%%% explicitely, that's not done by this macro file. So we just want to
+%%% make old documents processable.
+
+%%% \beginprog
+\def\SwitchtoLanguage#1{\language \csname l@#1\endcsname}
+%%% \endprog
+
+
+%%% \sect We are finished; switch to german language (to enable the new
+%%% extras defined above), restore the catcodes and prevent from following
+%%% garbage.
+
+%%% \beginprog
+\selectlanguage{german}
+
+\catcode`\@=\CatAtCode
+\catcode`\_=\CatUsCode
+
+\endinput
+%%% \endprog
+
+
+%%% %% \sect {\it Acknowledgements:}\quad I would like to thank XXX
+
+
+%%% \bye
+
+%%%
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% %
+%%% % $Log: deutsch.doc,v $
+%%% % Revision 1.4 1995/07/30 13:23:56 schrod
+%%% % Discard babel definition of \DeclareTextCommand before including
+%%% % german.sty, they are incompatible.
+%%% %
+%%% % Revision 1.3 1995/07/29 17:58:24 schrod
+%%% % Use german.sty, not germanb.sty. (babel 3.5 is not functional for
+%%% % plain TeX any more.) But we still want to use babel's macros, we have
+%%% % to load it's kernel for that.
+%%% %
+%%% % Revision 1.2 1995/03/13 23:18:10 schrod
+%%% % Started to manage this package with CVS. Made minor code cleanup.
+%%% %
+%%% % Revision 1.1 1994/10/16 16:57:30 schrod
+%%% % Merged macros from local.tex, codes.tex, and language.tex. This
+%%% % new file is mainly there to provide upward compatibility for our old
+%%% % documents.
+%%% %
+%%% %
+%%% %
+%%% % pre-CVS Version History:
+%%% %
+%%% % DATE WHO REMARKS
+%%% % 91-01-18 js set all extended characters to code invalid
+%%% % 90-12-23 js added the definition of \ExtendChar for usage in codes.tex.
+%%% % 90-10-06 js renamed from dlocal to local, it's now international,
+%%% % adapted to TeX 3:
+%%% % included codes.tex and langdef.tex if they exist,
+%%% % assumed that language.tex is already loaded,
+%%% % defined German parameters as a language hook,
+%%% % removed first \allowhyphens in \uml@ut,
+%%% % documented it with MAKEPROG.
+%%% % 89-10-27 js was reworked for ILaTeX
+%%% % 89-05-31 js defined \| as a separator for ligatures in text mode
+%%% % 87-10-01 js introduced \protect,
+%%% % set parameters for German page makeup
+%%% % 87-??-?? kg first release
+%%% %
+%%% % kg: Klaus Guntermann <gunterma@<schrod@iti.informatik.th-darmstadt.de>
+%%% % js: Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>
+
+
+%%%
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Local Variables:
+%%% mode: plain-TeX
+%%% TeX-master: t
+%%% TeX-brace-indent-level: 4
+%%% End:
diff --git a/macros/plain/contrib/js-misc/idverb.doc b/macros/plain/contrib/js-misc/idverb.doc
new file mode 100644
index 0000000000..79fb0b183d
--- /dev/null
+++ b/macros/plain/contrib/js-misc/idverb.doc
@@ -0,0 +1,194 @@
+% $Id: idverb.doc,v 1.1 1995/03/13 23:18:11 schrod Exp $
+%----------------------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% Copyright conditions see below.
+
+%
+% idverb.doc --- typeset identifiers verbatim
+%
+% [plain TeX in MAKEPROG]
+% (history at end)
+
+
+\input progdoc
+
+\input names.sty
+\def\v{{\tt \vbar\/}}
+
+
+
+\title{Identifiers Verbatim \`a la {\ttitlefont WEB}}
+
+
+
+\chap Introduction.
+
+This macro files allows to write identifiers in a \WEB{} like style,
+i.e.\ as {\tt \origvert identifier\origvert\/}. The identifiers are
+typeset verbatim in the monospace type face. The macros
+|\makevertother| and |\makevertactive| are available to activate and
+deactivate the special behaviour of the vertical bar.
+
+
+\sect This macro file uses the namespace |idv|.
+
+\beginprog
+\ifx \IdvLoaded\undefined
+ \def\IdvLoaded{$Revision: 1.1 $}
+\else \endinput \fi % <-- one line!
+\endprog
+
+
+\sect These macros are supported. Send bug reports, comments and
+repairs.
+
+The reference version may be retrieved via anonymous ftp from
+|ftp.th-darmstadt.de| [130.83.47.112], directory |pub/tex/plain|. It's
+placed there as a gzipped tar file. (The information on the
+IP~number is dated March 13, 1995. It might have changed, also this is very
+unlikely. Use your friendly nameserver.)
+
+
+\sect This is freely distributable 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 software 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 in
+the file |License| along with this package; if not, write to the Free
+Software Foundation, Inc., 675~Mass Ave, Cambridge, MA~02139,~USA.
+
+
+\sect 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 control sequences. This method is
+better than to use a group because not all macros have to be defined
+global this way.
+
+Only the first macro file read in defines the |Cat| cseqs.
+
+\beginprog
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+\catcode`\_=\CatLetter
+\endprog
+
+
+\sect Let's identify this macro file against the user and in the Log file.
+
+\beginprog
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{Verbatim identifiers, $Revision: 1.1 $}
+\endgroup
+\endprog
+
+
+\sect The usual verbatim macros use |\dospecials| to change the
+catcode of all special characters. We have to add `\v' to this list.
+The old meaning is stored in |\idv_OrigDospecials|.
+
+\beginprog
+\let\idv_OrigDospecials=\dospecials
+\begingroup
+ \def\do#1{\noexpand\do\noexpand#1}
+ \xdef\dospecials{\idv_OrigDospecials\do\|}
+\endgroup
+\let\idv_dospecials=\dospecials
+
+\def\makevertactive{\catcode`\|\CatActive \let\dospecials\idv_dospecials}
+\def\makevertother{\catcode`\|\CatOther \let\dospecials\idv_OrigDospecials}
+
+\makevertactive
+\endprog
+
+
+\sect Now we can define `\v'. This definition is a little bit tricky,
+as it redefines itself to |\egroup| to close the hbox. But if the hbox
+is ended, `\v' is restored to its original meaning. |\origvert| is
+given the original meaning of `\v'. |\vbar| is the character from the
+current font that has the ASCII code of a vertical bar, sometimes this
+{\it is\/} a vertical bar.
+
+\beginprog
+\let\origvert=|
+\chardef\vbar=`\|
+
+\def\idv_setup_verbatim{%
+ \def\do##1{\catcode`##1\CatOther}\idv_OrigDospecials
+ \parskip\z@skip \parindent\z@
+ \obeylines \obeyspaces \frenchspacing
+ \tt
+ }
+
+\def|{%
+ \leavevmode
+ \hbox\bgroup
+ \let\par\space \idv_setup_verbatim
+ \let|\egroup
+ }
+\endprog
+
+
+\sect We are finished;
+restore the catcodes and prevent from following garbage.
+
+\beginprog
+\catcode`\@=\CatAtCode
+\catcode`\_=\CatUsCode
+
+\endinput
+\endprog
+
+
+%% \sect {\it Acknowledgements:}\quad I would like to thank XXX
+
+
+\bye
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% $Log: idverb.doc,v $
+% Revision 1.1 1995/03/13 23:18:11 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+
+%
+% Pre-CVS Log:
+%
+% 27 Jul 89 js Initial revision.
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Local Variables:
+mode: plain-TeX
+TeX-master: t
+TeX-brace-indent-level: 4
+End:
diff --git a/macros/plain/contrib/js-misc/idverb.dvi b/macros/plain/contrib/js-misc/idverb.dvi
new file mode 100644
index 0000000000..edd0b08f21
--- /dev/null
+++ b/macros/plain/contrib/js-misc/idverb.dvi
Binary files differ
diff --git a/macros/plain/contrib/js-misc/idverb.tex b/macros/plain/contrib/js-misc/idverb.tex
new file mode 100644
index 0000000000..f40dbf860c
--- /dev/null
+++ b/macros/plain/contrib/js-misc/idverb.tex
@@ -0,0 +1,215 @@
+% $Id: idverb.doc,v 1.1 1995/03/13 23:18:11 schrod Exp $
+%----------------------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% Copyright conditions see below.
+
+%
+% idverb.doc --- typeset identifiers verbatim
+%
+% [plain TeX in MAKEPROG]
+% (history at end)
+
+
+%%%%
+%%%%
+%%%% 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 ;
+%%%%
+%%%% If you just want to print 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 in a documented form...
+%%%%
+%%%%
+%%% \input progdoc
+
+%%% \input names.sty
+%%% \def\v{{\tt \vbar\/}}
+
+
+
+%%% \title{Identifiers Verbatim \`a la {\ttitlefont WEB}}
+
+
+
+%%% \chap Introduction.
+
+%%% This macro files allows to write identifiers in a \WEB{} like style,
+%%% i.e.\ as {\tt \origvert identifier\origvert\/}. The identifiers are
+%%% typeset verbatim in the monospace type face. The macros
+%%% |\makevertother| and |\makevertactive| are available to activate and
+%%% deactivate the special behaviour of the vertical bar.
+
+
+%%% \sect This macro file uses the namespace |idv|.
+
+%%% \beginprog
+\ifx \IdvLoaded\undefined
+ \def\IdvLoaded{$Revision: 1.1 $}
+\else \endinput \fi % <-- one line!
+%%% \endprog
+
+
+%%% \sect These macros are supported. Send bug reports, comments and
+%%% repairs.
+
+%%% The reference version may be retrieved via anonymous ftp from
+%%% |ftp.th-darmstadt.de| [130.83.47.112], directory |pub/tex/plain|. It's
+%%% placed there as a gzipped tar file. (The information on the
+%%% IP~number is dated March 13, 1995. It might have changed, also this is very
+%%% unlikely. Use your friendly nameserver.)
+
+
+%%% \sect This is freely distributable 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 software 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 in
+%%% the file |License| along with this package; if not, write to the Free
+%%% Software Foundation, Inc., 675~Mass Ave, Cambridge, MA~02139,~USA.
+
+
+%%% \sect 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 control sequences. This method is
+%%% better than to use a group because not all macros have to be defined
+%%% global this way.
+
+%%% Only the first macro file read in defines the |Cat| cseqs.
+
+%%% \beginprog
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+\catcode`\_=\CatLetter
+%%% \endprog
+
+
+%%% \sect Let's identify this macro file against the user and in the Log file.
+
+%%% \beginprog
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{Verbatim identifiers, $Revision: 1.1 $}
+\endgroup
+%%% \endprog
+
+
+%%% \sect The usual verbatim macros use |\dospecials| to change the
+%%% catcode of all special characters. We have to add `\v' to this list.
+%%% The old meaning is stored in |\idv_OrigDospecials|.
+
+%%% \beginprog
+\let\idv_OrigDospecials=\dospecials
+\begingroup
+ \def\do#1{\noexpand\do\noexpand#1}
+ \xdef\dospecials{\idv_OrigDospecials\do\|}
+\endgroup
+\let\idv_dospecials=\dospecials
+
+\def\makevertactive{\catcode`\|\CatActive \let\dospecials\idv_dospecials}
+\def\makevertother{\catcode`\|\CatOther \let\dospecials\idv_OrigDospecials}
+
+\makevertactive
+%%% \endprog
+
+
+%%% \sect Now we can define `\v'. This definition is a little bit tricky,
+%%% as it redefines itself to |\egroup| to close the hbox. But if the hbox
+%%% is ended, `\v' is restored to its original meaning. |\origvert| is
+%%% given the original meaning of `\v'. |\vbar| is the character from the
+%%% current font that has the ASCII code of a vertical bar, sometimes this
+%%% {\it is\/} a vertical bar.
+
+%%% \beginprog
+\let\origvert=|
+\chardef\vbar=`\|
+
+\def\idv_setup_verbatim{%
+ \def\do##1{\catcode`##1\CatOther}\idv_OrigDospecials
+ \parskip\z@skip \parindent\z@
+ \obeylines \obeyspaces \frenchspacing
+ \tt
+ }
+
+\def|{%
+ \leavevmode
+ \hbox\bgroup
+ \let\par\space \idv_setup_verbatim
+ \let|\egroup
+ }
+%%% \endprog
+
+
+%%% \sect We are finished;
+%%% restore the catcodes and prevent from following garbage.
+
+%%% \beginprog
+\catcode`\@=\CatAtCode
+\catcode`\_=\CatUsCode
+
+\endinput
+%%% \endprog
+
+
+%%% %% \sect {\it Acknowledgements:}\quad I would like to thank XXX
+
+
+%%% \bye
+
+%%%
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% %
+%%% % $Log: idverb.doc,v $
+%%% % Revision 1.1 1995/03/13 23:18:11 schrod
+%%% % Started to manage this package with CVS. Made minor code cleanup.
+%%% %
+
+%%% %
+%%% % Pre-CVS Log:
+%%% %
+%%% % 27 Jul 89 js Initial revision.
+
+
+%%%
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Local Variables:
+%%% mode: plain-TeX
+%%% TeX-master: t
+%%% TeX-brace-indent-level: 4
+%%% End:
diff --git a/macros/plain/contrib/js-misc/js-misc.dvi b/macros/plain/contrib/js-misc/js-misc.dvi
new file mode 100644
index 0000000000..5d5c97f44e
--- /dev/null
+++ b/macros/plain/contrib/js-misc/js-misc.dvi
Binary files differ
diff --git a/macros/plain/contrib/js-misc/js-misc.tex b/macros/plain/contrib/js-misc/js-misc.tex
new file mode 100644
index 0000000000..c39e7c257f
--- /dev/null
+++ b/macros/plain/contrib/js-misc/js-misc.tex
@@ -0,0 +1,244 @@
+% $Id: js-misc.tex,v 1.1 1995/03/13 23:18:12 schrod Exp $
+%--------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+
+% This is a german description for cassette.tex & schild.tex.
+
+
+% Manual fuer ``Kleine TeX-Makros, aufbauend auf PLAIN'':
+% Tonbandkassetten-Schilder
+% Buecherruecken-Schilder
+%
+% [Formate]
+
+
+\berichtformat
+
+\input idverb
+\def\.{$\bullet$}
+
+
+
+
+\titel{}{Kleine \TeX{}-Makros}{, aufbauend auf {\tt PLAIN}}
+\autor{Joachim Schrod}
+\datum{Rödermark, den 08.02.88}
+
+
+
+
+
+\kapitel{Beschriftung von Tonband-Kassetten}{}
+
+Die Beschriftung von Tonband-Kassetten wird durch
+|\input cassette| geladen.
+Durch diese Makros werden Schilder erzeugt, die
+in eine Kassettenhülle gelegt werden können.
+%Jedes Schild wird auf eine einzelne Seite gedruckt.
+Das Layout eines Schildes ist in Abb.~1.1 zu sehen.
+Das Schild wird an den äußeren Rändern ausgeschnitten
+und entlang der horizontalen Linien gefaltet.
+
+\abbvoll{
+{\input cassette
+\let\eject=\relax
+\begincassette{Kassettenname}
+\titelcass{Frontseite mit Titeln}
+\seitea{Musikstücke der Seite A}
+\seiteb{Musikstücke der Seite B}
+\endcassette
+}}{Layout eines Kassettenschildes}
+
+\noindent Folgende Befehle erzeugen das gewünschte Layout:
+
+\beginitemize
+
+\item{\.} |\begincassette|\quad (1 Parameter)\nl
+Mit diesem Befehl beginnt die Beschreibung eines Kassettenschilds.
+Der Parameter ist der Name der Kassette, der in |\cassfont|
+(Kapitälchen, 10pt) gesetzt wird.
+
+\item{\.} |\titelcass|\quad (1 Parameter)\nl
+Dieser Befehl gibt den Titel der Kassette an, der auf die
+Frontseite gesetzt wird.
+Der Titel wird in |\titfont| (Serifenlose, 10pt) gesetzt.
+Dieser Befehl ist optional, da Titel auch durch |\titel| (s.u.)\
+angegeben werden können.
+
+\item{\.} |\seitea|\quad (1 Parameter)\nl
+Durch den Parameter von |\seitea| wird die Seite~A der
+Kassette beschrieben.
+Diese Beschreibung umfaßt einen optionalen Titel und eine
+Folge von Musikstücken.
+Sie ist zeilenorientiert, d.h.\ jeweils ein Musikstück
+(mit eventuellem Interpret) steht auf einer Eingabezeile.
+Wenn der Text zu lang wird, kann durch die Angabe von |%|
+am Zeilenende die Folgezeile mitbenutzt werden.
+Innerhalb eines Musikstücks kann durch |\nl| gezielt
+umgebrochen werden, wenn man mit dem von \TeX{} gewähltem
+Umbruch nicht zufrieden ist.
+Die Musikstücke werden in |\norm| (Serifenlose, 8pt) gesetzt.
+Dieser Befehl ist optional.
+\itempar
+Folgende Hilfsbefehle stehen zur Beschreibung zur Verfügung:
+
+{\nextitemlevel\itemskip=0pt
+\item{--} |\cnt|\quad (1 Parameter, beendet durch |:|)\nl
+Mit |\cnt| kann die Zählerstellung des Beginns eines
+Musikstücks angegeben werden.
+Die angegebene Zahl wird in eckige Klammern gesetzt.
+
+\item{--} |\von|\quad (1 Parameter, beendet durch |:|)\nl
+Durch |\von| kann ein Interpret dem Musikstück vorgestellt werden.
+Ein Beispiel für eine vollständige Angabe eines Musikstücks
+kann also
+$$
+ \hbox{|\von Led Zeppelin: Stairway to heaven|}
+$$
+sein.
+Der Interpret wird in |\intfont| (Serifenlose Kursiv, 8pt) gesetzt.
+
+\item{--} |\titel|\quad (1 Parameter)\nl
+Mit diesem Befehl kann in die Seite eine Angabe eines Titels
+(z.B.~einer Schallplatte) übernommen werden.
+Dieser Titel wird gleichzeitig auf die Frontseite gesetzt.
+Innerhalb des Titels kann |\von| zur Angabe eines Interpreten
+benutzt werden.
+Dieser Befehl kann mehrmals vorkommen.
+Der Titel wird auf der Seite in |\titfont@page| (Kapitälchen, 8pt)
+gesetzt, wobei der Interpret in Versalien gesetzt wird.
+Auf der Frontseite wird der Titel in |\titfont| (Serifenlose, 10pt)
+gesetzt, wobei der Interpret in |\titintfont| (Serifenlose Kursiv, 10pt)
+gesetzt wird.
+\par}
+
+\item{\.} |\seiteb|\quad (1 Parameter)\nl
+Dieser Befehl beschreibt die Seite~B der Kassette.
+Die Beschreibungsmöglichkeiten sind mit denen von |\seitea|
+identisch.
+
+\item{\.} |\endcassette|\nl
+Durch diesen Befehl wird die Beschreibung des Kassettenschildes
+beendet und das Kassettenschild gesetzt.
+Gleichzeitig wird eine neue Seite begonnen.
+
+\enditemize
+
+
+
+
+
+\kapitel{Beschriftung von Bücherrücken}{}
+
+Die Beschriftung von Bücherrücken wird durch
+|\input schild| geladen.
+Durch diese Makrodatei ist es möglich Schilder für
+Bücherrücken zu erzeugen, die anschließend auf die Bücher
+geklebt werden können.
+Das Layout eines Schildes ist in der Abb.~2.1 gezeigt,
+es wird an den äußeren Rändern ausgeschnitten.
+
+\def\schild{%
+ \vbox{%
+ \hrule
+ \hbox{%
+ \vrule
+ \vbox to 10mm{%
+ \vfill
+ \hbox{\kern 25mm \svtnrm Name des Buches\kern 25mm}%
+ \vfill
+ }%
+ \vrule
+ }%
+ \hrule
+ }%
+ }
+
+\def\vertlen{%
+ \llap{%
+ \vbox to 10mm{%
+ \vfill
+ \hbox{{\tt \#1\/} mm }%
+ \vfill
+ }
+ }%
+ }
+\def\vertmass{%
+ \vbox{%
+ \hrule width 4mm
+ \hbox{%
+ \vertlen
+ \kern 2mm
+ \vrule height 10mm
+ }%
+ \hrule width 4mm
+ }%
+ }
+
+\def\horizmass{%
+ \hbox{%
+ \vrule height 2mm depth 2mm
+ \vtop{%
+ \hrule width 25mm
+ \kern 2mm
+ \hbox to 25mm{\ctr{\tt \char`\\rand}}%
+ }%
+ \vrule height 2mm depth 2mm
+ }%
+ }
+
+\abbvoll{
+ \offinterlineskip
+ \hbox{%
+ \llap{%
+ \vertmass
+ \hskip 2mm
+ }%
+ \schild
+ }%
+ \vskip 2mm
+ \hbox{%
+ \horizmass
+ \phantom{\svtnrm Name des Buches}%
+ \horizmass
+ }%
+}{Layout eines Buchrückenschildes}
+
+\noindent Um das Buchrückenschild zu erzeugen, existieren
+folgende Makros und Parameter:
+
+\beginitemize
+
+\item{\.} |\schild|\quad (2 Parameter)\nl
+Durch dieses Makro wird ein Schild erzeugt.
+Der erste Parameter ist die Höhe des Schildes, der zweite
+der Text, der auf das Buchrückenschild soll.
+
+\item{\.} |\rand|\nl
+|\rand| ist eine Dimensionsangabe, die beschreibt, wieviel
+Platz zwischen dem Buchnamen und dem Rand des Schildes
+horizontal verbleibt.
+
+\item{\.} |\namfont|\nl
+In |\namfont| wird der Buchname gesetzt.
+
+\enditemize
+
+
+
+
+
+\bye
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% $Log: js-misc.tex,v $
+% Revision 1.1 1995/03/13 23:18:12 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+
+%
+% Pre-CVS Log:
+%
+% 88-02-08 js Initial revision
diff --git a/macros/plain/contrib/js-misc/names.sty b/macros/plain/contrib/js-misc/names.sty
new file mode 100644
index 0000000000..57452c17b5
--- /dev/null
+++ b/macros/plain/contrib/js-misc/names.sty
@@ -0,0 +1,95 @@
+% $Id: names.sty,v 1.2 1995/03/13 23:18:13 schrod Exp $
+%------------------------------------------------------------
+
+%
+% Verfuegbarkeit von haeufigen Abkuerzungen/Logos in
+% LaTeX und Formate bei Grund-Schriftgroesse 10pt.
+%
+% alle Logos nur in Roman
+% TeX related Logos:
+% \TeX
+% \INITeX
+% \Plain Plain TeX
+% \LaTeX
+% \BibTeX
+% \SliTeX
+% \MakeIndex (kursiv)
+% \AmSTeX AmS-TeX
+% \LAMSTeX LAmS-TeX
+% \MF METAFONT
+% \INIMF
+% \WEB
+% \CWEB
+% \TIE
+% \stTeX
+% \stMF
+% Dateitypen (alle in teletype):
+% \LOG
+% \DVI
+% \FMT
+% \TFM
+% \GF
+% \PK
+% \PXL
+% andere Logos:
+% \C++
+
+
+\font\tenlogo=logo10
+\let\logo=\tenlogo
+\ifx \mc\undefined \let\mc=\small \fi % fuer LaTeX, `medium caps'
+
+
+% FIXME: should the space factor be set to 1000 afterwards?
+% is it a global value? otherwise it would be a faulty design within TeX...
+\def\TeX{{\rm T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}}
+\def\INITeX{{\rm INI\TeX}}
+
+\def\Plain{{\rm Plain~\TeX}}
+
+% LaTeX-Definition mit Original-TeX-Logo!
+% Entspricht nicht der Definition von L. Lamport, ist aber konsistenter
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em\TeX}}
+\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em\TeX}}
+\def\SliTeX{{\rm S\kern-.06em{\sc l\kern-.035em i}\kern-.06em\TeX}}
+\def\MakeIndex{{\it MakeIndex\/}}
+
+\def\AmSTeX{%
+ $\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em S$%
+ -\TeX
+ }
+\def\LAMSTeX{%
+ L\raise.42ex\hbox{$\scriptstyle\kern-.3em\cal A$}\kern-.2em
+ \lower.376ex\hbox{$\cal M$}\kern-.125em $\cal S$%
+ -\TeX
+ }
+
+
+\def\MF{{\logo META}\-{\logo FONT\/}}
+\def\INIMF{{\mc INI}{\logo MF}}
+
+
+\def\WEB{{\tt WEB\/}}
+\def\CWEB{{\mc CWEB}}
+\def\TIE{{\tt TIE\/}}
+
+
+\def\stTeX{{\sc st\rm\kern-0.13em\TeX}} % unser stTeX (TeXsys)
+\def\stMF{{\sc st}{\logo MF}} % unser stMF
+
+
+\def\LOG{{\tt LOG\/}}
+\def\DVI{{\tt DVI\/}}
+\def\FMT{{\tt FMT\/}}
+\def\TFM{{\tt TFM\/}}
+
+\def\GF{{\tt GF\/}}
+\def\PK{{\tt PK\/}}
+\def\PXL{{\tt PXL\/}}
+
+
+
+\def\C++{C\raise .4ex\hbox{$\scriptstyle +\!+$}}
+
+
+\endinput
diff --git a/macros/plain/contrib/js-misc/schild.tex b/macros/plain/contrib/js-misc/schild.tex
new file mode 100644
index 0000000000..9bc3ef237b
--- /dev/null
+++ b/macros/plain/contrib/js-misc/schild.tex
@@ -0,0 +1,84 @@
+% $Id: schild.tex,v 1.1 1995/03/13 23:18:13 schrod Exp $
+%--------------------------------------------------------
+
+
+% Rueckenschild fuer ein gelumbacktes Buch:
+%
+% \buchschild#1#2 #1 == Breite in mm #2 == Name des Buches
+%
+%
+% Tuerschilder ITI:
+%
+% \tuerschild#1 #1 == Text (ueblicherweise in Grossbuchstaben)
+% falls zu lang, Font auf magstep3 reduzieren
+
+
+\newdimen\rand
+\rand=25mm
+
+\let\buchfont=\svtnrm
+\font\tuerfont=cmssdc10 scaled \magstep4 % magstep3, falls zu lang
+\let\tuerschildfont=\tuerfont
+
+
+
+\def\buchschild#1#2{%
+ \vbox{%
+ \offinterlineskip
+ \hrule
+ \hbox{%
+ \vrule
+ \vbox to #1mm{%
+ \vfill
+ \hbox{\kern\rand \buchfont #2\kern\rand}%
+ \vfill
+ }%
+ \vrule
+ }%
+ \hrule
+ }%
+ \vskip 2cm
+ }
+
+\def\tuerschild#1{%
+ \vbox{%
+ \offinterlineskip
+ \hrule
+ \hbox{%
+ \vrule
+ \vbox to 10mm{%
+ \rand=15mm
+ \vfill
+ \hbox to 155mm{\kern\rand \tuerschildfont #1\hfill}%
+ \vfill
+ }%
+ \vrule
+ }%
+ \hrule
+ }%
+ \vskip 2cm
+ }
+
+
+
+\raggedbottom
+\nopagenumbers
+
+
+\endinput
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% $Log: schild.tex,v $
+% Revision 1.1 1995/03/13 23:18:13 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+
+%
+% Pre-CVS Log:
+%
+% 92-04-15 cd renamed \schild to \buchschild
+% introduced \tuerschild
+% 88-02-08 js first release
diff --git a/macros/plain/contrib/js-misc/sperr.tex b/macros/plain/contrib/js-misc/sperr.tex
new file mode 100644
index 0000000000..4e6b090230
--- /dev/null
+++ b/macros/plain/contrib/js-misc/sperr.tex
@@ -0,0 +1,116 @@
+% $Id: sperr.tex,v 1.2 1995/04/16 23:27:04 schrod Exp $
+%---------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% This file is distributed without any copyright restriction.
+
+
+%
+% Makro-Datei zum Sperren von Zeichenfolgen.
+%
+% Bitte sperrt damit keine Gemeinen.
+%
+% Joachim Schrod
+%
+
+%
+% Benutzung: \sperr{TEXT}{KERNING}
+% Wenn in TEXT mehrere Token als eines behandelt werden sollen
+% (z.B. Umlaute), m\"ussen diese Tokens geklammert werden.
+%
+
+
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+\catcode`\_=\CatLetter
+
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{Text sperren, $Revision: 1.2 $}
+\endgroup
+
+
+\let\end_list=\relax
+\edef\empty_list{\end_list}
+
+\def\split#1#2\end_list{%
+ \edef\sec_char{#1}%
+ \toks@={#2\end_list}%
+ }
+
+\def\do_split{%
+ \expandafter \split \the\toks@ \end_list
+ }
+
+\def\next_char{%
+ \edef\first_char{\sec_char}%
+ \do_split
+ }
+
+
+
+\newdimen\sperr_width
+
+\def\sperr#1#2{% % Text, Sperrbreite
+ \toks@={#1\end_list}%
+ \sperr_width=#2\relax
+ \do_split
+ \next_char % initialize pipeline
+ \ifx \sec_char\empty_list #1% % nur 1 Zeichen
+ \else \do_sperr
+ \fi
+ }
+
+
+\newif \if@loop
+
+\def\do_sperr{%
+ \loop
+ \set_char % Zeichen und nachfolgendes Kerning setzen
+ \next_char
+ \ifx \sec_char\empty_list
+ \first_char
+ \@loopfalse
+ \else \@looptrue
+ \fi
+ \if@loop
+ \repeat
+ }
+
+
+
+
+\newbox\kern_box
+\newdimen\kern_width
+
+\def\set_char{%
+ \setbox\kern_box=\hbox{\first_char\sec_char}%
+ \kern_width=\wd\kern_box
+ \setbox\kern_box=\hbox{\hbox{\first_char}\hbox{\sec_char}}%
+ \advance \kern_width by -\wd\kern_box
+ \advance \kern_width by \sperr_width
+ \first_char \kern\kern_width
+ }
+
+
+
+
+\catcode`\@=\CatAtCode
+\catcode`\_=\CatUsCode
+
+
+
+\endinput
diff --git a/macros/plain/contrib/js-misc/xfig.tex b/macros/plain/contrib/js-misc/xfig.tex
new file mode 100644
index 0000000000..95a86cff5e
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig.tex
@@ -0,0 +1,626 @@
+% $Id: xfig.tex,v 1.4 1995/05/07 16:52:05 schrod Exp $
+%------------------------------------------------------------
+% Hacked together by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>
+% Put into public domain.
+
+%
+% Support for xfig pictures in plain TeX
+% orginally written for transfig 2.1.7
+% support last checked for transfig 3.1.3
+%
+
+
+% USAGE:
+%
+% To include xfig figures in plain TeX documents, just input these
+% macros and then input the (La)TeX file you got by exporting your
+% figure as `LaTeX picture' or by calling fig2dev with option `-L
+% latex'. No other ``language'' is supported by these macros; in
+% particular, `Combined PS/LaTeX' is not supported.
+
+% You can select the used types for text by redefining some macros:
+% \FigFontType<type> (with <type> equal `rm', `bf', `it', `sf', or
+% `tt') must expand to the external font name that's used for the
+% respective xfig font selection.
+% \FigFontDefault specifies the font that's used for the `Default'
+% font selection. That macro is only accessed if you use the new xfig,
+% or if you repaired the no-NFSS code of fig2dev (in texfonts.h, see
+% comments at \xfig@bindSetFigFont implementation below).
+%
+% At the start of each figure \pictureHook is evaluated, you might
+% want to bind that to some code that does document-specific setup.
+% Each figure is set in a group, so you can rebind other control
+% sequences in that hook.
+
+
+% ------------------------------------------------------------
+
+% IMPLEMENTATION NOTES:
+%
+% The macros might not work in all circumstances, it's updated and improved
+% by need...
+%
+% In particular:
+% -- The font selection in \SetFigFont could be improved.
+% -- The environment code (\begin/\end) is very rough and should
+% check for erroneous input.
+
+
+% Code structure:
+%
+% After general setup, code from DEK that implements most parts of
+% LaTeX's picture environment is used. Then we add definitions for the
+% missing and xfig-specific tags.
+%
+% In Emacs, each section starts on a new page.
+
+
+% ============================================================
+
+% standard setup:
+
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{xfig pictures, $Revision: 1.4 $}
+\endgroup
+
+
+% This macro file allocates registers and might be read in multiple
+% times, in groups. (Actually, this occured for the first time when we
+% wanted to use xfig pictures in Texinfo documents. There they are
+% typeset in a `tex' environment, and xfig is read in anew for each
+% figure.) As all register allocations are globally, we define some
+% macros that help us to define them only once.
+
+\def\xfig@newskip#1{%
+ \ifx #1\undefined \csname newskip\endcsname #1\fi
+ }
+\def\xfig@newdimen#1{%
+ \ifx #1\undefined \csname newdimen\endcsname #1\fi
+ }
+\def\xfig@newcount#1{%
+ \ifx #1\undefined \csname newcount\endcsname #1\fi
+ }
+\def\xfig@newbox#1{%
+ \ifx #1\undefined \csname newbox\endcsname #1\fi
+ }
+
+
+% ============================================================
+
+%% First comes an implementation of the picture environment's features,
+%% by the Grand Wizard of TeX Arcana himself. This is from picture.tex,
+%% I deleted the \cpic macro and the squines. \makebox did not support
+%% position specifiers, I substituted the definition by the one from
+%% LaTeX2e. In addition, all register allocations are made with the
+%% macros defined above.
+
+% --------------------------------------------------
+
+% Pictures (a subset of \LaTeX's conventions, plus squines)
+
+%% [start of change to DEK's code]
+%%
+%% At's catcode is changed above already.
+%% Allocation info for registers should go to log file.
+
+% \chardef\CatcodeAt=\catcode`\@
+% \catcode`\@=11 % enable private control sequences
+% \def\wlog#1{} % don't put allocation info into the log
+
+%% [end of change]
+
+\xfig@newskip\hsssglue \hsssglue=0pt plus 1fill minus 1fill
+\def\hsss{\hskip\hsssglue}
+
+\xfig@newdimen\unitlength \xfig@newdimen\linethickness
+\xfig@newdimen\@picheight \xfig@newdimen\@xdim \xfig@newdimen\@ydim \xfig@newdimen\@len
+\xfig@newdimen\@save
+\xfig@newcount\@multicount \xfig@newcount\@xarg \xfig@newcount\@yarg
+\xfig@newbox\@picbox \xfig@newbox\@mpbox
+
+\font\tenln=line10 \font\tenlnw=linew10
+\font\tencirc=lcircle10 \font\tencircw=lcirclew10
+
+\xfig@newdimen\@halfwidth
+
+\def\thinlines{\let\linefont=\tenln \let\circlefont=\tencirc
+ \linethickness=\fontdimen8\linefont \@halfwidth .5\linethickness}
+\def\thicklines{\let\linefont=\tenlnw \let\circlefont=\tencircw
+ \linethickness=\fontdimen8\linefont \@halfwidth .5\linethickness}
+\thinlines
+
+\def\beginpicture(#1,#2)(#3,#4){\@picheight=#2\unitlength
+ \setbox\@picbox=\hbox to#1\unitlength\bgroup \let\line=\@line
+ \kern-#3\unitlength \lower#4\unitlength\hbox\bgroup\ignorespaces}
+\def\endpicture{\egroup\hss\egroup
+ \ht\@picbox=\@picheight \dp\@picbox=\z@
+ \leavevmode\box\@picbox}
+
+\def\put(#1,#2)#3{\raise#2\unitlength\rlap{\kern#1\unitlength #3}\ignorespaces}
+
+\def\multiput(#1,#2)(#3,#4)#5#6{\@multicount=#5\relax
+ \@xdim=#1\unitlength \@ydim=#2\unitlength \setbox\@mpbox=\hbox{#6}%
+ \loop\ifnum\@multicount>0
+ \raise\@ydim\rlap{\kern\@xdim \unhcopy\@mpbox}%
+ \advance\@xdim#3\unitlength \advance\@ydim#4\unitlength
+ \advance\@multicount\m@ne \repeat\ignorespaces}
+
+\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}
+
+%% [start of change to DEK's code]
+%%
+%% \makebox is called with an optional argument, the position
+%% specifier. The code below is copied from the LaTeX2e beta-test
+%% release.
+
+\def\makebox(#1,#2){%
+ \@ifnextchar[{\@makebox(#1,#2)}{\@makebox(#1,#2)[]}}
+
+\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}}
+
+\long\def\@makebox(#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{%
+ \if s\@tempa
+ \let\mb@l\relax\let\mb@r\relax
+ \else
+ \expandafter\let\csname mb@\@tempa\endcsname\relax
+ \fi}%
+ \mb@t
+ \hbox to #1\unitlength{\mb@l #4\mb@r}%
+ \mb@b
+ \kern\z@}}
+
+%% [end of change]
+
+\newif\ifneg
+\def\@line(#1,#2)#3{\@xarg=#1 \@yarg=#2 \@len=#3\unitlength \leavevmode
+ \ifnum\@xarg<0 \reverseline \else \negfalse \@ydim=\z@\fi
+ \ifnum\@xarg=0 \@vline
+ \else\ifnum\@yarg=0 \@hline \else\@sline\fi\fi
+ \ifneg\kern-\@len\else\@save=\@ydim\fi}
+\def\reverseline{\negtrue \kern-\@len \@xarg=-\@xarg
+ \@ydim=\@len \multiply\@ydim\@yarg \divide\@ydim\@xarg \@yarg=-\@yarg}
+
+\def\@hline{\vrule height.5\linethickness depth.5\linethickness width\@len}
+\def\@vline{\kern-.5\linethickness\vrule width\linethickness
+ \ifnum\@yarg<0 height\z@ depth\else depth\z@ height\fi\@len
+ \kern-.5\linethickness}
+
+\def\@sline{\setbox\@picbox=\hbox{\linefont \count@=\@xarg \multiply\count@ 8
+ \ifnum\@yarg>0 \advance\count@\@yarg \advance\count@-9
+ \else \advance\count@-\@yarg \advance\count@ 55 \fi \char\count@}%
+ \ifnum\@yarg<0 \@picheight=-\ht\@picbox \advance\@ydim\@picheight
+ \else \@picheight=\ht\@picbox \fi
+ \@xdim=\wd\@picbox \@save=\@ydim
+ \loop\ifdim\@xdim<\@len \raise\@ydim\copy\@picbox
+ \advance\@xdim\wd\@picbox \advance\@ydim\@picheight \repeat
+ \advance\@xdim-\@len \kern-\@xdim
+ \multiply\@xdim\@yarg \divide\@xdim\@xarg \advance\@ydim-\@xdim
+ \raise\@ydim\box\@picbox}
+
+\def\vector(#1,#2)#3{\@line(#1,#2){#3}%
+ \ifnum\@xarg=0 \@vvector \else\ifnum\@yarg=0 \@hvector \else\@svector\fi\fi}
+\def\@hvector{\ifneg\rlap{\linefont\char27}\else
+ \smash{\llap{\linefont\char45}}\fi} % we have to smash because of font bug
+\def\@vvector{\ifnum\@yarg<0 \raise-\@len\rlap{\linefont\char63}%
+ \else\setbox\@picbox=\rlap{\linefont\char54}\advance\@len-\ht\@picbox
+ \raise\@len\box\@picbox\fi}
+
+\def\@svector{\setbox\@picbox=\hbox to\z@{\linefont
+ \ifnum\@yarg<0 \count@=55 \@yarg=-\@yarg \else\count@=-9 \fi
+ \ifneg\multiply\@xarg16 \multiply\@yarg2
+ \else\hss % \llap
+ \ifnum\@xarg>2 \multiply\@xarg9 \multiply\@yarg2 \advance\count@29
+ \else\ifnum\@yarg>2 \multiply\@xarg16 \multiply\@yarg9 \advance\count@-20
+ \else\multiply\@xarg24 \multiply\@yarg3 \fi\fi\fi
+ \advance\count@\@xarg \advance\count@\@yarg \char\count@
+ \ifneg\hss\fi}% \rlap
+ \raise\@save\box\@picbox}
+
+\def\disk#1{\@len=#1\unitlength \count@='160 \@diskcirc}
+\def\circle#1{\@len=#1\unitlength \count@='140 \@diskcirc}
+\def\@diskcirc{\setbox\@picbox=\hbox{\circlefont\char\count@}\@xdim=\wd\@picbox
+ \leavevmode \ifdim\@len>15.499\@xdim \@bigdc \else \@smalldc\fi}
+\def\@bigdc{\ifnum\count@<'160 \@bigcirc
+ \else \@len=15\@xdim \@diskcirc\fi}
+\def\@smalldc{{\advance\@len-.5\@xdim
+ \loop\ifdim\@xdim<\@len \advance\count@\@ne \advance\@xdim\wd\@picbox\repeat
+ \hbox{\circlefont\char\count@}}}
+\def\@bigcirc{{\circlefont\count@=15
+ \setbox\@picbox=\hbox{\char\count@}\@xdim=\wd\@picbox
+ \ifdim\@len>2.5\@xdim \@len=2.5\@xdim\fi
+ \advance\@len-.125\wd\@picbox
+ \loop\ifdim\@xdim<\@len \advance\count@ 4 \advance\@xdim.25\wd\@picbox\repeat
+ \@ydim=.5\@xdim \advance\@ydim.5\linethickness
+ \setbox\@picbox=\vbox{\hbox{\char\count@\advance\count@-3\char\count@}%
+ \nointerlineskip
+ \hbox{\advance\count@\m@ne\char\count@\advance\count@\m@ne\char\count@}}%
+ \kern-\@ydim\lower\@ydim\box\@picbox}}
+
+\newif\ifovaltl \newif\ifovaltr \newif\ifovalbl \newif\ifovalbr
+\ovaltltrue \ovaltrtrue \ovalbltrue \ovalbrtrue
+\def\oval(#1,#2){\@xdim=#1\unitlength \@ydim=#2\unitlength
+ {\circlefont \setbox\@picbox=\hbox{\char0}
+ \ifdim\@xdim<\wd\@picbox \@xdim=\wd\@picbox\fi
+ \ifdim\@ydim<\wd\@picbox \@ydim=\wd\@picbox\fi
+ \@save=\@xdim \ifdim\@ydim<\@save \@save=\@ydim \fi
+ \count@=39
+ \loop \setbox\@picbox=\hbox{\char\count@}\ifdim\@save<\wd\@picbox
+ \advance\count@-4 \repeat
+ \setbox\strutbox=\hbox{\vrule height\ht\@picbox depth\dp\@picbox width\z@
+ \kern\wd\@picbox}%
+ \@save=.5\wd\@picbox \advance\@save-.5\linethickness
+ \setbox0=\hbox to\@xdim{\ifovaltl\char\count@\else\strut\fi
+ \kern-\@save\leaders\hrule height\ifovaltl\linethickness\else\z@\fi\hfil
+ \leaders\hrule height\ifovaltr\linethickness\else\z@\fi\hfil\kern\@save
+ \ifovaltr\advance\count@-3\char\count@\else\strut\fi\kern-\wd\@picbox}%
+ \advance\count@\m@ne
+ \setbox2=\hbox to\@xdim{\ifovalbl\char\count@\else\strut\fi
+ \kern-\@save\leaders\hrule height\ifovalbl\linethickness\else\z@\fi\hfil
+ \leaders\hrule height\ifovalbr\linethickness\else\z@\fi\hfil\kern\@save
+ \ifovalbr\advance\count@\m@ne\char\count@\else\strut\fi\kern-\wd\@picbox}%
+ \@save=\@ydim \advance\@save-\wd\@picbox \divide\@save 2
+ \setbox\@picbox=\vbox{\box0\nointerlineskip
+ \hbox to\@xdim{\vrule height\@save width\ifovaltl\linethickness\else\z@\fi
+ \hfil\ifovaltr\vrule width\linethickness\kern-\linethickness\fi}%
+ \nointerlineskip
+ \hbox to\@xdim{\vrule height\@save width\ifovalbl\linethickness\else\z@\fi
+ \hfil\ifovalbr\vrule width\linethickness\kern-\linethickness\fi}%
+ \nointerlineskip\box2}%
+ \@save=.5\@ydim \advance\@save.5\linethickness \leavevmode
+ \kern-.5\@xdim \kern-.5\linethickness \lower\@save\box\@picbox}}
+
+% ============================================================
+
+%% More picture environment tags, output by fig2dev
+
+
+%% The framebox tag was missing in DEK's code. Below is a copy from
+%% the 1994/06/01 version of ltboxes.dtx. Actually, we need only the
+%% \@framepicbox tag.
+
+% \DescribeMacro\framebox
+% |\framebox| ... : like |\makebox|, except it puts a `frame' around
+% the box. The frame is made of lines of thickness
+% |\fboxrule|, separated by space |\fboxsep| 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.
+
+\def\framebox(#1,#2){%
+ \@ifnextchar[{\@framebox(#1,#2)}{\@framebox(#1,#2)[]}% ] (Emacs)
+ }
+\long\def\@framebox(#1,#2)[#3]#4{%
+ \frame{\makebox(#1,#2)[#3]{#4}}}
+
+\long\def\frame#1{%
+ \leavevmode
+ \hbox{%
+ \hskip-\linethickness
+ \vbox{%
+ \vskip-\linethickness
+ \hrule height\linethickness
+ \hbox{%
+ \vrule width\linethickness
+ #1%
+ \vrule width\linethickness}%
+ \hrule height\linethickness
+ \vskip -\linethickness}%
+ \hskip -\linethickness}}
+
+
+%% The dashbox tag was also missing. We copy it from ltpictur.dtx,
+%% 1994/05/22 v1.0e LaTeX Kernel (Picture Mode). The (missing)
+%% indentation is from there, not introduced by me. Sorry, but this
+%% must be emphasized.
+
+% \@wholewidth -> \linethickness
+% \@makepicbox -> \makebox
+
+\xfig@newdimen\@dashdim
+\xfig@newbox\@dashbox
+\xfig@newcount\@dashcnt
+
+\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\dashbox#1(#2,#3){\leavevmode\hbox to\z@{\baselineskip \z@skip
+\lineskip \z@skip
+\@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 \thr@@
+\fi
+\setbox\@dashbox \hbox{\vrule height \@halfwidth depth \@halfwidth
+width #1\unitlength\hskip #1\unitlength}\count@\z@
+\put(0,0){\hskip\@dashdim \@whilenum \count@ <\@dashcnt
+\do{\copy\@dashbox\advance\count@ \@ne }}\count@\z@
+\put(0,#3){\hskip\@dashdim \@whilenum \count@ <\@dashcnt
+\do{\copy\@dashbox\advance\count@ \@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 \linethickness
+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 \thr@@
+\fi
+\setbox\@dashbox\hbox{\vrule width \linethickness
+height #1\unitlength}\count@\z@
+\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \count@ <\@dashcnt
+\do{\vskip #1\unitlength\copy\@dashbox\advance\count@ \@ne }%
+\vskip\@dashdim}}\count@\z@
+\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \count@<\@dashcnt
+\do{\vskip #1\unitlength\copy\@dashbox\advance\count@ \@ne }%
+\vskip\@dashdim}}}\makebox(#2,#3)}
+
+
+% ============================================================
+
+%% Then we must supply the LaTeX tags that are inserted by fig2dev.
+
+% \setlength is the LaTeX PC way of setting a register.
+\def\setlength#1#2{#1=#2\relax}
+
+% --------------------------------------------------
+
+% \makeatletter is called to access private macros in the \SetFigFont
+% definition. Since we never expand that definition, we could ignore
+% the catcode change. But we should not define a macro with a nonsense
+% name...
+\ifx \makeatletter\undefined
+ \def\makeatletter{\catcode`\@=11 } % <-- Space
+\fi
+
+% --------------------------------------------------
+
+% The real hassle in that macro file is the font switch code. Once
+% there was an interface, in transfig 2.1.7 & 2.1.8: A macro named
+% \SetFigFont was used to select the type for texts. The macro
+% definition itself is written by fig2dev, it is part of the figure
+% code.
+%
+% Then transfig 3 was released and the interface disappeared. There's
+% still the macro \SetFigFont and the macro definition is still
+% written by fig2dev, but it may be defined with 3 arguments or with 5
+% arguments, one cannot determine what's used. The second form is used
+% when NFSS is added to the defines of fig2dev and should be the
+% default. (After all, LaTeX2e subsumed NFSS.) The first form must be
+% used for LaTeX 2.09 w/OFSS.
+%
+% \SetFigFont is not defined if it is defined already when the figure
+% code is read. OK, one might think, let's define a plain TeX version.
+% (Actually, xfig.tex up to revision 1.3 did so.) But which interface
+% shall we use for our definition? In a typical installation one has
+% old documents with xfig pictures that were created with an old
+% fig2dev, we must therefore support the three-arg-variant. Newly
+% created figures will use the five-arg-variant, though. There is no
+% obvious way to determine which variant will be used in the
+% respective figure.
+
+% Please note that the information above -- and the one below about
+% the actual possible interfaces of \SetFigFont -- was determined by
+% looking at the output of example files and the code in setfigfont.c
+% and texfonts.h, as not even the comments in these files got updated
+% when the new \SetFigFont interface was introduced. (Sigh.)
+%
+% The changes were not even marked in the list of changes, I learned
+% about them when folks from the Net sent me complaints about revision
+% 1.1 of xfig.tex. (I hadn't installed xfig 3 at this time.)
+%
+% Do I really have to tell you what I think about these kinds of
+% changes, in terms of software quality? (Don't ask me when I'm in a
+% bad mood if you want polite answers.)
+
+% Well, here's the solution: As told above, I've analyzed the possible
+% expansions of \SetFigFont. I'll define macros for every cseq that's
+% in the expansion, one of these macros will bind \SetFigFont to
+% \SetFigFontOFSS or \SetFigFontNFSS, respectively. Let's have a look:
+%
+% OFSS: evaluates \@setsize. This macro has supposed to have 4
+% arguments (type, baselineskip, font-setup, font-setup). Then the
+% type specifier is evaluated by a \csname. Passing nothing there will
+% effectively be a nop.
+%
+% NFSS: The \SetFigfont expansion uses more cseqs, but is more
+% regular, too. We may supply empty expansions for everything that
+% shall setup the font parameters: \reset@font, \fontsize (2 args),
+% \fontfamily & \fontseries & \fontshape (each 1 arg). Then
+% \selectfont is evaluated, here we bind the appropriate expansion of
+% \SetFigFont.
+
+% Now we may setup the macro definitions, evaluate one pseudo
+% \SetFigFont and \SetFigFont will be bound to the correct expansion.
+%
+% The first argument must be a number, as the OFSS \SetFigFont version
+% assigns it to a count register.
+\def\xfig@bindSetFigFont{%
+ % OFSS
+ \def\@setsize##1##2##3##4{\let\SetFigFont\SetFigFontOFSS}%
+ % NFSS
+ \let\reset@font\relax
+ \def\fontsize##1##2{}%
+ \def\fontfamily##1{}%
+ \def\fontseries##1{}%
+ \def\fontshape##1{}%
+ \def\selectfont{\let\SetFigFont\SetFigFontNFSS}%
+ % Now bind correct \SetFigFont by evaluating \SetFigFont.
+ \SetFigFont{0}{}{}{}{}%
+ }
+
+% --------------------------------------------------
+
+% The interface of \SetFigFontOFSS:
+% #1 is the size (w/o pt),
+% #2 the baselineskip (w/o pt),
+% #3 a plain TeX type specifier.
+% If #3 is empty we assume that a default font should be taken.
+% This default font can be named by \FigFontDefault. Note, that
+% this parameter is not empty if you choose the font `Default' in
+% xfig. You have to chang texfonts.h accordingly. I did it
+% already for 2.1.7 and sent the diffs to the maintainer, but
+% obviously he dumped them since they did not appear in 3.x.
+%
+% It's a pity, that we can't use the plain TeX type specifier. We
+% demand an appropriate font scaled to the correct size. This is not
+% the best solution, but nowadays most DVI drivers generate the fonts on
+% the fly anyhow.
+
+\def\FigFontDefault{cmr10}
+\def\FigFontType{\FigFontDefault\space}
+\def\FigFontTyperm{cmr10}
+\def\FigFontTypebf{cmbx10}
+\def\FigFontTypeit{cmti10}
+\def\FigFontTypesf{cmss10}
+\def\FigFontTypett{cmtt10}
+\def\SetFigFontOFSS#1#2#3{%
+ \font\FigFont \csname FigFontType#3\endcsname\space at #1pt
+ \FigFont
+ \baselineskip #2pt\relax
+ }
+
+% The interface of \SetFigFontNFSS:
+% #1 is the size (w/o pt),
+% #2 the baselineskip (w/o pt),
+% #3 the NFSS font family (as a cseq),
+% #4 the NFSS font series (as a cseq), and
+% #5 the NFSS font shape (as a cseq).
+%
+% The current font state is reset before the arguments take effect.
+% The call to \SetFigFont doesn't use the full possibilities of NFSS;
+% only fixed combinations of arguments are supplied, as xfig itself
+% knows only about a fixed set of fonts (default, roman, bold, italic,
+% sans serif, and typewriter).
+
+% We map that interface back to the one of \SetFigFontOFSS. To do that
+% we redefine the NFSS font specifiers locally to create plain TeX
+% font specifiers. That's mostly easy, medium density (`md') series
+% and upright (`up') shape are ignored in plain anyhow. The default is
+% explicitely specified by \familydefault, we don't need to infer it.
+% But there is one exception: bold is specified as `roman bold', ie,
+% as `rmbf'. For that exception we just define a new FigFontType macro.
+
+\def\FigFontTypermbf{\FigFontTypebf}
+\def\SetFigFontNFSS#1#2#3#4#5{%
+ \begingroup
+ \let\familydefault\empty
+ \def\rmdefault{rm}%
+ \def\sfdefault{sf}%
+ \def\ttdefault{tt}%
+ \let\mddefault\empty
+ \def\bfdefault{bf}%
+ \let\updefault\empty
+ \def\itdefault{it}%
+ \xdef\FigFontSpec{#3#4#5}%
+ \endgroup
+ \SetFigFontOFSS{#1}{#2}{\FigFontSpec}%
+ }
+
+% --------------------------------------------------
+
+% Environments are enclosed in \begin{foo} ... \end{foo}.
+% I don't check if the call is ok -- this file is specific for
+% machine-generated code, that shall be correct by definition.
+%
+% We need to setup the correct \SetFigFont binding, as explained above.
+% And let's evaluate a hook to enable document specific adaptions.
+
+\def\begin#1{%
+ \begingroup
+ \def\end##1{%
+ \csname end##1\endcsname
+ \endgroup
+ }%
+ \xfig@bindSetFigFont
+ \csname #1Hook\endcsname
+ \csname begin#1\endcsname
+ }
+
+
+% ============================================================
+
+\catcode`\@=\CatAtCode
+
+\endinput
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% $Log: xfig.tex,v $
+% Revision 1.4 1995/05/07 16:52:05 schrod
+% Determine \SetFigFont variant automatically. \OldXfig is not
+% looked at any more, \SetFigFontOld and \SetFigFontNew are renamed to
+% \SetFigFontOFSS and \SetFigFontNFSS.
+%
+% Revision 1.3 1995/04/17 00:01:08 schrod
+% Don't allocate registers anew if xfig.tex is read in the second
+% time.
+%
+% Revision 1.2 1995/03/16 01:15:51 schrod
+% Support output of transfig 3.1.1.
+%
+% Revision 1.1 1995/03/13 23:18:15 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+
+% 94-06-10 js Initial revision.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Local Variables:
+mode: plain-tex
+TeX-master: t
+TeX-brace-indent-level: 4
+page-delimiter: "^% ==*$"
+End:
diff --git a/macros/plain/contrib/js-misc/xfig/text-2.1-doc.tex b/macros/plain/contrib/js-misc/xfig/text-2.1-doc.tex
new file mode 100644
index 0000000000..ed37a84508
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig/text-2.1-doc.tex
@@ -0,0 +1,27 @@
+% $Id: text-2.1-doc.tex,v 1.1 1995/05/07 16:52:36 schrod Exp $
+%------------------------------------------------------------
+
+%
+% Test for xfig text typesetting of transfig 2.1 output
+%
+
+
+\input ../xfig.tex
+
+$$
+\hbox{\input text-2.1.latex }
+$$
+
+
+
+\bye
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Local Variables:
+mode: plain-TeX
+TeX-parse-self: nil
+TeX-auto-save: nil
+TeX-master: t
+End:
diff --git a/macros/plain/contrib/js-misc/xfig/text-2.1.fig b/macros/plain/contrib/js-misc/xfig/text-2.1.fig
new file mode 100644
index 0000000000..21c740e067
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig/text-2.1.fig
@@ -0,0 +1,3 @@
+#FIG 2.1
+80 2
+4 0 0 10 0 -1 0 0.00000 2 13 58 26 29 Hello, World
diff --git a/macros/plain/contrib/js-misc/xfig/text-2.1.latex b/macros/plain/contrib/js-misc/xfig/text-2.1.latex
new file mode 100644
index 0000000000..9eccd773f8
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig/text-2.1.latex
@@ -0,0 +1,26 @@
+\setlength{\unitlength}{0.012500in}%
+%
+\begingroup\makeatletter\ifx\SetFigFont\undefined
+% extract first six characters in \fmtname
+\def\x#1#2#3#4#5#6#7\relax{\def\x{#1#2#3#4#5#6}}%
+\expandafter\x\fmtname xxxxxx\relax \def\y{splain}%
+\ifx\x\y % LaTeX or SliTeX?
+\gdef\SetFigFont#1#2#3{%
+ \ifnum #1<17\tiny\else \ifnum #1<20\small\else
+ \ifnum #1<24\normalsize\else \ifnum #1<29\large\else
+ \ifnum #1<34\Large\else \ifnum #1<41\LARGE\else
+ \huge\fi\fi\fi\fi\fi\fi
+ \csname #3\endcsname}%
+\else
+\gdef\SetFigFont#1#2#3{\begingroup
+ \count@#1\relax \ifnum 25<\count@\count@25\fi
+ \def\x{\endgroup\@setsize\SetFigFont{#2pt}}%
+ \expandafter\x
+ \csname \romannumeral\the\count@ pt\expandafter\endcsname
+ \csname @\romannumeral\the\count@ pt\endcsname
+ \csname #3\endcsname}%
+\fi
+\fi\endgroup
+\begin{picture}(0,13)(27,810)
+\put( 27,810){\makebox(0,0)[lb]{\smash{\SetFigFont{10}{12.0}{rm}Hello, World}}}
+\end{picture}
diff --git a/macros/plain/contrib/js-misc/xfig/text-3.1-doc.tex b/macros/plain/contrib/js-misc/xfig/text-3.1-doc.tex
new file mode 100644
index 0000000000..2bde7ee926
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig/text-3.1-doc.tex
@@ -0,0 +1,27 @@
+% $Id: text-3.1-doc.tex,v 1.1 1995/05/07 16:52:38 schrod Exp $
+%------------------------------------------------------------
+
+%
+% Test for xfig text typesetting of transfig 3.1 output
+%
+
+
+\input ../xfig.tex
+
+$$
+\hbox{\input text-3.1.latex }
+$$
+
+
+
+\bye
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Local Variables:
+mode: plain-TeX
+TeX-parse-self: nil
+TeX-auto-save: nil
+TeX-master: t
+End:
diff --git a/macros/plain/contrib/js-misc/xfig/text-3.1.latex b/macros/plain/contrib/js-misc/xfig/text-3.1.latex
new file mode 100644
index 0000000000..c35c42a91a
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig/text-3.1.latex
@@ -0,0 +1,11 @@
+\setlength{\unitlength}{0.01250000in}%
+%
+\begingroup\makeatletter\ifx\SetFigFont\undefined%
+\gdef\SetFigFont#1#2#3#4#5{%
+ \reset@font\fontsize{#1}{#2pt}%
+ \fontfamily{#3}\fontseries{#4}\fontshape{#5}%
+ \selectfont}%
+\fi\endgroup%
+\begin{picture}(0,13)(27,808)
+\put( 27,810){\makebox(0,0)[lb]{\smash{\SetFigFont{10}{12.0}{\familydefault}{\mddefault}{\updefault}Hello, World}}}
+\end{picture}
diff --git a/macros/plain/contrib/lambda b/macros/plain/contrib/lambda
new file mode 120000
index 0000000000..c339f57571
--- /dev/null
+++ b/macros/plain/contrib/lambda
@@ -0,0 +1 @@
+../../generic/lambda-lists \ No newline at end of file
diff --git a/macros/plain/contrib/letter1/README b/macros/plain/contrib/letter1/README
new file mode 100644
index 0000000000..f0434e73f3
--- /dev/null
+++ b/macros/plain/contrib/letter1/README
@@ -0,0 +1,15 @@
+These files were originally to be found in CTAN directory
+
+ macros/plain/contrib/samples/
+
+While there is little doubt that the author was working at Texas A&M
+University, there seems to be no actual attribution, and searching the
+"usual sources" has turned up nothing.
+
+The code needs a file date.tex, whose job seems to be no more than to
+typeset a date.
+
+Robin Fairbairns
+
+CTAN cataloguer.
+
diff --git a/macros/plain/contrib/letter1/eebot.tex b/macros/plain/contrib/letter1/eebot.tex
new file mode 100644
index 0000000000..bfaf20360f
--- /dev/null
+++ b/macros/plain/contrib/letter1/eebot.tex
@@ -0,0 +1,4 @@
+\vfill\vbox{\bigskip\hrule\hbox{\vrule\vbox{\medskip
+\centerline{\zzfour COLLEGE OF ENGINEERING:~~TEACHING \zzbul\ RESEARCH \zzbul\
+EXTENSION}
+\medskip}\vrule}\hrule}\eject
diff --git a/macros/plain/contrib/letter1/eetop.tex b/macros/plain/contrib/letter1/eetop.tex
new file mode 100644
index 0000000000..fec4a1f99d
--- /dev/null
+++ b/macros/plain/contrib/letter1/eetop.tex
@@ -0,0 +1,23 @@
+\nopagenumbers
+\special{right=0,down=0}
+\hsize=7.0truein
+\hoffset=0.75truein
+\vsize=10truein
+\parskip=12pt
+\font\zzmath=amsy5 at5truept
+\def\zzbul{$\zzmath\bullet$}
+\voffset=0.8truein
+\font\zzone=ambx10 at13.8truept
+\font\zztwo=amss10 at10truept
+\font\zzthree=amssq8 at8truept
+\font\zzthreepointfive=amr8 at8truept
+\font\zzfour=amsl8 at8truept
+\vbox{\hrule\hbox{\vrule\vbox{\bigskip
+\centerline{\zzone TEXAS A\&M UNIVERSITY}
+\medskip
+\centerline{\zztwo DEPARTMENT OF ELECTRICAL ENGINEERING}
+\smallskip
+\centerline{{\zzthreepointfive COLLEGE STATION, TEXAS~~}{\zzthree 77843-3128}}
+\smallskip
+\centerline{\zzthree 409-845-7441}
+\medskip}\vrule}\hrule\bigskip}
diff --git a/macros/plain/contrib/letter1/letter1.tex b/macros/plain/contrib/letter1/letter1.tex
new file mode 100644
index 0000000000..606a35430c
--- /dev/null
+++ b/macros/plain/contrib/letter1/letter1.tex
@@ -0,0 +1,54 @@
+% needs files address1.tex, eebot.tex, eetop.tex + date.tex.
+%************************************************************
+\magnification=1200
+\def\YES{Y } \def\NO{N } \def\yes{y } \def\no{n }
+\def\stripspace#1 \next{#1}
+\message {Name of address file?}
+\read-1 to\file
+\openin1=\file
+\newif\ifnotdone
+\newdimen\longindentation \longindentation=4truein
+
+\loop
+\read1 to\address
+\ifeof1 \notdonefalse \else \notdonetrue \fi
+\ifnotdone
+ \read1 to\name
+ \edef\name{\expandafter\stripspace\name\next}
+ \input eetop
+ \input date
+ {\bigskip\leftskip=\longindentation \rm \today\bigskip\bigskip}
+ {\leftskip=.6truein\rightskip=.6truein
+ {\parskip=0pt\parindent=0pt\obeylines
+ \address
+ }
+ \noindent Dear \name:\endgraf
+ Thank you for your recent letter inquiring about a faculty position at Texas
+ A\&M University. We do expect to have several faculty positions open in
+ September and will be glad to consider your application for one of these
+ positions.\endgraf
+ \message{Include letter2 for \name?}
+ \read-1 to\answer
+ \ifx\answer\yes \input letter2
+ \else \ifx\answer\YES \input letter2 \fi\fi
+ \message{Include letter3 for \name?}
+ \read-1 to\answer
+ \ifx\answer\yes \input letter3
+ \else \ifx\answer\YES \input letter3 \fi\fi
+ \message{Include letter6 for \name?}
+ \read-1 to\answer
+ \ifx\answer\yes \input letter6
+ \else \ifx\answer\YES \input letter6 \fi\fi
+ {\parskip=0pt\obeylines
+ {\nobreak\bigskip \leftskip=\longindentation Sincerely,
+ \nobreak\bigskip\bigskip\bigskip % space for the signature
+ W. B. Jones\endgraf
+ Professor and Head
+ {\endgraf\nobreak}}}
+ \bigskip
+ \noindent WBJ/jrn\endgraf
+ }
+ \input eebot
+\repeat
+\closein1
+\end
diff --git a/macros/plain/contrib/lextex/example1.tex b/macros/plain/contrib/lextex/example1.tex
new file mode 100644
index 0000000000..4f673d6aec
--- /dev/null
+++ b/macros/plain/contrib/lextex/example1.tex
@@ -0,0 +1,215 @@
+% This is a demonstration file, intended to show what LeXTeX does.
+% The method of processing it depends upon whether you have turned
+% LeXTeX into a format file or not. If you have not you should type
+%
+% TEX &PLAIN EXAMPLE1
+%
+% If LeXTeX has been converted into a format file the command is
+% TEX &LEXTEX EXAMPLE1
+%
+% In the latter case the line further down which reads
+% "\input lextex" can be deleted although leaving it alone will
+% not cause any problem.
+%
+% In TeX everything that follows a percent sign (%) is a comment.
+% As a result, these lines will not show up in the final
+% printed document.
+% You can, of course, amend the file in whatever way you choose
+% (although some amnedments are likely to have odd effects)
+%
+% The next few lines provide some information used in processing
+% the file. The command \bstitle need only be used when formatting
+% an Opinion or a draft in a non-litigious matter. It sets the
+% title to be used on the backsheet.
+%
+% \solsref is the Solicitors' internal refererence.
+%
+% \colsref is the ACE case reference, omitting Counsel's initials.
+%
+% (These will be set by the command \col{XYZ} in the rhlocal.tex
+% file which accompanies LeXTeX. The signature at the end is
+% produced by the command \counsel{JOHN SMITH} in the same file.)
+%
+% The remaining commands provide information to the Clerks for
+% charging purposes.
+%
+% It may be found useful to keep a copy of these commands in a
+% separate file or in a macro.
+%
+% Note that in the clauses which follow various commands are
+% surrounded by vertical bar characters (|). Do not type
+% these bars. They are there simply to enable the command name
+% to be printed in the file instead of being interpeted
+% by LeXTeX.
+
+
+\input lextex
+\bstitle{}
+\solsref{}
+\colsref{SUEGRA/2} % Omit Counsel's initials
+\timetaken{} % hours \casetype{}
+\value{} % omit pound sign
+\difficulty{} % out of 10
+\proposedfee{} % omit pound sign
+\legalaidno{}
+\comment{}
+
+% The next command tells LeXTeX that the case is in the Chancery
+% Division. It can be altered to \qb or \family. It can also be
+% given the full (or partial) case reference, eg \ch{1991 X 1234}
+% or \qb{1989}.
+
+\ch
+
+\plaintiff{ANTHONY ARCHER}
+
+\plaintiff{JOSEPH GRUNDY}
+
+\defendant{BRIAN ALDRIDGE}
+
+\defendant{JENNIFER ALDRIDGE}
+\defendant{FRED BLOGS}
+
+\writ
+
+\cl This file is intended to demonstrate various things,
+such as the way in which the names and addresses of the
+parties are formatted. If the command |\writ| immediately
+above this clause is changed to |\os| the file will be
+formatted as an Originating Summons.
+
+\cl The addresses of the parties will be left blank in the
+writ or originating summons. If they are know they can be
+inserted by using the command |\of{Brookfield Farm,
+Ambridge}|. Two parties having the same address can be linked
+by the word |\and|; this will, as might be expected, insert
+``and'' between their names. If there are, say, three
+parties having the same address the first two can be linked
+by |\nand| and the second and third by |\and|. (The macros
+which achieve this are not yet perfect, however.) If one
+address is given, then an address must be given for all
+parties, even if it takes the form |\of{\noaddr}|.
+
+
+\cl \TeX\ can produce various accents, although there are
+not, of course, many accented English words. Here are a few
+accents. Pr\^et \`a na\"\i ve.
+
+\cl The Plaintiffs were induced to enter into an agreement
+by the representation of the Defendants that the Defendants
+had an account at the Borchester Branch of B.C.C.I. from
+which a certain sum would be paid. The representation was
+implied by the drawing of a cheque by the Defendants. The
+representation was untrue in that the Defendants had no such
+account. The representation was made falsely and
+fraudulently by the Defendants in order to induce the
+Plaintiffs to deliver a motor car to the Defendants. This
+paragraph has been adapted from Volume~39 of \bo Atkin's
+Court Forms\ok and is as such is no doubt copyright
+(\copyright) Butterworths.
+
+\cl Note that one of the items set out at the top of the
+file and referred to above is |\colsref{SUEGRA/2}|. This is
+the case reference as it appears in the ACE accounting
+system. \LeXTeX\ extracts Sue Grabbit \& Runne's name and
+address from a file and inserts it into the proper place in
+this document. Note that |SUEGRA| must be in capitals and
+that the initials of the Counsel concerned are set in the
+|RHLOCAL| file which accompanies \LeXTeX.
+
+\cl If this is an Originating Summons then of course the
+next command should be removed.
+
+\claim
+
+\cl An Order that the Defendants should do something or
+other
+
+\cl Liberty to apply
+
+\cl Costs
+
+\amended\soc
+
+\cl The command |\soc| produceds a Statement of Claim. If it
+is changed to, for example, |\defence| the format of the
+document will change. (Note that if a Writ and a Defence are
+inclided in the same file \LeXTeX\ may become slightly confused
+as to which party you are acting.) The command |\amended|
+produces an amended Statement of Claim or other document.
+
+\cl The \forwhom\ \wants\ that the statements of the
+\notforwhom\ are a load of piffle. (It is not, of course,
+normal to use {\tt\string\forwhom}, {\tt\string\notforwhom}
+and {\tt\string\wants} in this way; you are expected to
+know for whom you act.)
+
+\cl How about an accent or two? Pr\^et \`a na\"\i ve.
+
+\cl The Plaintiffs were induced to enter into an agreement
+by the representation of the Defendants that the Defendants
+had an account at the Borchester Branch of B.C.C.I. from
+which a certain sum would be paid. {\xo The representation
+was implied by the drawing of a cheque by the Defendants.}
+{\ul The representation was contained in a letter from the
+Defendants to the Plaintiffs dated the 20th July 1991.} The
+representation was untrue in that the Defendants had no such
+account. The representation was made falsely and
+fraudulently by the Defendants in order to induce the
+Plaintiffs to deliver a motor car to the Defendants. This
+paragraph has been adapted from Volume~39 of \bo Atkin's
+Court Forms\ok and is as such no doubt copyright
+(\copyright) Butterworths.
+
+{\ul\acl This is an additional clause
+
+\acl This is another}
+
+\claim
+
+\cl An Order that the Defendants should do something or
+other
+
+\cl Liberty to apply
+
+\cl Costs
+
+\deponent{JACK WOOLEY}
+ \of{Gray Gables, Ambridge, Borchester}
+ \occupation{Hotel Proprietor}
+
+\affidavit
+
+\cl The command |\deponent| must precede the command
+|\affidavit|. The commands |\of{[address]}| and
+|\occupation{[Occupation]}| are optional; if they are
+omitted a suitable comment will be added.
+
+\cl I am the owner of the above-mentioned hotel.
+
+\cl There is now \exhibited the Conveyance of it to me dated
+the 1st April 1955. Note that the exhibits are automatically
+numbered by the cfommand |\exhibited| and the similar
+command |\bundled|.
+
+\cl The accounts for the last five years are now \bundled.
+
+\cl If an affidavit is the only document in the file \LeXTeX\
+will assume that it is to be filed on behalf of the
+Defendant(s). If this is not the case it should be preceded
+by the command |\clientpltrue|.
+
+\cl This paragraph is included simply to bulk things out a
+little bit so that the affidavit extends over onto the next
+page.
+
+\opinion
+I have settled the appropriate documents for the
+consideration of my Instructing Solicitors. I have no
+comments to make on them.
+
+To change this Opinion into an Advice, simply change |\opinion|
+at the top of the file to |\advice|.
+
+\bye
+
diff --git a/macros/plain/contrib/lextex/lextex.tex b/macros/plain/contrib/lextex/lextex.tex
new file mode 100644
index 0000000000..e6c82ec134
--- /dev/null
+++ b/macros/plain/contrib/lextex/lextex.tex
@@ -0,0 +1,4273 @@
+%$Log: TeX $
+%Revision 1.1 91/10/30 15:08:24 RC-HH
+%Initial revision
+% Amendments made 08/11/91
+% \colsref amended (/ deleted)
+% \getaddress amended (/ added)
+% \bsdft altered by adding conditionals (ifx sols, sref, cref)
+% \nsnbp changed to \nsnbps (\space added) and \nsn added
+% The names of these should, perhaps be changed to include @
+% Alterations to \xref and \newxref to ensure correct updating
+% Alteration to \arrangement
+% \global added in \party in one place. May need adding in others
+% Alterations to \chittitle (for use in \faxsheet)
+% Minor alteration to \advising
+% Alteration to \familydivision and to \family and assoc macros
+% \pleadingtrue added to \ch etc, \pleading false as default
+% Alteration to affidavit to correct error
+% \clientpltrue added in \specialwrit
+% \sjsummons altered: do same to others
+% \origprocess : \par added after #2
+% \widowpenalty added to \pageparameters and \draftparameters
+% \string added in \write statement in \schedule
+% Alterations to \schedref and \appendref to deal with singles
+% Added \pararef = to \clref
+% Minor alterations to correct pagenumbering---check
+% Duplicate definition of \faxsheet removed
+% \everyjob added
+% Minor alterations re \workdone
+% Minor alteration to \plainoutput. \count1 & 2 swapped
+% 12 Nov 91 Alteration made to \maxpartywidth
+% and to \resetpleadingdefaults
+% Many %% removed
+% 20 Nov 1991
+% Minor alterations to \today and \everyjob
+% \makeatletter \makeatother added
+% time macros (taken from gentle.tex) added
+% 21 Nov 1991
+% TUBboat.sty macros added to remove spaces
+% \oldquotes and ancilliary macros added
+% \futureday etc and \dayofweek added
+
+
+% This is LeXTeX, by Roger C-H. Horne.
+% Some of it is original, and some is not.
+% e.g., it takes chunks from manmac.tex relating to font sizing
+% and amends those to include poundsigns
+% It also takes footnotes from AMSptt.sty
+% And uses a number of macros that have appeared in TUGboat
+%
+% The present version is an amalgamation of two files---and it shows.
+%
+% Last modified 21th November 1991
+
+% Introduction (ie general purpose stuff)
+%
+\newif\ifdebugging
+\def\dbhelp#1{\ifdebugging\inform{#1}\fi}
+\debuggingfalse
+
+\ifx\lextexisloaded\relax\message{ - already loaded}
+ \afterassignment\endinput
+ \else\let\lextexisloaded=\relax
+ \fi
+
+\def\fmtname{LeXTeX}\def\fmtversion{1.005}
+\message{Version \fmtversion}
+
+\catcode`@=11 % Turn the `at' sign into a letter.
+\catcode`\^=7 % Ensure that ^ is superscript.
+%\catcode`\|=12% Ensure that | is `other'.
+
+% time macros
+\newcount\hour \newcount\minute
+\def\mm@{\ifnum \minute<10 0\fi\number\minute}
+\def\writetime{\hh@\mm@\space\am@pm}
+
+\everyjob{%
+ \hour=\time \divide \hour by 60
+ \minute=\time
+ \loop \ifnum \minute > 59 \advance \minute by -60 \repeat
+ \ifnum \hour<13
+ \def\hh@{\number\hour:}% % supresses leading 0's
+ \def\am@pm{\ifnum \hour < 12 a.m.\else p.m.\fi}
+ \else \advance \hour by -12
+ \def\hh@{\number\hour:}% % supresses leading 0's \fi
+ \def\am@pm{\ifnum \hour > 11 a.m.\else p.m.\fi}
+ \fi
+ \inform{}%
+ \inform{This is LeXTeX, Version \fmtversion, running at \writetime}%
+ \inform{\space\space on the \today.}%
+ \inform{}%
+ \inform{Comments and bug reports to}%
+ \inform{}%
+ \inform{\space\space Roger Horne}%
+ \inform{\space\space 7 New Square}%
+ \inform{\space\space Lincoln's Inn}%
+ \inform{\space\space London WC2A 3QS}%
+ \inform{\space\space rhorne@cix.compulink.co.uk}%
+ \inform{}%
+ }
+
+% LeX TeX logo---looking distinctly similar to \LaTeX...
+%
+\def\LeXTeX{L\kern-.25em\raise.5ex\hbox{ex}T\kern-.1667em\lower
+ .5ex\hbox{E}\kern-.125emX}
+% The LaTeX logo sometimes looks like this (it varies a little)
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\scaps a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+
+% Part 1 - Fonts etc---
+
+% Main maths + roman---
+
+\font\tentex=cmtex10
+\font\twelverm=cmr12
+\font\ninerm=cmr9
+\font\eightrm=cmr8
+\font\sixrm=cmr6
+\font\fiverm=cmr5
+
+% Maths italic---
+
+\font\twelvei=cmmi12
+\font\ninei=cmmi9
+\font\eighti=cmmi8 % This is used as a scriptfont
+\font\sixi=cmmi6 % reinstated for the time being
+\skewchar\twelvei='177
+\skewchar\ninei='177 \skewchar\eighti='177
+\skewchar\sixi='177
+
+% Math symbols---
+
+\font\twelvesy=cmsy10 scaled \magstep1
+\font\ninesy=cmsy9
+\font\eightsy=cmsy8 % used as a scriptfont
+\font\sixsy=cmsy6 % reinstated
+\skewchar\twelvesy='60
+\skewchar\ninesy='60
+\skewchar\eightsy='60
+\skewchar\sixsy='60
+
+% Bold extended---
+
+\font\twelvebf=cmbx12
+\font\ninebf=cmbx9
+
+% Typewriter style---
+
+\font\twelvett=cmtt12 % Now not using proportional version
+%\font\twelvett=cmvtt10 scaled \magstep1
+%\font\tentt=cmvtt10
+\font\tentt=cmtt10
+\font\ninett=cmtt9
+
+% Slanted type---
+
+\font\twelvesl=cmsl12
+\font\ninesl=cmsl9
+
+% Italic---
+
+\font\twelveit=cmti12
+\font\nineit=cmti9
+
+% Odd fonts---
+
+\font\headerfont=cmr12 scaled \magstep1
+\font\titlefont=cmr12 scaled \magstephalf
+
+% Now the poundsign fonts:
+
+\font\tenu=cmu10 % unslanted text italic
+\font\twelveu=cmu10 scaled \magstep1
+\font\tentiit=cmitt10
+
+% And the caps and small caps fonts:
+
+\font\fourteencaps=cmcsc10 scaled \magstep2
+\font\twelvecaps=cmcsc10 scaled \magstep1
+\font\tencaps=cmcsc10
+
+% The underline and cross-out macros
+
+\def\gobble#1{}
+
+\def\changefont#1{%
+ \edef\testfontname{#1\fontname\font}%
+ \edef\testfont{\expandafter\string\the\font}%
+ \edef\testtwo{#1\expandafter\gobble\testfont}%
+ \edef\testthree{\csname\testtwo\endcsname}%
+ \expandafter\ifx\csname\testtwo\endcsname\relax
+ \global\expandafter\font\testthree\expandafter=\testfontname
+ \fi\ignorespaces
+ \let\temppounds=\pounds
+ \testthree\ignorespaces}
+
+\gdef\ul{\changefont{u}
+ \def\pounds{%
+ \setbox1\hbox{\temppounds}%
+ \setbox2\hbox{p}%
+ \copy1\kern-\wd1
+ \vrule depth .6\dp2 height -.45\dp2 width\wd1
+ \relax}%
+ }
+
+\gdef\xo{\changefont{x}
+ \def\pounds{%
+ \setbox1\hbox{\temppounds}%
+ \setbox2\hbox{p}%
+ \copy1\kern-\wd1
+ \vrule depth -.35ex height .45ex width\wd1
+ \relax}%
+ }
+
+\def\xu{\changefont{xu}}
+\let\xul\xu
+
+% The next ones are at present somewhat abbreviated
+% ie, poundsigns will not be crossed-out or underlined properly
+
+\gdef\uul{\changefont{uu}}
+\gdef\xxo{\changefont{xx}}
+\gdef\uuul{\changefont{uuu}}
+\gdef\xxxo{\changefont{xxx}}
+
+% It will also be necessary in due course to define
+% \def\xxu - inserted by am1, deleted by am2
+% \def\xxxu - inserted by am1, deleted by am3
+% \def\xxxuu - inserted by am2, deleted by am3
+
+% Part 2 - Dimensions, etc.
+
+\newdimen\footindent % fn indentation
+\newdimen\clindent % clause indentation
+\newdimen\sclindent % sub-clause indentation
+\newdimen\ssclindent
+\newdimen\sssclindent
+\newdimen\ssssclindent
+\newdimen\sssssclindent
+\newdimen\cnindent % "computer-numbering" indentation
+\newdimen\hclindent % hanging indentation
+\newdimen\hsclindent
+\newdimen\hssclindent
+\newdimen\hsssclindent
+\newdimen\hssssclindent
+\newdimen\hsssssclindent
+\newdimen\quoteindent % indentation of quotations
+\newdimen\quoteparindent % \parindent in quotes
+\newdimen\clbox % box holding \cl in \clcont
+%\newdimen\sclbox % not used yet
+%\newdimen\ssclbox
+%\newdimen\sssclbox
+%\newdimen\ssssclbox
+%\newdimen\sssssclbox
+\newdimen\signindent % indentation of signature
+\newdimen\rbracketsize % size of brackets round sworn, etc
+\newdimen\lbracketsize
+\newdimen\brackdepth % Depth of space in sworn etc
+\newdimen\notespace % space marginal notes--text
+\newdimen\maxnote % width of marginal note
+\newdimen\clnamelength % length of "clause" in contents macros
+\newdimen\pagewidth % alternative name for \hsize
+\newdimen\pageheight % alternative name for \vsize
+
+\newcount\footmarkcount@ % No. of footnotes
+\newcount\recno % recitals
+\newcount\clno % clauses and sub-clauses
+\newcount\sclno
+\newcount\ssclno % sub-sub etc
+\newcount\sssclno
+\newcount\ssssclno
+\newcount\sssssclno
+\newcount\greekno % see \ssscl & \sssscl
+\newcount\cardno % see \sssscl & \ssssscl
+\newcount\exno % Exhibits in affidavits
+\newcount\clauselevel
+\newcount\ssdcount \ssdcount=0 % new
+\newcount\schedcount \schedcount=0
+\newcount\partcount \partcount=0
+
+\newskip\quoteparskip %parskip in quotes
+\newskip\ttglue
+\newskip\blankskip % Used in \noaddr etc
+\newskip\twelvebase % \normalbaselines (12pt type)
+\newskip\tenbase % \normalbaselines (10pt type)
+\newskip\ninebase % \normalbaselines (9pt type)
+\newskip\twelvesmallskipamount % TB p. 349
+\newskip\tensmallskipamount
+\newskip\ninesmallskipamount
+\newskip\twelvemedskipamount
+\newskip\tenmedskipamount
+\newskip\ninemedskipamount
+\newskip\twelvebigskipamount
+\newskip\tenbigskipamount
+\newskip\ninebigskipamount
+\newskip\settledgap % distance between settled & sig.
+\newskip\clskip % vskip for clauses
+\newskip\sclskip % vskip for sub-clauses
+\newskip\ssclskip % ditto ss-clauses
+\newskip\sssclskip % ditto sss-clauses
+
+\newif\ifgreek % see \sssscl
+\newif\ifcard % see \ssssscl
+\newif\ifclind % hanging indentation in clauses
+\newif\ifcontents % table of contents produced
+\newif\ifnocommaindate % used in \today
+\newif\ifq % Used (?) in the quote macros
+\newif\ifxrfmissing % cross-refs file
+\newif\ifvisible % used in contents
+\newif\ifmarginalnotes % if true, notes in margin
+\newif\ifxrefs % check this
+\newif\ifoldxrffile %
+\newif\ifindex
+\newif\iffullsize \fullsizefalse% Whether fullsize backsheet
+\newif\ifdraft \drafttrue% Draft or engrossment
+\newif\ifpleading % No date req'd for pleadings
+\newif\ifucfirstline % \ucfirstlinetrue
+\newif\ifchit % print a fee chit
+\newif\ifendorsement \endorsementfalse
+
+\newread\xrf
+\newread\inx
+
+\newwrite\cont
+\newwrite\inx
+\newwrite\xrf
+
+
+% Part 3 - Now add the poundsign macros:
+
+\def\rmpo{\leavevmode\lower.055ex\hbox{\$}\kern-.0em}
+\def\itpo{\leavevmode\lower.055ex\hbox{\$}\kern-.09em}
+\def\slpo{\leavevmode\lower.055ex\hbox{\$}\kern-.07em}
+\def\bfpo{\leavevmode\pmb{\lower.025ex\hbox{\$}\kern-.04em}}
+\def\ttpo{\leavevmode\lower.0ex\hbox{\$}\kern0em}
+\def\ttkludgepo{\leavevmode\epmb{\lower.0ex\hbox{\$}\kern-.0em}}
+
+\def\pmb#1{\setbox0=\hbox{#1}% Poor man's bold
+ \kern-.025em\copy0\kern-\wd0
+ \kern.05em\copy0\kern-\wd0
+ \kern-.025em\raise.0003em\box0 }
+
+\def\epmb#1{\setbox0=\hbox{#1}% Extremely poor man's bold
+ \kern-.005em\copy0\kern-\wd0
+ \raise.015em\copy0\kern-\wd0
+ \kern.01em\copy0\kern-\wd0
+ \kern-.005em\raise.015em\box0 }
+
+
+% Part 4 - The size-changing macros
+
+% These are adapted from the 10-point manmac macros
+% Script and scriptscrip removed except in \rm
+
+\def\twelvepoint{\def\rm{\def\pounds{{\twelveu\rmpo}}\fam0\twelverm}%
+ \textfont0=\twelverm \scriptfont0=\eightrm \scriptscriptfont0=\sixrm
+ \textfont1=\twelvei \scriptfont1=\eighti \scriptscriptfont1=\sixi
+ \textfont2=\twelvesy \scriptfont2=\eightsy \scriptscriptfont2=\sixsy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\def\pounds{{\itpo}}\fam\itfam\twelveit}%
+ \textfont\itfam=\twelveit
+ \def\sl{\def\pounds{{\twelveit\slpo}}\fam\slfam\twelvesl}%
+ \textfont\slfam=\twelvesl
+ \def\bf{\def\pounds{{\twelveu\bfpo}}\fam\bffam\twelvebf}% pmb poundsign
+ \textfont\bffam=\twelvebf
+ \def\tt{\def\pounds{{\tenu\ttkludgepo}}\fam\ttfam\twelvett}% ! poundsign
+ \textfont\ttfam=\twelvett
+ \tt \ttglue=.5em plus.25em minus.15em % not needed for cmvtt fonts
+ \normalbaselineskip=\twelvebase
+ \smallskipamount=\twelvesmallskipamount
+ \medskipamount=\twelvemedskipamount
+ \bigskipamount=\twelvebigskipamount
+ \def\caps{\def\pounds{~}\fourteencaps}% don't use the pound sign
+ \def\scaps{\def\pounds{{\twelveu\rmpo}}\twelvecaps}%
+ \setbox\strutbox=\hbox{\vrule height.7\normalbaselineskip
+ depth.3\normalbaselineskip width\z@}%
+ \normalbaselines\rm}
+% consider changing normalbaselineskip to \the\twelvebase
+
+\def\tenpoint{\def\rm{\def\pounds{{\tenu\rmpo}}\fam0\tenrm}%
+ \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+ \textfont1=\teni
+ \textfont2=\tensy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\def\pounds{{\itpo}}\fam\itfam\tenit}%
+ \textfont\itfam=\tenit
+ \def\sl{\def\pounds{{\tenit\slpo}}\fam\slfam\tensl}%
+ \textfont\slfam=\tensl
+ \def\bf{\def\pounds{{\tenu\bfpo}}\fam\bffam\tenbf}%
+ \textfont\bffam=\tenbf
+ \def\tt{\def\pounds{{\tentiit\ttpo}}\fam\ttfam\tentt}%
+ \textfont\ttfam=\tentt
+ \tt \ttglue=.5em plus.25em minus.15em
+ \smallskipamount=\tensmallskipamount
+ \medskipamount=\tenmedskipamount
+ \bigskipamount=\tenbigskipamount
+ \normalbaselineskip=\tenbase
+ \def\caps{\def\pounds{{\twelveu\rmpo}}\twelvecaps}%
+ \def\scaps{\def\pounds{{\tenu\rmpo}}\tencaps}%
+ \setbox\strutbox=\hbox{\vrule height10pt depth5pt width\z@}%
+ \normalbaselines\rm}
+
+\def\ninepoint{\def\rm{\def\pounds{{\nineit\slpo}}\fam0\ninerm}%
+ \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\ninei
+ \textfont2=\ninesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\def\pounds{{\nineit\itpo}}\fam\itfam\nineit}%
+ \textfont\itfam=\nineit
+ \def\sl{\def\pounds{{\nineit\slpo}}\fam\slfam\ninesl}%
+ \textfont\slfam=\ninesl
+ \def\bf{\def\pounds{~}\fam\bffam\ninebf}% pound sign to be added
+ \textfont\bffam=\ninebf
+ \def\tt{\def\pounds{~}\fam\ttfam\ninett}% no pound sign
+ \textfont\ttfam=\ninett
+ \tt \ttglue=.5em plus.25em minus.15em
+ \smallskipamount=\ninesmallskipamount
+ \medskipamount=\ninemedskipamount
+ \bigskipamount=\ninebigskipamount
+ \normalbaselineskip=\ninebase
+ \setbox\strutbox=\hbox{\vrule height8pt depth3pt width\z@}%
+ \normalbaselines\rm}
+
+
+% Part 5 - Footnotes
+
+% These are adapted from the AMSTeX macros
+% For details of usage see "The Joy of TeX" by Spivak M.D.
+
+\def\relaxnext@{\let\next\relax}
+
+% This is new. Adaption of \hang etc (Vol.B p.355)
+
+\def\fang{\hangindent\footindent}
+\def\fitem{\par\fang\toeindent}
+\def\toeindent#1{\noindent\hbox to \footindent{\hss#1\thinspace}}
+
+% This is where AMSPPT.STY is added:
+
+\def\footmarkform@#1{$^{#1}$}
+\let\thefootnotemark\footmarkform@
+\def\makefootnote@#1#2{\insert\footins
+ {\interlinepenalty\interfootnotelinepenalty
+% The original (AMSTeX) uses 8-point:
+ \ninepoint\splittopskip\ht\strutbox\splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM\leftskip\z@\rightskip\z@
+ \spaceskip\z@\xspaceskip\z@
+% This differs from the original:
+ \fitem{#1}\footstrut\ignorespaces#2\unskip\lower\dp\strutbox
+ \vbox to\dp\strutbox{}}}
+ \footmarkcount@\z@
+\def\footnotemark{%
+ \let\@sf\empty\relaxnext@\ifhmode\edef
+ \@sf{\spacefactor\the\spacefactor}\/\fi
+ \def\next@{\ifx[\next\let\next\nextii@\else
+ \ifx"\next\let\next\nextiii@\else
+ \let\next\nextiv@\fi\fi\next}% and from here
+ \def\nextii@[##1]{\footmarkform@{##1}\@sf}%
+ \def\nextiii@"##1"{{##1}\@sf}%
+ \def\nextiv@{{\scriptfont0=\sevenrm % scriptfont changed to 7pt
+ \global\advance\footmarkcount@\@ne
+ \footmarkform@{\number\footmarkcount@}\@sf}}%
+ \futurelet\next\next@}
+\def\footnotetext{\relaxnext@
+ \def\next@{\ifx[\next\let\next\nextii@\else
+ \ifx"\next\let\next\nextiii@\else
+ \let\next\nextiv@\fi\fi\next}%
+ \def\nextii@[##1]##2{\makefootnote@{%
+ \footmarkform@{##1}}{{\frenchspacing##2}}}% {\frenchspacing} added
+ \def\nextiii@"##1"##2{\makefootnote@{##1}{{\frenchspacing##2}}}%
+ \def\nextiv@##1{\makefootnote@{%
+ \footmarkform@{\number\footmarkcount@}}{{\frenchspacing}##1}}%
+ \futurelet\next\next@}
+\def\footnote{\let\@sf\empty\relaxnext@\ifhmode\edef
+ \@sf{\spacefactor\the\spacefactor}\/\fi
+ \def\next@{\ifx[\next\let\next\nextii@\else
+ \ifx"\next\let\next\nextiii@\else
+ \let\next\nextiv@\fi\fi\next}%
+ \def\nextii@[##1]##2{%
+ \footnotemark[##1]\footnotetext[##1]{{\frenchspacing##2}}}%
+ \def\nextiii@"##1"##2{%
+ \footnotemark"##1"\footnotetext"##1"{{\frenchspacing##2}}}%
+ \def\nextiv@##1{\footnotemark\footnotetext{{\frenchspacing##1}}}%
+ \futurelet\next\next@}
+\def\adjustfootnotemark#1{\advance\footmarkcount@#1\relax}
+
+\def\ref{\unskip\footnote}% Remove space from \se if necessary
+
+% Prevent footnote splitting
+
+\interfootnotelinepenalty=10000 % No splitting of footnotes
+\skip\footins=12pt plus 2pt minus 4pt
+% space added when footnote is present - taken from manmac
+
+
+% Part 6 - Macros to set all counts to zero
+
+\def\clearnotenumber{\footmarkcount@\z@} % footnote counter
+\def\clearrecno{\recno=64} % Recital counter: 65 is `A'
+\def\clearclno{\clno=0} % Clause etc counters
+\def\clearsclno{\sclno=0}
+\def\clearssclno{\ssclno=96} % 97 is `a'
+\def\clearsssclno{\sssclno=0}
+\def\clearssssclno{\ssssclno=96}
+\def\clearsssssclno{\sssssclno=96}
+\def\cleargreekno{\greekno="010A} % "010B is alpha "027C is heart
+\def\clearcardno{\cardno="027B} % "027C is heart-suit
+\def\clearexno{\exno=0} % exhibits
+\def\clearpageno{\pageno=1 \footline={\hss\tenrm\folio\hss}}
+
+\def\reset{%
+ \clearrecno
+ \clearclno
+ \clearsclno
+ \clearssclno
+ \clearsssclno
+ \clearssssclno
+ \clearsssssclno
+ \cleargreekno
+ \clearcardno
+ \clearexno
+ \clearnotenumber
+ \clearpageno
+ \clauselevel=0}
+
+
+% Part 7 - Automatic clause numbering
+
+% The #1 in \xcl etc. is the clause number
+% These macros do not increase the count regs.
+% \ignorespaces is used to excess since these macros
+% can be abused somewhat - leading to odd spaces
+% appearing in unexpected places!
+
+\def\xcl#1{\clearsclno% Set scl counter to zero
+ \dimen0=\the\parindent\parindent=0pt% store current setting
+ \ifclind \hangindent=\clindent \else\hangindent=\hclindent\fi
+ \clauselevel=1
+ \hangafter=1
+ \vskip\clskip
+ \edef\testit{#1}%
+ \ifx\testit\empty\hangafter0\noindent
+ \else
+ \leavevmode\hbox to\clindent{%
+ \ignorespaces#1\hfil}\ignorespaces
+ \fi
+ \parindent=\the\dimen0\relax
+ \ignorespaces}
+
+\def\xscl#1{\clearssclno %
+ \dimen0=\the\parindent \parindent=0pt
+ % Note the difference between next line and same in \xsscl
+ % This seems to be essential
+ \ifnum\prevgraf=0\kern-\clindent\else\vskip\sclskip\fi
+ \ifclind \hangindent=\sclindent \else\hangindent=\hsclindent\fi
+ \clauselevel=2
+ \hangafter=1
+ \edef\testit{#1}%
+ \ifx\testit\empty\hangafter0\noindent
+ \else\leavevmode\unskip\hbox to \sclindent{%
+ \hskip\clindent\ignorespaces #1\hfil}%
+ \ignorespaces
+ \fi
+ \parindent=\the\dimen0\relax
+ \unskip\ignorespaces}
+
+\def\xsscl#1{\clearsssclno % \advance\ssclno by 1
+ \dimen0=\the\parindent \parindent=0pt
+ \ifdim\hangindent>0pt \kern-\sclindent\else\vskip\ssclskip\fi
+ \ifclind \hangindent=\ssclindent \else\hangindent=\hssclindent\fi
+ \clauselevel=3
+ \hangafter=1
+ \edef\testit{#1}%
+ \ifx\testit\empty\hangafter0\noindent
+ \else
+ \leavevmode\unskip\hbox to \ssclindent{%
+ \hskip\sclindent
+ \ignorespaces #1\hfil}\ignorespaces
+ \fi
+ \parindent=\the\dimen0\relax
+ \unskip\ignorespaces}
+
+\def\xssscl#1{\clearssssclno \cleargreekno % \advance\sssclno by 1
+ \dimen0=\the\parindent \parindent=0pt
+ \ifdim\hangindent>0pt \kern-\ssclindent\else\vskip\sssclskip\fi
+ \ifclind \hangindent=\sssclindent \else\hangindent=\hsssclindent\fi
+ \clauselevel=4
+ \hangafter=1
+ \edef\testit{#1}%
+ \ifx\testit\empty\hangafter0\noindent
+ \else
+ \leavevmode\unskip\hbox to \sssclindent{%
+ \hskip\ssclindent
+ \ignorespaces #1\hfil}\ignorespaces
+ \fi
+ \parindent=\the\dimen0\relax
+ \aftergroup\ignorespaces}
+
+\def\xsssscl#1{\clearsssssclno \clearcardno
+ \dimen0=\the\parindent \parindent=0pt
+ \ifdim\hangindent>0pt \kern-\sssclindent\fi
+ \ifclind \hangindent=\ssssclindent \else\hangindent=\hssssclindent\fi
+ \clauselevel=5 % This is not used as yet
+ \hangafter=1
+ \edef\testit{#1}%
+ \ifx\testit\empty\hangafter0\noindent
+ \else
+ \leavevmode\unskip\hbox to \ssssclindent{%
+ \hskip\sssclindent
+ \ignorespaces #1\hfil}\ignorespaces
+ \fi
+ \parindent=\the\dimen0\relax
+ \aftergroup\ignorespaces}
+
+\def\xssssscl#1{% Nothing to clear!
+ \dimen0=\the\parindent \parindent=0pt
+ \ifdim\hangindent>0pt \kern-\ssssclindent\fi
+ \ifclind \hangindent=\sssssclindent
+ \else\hangindent=\hsssssclindent\fi
+ \clauselevel=6
+ \hangafter=1
+ \edef\testit{#1}%
+ \ifx\testit\empty\hangafter0\noindent
+ \else
+ \leavevmode\unskip\hbox to \sssssclindent{%
+ \hskip\ssssclindent
+ \ignorespaces #1\hfil}\ignorespaces
+ \fi
+ \parindent=\the\dimen0\relax
+ \aftergroup\ignorespaces}
+
+% The Recital macros use \xcl and \xscl
+% Recitals have the same indentation as Clauses.
+
+\def\rec{\clauselevel=0%
+ \advance\recno by1 \xcl{(\char\the\recno)}}% Letter A
+\def\srec{\clauselevel=0
+ \advance\sclno by1 \xscl{(\romannumeral\the\sclno)}}% Small Roman i
+
+% Now Clauses etc
+
+\def\normalnumbering{%
+ \def\cl{\advance\clno by1\xcl{\the\clno.}}%
+ \def\scl{\advance\sclno by1\xscl{(\the\sclno)}}%
+ \def\sscl{\advance\ssclno by1\xsscl{(\char\the\ssclno)}}%
+ \def\ssscl{\advance\sssclno by1\xssscl{%
+ (\romannumeral\the\sssclno)}}%
+ \def\sssscl{\advance\ssssclno by1 \advance\greekno by1\xsssscl{%
+ \ifgreek($\mathchar\the\greekno$)
+ \else(\char\the\ssssclno\char\the\ssssclno)\fi}}%
+ \def\ssssscl{\advance\sssssclno by1 \advance\cardno by1\xssssscl{%
+ \ifcard($\mathchar\the\cardno$)
+ \else\ifgreek(\char\the\sssssclno\char\the\sssssclno)
+ \else(\char\the\sssssclno\char\the\sssssclno
+ \char\the\sssssclno)\fi\fi}}}
+
+\def\computernumbering{%
+ \clindent=\the\cnindent
+ \sclindent=\the\cnindent
+ \ssclindent=\the\cnindent
+ \sssclindent=\the\cnindent
+ \ssssclindent=\the\cnindent
+ \sssssclindent=\the\cnindent
+ \hclindent=0pt % Indentation of clauses if clindfalse
+ \hsclindent=0pt
+ \hssclindent=0pt
+ \hsssclindent=0pt
+ \hssssclindent=0pt
+ \hsssssclindent=0pt
+ \def\clearssclno{\ssclno=0}% 97 is `a'
+ \def\clearssssclno{\ssssclno=0}%
+ \def\clearsssssclno{\sssssclno=0}%
+ \def\clearrecno{\recno=0}%
+ \def\cl{\advance\clno by1\xcl{\the\clno.}}%
+ \def\scl{\advance\sclno by1\xscl{\unskip\the\clno.\the\sclno.}}%
+ \def\sscl{\advance\ssclno by1\xsscl{%
+ \unskip\the\clno.\the\sclno.\the\ssclno.}}%
+ \def\ssscl{\advance\sssclno by1\xssscl{%
+ \unskip\the\clno.\the\sclno.\the\ssclno.\the\sssclno.}}%
+ \def\sssscl{\advance\ssssclno by1\xsssscl{%
+ \unskip\the\clno.\the\sclno.\the\ssclno.\the\sssclno\the\ssssclno.}}%
+ \def\ssssscl{\advance\sssssclno by1\xssssscl{%
+ \unskip\the\clno.\the\sclno.\the\ssclno.%
+ \the\sssclno\the\ssssclno.\the\sssssclno.}}%
+ \def\rec{\clauselevel=0%
+ \advance\recno by1 \xcl{\unskip\the\recno.}}%
+ \def\srec{\clauselevel=0
+ \advance\sclno by1 \xscl{\unskip\the\recno.\the\sclno.}}%
+ \def\hcl##1\par{\cl{\bf##1}\par\nobreak}%
+ }
+
+% The \ncl "clauses" have the same indentation - but no numbers
+
+\def\ncl{\xcl{}}
+\def\nscl{\xscl{}}
+\def\nsscl{\xsscl{}}
+\def\nssscl{\xssscl{}}
+\def\nsssscl{\xsssscl{}}
+\def\nssssscl{\xssssscl{}}
+
+\def\tcl#1{% For use with text or numbers longer than \clindent.
+ \clearsclno% Set scl counter to zero
+ \dimen0=\the\parindent\parindent=0pt% store current setting
+ \ifclind \hangindent=\clindent \else\hangindent=\hclindent\fi
+ \clauselevel=1
+ \hangafter=1
+ \vskip\clskip
+ \leavevmode\hbox{% to\clindent{%
+ \ignorespaces#1\space}\ignorespaces
+ \parindent=\the\dimen0\relax
+ \ignorespaces}
+
+% \def\tscl etc to follow
+
+
+% Part 8
+
+% The contents, index and cross-reference macros
+% First, the commands to use them
+
+\def\contents{\contentstrue \writecontents}
+\def\marginalnotes{\marginalnotestrue}
+
+% Minor definitions
+
+\def\ctstitle#1{\gdef\titlename{\vtop{#1}}}% Title used on Contents page
+\ctstitle{}% Default is nothing
+
+% Use this for sub-headings in Table of Contents
+\def\stitle#1{%
+ \xdef\next{\write\cont{\string\centerline{%
+ \string\vtop{\string#1}}\par
+ \string\nobreak\string\medskip}}\next
+ \inform{#1}}
+
+\def\contentsname{Table of Contents}% Obvious.
+
+\gdef\topofcontents{\centerline{\titlefont\titlename}
+ \bigskip\centerline{\titlefont\contentsname}
+ \vfill} % this material will start the table of contents page
+\def\botofcontents{\vfill\eject} % this material will end it
+\def\contentspagenumber{-1} % default page number for table of contents
+\def\contentsreadfile{\jobname.cts} % file that gets table of contents info
+\def\contentswritefile{\jobname.cts} % file that takes it
+\def\writecontents{\inform{Opening contents file: }
+ \openout\cont=\contentswritefile}
+\def\readcontents{\input \contentsreadfile}
+\def\leaderfill{\leaders\hbox to .75em{\hss.\hss}\hfil}
+\def\clname{Clause}
+\def\xreffile{\jobname.xrf}
+\def\raggedleft{\leftskip=0pt plus 4em% see tb p101
+ \spaceskip=.3333em \xspaceskip=.5em } % Can be used in mnote
+\def\bigpenalty{\penalty10000\ }
+\def\xrfwarn#1{%
+ \xrfmissingtrue
+ \warn{This cross-reference (#1) does not exist.}
+ \inform{Re-run TeX on the file.}
+ }
+
+% Now the contents macros themselves.
+
+\def\printcontents{% Print the contents
+ \write\cont{}% ensure that the contents file isn't empty
+ \immediate\closeout\cont% contents information has been fully gathered
+ \pageno=\contentspagenumber
+ \inform{Table of contents: }%
+ \topofcontents
+ \line{\hfill Page}%
+ \medskip
+ \advance\baselineskip by0pt plus1pt minus0pt % add some give
+ \readcontents\relax % read the contents info
+ \botofcontents }% print the contents page(s), don't terminate
+
+% TUGboat 1987/3/310 + tb p 423
+
+\let\hat=\^ % Is this necessary?
+
+% Note that the order of the lines in \specialhat is critical
+
+\def\specialhat{\ifmmode\def\next{^}
+ \else\let\next=\checkit\fi\next}
+\def\checkit{\futurelet\next\testdoublehat}
+\def\testdoublehat{\ifx\next\specialhat\let\next=\silentnote
+ \else\visibletrue\let\next=\anote\fi \next}%
+\catcode`\^=\active \let ^=\specialhat
+\def\silentnote^{\visiblefalse\anote}%
+\def\mnote#1{%
+ \strut\vadjust{%
+ \kern-\dp\strutbox
+ \vtop to \dp\strutbox{%
+ \vss\baselineskip=\dp\strutbox
+% \moveleft\notespace
+ \moveright\notespace\rightline{%
+ \rlap{%
+ \hbox{%
+ \ninebase=12pt \ninepoint
+ \vbox to \ht\strutbox{%
+ \hsize\maxnote \raggedright
+ \tolerance=1000
+ \leftskip=0pt
+ \rightskip=0pt plus.6\maxnote
+ \noindent\bf\strut#1% \strut
+ \vss
+ }% end of \vbox to \ht\strutbox
+ }% end of \hbox
+ }% end of \rlap
+ } % end of \rightline
+ \null
+ }% end of \vtop tp \dp\strutbox
+ }% end of \vadjust
+ }% end of \mnote
+
+% Note that this now works on the basis that a space before the
+% macro is neutral, ie printed unless it follows a macro
+% and a space following the macro is ignored. Therefore no added \space
+% at the beginning of \silentnote and ignorespaces at the end of \anote
+% and possibly also of \mnote.
+
+\def\anote#1{%
+ \ifvisible\null\fi
+ \ifmarginalnotes\ignorespaces\mnote{#1}\fi
+ \ifcontents\ifcase\number\clauselevel%
+ \contentsentry{#1}% \clauselevel=0
+ \or\clcont{#1}% \clauselevel=1
+ \or\sclcont{#1}% \clauselevel=2
+ \or\ssclcont{#1}% \clauselevel=3
+ \or\sssclcont{#1}% \clauselevel=4
+ \or\inform{This (#1) will not appear in the table of contents}% =5
+ \or\inform{This (#1) will not appear in the table of contents}% =6
+ \fi\fi%
+ \ifvisible#1\else\unskip\ignorespaces\fi
+}%
+
+% Now the macros to deal with \cl etc in contents
+
+\def\clcont#1{%
+ \xdef\next{\write\cont{\string\line{%
+ \setbox0=\hbox{\clname\ \hbox to 20pt{\testit\hfil}}%
+ \global\clnamelength=\wd0\copy0#1
+ \string\leaderfill\noexpand\number\pageno}}}\next
+ \inform{\testit\space#1}}%
+
+\def\sclcont#1{%
+ \xdef\next{\write\cont{\line{\hskip\clnamelength%
+ \hbox to 25pt{\testit\hfil}#1
+ \string\leaderfill\noexpand\number\pageno}}}\next%
+ \inform{ \testit\space#1}}%
+
+\def\ssclcont#1{%
+ \xdef\next{\write\cont{\line{\hskip\clnamelength\hskip25pt%
+ \hbox to 20pt{\testit\hfil}#1
+ \string\leaderfill\noexpand\number\pageno}}}\next%
+ \inform{ [ascii \testit] #1}}
+
+\def\sssclcont#1{%
+ \xdef\next{\write\cont{\line{\hskip\clnamelength\hskip45pt%
+ \hbox to 20pt{\testit\hfil}#1
+ \string\leaderfill\noexpand\number\pageno}}}\next%
+ \inform{ (\romannumeral\the\sssclno) #1}}
+
+\def\contentsentry#1{%
+ \xdef\next{\write\cont{\line{#1
+ \string\leaderfill\noexpand\number\pageno}}}\next%
+ \inform{#1}} % Use this as eg \contentsentry{Parties}
+
+
+% These are the cross-ref macros by S v. B (adapted)
+
+% First, do we have xrefs?
+
+\def\checkoldxrf{%
+ \ifoldxrffile\let\next\relax\else\let\next\getxrefs\fi\next}
+
+\gdef\getxrefs{%
+ \null\global\oldxrffiletrue\inform{Opening xrf file }%
+ \immediate\openin\xrf=\xreffile\relax
+ \ifeof\xrf
+ \xrfmissingtrue
+ \inform{}%
+ \inform{WARNING: \xreffile\space is empty, or does not exist.}%
+ \inform{Re-run TeX on the file.}%
+ \inform{}%
+ \else\xrefstrue\fi
+ \immediate\closein\xrf\relax
+ \ifxrefs\input\xreffile\relax\fi
+ \immediate\openout\xrf=\xreffile\relax
+ }
+
+\def\newxref #1#2#3#4#5#6{%
+ \expandafter\gdef\csname CLREF-#1\endcsname{#2%
+ \inform{ (Cross-reference to #2)}}%
+ \expandafter\gdef\csname PAGEREF-#1\endcsname{#6%
+ \inform{ (Cross-reference to #6)}}%
+ \expandafter\gdef\csname NOTEREF-#1\endcsname{#3%
+ \inform{ (Cross-reference to #3)}}%
+ \expandafter\gdef\csname SCHEDREF-#1\endcsname{#4%
+ \inform{ (Cross-reference to #4)}}%
+ \expandafter\gdef\csname APPREF-#1\endcsname{#5%
+ \inform{ (Cross-reference to #5)}}%
+ }
+
+\def\clref#1{%
+ \checkoldxrf
+ \expandafter
+ \ifx\csname CLREF-#1\endcsname\relax\xrfwarn{#1}\unskip[Clause ???]\fi
+ \csname CLREF-#1\endcsname
+ }
+
+\def\pararef#1{%
+ \begingroup
+ \def\clause{Paragraph}%
+ \def\subclause{sub-paragraph}%
+ \def\paragraph{sub-sub-paragraph}%
+ \def\subparagraph{sub-sub-sub-paragraph}%
+ \clref{#1}%
+ \endgroup
+ }
+
+\def\pageref #1{%
+ \checkoldxrf
+ \ignorespaces
+ \expandafter
+ \ifx\csname PAGEREF-#1\endcsname\relax\xrfwarn{#1}\unskip[Page ???]\fi
+ \csname PAGEREF-#1\endcsname
+ }
+
+\def\noteref #1{%
+ \checkoldxrf
+ \ignorespaces
+ \expandafter
+ \ifx\csname NOTEREF-#1\endcsname\relax\xrfwarn{#1}\unskip[Footnote ???]\fi
+ \csname NOTEREF-#1\endcsname
+ }
+
+\def\schedref #1{%
+ \checkaux
+ \checkoldxrf
+ \ignorespaces
+ \ifmanyscheds
+ \expandafter
+ \ifx\csname SCHEDREF-#1\endcsname\relax\xrfwarn{#1}\unskip[Schedule ???]\fi
+ \csname SCHEDREF-#1\endcsname
+ \else\xrfwarn{#1} the Schedule %
+ \fi
+ }
+
+\def\appref #1{%
+ \checkauxref
+ \checkoldxrf
+ \ignorespaces
+ \ifmanyappends
+ \expandafter
+ \ifx\csname APPREF-#1\endcsname\relax\xrfwarn{#1}\unskip[Appendix ???]\fi
+ \csname APPREF-#1\endcsname
+ \else\xrfwarn{#1} the Appendix %
+ \fi
+ }
+
+\def\xrfwarn#1{%
+ \xrfmissingtrue
+ \warn{This cross-reference (#1) does not exist.}%
+ \inform{Re-run TeX on the file.}%
+ }
+
+\def\writexref{\write\xrf}
+\def\nsnbps{\noexpand\string\noexpand\bigpenalty\space}% shorthand
+\def\nsn{\noexpand\string\noexpand}
+
+\def\clause{Clause}
+\def\subclause{sub-clause}
+\def\paragraph{paragraph}
+\def\subparagraph{sub-paragraph}
+
+\def\xref#1{%
+ \checkoldxrf
+ \ignorespaces
+ \xdef\fct{\the\footmarkcount@}%
+ \xdef\schct{\fullnumbers{\the\schedcount}}%
+ \xdef\appct{\fullnumbers{\the\appendixcount}}%
+ \edef\xreftemp{%
+ \nsn\ignorespaces%
+ \nsn\newxref%
+ {#1}% becomes Parameter 1 to \newxref
+ {\ifcase\number\clauselevel%
+ \or \nsn\clause\nsnbps\the\clno%
+ \or \nsn\subclause\nsnbps(\the\sclno)%
+ \or \nsn\paragraph\nsnbps(\char\the\ssclno)%
+ \or \nsn\subparagraph\nsnbps(\romannumeral\the\sssclno)%
+ \fi}% becomes Parameter 2 to \newxref
+ {Footnote\nsnbps\fct}% becomes Parameter 3 to \newxref
+ {the \schct\nsnbps Schedule}% becomes Parameter 4 to \newxref
+ {the \appct\nsnbps Appendix}% becomes Parameter 5 to \newxref
+ }% End of \xreftemp
+ \expandafter\expandafter\expandafter%
+ \writexref\expandafter{%
+ \xreftemp{%
+ Page\noexpand\bigpenalty\the\pageno\noexpand\ignorespaces}% Param 6 to \newxref
+ \string\unskip}%
+ \unskip\ignorespaces}% Final unskip now unnec.
+
+% Gulp
+
+
+% Part 9 - Miscellaneous macros start here:
+
+\def\hangit{\hangindent\clindent}
+
+\def\per{\ca per\se}
+
+\def\ruledtable{% Get TeXsis macros
+ \input txsruled\relax
+ \ruledtable}
+
+\def\nofancystuff{% Get rid of fancy fonts, disliked by \write's
+ \def\xo{}\def\xxo{}\def\xxxo{}%
+ \def\ul{}\def\uul{}\def\uuul{}%
+ \def\setamendcount##1{}%
+ \def\ignorespaces{}%
+ \def\bigpenalty{ }}
+
+\def\inform#1{{\nofancystuff\immediate\write16{#1}}}
+\def\warn#1{{\nofancystuff\immediate\write16{}\immediate\write16{WARNING: #1}
+ \immediate\write16{}}}
+
+% Manmac macros for verbatim scanning
+\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
+ \catcode`\*=\other
+ \obeyspaces \obeylines \tt}
+
+\outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=\z@
+ \catcode`\|=0 \rightskip-5pc \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
+{\catcode`\^=7
+\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}}
+
+% macros to demarcate lines quoted from TeX source files
+\def\beginlines{\par\begingroup\nobreak\medskip\parindent\z@ \obeylines
+ \hrule\kern1pt\nobreak \everypar{\strut}}
+\def\nrbeginlines{\par\begingroup\nobreak\medskip\parindent\z@ \obeylines
+ \kern1pt\nobreak \everypar{\strut}}
+\def\endlines{\kern1pt\hrule\endgroup\medbreak\noindent}
+\def\weakendlines{\kern1pt\hrule\endgroup\medskip\noindent}
+\def\finalendlines{\kern1pt\hrule\endgroup\medbreak}
+\def\nrendlines{\kern1pt\endgroup\smallskip\noindent}
+
+\gdef\blank{\space\hglue\blankskip}%5 Oct 90
+
+\def\noaddr{\phantom{11}\blank\phantom{Rail-}\blank
+ \phantom{way}\blank\phantom{Cutt-}\blank\phantom{ings}
+ \blank\phantom{Cheam}\blank
+ \phantom{Lon-}\blank\phantom{don}\blank\phantom{SW12}
+ \blank}
+
+\gdef\noday{\phantom{31st\ }\blank}
+\gdef\nomonth{\phantom{January\ }\blank}
+\gdef\noyear{\noday\ day of %
+ \nomonth\ }
+\gdef\nodate{\noyear\number\year\penalty-150\maybespace}
+
+\def\noname{\phantom{Anthony}\blank\phantom{Aloy-}
+ \blank\phantom{nsius }\blank\phantom{Hancock}
+ \blank}
+
+\def\nopounds{\pounds\phantom{50,000}\maybespace}
+
+\gdef\initials#1{\xdef\inits{#1}}
+ \initials{}
+\def\exhibit{\advance\exno by1 ``\hbox{\ifx\inits{}
+ \else\inits\,\ignorespaces\fi\the\exno}''}
+
+\def\exhibited{produced and shown to me marked \exhibit\maybespace}
+
+\def\bundled{produced and shown to me bundled together %
+ and marked \exhibit\maybespace} % note maybespace
+
+\newif\ifversion
+\gdef\version#1{%
+ \versiontrue
+ \edef\versno{#1}
+ \footline={\llap{\fiverm\versno}\hss\tenrm\folio\hss}}
+
+% Amstex oldnos macros:
+\def\oldnos#1{\ifmmode{\mathcode`\,="013B \fam\@ne#1}\else
+ \leavevmode\hbox{$\mathcode`\,="013B \fam\@ne#1$}\fi}
+
+% minor macros from manmac
+\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet
+\def\|{\leavevmode\hbox{\tt\char`\|}} % vertical line
+\def\]{\leavevmode\hbox{\tt\char`\ }} % visible space
+
+\def\Filbreak{\par\vskip\bigskipamount % used in \ssd etc.
+ \vfil\penalty-200\vfilneg} % Adapted from \filbreak
+
+% \today etc
+
+\def\st{st}
+\def\nd{nd}
+\def\rd{rd}
+\def\th{th}
+
+\def\addsuffix#1{#1\ignorespaces\ifcase#1%
+ \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\today{%
+ \addsuffix{\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
+ \ifnocommaindate\space\else,\space\fi
+ \number\year}
+
+\def\longtoday{%
+ \addsuffix{\number\day}%
+ \space
+ day of\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
+ \ifnocommaindate\space\else,\space\fi
+ \number\year}
+
+\newif\ifwrongmonth
+\newcount\feb
+
+\def\leapcheck{%
+ \count0=\number\year
+ \advance\count0 by-1900
+ \count1=\the\count0
+ \divide\count0 by4
+ \multiply\count0 by4
+ \ifnum\count0=\number\count1
+ \feb=29%
+ \else\feb=28%
+ \fi}
+
+\def\increasedays{%
+ \ifcase\month% month 0
+ \or\daysinmonth{31}% jan
+ \or\leapcheck\daysinmonth{\feb}% feb. Not a leap year
+ \or\daysinmonth{31}% mar
+ \or\daysinmonth{30}% apr
+ \or\daysinmonth{31}% may
+ \or\daysinmonth{30}% jun
+ \or\daysinmonth{31}% jul
+ \or\daysinmonth{31}% aug
+ \or\daysinmonth{30}% sep
+ \or\daysinmonth{31}% oct
+ \or\daysinmonth{30}% nov
+ \or\daysinmonth{31}% dec
+ \fi}
+
+\def\reducedays{%
+ \ifcase\month% month 0
+ \or\daysinlastmonth{31}% dec
+ \or\daysinlastmonth{31}% jan
+ \or\leapcheck\daysinlastmonth{\feb}% feb. Not a leap year
+ \or\daysinlastmonth{31}% mar
+ \or\daysinlastmonth{30}% apr
+ \or\daysinlastmonth{31}% may
+ \or\daysinlastmonth{30}% jun
+ \or\daysinlastmonth{31}% jul
+ \or\daysinlastmonth{31}% aug
+ \or\daysinlastmonth{30}% sep
+ \or\daysinlastmonth{31}% oct
+ \or\daysinlastmonth{30}% nov
+ \fi}
+
+\def\daysinmonth#1{%
+ \ifnum\day>#1 \wrongmonthtrue
+ \advance\day by-#1
+ \advance\month by1
+ \ifnum\month=13 \month=1
+ \advance\year by1
+ \fi
+ \fi}
+
+\def\daysinlastmonth#1{%
+ \ifnum\day<1 \wrongmonthtrue
+ \advance\day by#1
+ \advance\month by-1
+ \ifnum\month=0 \month=12
+ \advance\year by-1
+ \fi
+ \fi}
+
+\def\futureday#1{%
+ {\advance\day by#1
+ \loop
+ \wrongmonthfalse
+ \begingroup
+ \ifnum#1<0
+ \aftergroup\reducedays
+ \else
+ \aftergroup\increasedays
+ \fi
+ \endgroup
+ \ifwrongmonth
+ \repeat
+ \today
+ }}
+
+\def\tomorrow{%
+ \futureday{1}}
+
+\def\yesterday{%
+ \futureday{-1}}
+
+% Taken from the LaTeX extensions.sty
+\def\@dow{\count2 } % gets day of the week
+\def\@leap{\count5 } % leap year fingaler
+\def\@x{\count6 } % temp register
+\def\@y{\count7 } % another temp register
+
+
+\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}}
+
+
+% The signature macros. These have been simplified & extended.
+
+\edef\lincoln{\hbox{Lincoln's Inn}}
+\def\grays{\hbox{Gray's Inn}}
+\def\temple{\hbox{\Temple}}
+\def\middletemple{\hbox{Middle Temple}}
+\def\innertemple{\hbox{Inner Temple}}
+\let\inn=\lincoln
+
+\def\signed{%
+ \par\nobreak
+ \vfill
+ \hbox{\hskip\signindent\vtop{%
+ \parindent0pt
+ \inn
+ \hbox{\today}}}
+ \vfill\vfill}
+
+\def\csettled#1{%
+ \par\nobreak
+ \vfill
+ \hbox{\hskip\signindent\vtop{%
+ \advance\hsize by-\signindent
+ \parindent0pt
+ \raggedright\tolerance=1000
+ Settled, \ignorespaces#1
+ \vskip\settledgap
+ \inn
+ \hbox{\today}}}
+ \vfill\vfill}
+
+\def\cresettled#1{% Note the \par
+ \par\nobreak
+ \vfill
+ \hbox{\hskip\signindent\vtop{%
+ \advance\hsize by-\signindent
+ \parindent0pt
+ \raggedright\tolerance=1000
+ Re-Settled, \ignorespaces#1
+ \vskip\settledgap
+ \inn
+ \hbox{\today}}}
+ \vfill\vfill}
+
+\gdef\settled{%
+ \csettled{}}
+
+\def\resettled{%
+ \cresettled{}}
+
+\def\jointsettled{%
+ \multiply\settledgap by2
+ \csettled{}}
+
+
+% Part 10
+
+% The signed sealed and delivered macros
+
+% First, adapt \cases from plain
+\def\rcases#1{\left.\vcenter{\normalbaselines\m@th
+ \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\,\right\}}
+
+\def\rbracket#1{\noindent$\rcases{% Put a large bracket at R.
+ \tolerance=3000\pretolerance=3000\parskip=0pt\hfuzz=1.75pt
+ \hbadness=9999
+ \doublehyphendemerits=200
+ \finalhyphendemerits=200
+ \adjdemerits=200
+ \vbox{\hsize=\rbracketsize{#1}}}$}
+
+\def\lbracket#1{\noindent $\cases{% Put a large bracket at L.
+ \tolerance=2000\pretolerance=2000\parskip=0pt\hfuzz=1.75pt
+ \hbadness=9999
+ \doublehyphendemerits=500
+ \finalhyphendemerits=200
+ \adjdemerits=200
+ \vbox{\hsize=\lbracketsize{#1}}}$}
+
+\def\ssgen#1{\clauselevel=0%
+ {\raggedright\rbracket{% As \rbracket, but space below text
+ #1\hfil\break\vtop to\brackdepth{}}}}
+
+% Text for use in contents macros
+\def\attestationtext{Attestation}
+\def\electiontext{Fiscal Election}
+\def\testimoniumtext{Testimonium}
+\def\stampdutytext{Stamp Duty Certificate}
+
+
+\def\ssd#1{%
+ \clauselevel=0%
+ \ifnum\ssdcount>0\Filbreak
+ \else
+ \par\nobreak\bigskip\bigskip^^{\attestationtext}%
+ \fi
+ \advance\ssdcount by1
+ \ssgen{\hbox{SIGNED AS A DEED} by %
+ #1 in the presence of---}%
+ \par}
+
+\def\ssc#1{%
+ \clauselevel=0%
+ \ifnum\ssdcount>0\Filbreak
+ \else
+ \par\nobreak\bigskip\bigskip^^{\attestationtext}%
+ \fi
+ \advance\ssdcount by1
+ \ssgen{\hbox{THE COMMON SEAL of }%
+ #1 was affixed hereunto in the presence of---}%
+ \par}
+
+\def\ssw#1{%
+ \par\nobreak\bigskip\bigskip^^{\attestationtext}%
+ \ssgen{\brackdepth=1in SIGNED by #1 %
+ the Testator as and for his last Will
+ and Testament in our presence and by us in his---}%
+ \par}
+%
+\def\witness{%
+ \par\clauselevel=0
+ \nobreak\vbox{\bigskip IN WITNESS whereof the parties hereto have signed
+ this instrument as a deed in the presence of the persons mentioned
+ below}^^{\testimoniumtext}%
+ \par}
+
+\def\singlewitness{%
+ \par\clauselevel=0
+ \nobreak
+ \vbox{\bigskip IN WITNESS whereof this instrument has been signed as
+ a deed in the presence of the person mentioned
+ below}^^{\testimoniumtext}%
+ \par}
+
+\def\sworn{%
+ \clauselevel=0^^{\attestationtext}%
+ \par\nobreak\vskip3\clskip
+ \vtop{\rbracket{%
+ SWORN at\hfil\break
+ \vtop to\normalbaselineskip{}\hfil\break
+ in the County of\hfil\break
+ this \nodate\break
+ before me---\hfil\break
+ \vtop to\brackdepth{}\hfil\break
+ \hbox{A Solicitor empowered to take Oaths}\hfil}\par}}
+
+\def\whereas{\medskip\clauselevel=0 WHEREAS---}
+\def\now{\medbreak\clauselevel=0 NOW THIS DEED WITNESSETH as follows---}
+\def\wwhereas{\medskip\clauselevel=0 WHEREAS }
+\def\nnow{\medbreak\clauselevel=0 NOW THIS DEED WITNESSETH }
+
+\def\witnessetc{\clauselevel=0 \par
+ \nobreak\vbox{\bigskip IN WITNESS, \etc^^{\testimoniumtext}}
+ }
+
+\def\swornetc{\clauselevel=0 \par
+ \nobreak\vbox{\bigskip SWORN, \etc^^{\testimoniumtext}}
+ }
+
+\def\election{\par\cl^^{\electiontext}%
+ \unskip\ignorespaces
+ The parties hereto hereby elect %
+ that the provisions of Section~49~(6) of the %
+ Capital Gains Tax Act~1979 %
+ and Section~142~(1) of the Inheritance Tax Act~1984 %
+ shall apply to the variation hereby made\par}
+
+\def\sdcert#1{\par
+ \cl^^{\stampdutytext}It is hereby certified %
+ that this instrument %
+ falls within category #1 in the Schedule to the %
+ Stamp Duty (Exempt Instruments) Regulations~1987\par}
+
+\def\dovcert{\sdcert{L}}
+\def\giftcert{\sdcert{M}}
+
+% Somewhat complicated macros to produce automatically
+% numbered Schedules and Appendixes
+
+\newcount\appendixcount
+\gdef\appendix{%
+ \checkaux
+ \ifnum\appendixcount=1
+ \write\aux{\noexpand\manyappendstrue}%
+ \fi
+ \clauselevel=0
+ \clearclno
+ \ifnum\appendixcount>0
+ \bigbreak
+ \else
+ \par\nobreak\bigskip
+ \fi
+ \advance\appendixcount by1
+ \ifmanyappends
+ \centerline{^{THE \ucfullnumbers{\the\appendixcount}
+ \unskip\space APPENDIX}}
+ \else
+ \centerline{^{THE APPENDIX}}
+ \fi
+ \nobreak
+ \smallskip}
+
+\gdef\schedule{%
+ \checkaux
+ \ifnum\schedcount=2
+ \write\aux{\string\manyschedstrue}%
+ \fi
+ \clauselevel=0
+ \clearclno
+ \ifnum\schedcount>0
+ \bigbreak
+ \else
+ \par\nobreak\bigskip
+ \fi
+ \advance\schedcount by1
+ \ifmanyscheds
+ \centerline{^{THE \ucfullnumbers{\the\schedcount}
+ \unskip\space SCHEDULE}}
+ \else
+ \centerline{^{THE SCHEDULE}}
+ \fi
+ \nobreak
+ \smallskip}
+
+\def\fullnumbers#1{%
+ \ifcase#1% = zeroth
+ \or First%
+ \or Second%
+ \or Third%
+ \or Fourth%
+ \or Fifth%
+ \or Sixth%
+ \or Seventh%
+ \or Eighth%
+ \or Ninth%
+ \or Tenth%
+ \else \blank
+ \fi}
+
+ \def\ucfullnumbers#1{%
+ \expandafter\expandafter\expandafter\uppercase%
+ \expandafter{\fullnumbers{#1}}
+ }
+
+\newif\ifmanyappends
+\newif\ifmanyscheds
+\newif\ifauxmissing
+\newif\ifauxfile
+\newif\ifaux
+
+\def\auxfile{\jobname.aux}
+
+\newread\aux
+\newwrite\aux
+
+\def\checkaux{%
+ \ifauxfile\let\next\relax\else\let\next\getaux\fi\next}
+
+\gdef\getaux{%
+ \null\global\auxfiletrue\inform{Opening aux file }%
+ \immediate\openin\aux=\auxfile\relax%
+ \ifeof\aux%
+ \auxmissingtrue%
+ \inform{}%
+ \inform{WARNING: \auxfile\space is empty, or does not exist.}%
+ \inform{It may be necessary to re-run TeX on the file.}%
+ \inform{}%
+ \else\auxtrue
+ \fi%
+ \immediate\closein\aux\relax%
+ \ifaux\input\auxfile\relax\fi%
+ \immediate\openout\aux=\auxfile\relax%
+ }
+
+\def\part#1{% note no \par
+ \ifnum\partcount>0\filbreak\else
+ \par\nobreak\bigskip\fi
+ \advance\partcount by1
+ \centerline{^{Part #1}}\smallskip\nobreak}
+
+\def\centertext#1{{\skip0=0pt plus.25\hsize
+ \advance \leftskip by \skip0 \advance \rightskip by \skip0
+ \parfillskip=0pt \spaceskip=.3333em \xspaceskip=.5em
+ \pretolerance=9999 \tolerance=9999
+ \hyphenpenalty=9999 \exhyphenpenalty=9999 #1\par}}
+
+\def\maybespace{%
+ \futurelet\next\testforother}
+
+\def\testforother{% \noexpand is required to avoid \ref being expanded
+ \if\noexpand\next[\let\next=\space % if [ add space
+ \else\if\noexpand\next(\let\next=\space % if ( add space
+ \else\ifcat\noexpand\next.\let\next=\empty % if . no space
+%\else\ifcat\noexpand\next\noexpand\\next=\empty % if \ no space
+% Don't use. It could cause problems if \space followed \ok or \se
+% It is not required for \ref
+ \else\let\next=\space
+%\fi % relates to \ifcat\\
+ \fi\fi\fi\next}% Note that \ref still generates a space-then eats it
+
+\def\ca{%
+ \begingroup\it\frenchspacing % This deals with, eg. Ltd. and v.
+ }
+\def\v{\unskip\/\ {\rm v}\maybespace}% taken out of \ca
+\def\se{\unskip\/\endgroup\maybespace}% mod aftergroup
+
+\def\bo{\def\on{\unskip\/\ {\rm on }}\begingroup\sl\frenchspacing}
+\def\ok{\unskip\/\endgroup\maybespace}
+
+% U.C. hyphens
+\def\uc-{\discretionary{\raise.25ex\hbox{-}}{}{\raise.25ex\hbox{-}}}
+\def\duc-{\discretionary{\raise.25ex\hbox{-}}{}{}}
+
+% Quotation macros
+\def\beginquote{\vskip\the\parskip \vskip-\quoteparskip
+ \begingroup\tenpoint
+ \parskip=\quoteparskip \parindent=\quoteparindent
+ \clskip=\smallskipamount
+ \advance\leftskip by \quoteindent \relax
+ \par\ifq\leavevmode\llap{``}\fi
+ \prevgraf=1
+ \DeleteOptionalSpacesandPars{\noindent\ignorespaces}}
+
+\def\endquote{\ignorespaces\ifq\rlap{''}\fi\par\endgroup}
+\def\beginsclquote{\beginquote\advance\leftskip by-\clindent}
+\def\beginssclquote{\beginquote\advance\leftskip by-\sclindent}
+\def\beginsssclquote{\beginquote\advance\leftskip by-\ssclindent}
+
+\newcount\quoteparacount \quoteparacount=0
+
+\long\def\OldQuotes#1\par{%
+ \advance\quoteparacount by1%
+ {\setbox0=\hbox{``}%
+ \setbox1=\vbox{%
+ \storeparindent=\the\parindent
+ \ifnum\quoteparacount=1 \parindent=0pt\fi
+ \advance\hsize by -1.5\wd0%
+ \advance\hsize-\the\leftskip
+ \leftskip=0pt%
+ \leavevmode
+ \llap{\hbox to 1.5\wd0{%
+ \strut``\hfill}}\unskip#1\unskip\nobreak
+ \parindent=\the\storeparindent}%
+ \vfuzz=10pt % suppress overfull warnings
+ \splittopskip=0pt % no skip at top of bix 1
+ \count1=0 % initialise line count
+ \par\noindent % start new paragraph
+ \def\rebox{%
+ \advance\count1 by1
+ \ifnum\count1=1\hbox to1.5\wd0{\strut\hfill}\else
+ \ifnum\count1>1\hbox to1.5\wd0{\strut``\hfill}\fi\fi
+ \nobreak
+ \setbox2=\vsplit 1 to6.1pt
+ \vbox{\unvbox2\unskip}%
+ \hskip 0pt plus 0pt\relax}%
+ \loop
+ \rebox % do one line at a time
+ \ifdim \ht1>0pt % test if more lines
+ \repeat
+ \par}}
+
+\def\EndOldQuotes{\unskip\nobreak\hbox to 1.5\wd0{\hfill\strut''}}
+
+\newif\ifosq
+\def\newquotes{\osqfalse}
+\def\oldquotes{\osqtrue \begindoublequotes}
+
+% Set " to produce `` and '' and for use in \oldquotes
+\catcode`\"=\active% Make " an active character
+
+\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
+\let\xxx=\spacefactor% Save the \spacefactor
+\let\dblqu@te=L%
+\gdef"{%
+ \ifinner\else\ifvmode\let\dblqu@te=L\fi\fi
+ \if L\dblqu@te\ifosq\OldQuotes\else``\fi\global\let\dblqu@te=R%
+ \else
+ \let\xxx=\spacefactor% Save the \spacefactor
+ \ifosq\EndOldQuotes\else''\fi\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
+
+\gdef\enddoublequotes{%
+ \catcode`\"=12%Set " back to other
+ }
+
+% Spacing
+\def\,{\hskip.2em\relax}
+
+% top-lap and bottom-lap - previous name of \tlap was \vlap
+\def\tlap#1{\vbox to 0pt{\vss#1}} % toplap - 14.12.88
+\def\blap#1{\vtop to 0pt{\vss#1}} % bottomlap - 14.12.88
+
+\def\frac#1/#2{\leavevmode\kern.1em
+ \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em
+ /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
+
+\def\vfrac#1/#2{\leavevmode$#1\over#2$\space}
+
+% Whether these are miscellaneous is a moot point
+% However, here is as good a place as any
+
+\def\ifsinglepage{% This pair of macros needs amneding
+ \edef\tempfootline{\the\footline}%
+ \ifnum\pageno=1
+ \ifnum\vbadness>9999
+ \footline=\expandafter{\temptfootline}%
+ \else\nopagenumbers\inform{No pagenumbers}\fi\fi}%
+ \def\numberpages{\def\singlepage{}}
+
+\def\printsp{%
+ \ifsinglepage
+ \vfill\supereject
+ \backmatter\supereject
+ \fi} % should it go here?
+
+\outer\def\bye{\par
+ \signoff % This is the signature
+ \vfil\supereject
+ \backmatter\supereject
+ \ifcontents
+ \printcontents\contentsfalse\vfill\supereject
+ \fi
+ \ifxrefs
+ \immediate\write\xrf{\noexpand\unskip}% check. Have all writes been written?
+ \immediate\closeout\xrf
+ \fi
+ \ifxrfmissing
+ \warn{\xreffile\space is missing or incomplete.}%
+ \inform{Run TeX on the file again.}%
+ \fi
+ \ifaux
+ \immediate\write\aux{\noexpand\relax}% check. Have all writes been written?
+ \immediate\closeout\aux
+ \fi
+ \ifauxmissing
+ \warn{\auxfile\space is missing or incomplete.}%
+ \inform{Run TeX on the file again.}%
+ \fi
+ \supereject
+ \iffax\printfaxsheet\fi
+ \ifchit\chit\fi
+ \end}
+
+% A fudged bit here to prevent multiple backsheets
+% and additional pages containing rubbish.
+% Will be corrected in next release
+
+\newif\iflpwbs % if last page was backsheet...
+
+\def\enddoc{\par
+ \edef\tempfootline{\the\footline}%
+ \iflpwbs\else\signoff\fi % signature/settled
+ \vfill\supereject
+ \iflpwbs\let\backmatter\empty\fi
+ \ifnum\totalpages>1
+ \backmatter\supereject\lpwbstrue
+ \fi% No backsheet unless text!
+ \footline=\expandafter{\tempfootline}%
+ \ifcontents\printcontents\contentsfalse\fi
+ \ifxrefs\immediate\write\xrf{\string\unskip}
+ \fi
+ \ifxrfmissing
+ \inform{}%
+ \inform{WARNING: \xreffile\space is missing or incomplete.}%
+ \inform{}%
+ \inform{Run TeX on the file again.}%
+ \inform{}%
+ \fi
+ \ifaux\immediate\write\aux{\string\unskip}%
+ \fi
+ \ifauxmissing % is this necessary?
+ \inform{}%
+ \inform{WARNING: \auxfile\space is missing or incomplete.}%
+ \inform{}%
+ \inform{Run TeX on the file again.}%
+ \inform{}%
+ \fi
+ \reset
+ }
+
+\def\counsel#1{\edef\counselname{#1}}
+
+\def\formalcounselname{Mr.~\counselname}
+
+\def\signature{\par\nobreak\vskip\the\clskip
+ \hskip\signindent\ifx\counselname\undefined{[{\it Counsel's Name\/}]}%
+ \else\counselname\fi
+ \medskip}
+
+% Other misc macros---
+\def\etc{{\it \&c\/}.}
+
+\newdimen\surround \surround=5pt
+\def\Boxit#1#2{\vbox{\hrule\hbox{\vrule\kern#1
+ \vbox{\kern#1#2\kern#1}\kern#1\vrule}\hrule}}
+
+
+% Part 11 - backsheet macros
+
+% Miscellaneous
+
+\def\upperc#1{% This enable the first line to be UC
+ \ifucfirstline\uppercase{#1} \gdef\upperc##1{##1}\else{#1}\fi}
+
+\def\shift{% Full size or half size backsheets
+ \iffullsize\null\else{\hskip1in\hskip.5\hsize}\fi}
+% The 1in \hskip in the previous line = the margin of the half size page
+
+\def\xcenterline#1{\line{\shift\hss#1\hss}}
+\def\centervers#1{\line{\llap{\fiverm\version}\shift\hss#1\hss}}
+
+% Macros to extract names from files
+
+\def\sols{} % Prevents error messages if undefined
+\def\solname{} % ditto
+\def\sname#1/#2\par{#1} % Used to extract solname from cref
+
+\def\z:#1:#2\par{%
+ \def\anyname{#1}\ifx\solname\anyname
+ \afterassignment\endinput\def\sols{#2}\fi}
+
+\gdef\getaddress{%
+ \ifx\cref\empty
+ \edef\solname{not given, and so}
+ \else
+ \edef\solname{\expandafter\sname\cref/\par}%
+ \fi
+ \ifx\sols\empty
+ \ifx\cref\empty\else\input\addressfile\relax\fi
+ \fi
+ \ifx\sols\empty
+ \warn{Reference \solname\space not found in file "\addressfile"}%
+ \fi}
+
+% Set up the parameters
+
+\def\bsparams{%
+ \tolerance=7500
+ \doublehyphendemerits=0
+ \finalhyphendemerits=10000
+ \hyphenpenalty=100
+ \parindent=0pt
+ \normalbottom
+ \pageno=0
+ \nopagenumbers
+ \advance\vsize\bstopincrease \advance\vsize\bsbotincrease
+ \advance\voffset-\bstopincrease
+ \def\addressfile{solicitors}% name of input file
+ \twelvebase=12pt\twelvepoint
+ \inform{Backsheet for \ifdraft draft \fi\doctype}%
+ }
+
+% Backsheets for Opinions
+\def\bsop{%
+ \getworkdone
+ \getbstitlewidth
+ \begingroup
+ \capacitytrue
+ \bsparams
+ \ifpleading% try adding \gettitle here and pleadingtrue elsewhere
+ \else\xcenterline{{\sl\today}}\vfil\fi
+ \xcenterline{\vtop{\openup2\jot
+ \halign{\hfil\vtop{\hsize=\bstitlewidth
+ \clindent=0pt % I am not sure why this is required. But it is.
+ \centertext{##}}\hfil\cr
+ \title\crcr}}}%
+ \vfil
+ \headerfont
+ \xcenterline{%
+ \setbox0\hbox{\doctype}%
+ \ifdim \wd0<\bstitlewidth\copy0
+ \else\vtop{\hsize=\bstitlewidth\centertext{\doctype}}\fi}%
+ \rm
+ \vfil\vfil
+ \getaddress
+ \halign{\def\temp{##}\xcenterline{\upperc{\temp}}\inform{::\temp::}\cr
+ \sols\crcr}%
+ \smallskip
+ \xcenterline{\eightrm Solicitors' Reference: \sref}%
+ \xcenterline{{\eightrm Counsel's Reference: \col/\cref}}%
+ \supereject
+ \endgroup}
+
+% Not yet working
+\def\bscopyop{%
+ \getworkdone
+ \getbstitlewidth
+ \begingroup
+ \capacitytrue
+ \bsparams
+ \ifpleading% try adding \gettitle here and pleadingtrue elsewhere
+ \else\xcenterline{{\sl\today}}\vfil\fi
+ \xcenterline{\vtop{\openup2\jot
+ \halign{\hfil\vtop{\hsize=\bstitlewidth
+ \clindent=0pt % I am not sure why this is required. But it is.
+ \centertext{##}}\hfil\cr
+ \title\crcr}}}%
+\vfil
+ \headerfont
+ \xcenterline{%
+ \setbox0\hbox{\doctype}%
+ \ifdim \wd0<\bstitlewidth\vtop{%
+ \hbox{\llap{\scaps[copy]}\phantom{\doctype}\strut}%
+ \hbox{\doctype}}
+ \else
+ \vtop{\hsize=\bstitlewidth
+ \centertext{\llap{\scaps[copy]}\break\doctype}}%
+ \fi}%
+ \rm
+ \vfil\vfil
+ \getaddress
+ \halign{\def\temp{##}\xcenterline{\upperc{\temp}}%
+ \inform{::\temp::}\cr
+ \sols\crcr}%
+ \smallskip
+ \xcenterline{\eightrm Solicitors' Reference: \sref}%
+ \xcenterline{{\eightrm Counsel's Reference: \col/\cref}}%
+ \supereject
+ \endgroup}
+
+\let\doextras\empty
+
+\def\bsdft{%
+ \doextras
+ \getworkdone
+ \getbstitlewidth
+ \begingroup
+ \capacitytrue
+ \bsparams
+\ifendorsement\bsendorsement\global\endorsementfalse\fi
+ \ifpleading\null
+ \else\xcenterline{\underbar{DATED\hskip2in \number\year}}%
+ \bigskip
+ \vfil\fi
+ \xcenterline{\vtop{\openup2\jot
+ \halign{\hfil\vtop{\hsize=\bstitlewidth
+ \clindent=0pt % I am not sure why this is required. But it is.
+ \centertext{##}}\hfil\cr% Are the hfils nec?
+ \title\crcr}}}%
+ \vfil
+ \tabskip=0pt
+ \headerfont
+ \xcenterline{\vtop{\openup2\jot
+ \halign{\hfil##\hfil\cr
+ \ifdraft \llap{\it draft/}\hfill\fi\cr
+ \noalign{\smallskip}%
+ \setbox0\hbox{\doctype}%
+ \ifdim \wd0<\bstitlewidth\copy0
+ \else\vtop{\hsize=\bstitlewidth\centertext{\doctype}}\fi\crcr}}}%
+ \rm
+ \smallskip
+ \vfil\vfil
+ \getaddress
+ \halign{\def\temp{##}\xcenterline{\temp}\inform{::\temp::}\cr
+ \ifx\sols\empty\else\sols\fi\crcr}%
+ \smallskip
+ \ifx\sref\empty
+ \else\xcenterline{{\eightrm Solicitors' Reference: \sref}}\fi
+ \ifx\cref\empty
+ \else\xcenterline{{\eightrm Counsel's Reference: \col/\cref}}\fi
+ \ifversion\leftline{\llap{\fiverm\versno}}\fi
+ \supereject
+ \endgroup
+%\global\maxp@rtywidth=\the\maxpartywidth
+\resetpleadingdefaults}
+
+
+% Fee Chits
+
+% Chit user macros
+
+\def\solsref#1{\def\sref{#1}}
+\def\colsref#1{\def\cref{#1}}
+\def\timetaken#1{\def\timespent{#1}}
+\def\casetype#1{\def\typeofcase{#1}}
+\def\value#1{\def\amountatstake{#1}}
+\def\difficulty#1{\def\howhard{#1}}
+\def\proposedfee#1{\def\suggestedfee{#1}}
+\def\legalaidno#1{\def\legalaid{#1}}
+\def\comments#1{\def\remarks{#1}}
+
+% Now the chit macros themselves
+\def\chit{%
+ \begingroup
+ \parindent=0pt
+ \inform{Fee Chit}%
+ \pageno=1
+ \nopagenumbers
+ \def\\{ }
+\maxp@rtywidth=.5\hsize
+ \ifpleading\def\title{\chittitle\hfil}\fi
+ \def\cr{\par}\def\noalign{}%
+ \tenbase=12.5pt \tenpoint
+\def\scriptsize{\let\rm\eightrm}%
+ \def\chittext{%
+ \parskip=0pt
+ \raggedright \tolerance=10000
+\hbadness=10000
+ \uchyph=0
+ {\bf Date:} \today\quad {\bf cref:} \col/\cref\par
+ {\bf sref:} \sref\par
+ {\bf Title:} {\def\hfill{}\frenchspacing\title\strut}\par
+ {\bf Legal Aid No:} \legalaid\par
+ {\bf Work Done:} \workdone.\par
+ {\bf Time Spent:} \ifx\timespent\empty\else\timespent\ hours\fi\par
+ {\bf Value:} \pounds\amountatstake\par
+ {\bf Difficulty:} \howhard\par
+ {\bf Type of Case:} \typeofcase\par
+ {\bf Suggested Fee:} \pounds\suggestedfee\par
+ {\bf Filename:} {\tt\jobname}\par
+ {\bf Remarks:} \remarks\par
+ }% end of chittext
+ %
+ \leftline{{\it Clerk's Copy}\hfil}
+ \chittext
+ \vskip1in
+ \leftline{{\it Counsel's Copy}\hfil}
+ \chittext
+ \vfil
+ \supereject
+ \endgroup}
+
+\gdef\getworkdone{%
+ {\nofancystuff
+ \tempwd=\expandafter{\workdone}%
+ \def\temppunct{\expandafter\if\the\tempwd\empty\else, \fi}%
+ \xdef\workdone{\the\tempwd\temppunct
+ \ifx\signoff\settled\ draft \fi\doctype
+ \ifversion\space(\versno)\fi}}}
+
+
+% Part 12---Advisory and non-litigious drafting
+
+% The TUG macros (taken from tugboat.sty) which delete spaces etc
+\def\if@baseis@next{\ifx\@basetoken\@nexttoken}
+
+\long\def\@checknexttoken #1#2#3{%
+ \futurelet\@basetoken\iffalse#1\fi
+ \long\def\@next{%
+ \if@baseis@next
+ \long\def\@@next{#2}%
+ \else\long\def\@@next{#3}\fi
+ \@@next}%
+ \futurelet\@nexttoken\@next}
+
+% execute #2 after ignoring (possibly) one occurrence of #1
+\long\def\@ignoreone#1#2{%
+ \def\@ignoreform#1{#2}%
+ \@checknexttoken{#1}{\@ignoreform}{#2}%
+ }
+
+% execute #2 after ignoring all occurrences of #1
+\long\def\@ignoreall#1#2{%
+ \def\@ignoreform#1{\@ignoretest}%
+ \def\@ignoretest{\@checknexttoken{#1}{\@ignoreform}{#2}}%
+ \@ignoretest
+ }
+
+% execute #1 after ignoring spaces
+\def\DeleteOptionalSpaces#1{%
+ \@ignoreall{ }{#1}%
+ }
+
+% execute #1 after ignoring spaces and \pars
+\def\DeleteOptionalSpacesandPars#1{%
+ \@ignoreall{ }{\@ignoreall{\par}{#1}}%
+ }
+
+% Checking and reading options.
+% To check for the next optional argument, the macros must look
+% ahead to the next character. If the next character is a `[',
+% the option-reading mechanism is invoked. This check may be suppressed if
+% the user has executed the \lastoption option. If \@lastoption is
+% "true" or if the [ is NOT next, the macro goes on to reading any
+% arguments and executing appropriately.
+
+\def\@checkoptions{%
+ \if@lastoption
+ \def\@next{\@executetoend}%
+ \else
+ \def\@next{\@checknexttoken {[}{\@readoptions}{\@executetoend}}%
+ \fi
+ \@next
+ }
+
+% The default parameters used in advisory work
+
+\def\pageparameters{%
+ \widowpenalty=7500
+ \def\footnoterule{}%
+ \parindent=20pt
+ \quoteindent=20pt
+ \twelvepoint
+ }
+
+\def\advising#1{%
+ \enddoc
+ \ifpleading\gettitle\fi
+ \pageparameters
+ \inform{#1}%
+ \chittrue % print a fee chit
+ \def\doctype{#1}%
+ \let\backmatter=\bsop
+ \let\signoff=\signed
+ \clindfalse
+ \centerline{\headerfont #1}
+ \nobreak\vskip10pt
+ \DeleteOptionalSpacesandPars{\noindent\ignorespaces}}
+
+
+\def\opinion{%
+ \advising{Opinion}}
+\def\note{%
+ \advising{Note}}
+\def\advice{%
+ \advising{Advice}}
+\def\jopinion{%
+ \let\signed\jsigned
+ \advising{Joint Opinion}}
+\def\nopinion{%
+ \advising{}}
+\def\jnote{%
+ \let\signed\jsigned
+ \advising{Joint Note}}
+
+\def\draftparameters{%
+ \widowpenalty=7500
+ \def\footnoterule{}%
+ \parindent=0pt
+ \quoteindent=\the\clindent
+ \twelvepoint
+}
+
+\gdef\draft#1{%
+ \ifended\endedfalse
+ \else\enddoc
+ \fi
+ \begingroup
+ \amendtextfalse
+ \gdef\doctype{#1}%
+ \inform{\ifdraft draft \fi#1}%
+ \endgroup
+ \draftparameters
+ \chittrue
+ \let\backmatter=\bsdft
+ \ifdraft\let\signoff\settled % see \chit
+ \else\let\signoff\empty\fi
+ \clindtrue
+ \lpwbsfalse}%
+
+\def\conference{%
+ \inform{Conference}%
+ \chittrue
+ \def\doctype{Conference}%
+ \getworkdone}% normally set by backsheet
+
+\def\telcon{%
+ \inform{Telephone Conference}%
+ \chittrue
+ \def\doctype{Telephone Conference}%
+ \getworkdone}
+
+
+% Part 13---Pleadings
+
+% Note: The pleadings macros are in the process of being rewritten.
+% As a result they contain a blend of stuff from the old and new
+% systems and some macros have been left in order to provide continuity.
+% In other words, they are a mess at the moment.
+
+% First a whole block of defs, some of which are no longer needed
+\newdimen\storeparindent
+
+\def\solicitors{Solicitors} % change to single for sole practitioner
+\def\plaintiffs{} % List macro (tb 378), names of plaintiffs
+\def\defendants{} % ditto, defendants
+\def\thirdparties{} % ditto
+\def\plaintiffsaddrs{} % ditto; addresses
+\def\defendantsaddrs{}
+\def\thirdpartiesaddrs{}
+\def\matters{} % List macro
+\def\partyname{} % Temporary storage of individual party's name.
+\def\outofrange{\noaddr} % If too few \of's, use blank address.
+\def\courtname{\phantom{BORCHESTER}}%
+\def\issuer{}
+\def\chambers{\blank in \blank,} % Is this necessary?
+\def\depsname{\blank} % name of deponent in aff endorse.
+\def\shortname#1{\def\depsname{#1}}
+\def\capacity#1{\ifcapacity ({\it #1\/})\else\unskip\fi}
+
+\def\firm{\capacity{a firm}}
+\def\widow{\capacity{Widow}\female}
+\def\minor{\capacity{a Minor}}
+\def\patient{\capacity{a Patient}}
+\def\mw{\capacity{Married Woman}\female}
+\def\co{\capacity{a Company}}
+\def\tradingas#1{\capacity{Trading as #1}}
+\def\as#1{\capacity{#1}}
+\def\female{\unskip
+ \ifplaintiff\femalepltrue\fi
+ \ifdefendant\femaledeftrue\fi
+ \ifthirdparty\femaletptrue\fi}
+%\def\re{}
+%\def\res{}
+\def\theirsols{\noname} % redefine if necessary
+\def\theirsolsaddr{\noaddr} % ditto
+\def\doctype{}
+\def\appellant{\global\appealtrue \plaintiff}
+\def\applicant{\global\applicationtrue \plaintiff}
+\def\respondent{\defendant}
+\def\petitioner{}
+\def\petitioner#1{\global\petitiontrue \def\petitioner{#1}}
+\def\amend{}
+\def\address#1{\def\address{#1}}
+\def\petitionersaddress#1{\def\petitionersaddress{#1}}
+\def\xheading#1{\removelastskip\medskip\goodbreak
+ \noindent{\bf #1}\nobreak}
+
+\newif\ifappeal
+\newif\ifcountycourt
+\newif\ifcourtofappeal
+\newif\ifpetition
+\newif\ifapplication
+
+\newif\ifplaintiff
+\newif\ifdefendant
+\newif\ifthirdparty
+\newif\iffourthparty
+\newif\ifappellant
+\newif\ifrespondent
+\newif\ifapplicant
+
+\newif\ifpluralplaintiff
+\newif\ifpluraldefendant
+\newif\ifpluralthirdparty
+\newif\ifpluralfourthparty
+\newif\ifpluralappellant
+\newif\ifpluralrespondent
+\newif\ifpluralapplicant
+
+\newif\ifclientpl
+\newif\ifnoparties
+\newif\ifcapacity
+\newif\ifintendedaction
+\newif\ifaffidavit % check this
+\newif\iffemalepl
+\newif\iffemaledef
+\newif\iffemaletp
+
+\def\intendedparties{\global\intendedactiontrue}
+
+\def\whenadded{\quad ~~/~~/91}
+\def\added{(added\whenadded)}
+
+\newcount\plcount % total number of plaintiffs
+\newcount\dfcount % total number of defendants
+\newcount\tpcount % total number of third parties
+\newcount\partyno % This party - temporary storage
+\newcount\testone % Temporary storage
+\newcount\testtwo % Temporary storage
+\newcount\mattercount % No. of Matters.
+
+\def\claims{%
+ \vskip\the\clskip
+ \clearclno
+ {\scaps And the \plaintfs}\ \wants---}
+\def\claim{\claims}
+
+% List macros, taken from the T.B. page 378 ff.
+
+\toksdef\ta=0 \toksdef\tb=2 % token list registers for temp use
+\newcount\cardcount
+
+\def\rightappenditem#1\to#2{\ta={\\{#1}}\tb=\expandafter{#2}%
+ \edef#2{\the\tb\the\ta}}%
+\def\select#1\of#2\to#3{\def#3{\outofrange}%
+ \long\def\\##1{\advance#1-1 \ifnum#1=0 \def#3{\relax##1}\fi}#2}%
+\def\cardinality#1\to#2{#2=0 \long\def\\##1{\advance#2 by 1 }#1}
+
+
+% Some dimensions to help with formatting of parties
+
+\newdimen\plwidth \plwidth=0pt
+\newdimen\dfwidth \dfwidth=0pt
+\newdimen\tpwidth \tpwidth=0pt
+\newdimen\allwidths \allwidths=0pt
+\newdimen\maxp@rtywidth \maxp@rtywidth=4.5in
+\newdimen\partyhang \partyhang=0pt
+
+% Macros that add plaintiff's name etc to the list
+% These macros are quite complicated since they use \csname
+% and \endcsname, sometimes to excess
+
+\def\plaintiffsstuff{}
+\def\defendantsstuff{}
+\def\thirdpartiesstuff{}
+\def\currentpartyaddrs{}
+
+\newcount\andcount
+\newcount\testthree
+\newcount\testfour
+
+\newtoks\tc
+\newtoks\tx
+\newtoks\cpatoks
+\newtoks\cpstoks
+\newtoks\cpsctoks
+\newtoks\cpfctoks
+\newtoks\cpntoks
+\newtoks\cpwtoks
+
+\def\upit{\global\advance\testtwo by-1
+ \global\advance\testthree by-1}
+
+\def\uupit{\global\advance\testtwo by0
+ \global\advance\testthree by-2}
+
+\def\downit{\unskip}
+
+\def\of#1{% Address of party
+ \advance\andcount by1
+ \edef\abode{%
+ \ifcase\andcount%
+ \or{of}
+ \or{both of}
+ \else{all of}
+ \fi}
+ \ta={\\} \tb=\expandafter{\currentpartyaddrs}%
+ \tc=\expandafter{\abode#1\, }%
+ \expandafter\edef\csname\expandafter
+ \gobble\the\cpatoks\endcsname{\the\tb\the\ta{\the\tc}}%
+ \ta={\\} \tb=\expandafter{\currentpartystuff}%
+ \tc=\expandafter{\downit}%
+ \expandafter\edef\csname\expandafter\gobble\the\cpstoks
+ \endcsname{\the\tb\the\ta{\the\tc}}%
+ \andcount=0
+ }
+
+\def\and{% For use where two parties have same address
+ \advance\andcount by1
+ \ta={\\} \tb=\expandafter{\currentpartyaddrs}%
+ \tc=\expandafter{and}%
+ \expandafter\edef\csname\expandafter\gobble\the\cpatoks
+ \endcsname{\the\tb\the\ta{\the\tc}}%
+ \ta={\\} \tb=\expandafter{\currentpartystuff}%
+ \tc=\expandafter{\upit}%
+ \expandafter\edef\csname\expandafter\gobble\the\cpstoks
+ \endcsname{\the\tb\the\ta{\the\tc}}%
+ \expandafter\advance\csname\expandafter\gobble\the\cpsctoks
+ \endcsname by-1
+ }
+
+% The \, in \tc may not be working
+\def\nand{% For use where more than two parties have same address
+ \advance\andcount by1
+ \ta={\\} \tb=\expandafter{\currentpartyaddrs}%
+ \tc=\expandafter{\, }%
+ \expandafter\edef\csname\expandafter\gobble\the\cpatoks
+ \endcsname{\the\tb\the\ta{\the\tc}}%
+ \ta={\\} \tb=\expandafter{\currentpartystuff}%
+ \tc=\expandafter{\upit}% Formerly \uupit
+ \expandafter\edef\csname\expandafter\gobble\the\cpstoks
+ \endcsname{\the\tb\the\ta{\the\tc}}%
+ \expandafter\advance\csname\expandafter\gobble\the\cpsctoks
+ \endcsname by-1
+ }
+
+\def\converttc#1#2{% let <control word> = other word...
+ \expandafter\expandafter\let\expandafter#1%
+ \csname\expandafter\gobble\the#2\endcsname
+ }
+
+% If this macro is called eg with the parameter \plaintiff
+% it lets eg \currentpartyshortcount=\plaintiffshortcount
+
+\def\converttokens#1{% A general purpose macro...
+ \cpsctoks=\expandafter{\string#1shortcount}%
+ \converttc{\currentpartyshortcount}{\cpsctoks}%
+ \cpfctoks=\expandafter{\string#1fullcount}%
+ \converttc{\currentpartyfullcount}{\cpfctoks}%
+ \cpatoks=\expandafter{\string#1addrs}%
+ \converttc{\currentpartyaddrs}{\cpatoks}%
+ \cpstoks=\expandafter{\string#1stuff}%
+ \converttc{\currentpartystuff}{\cpstoks}%
+ \cpntoks=\expandafter{\string#1}%
+ \converttc{\currentpartynames}{\cpntoks}%
+ \cpwtoks=\expandafter{\string#1width}%
+ \converttc{\currentpartywidth}{\cpwtoks}%
+ }
+
+% This macro is calld by eg \plaintiff
+% In that case #1 is \plaintiff and #2 the actual name of the
+% Plaintiff in question (eg JOHN SMITH)
+% In the next edition it will do rather more than it does now.
+
+\def\party#1#2{%#1=party, #2=name
+ \converttokens{#1}%
+ \unskip
+ \cardinality\currentpartyaddrs\to\cardcount
+ \ifnum\currentpartyfullcount>\the\cardcount
+ \of{\noaddr}%
+ \fi
+ \global\expandafter\advance\csname\expandafter\gobble\the\cpfctoks
+ \endcsname by1
+ \global\expandafter\advance\csname\expandafter\gobble\the\cpsctoks
+ \endcsname by1
+ \setbox0=\hbox{#2}%
+ \ifdim\wd0>\the\maxp@rtywidth
+ \global\csname\expandafter\gobble\the\cpwtoks
+ \endcsname=\the\maxp@rtywidth
+ \else\ifdim\currentpartywidth<\wd0%
+ \csname\expandafter\gobble\the\cpwtoks\endcsname=\wd0
+ \fi\fi
+ \converttc{\currentpartywidth}{\cpwtoks}% Reset
+ \unskip
+ \ifdim\allwidths<\currentpartywidth
+ \allwidths=\the\currentpartywidth\fi
+ \ta={\\} \tb=\expandafter{\currentpartynames}%
+ \tc=\expandafter{#2}%
+ \expandafter\edef\csname\expandafter\gobble\the\cpntoks
+ \endcsname{\the\tb\the\ta{\the\tc}}%
+ \ifnum\currentpartyfullcount=1 \andcount=0\fi
+ }
+
+
+% This macro recovers the parties so that their names can be formatted
+% The logic in it is still far from perfect
+% It is intended to put "and" in the right place, but sometimes fails...
+
+\newif\ifnoandneeded
+\edef\testand{\relax and}
+
+\def\getparties#1#2{% #1=partylist,#2=partytext
+ \converttokens{#1}%
+ \unskip%
+ \testone=0\testtwo=0%
+ \testthree=\the\currentpartyfullcount%
+ \testfour=\the\currentpartyshortcount%
+ \ifnum\currentpartyfullcount>\the\cardcount%
+ \advance\andcount by1%
+ \edef\abode{% Print addresses
+ \ifcase\andcount%
+ \or{of}%
+ \or{both of}%
+ \else{all of}%
+ \fi}%
+ \rightappenditem\abode\to\currentpartyaddrs%
+ \rightappenditem{}\to\currentpartystuff%
+ \fi%
+ \unskip
+ \loop
+ \begingroup
+ \global\advance\testone by1%
+ \global\advance\testtwo by1%
+ \partyno=\the\testone%
+ \select\partyno\of\currentpartynames\to\partyname%
+ \partyno=\the\testone% reset the counter%
+ \select\partyno\of\currentpartyaddrs\to\partyaddress%
+ \partyno=\the\testone% reset the counter
+ \select\partyno\of\currentpartystuff\to\partystuff%
+ \partystuff\unskip\relax%
+ \ifnum\testone>1
+ {\ifnum\testtwo=\the\currentpartyshortcount
+ {\ifnoandneeded
+ \else\unskip\ and%
+ \fi
+ }%
+ \global\advance\testtwo by1
+ \fi
+ }%
+ \fi
+ \ifx\partyaddress\testand \global\noandneededtrue
+ \else\global\noandneededfalse
+ \fi
+ \ifx\partyaddress\empty\let\partyaddress\noaddr\fi%fudge
+ \unskip\ \partyname\ \partyaddress%
+ \endgroup
+ \ifnum\testone<\the\currentpartyfullcount%
+ \repeat%
+ #2}
+
+% A number of these are not yet used
+% (and may never be used)
+
+\def\getpls{\getparties{\plaintiffs}{\pltext}}
+\def\getdefs{\getparties{\defendants}{\dftext}}
+\def\gettps{\getparties{\thirdparties}{\tptext}}
+\def\getfps{\getparties{\fourthparties}{\fptext}}
+%\def\getaps{\getparties{\appellants}{\aptext}}
+%\def\getresp{\getparties{\respondents}{\rptext}}
+%\def\getapplics{\getparties{\applicants}{\altext}}
+
+\newcount\plshortcount
+\newcount\dfshortcount
+\newcount\tpshortcount
+\newcount\fpshortcount
+%\newcount\apshortcount
+%\newcount\rpshortcount
+%\newcount\alshortcount
+
+\newcount\plaintiffsshortcount
+\newcount\defendantsshortcount
+\newcount\thirdpartiesshortcount
+\newcount\fourthpartiesshortcount
+%\newcount\appellantsshortcount
+%\newcount\respondentsshortcount
+%\newcount\applicantsshortcount
+
+\newcount\plaintiffsfullcount
+\newcount\defendantsfullcount
+\newcount\thirdpartiesfullcount
+\newcount\fourthpartiesfullcount
+%\newcount\appellantsfullcount
+%\newcount\respondentsfullcount
+%\newcount\applicantsfullcount
+
+\newdimen\plaintiffswidth
+\newdimen\defendantswidth
+\newdimen\thirdpartieswidth
+\newdimen\fourthpartieswidth
+%\newdimen\appellantswidth
+%\newdimen\respondentswidth
+%\newdimen\applicantswidth
+
+\def\unsetallparties{%
+ \plaintifffalse
+ \defendantfalse
+ \thirdpartyfalse
+ \fourthpartyfalse
+ }
+
+\def\plaintiff#1{\unsetallparties\plaintifftrue
+ \party{\plaintiffs}{#1}}
+\def\defendant#1{\unsetallparties\defendanttrue
+ \party{\defendants}{#1}}
+\def\thirdparty#1{\unsetallparties\thirdpartytrue
+ \party{\thirdparties}{#1}}
+\def\fourthparty#1{\unsetallparties\fourthpartytrue
+ \party{\fourthparties}{#1}}
+%\def\appellant#1{\unsetallparties\appellanttrue
+% \party{\appellants}{#1}}
+%\def\respondent#1{\unsetallparties\respondenttrue
+% \party{\respondents}{#1}}
+%\def\applicant#1{\unsetallparties\applicanttrue
+% \party{\applicants}{#1}}
+
+\def\listpls{\listparties{\plaintiffs}}
+\def\listdfs{\listparties{\defendants}}
+\def\listtps{\listparties{\thirdparties}}
+\def\listfps{\listparties{\fourthparties}}
+%\def\listaps{\listparties{\appellants}}
+%\def\listrps{\listparties{\respondents}}
+%\def\listapplics{\listparties{\applicants}}
+
+\def\slistpls{\slistparties{\plaintiffs}}
+\def\slistdfs{\slistparties{\defendants}}
+\def\slisttps{\slistparties{\thirdparties}}
+\def\slistfps{\slistparties{\fourthparties}}
+%\def\slistaps{\slistparties{\appellants}}
+%\def\slistrps{\slistparties{\respondents}}
+%\def\slistapplics{\slistparties{\applicants}}
+
+\gdef\pluraltext{%
+ \gdef\addressis{addresses are}%
+ \gdef\seek{seek}%
+ \gdef\wants{claim}%
+ \gdef\respectively{respectively}%
+ \gdef\them{them}%
+ \gdef\do{do}%
+ }
+
+\gdef\singulartext{%
+ \gdef\addressis{address is}%
+ \gdef\seek{seeks}%
+ \gdef\wants{claims}%
+ \gdef\respectively{\unskip}%
+ \gdef\do{does}%
+ \gdef\them{him}%
+ }
+
+\gdef\pltext{%
+ \ifnum\plaintiffsfullcount>1%
+ \gdef\plaintfs{\Plaintiffs}%
+ \pluraltext
+ \else%
+ \ifpluralplaintiff%
+ \gdef\plaintfs{\Plaintiffs}%
+ \pluraltext
+ \else%
+ \gdef\plaintfs{\Plaintiff}%
+ \singulartext
+ \fi\fi}
+
+\gdef\dftext{%
+ \ifnum\defendantsfullcount>1%
+ \gdef\dfdants{\Defendants}%
+ \pluraltext
+ \else%
+ \ifpluraldefendant%
+ \pluraltext
+ \else%
+ \gdef\dfdants{\Defendant}%
+ \singulartext
+ \gdef\them{\iffemaledef her\else him\fi}%
+ \fi\fi}%
+
+\gdef\tptext{%
+ \ifnum\thirdpartiesfullcount>1%
+ \gdef\thirdparts{Third Parties}%
+ \pluraltext
+ \else%
+ \ifpluralthirdparty%
+ \gdef\thirdparts{Third Parties}%
+ \pluraltext
+ \else%
+ \gdef\thirdparts{Third Party}%
+ \singulartext
+ \fi\fi}
+
+\gdef\fptext{%
+ \ifnum\fourthpartiesfullcount>1%
+ \gdef\fourthparts{Fourth Parties}%
+ \pluraltext
+ \else%
+ \ifpluralfourthparty%
+ \gdef\fourthparts{Fourth Parties}%
+ \pluraltext
+ \else%
+ \gdef\fourthparts{Fourth Party}%
+ \singulartext
+ \fi\fi}
+
+%\gdef\aptext{%
+% \ifnum\appellantsfullcount>1%
+% \gdef\plaintfs{Appellants}%
+% \pluraltext
+% \else%
+% \ifpluralappellant%
+% \gdef\plaintfs{Appellants}%
+% \pluraltext
+% \else%
+% \gdef\plaintfs{Appellant}%
+% \gdef\addressis{address is}%
+% \pluraltext
+% \fi\fi}
+%%
+%\gdef\rptext{%
+% \ifnum\respondentsfullcount>1%
+% \gdef\dfdants{Respondents}%
+% \pluraltext
+% \else%
+% \ifpluralrespondent%
+% \gdef\dfdants{Respondents}%
+% \pluraltext
+% \else%
+% \gdef\dfdants{Respondent}%
+% \singulartext
+% \fi\fi}%
+%%
+%\gdef\altext{%
+% \ifnum\applicantsfullcount>1%
+% \gdef\plaintfs{Applicants}%
+% \pluraltext
+% \else%
+% \ifpluralappellant%
+% \gdef\plaintfs{Applicants}%
+% \pluraltext
+% \else%
+% \gdef\plaintfs{Applicant}%
+% \singulartext
+% \fi\fi}
+%%
+% Phew. I reckon those need amending...
+
+% This is one macro that will soon go, being replaced by
+% \pleading and \spleading
+
+\def\topofpleading#1#2{% doctype & ct
+ \reset
+ \storeparindent=\the\parindent
+ \global\parindent=0pt
+ \def\doctype{#1}
+ \ct=#2
+ \pleadingtrue
+ \clientpltrue
+ \gettitle
+ \def\backsheet{\enddoc\bsdft}
+ \heading
+ \parties}
+
+% So will this. It will be \let equal to \pleading
+
+\def\generic#1{%
+ \reset
+ \def\doctype{\vtop{\centertext{#1}}}
+ \heading
+ \ifnoparties\else\parties\fi
+ \centertext{#1}
+ \medskip}
+
+\def\am@nd{%
+ \ifnum\amendcount>2{\uuul RE-}\fi
+ \ifnum\amendcount>1{\uul RE-}\fi
+ \ifnum\amendcount>0{\ul AMENDED }\fi
+ }
+
+\def\pleading#1{% doctype
+ \storeparindent=\the\parindent
+ \global\parindent=0pt
+ \draft{\am@nd#1}
+ \pleadingtrue
+ \gettitle
+ \heading
+ \parties
+ \ifdraft
+ \def\signoff{\endofpleading\settled}%
+ \else\let\signoff\endofpleading\fi
+ \medbreak
+ \leavevmode
+ \centertext{\am@nd#1}%
+ \nobreak
+ \amendnote}
+
+\def\spleading#1{% doctype
+ \storeparindent=\the\parindent
+ \global\parindent=0pt
+ \draft{\am@nd#1}
+ \pleadingtrue
+ \gettitle
+ \heading
+ \sparties
+ \ifdraft
+ \def\signoff{\endofpleading\settled}%
+ \else\let\signoff\endofpleading\fi
+ \medbreak
+ \centertext{\am@nd#1}%
+ \nobreak
+ \amendnote}
+
+\def\gettitle{% This needs a lot of work
+ \pltext\dftext\tptext % added to deal with ops on their own
+ \getbstitlewidth
+ \gdef\title{%
+ \global\maxp@rtywidth=\the\bstitlewidth
+ \centerline{\court}\cr
+ \scaps
+ \division\cr
+ \regis\cr
+ \reference\cr
+ \noalign{\bigskip}%
+ \rm
+ \centertext{\inthematter}\cr
+ \noalign{\medskip}%
+ \slistpls\cr
+ \hfill\it\plaintfs\cr
+ \against\cr
+ \strut\cr
+ \slistdfs\cr
+ \hfill\it\dfdants\cr}%
+ \global\maxp@rtywidth=\the\maxpartywidth}
+
+\def\headingskip{\vskip-\lastskip\smallskip}
+
+\gdef\heading{% Can this be broken down further?
+ \vbox{\baselineskip=15pt
+ \line{\court\hfil\reference}%
+ \headingskip
+ \scaps % Turn on caps and smallcaps
+ \apcourt
+ \headingskip
+ \division
+ \headingskip
+ \regis
+ \headingskip
+ \subdivision
+ \headingskip
+ \judgename
+ \headingskip
+ \rm % Back to roman
+ \Writissued
+ \headingskip
+ \inthematter
+ }% end of vbox
+ \medskip}
+
+\def\parties{%
+ \capacitytrue
+ \pltext% set up the alternative text for `his', `their', etc.
+ \dftext
+ \tptext
+ {\noindent\leftline{BETWEEN\raise.15ex\hbox{---}}
+ \bigskip
+ % The next few lines box up the parties.
+ \centerline{\hbox{\vtop{\baselineskip=15pt %Baselineskip in parties
+ \halign{\hfill ##\hfill\cr
+ \listpls\cr
+ \relax\hidewidth\rightline{\hfil\it
+ \ifintendedaction Intended\ \fi\plaintfs}
+ \hidewidth\relax\cr
+ \hfill \against\hfill\cr
+ \strut\cr
+ \listdfs\cr
+ \relax\hidewidth\rightline{\it
+ \ifintendedaction Intended\ \fi\dfdants}
+ \hidewidth\relax\cr
+ \ifthirdparty
+ \hfill \against\hfill\cr
+ \strut\cr
+ \listtps\cr
+ \relax\hidewidth\rightline{\it
+ \ifintendedaction Intended\ \fi\thirdparts}
+ \hidewidth\relax\cr\fi
+ }}}}}%
+ \twelvepoint\bigskip
+ \capacityfalse}
+
+% Short version of parties for affy's, etc.
+
+\def\sparties{%
+ \capacitytrue
+ \pltext % set up the alternative text for `his', `their', etc.
+ \dftext
+ \tptext
+ {\noindent\leftline{BETWEEN\raise.15ex\hbox{---}}
+ % The next few lines box up the parties.
+ \centerline{\hbox{\vtop{\baselineskip=15pt
+ \halign{\hfill ##\hfill\cr
+ \slistpls\cr
+ \relax\hidewidth\rightline{\hfill\it
+ \ifintendedaction Intended\ \fi\plaintfs}
+ \hidewidth\relax\cr
+ \hfill \against\hfill\cr
+ \strut\cr
+ \slistdfs\cr
+ \relax\hidewidth\rightline{\hfill\it
+ \ifintendedaction Intended\ \fi\dfdants}
+ \hidewidth\relax\cr
+ \ifthirdparty
+ \hfill \against \hfill\cr
+ \strut\cr
+ \slisttps\cr
+ \relax\hidewidth\rightline{\hfill\it
+ \ifintendedaction Intended\ \fi\thirdparts}
+ \hidewidth\relax\cr\fi}}%
+ }}}%
+ \bigskip
+ \capacityfalse}%
+
+\def\listparties#1{% #1=partylist (eg \plaintiffs)
+ \converttokens{#1}%
+ \testone=0\def\\##1{\relax##1\cr}%
+ \tabskip=0pt
+ \vtop{\hsize=\the\maxp@rtywidth
+ \hyphenpenalty=10000\tolerance=2750
+ \ifnum\currentpartyfullcount>1
+ \halign{\global\advance\testone by1
+ \hfil
+ \llap{(\the\testone)\quad}
+ \vtop{%
+ \hsize=\the\currentpartywidth
+ \hangafter1\hangindent\the\partyhang
+ \strut##\strut}% end of \vtop
+ \hfil\cr#1}% end of \halign
+ \else
+ \ifnum\currentpartyfullcount=1
+ \partyno=1
+ \select\partyno \of#1 \to\partyname
+ \centertext{\partyname}%
+ \fi\fi}}
+
+\def\slistparties#1{% #1=\plaintiffs
+ \converttokens{#1}%
+ \partyno=1\def\\##1{\relax##1\cr}%
+ \tabskip=0pt
+ \select\partyno \of#1 \to\partyname
+ \vtop{\hsize=\the\maxp@rtywidth
+ \hyphenpenalty=10000\tolerance=2750
+ \ifnum\currentpartyfullcount>2
+ \centertext{\partyname{ \it \&~Ors.\/}}%
+ \else\ifnum\currentpartyfullcount=2
+ \centertext{\partyname{ \it \&~Anor.\/}}%
+ \else\ifnum\currentpartyfullcount=1
+ \centertext{\partyname}%
+ \fi\fi\fi}}
+
+% This is a default definition.
+\long\def\bottomofpleading#1{%#1=text
+ \def\addressfile{solicitors}
+ \getaddress
+ {\def\cr{ of \def\cr{, }}%
+ \medskip
+ #1}%
+ \global\parindent=\the\storeparindent}
+
+\def\inthematter{%
+ \ifx\matters\empty
+ \else\testone=0\def\\##1{\relax\global\advance\testone by1%
+ \def\and{\ifnum\testone<2{}%
+ \else{And\ }\fi}% Now do the work
+ {\scaps \and}##1\strut\cr
+ \ifnum\testone<\the\mattercount \noalign{\smallskip}\fi}%
+ \halign{%
+ \vtop{\twelvebase=15pt\twelvepoint
+ \hangafter1 \hangindent\clindent ##\strut}\hfil\cr
+ \matters\crcr}%
+ \fi}
+
+% Now some other pleading stuff, esp. amendments
+
+\def\served#1{\getservicedate{#1}{\dateofservice}}
+\def\reserved#1{\getservicedate{#1}{\dateofreservice}}
+\def\rereserved#1{\getservicedate{#1}{\dateofrereservice}}
+\def\rerereserved#1{\getservicedate{#1}{\dateofrerereservice}}
+
+\def\writissued#1{%
+ \getservicedate{#1}{\datewritissued}%
+ \gdef\Writissued{Writ issued the \nodate}%
+ }
+
+\def\getservicedate#1#2{{%
+ \def\sserved##1/##2/##3roger{%
+ \def\day{##1}%
+ \def\month{##2}%
+ \def\year{\ifnum##3<100 19##3\else##3\fi}%
+ \expandafter\xdef\csname\expandafter\gobble\string#2\endcsname{\longtoday}%
+ }%
+ \sserved#1roger
+ }}
+
+\newif\ifamendtext\amendtexttrue
+\def\setamendcount#1{\global\amendcount=#1}
+
+\newcount\amendcount
+\newcount\aamct \aamct=0
+
+\gdef\amended{%
+ \enddoc
+ \setamendcount{1}%
+ \ifamendtext\amendstuff\fi}
+
+\gdef\reamended{%
+ \enddoc
+ \setamendcount{2}
+ \ifamendtext\amendstuff\fi}
+
+\gdef\rereamended{%
+ \setamendcount{3}%
+ \ifamendtext\amendstuff\fi}
+
+\def\amendstuff{%This overlong macro deals with amendment formal parts
+ \gdef\amendnote{%
+ \ifnum\amendcount<2% First amendment
+ \tcl{\scaps Note:} Text inserted by this amendment to this
+ pleading is shown underlined, {\ul thus}; text deleted by
+ this amendment is shown crossed-out, {\xo thus}.
+ \else % Second and subsequent amendments
+ \tcl{\scaps Note 1:} Text inserted by the first amendment
+ is shown underlined, {\ul thus}; text deleted by the
+ first amendment is shown crossed-out, {\xo thus};
+ \par
+ \tcl{\scaps Note 2:} Text inserted by the second amendment
+ is shown underlined twice, {\uul thus}; text deleted by the
+ second amendment is shown crossed-out twice, {\xxo thus}.
+ \fi
+ \par
+ \ifnum\amendcount=3% re-re-amendment
+ \tcl{\scaps Note 3:} Text inserted by the third amendment
+ is shown underlined thrice, {\uuul thus}; text deleted by
+ the third amendment is shown crossed-out thrice, {\xxxo thus}.
+ \fi
+ }%
+ \ifnum\ct=1\ccendofpleading\else\hcendofpleading\fi
+ \global\amendtextfalse
+ }
+
+\def\hcendofpleading{% End of pleading for High Court
+ \gdef\endofpleading{%
+ \signature
+ {\ul \signature}
+ \ifnum\amendcount>1{\uul \signature}\fi
+ \ifnum\amendcount>2{\uuul \signature}\fi
+ \bottomofpleading{%
+ Served the \ifx\dateofservice\empty{\nodate}%
+ \else{\dateofservice}\fi
+ \unskip
+ \ifnum\amendcount=1{\ul\ and }\fi% Amend
+ \ifnum\amendcount>1{\ignorespaces\ul\unskip, }\fi
+ {\ul re-served the \ifx\dateofreservice\empty{\nodate}%
+ \else{\dateofreservice}\fi\unskip}
+ \ifnum\amendcount=2{\ul\ and }\fi% Reamend
+ \ifnum\amendcount>2{\ignorespaces\ul\unskip, }\fi
+ \ifnum\amendcount>1% ie \amendcount is 2 or more
+ {\uul re-re-served the
+ \ifx\dateofrereservice\empty{\nodate}%
+ \else{\dateofrereservice}\fi\unskip}
+ \fi
+ \ifnum\amendcount=3{\ul\ and }\fi% Re-re-amend
+ \ifnum\amendcount>2% ie \amendcount is 3 or more
+ {\uuul re-re-re-served the
+ \ifx\dateofrerereservice\empty{\nodate}%
+ \else{\dateofrerereservice}\fi}
+ \fi
+ by \ignorespaces\sols \solicitors\ for the\forwhom\par
+ }%
+ }%
+ }
+
+\def\ccendofpleading{% End of pleading for county court
+ \gdef\endofpleading{%
+ \medskip
+ Dated the \ifx\dateofservice\empty{\nodate}%
+ \else{\dateofservice}\fi
+ \signature
+ {\ul Dated the \ifx\dateofreservice\empty{\nodate}%
+ \else{\dateofreservice}\fi\unskip}
+ {\ul \signature}
+ \ifnum\amendcount>1
+ {\uul Dated the \ifx\dateofrereservice\empty{\nodate}%
+ \else{\dateofrereservice}\fi\unskip}
+ {\uul \signature}
+ \fi
+ \ifnum\amendcount>2% ie \amendcount is 3 or more
+ {\uuul Dated the \ifx\dateofrerereservice\empty{\nodate}%
+ \else{\dateofrerereservice}\fi}
+ {\uuul\signature}
+ \fi
+ \bottomofpleading{%
+ \rightline{\vtop{\hsize=.6\hsize
+ The \forwhom's \solicitors\ are \sols
+ where they will accept service of proceedings
+ on behalf of the \forwhom.}}
+ \bigskip
+ \leftline{\vtop{\hsize=.6\hsize
+ To the District Judge of the \courtname\
+ COUNTY COURT and to the \notforwhom.}}
+ }%
+ }%
+ }
+
+% Clause numbering for use inside amendments
+
+\def\acl{\clauselevel=1
+ \advance\recno by1 \xcl{\hss\the\clno\char\the\recno.\enspace}}
+
+\def\aacl{\clauselevel=1
+ \advance\recno by1 \xcl{\hss\the\clno\char\the\recno\char
+ \the\recno.\enspace}}
+
+\def\aaacl{\clauselevel=1
+ \advance\recno by1 \xcl{\hss\the\clno\char\the\recno\char\the\recno%
+ \char\the\recno.\enspace}}
+
+\def\ascl{\clauselevel=2
+ \advance\recno by1 \xcl{\hss(\the\sclno\char\the\recno)\enspace}}
+
+\def\aascl{\clauselevel=2
+ \advance\recno by1 \xcl{\hss(\the\sclno\char\the\recno%
+ \char\the\recno)\enspace}}
+
+\def\aaascl{\clauselevel=2
+ \advance\recno by1 \xcl{\hss(\the\sclno\char\the\recno\char\the\recno%
+ \char\the\recno)\enspace}}
+
+\let\dateofservice\empty
+\let\dateofreservice\empty
+\let\dateofrereservice\empty
+\let\dateofrerereservice\empty
+\let\datewritissued\empty
+
+\def\resetpleadingdefaults{%
+ \ifnum\ct=1
+ \def\endofpleading{%
+ \medskip
+ Dated this \nodate\par\signature
+ \bottomofpleading{%
+ \rightline{\vtop{\hsize=.6\hsize
+ The \forwhom's \solicitors\ are \sols
+ where they will accept service of proceedings
+ on behalf of the \forwhom.}}
+ \bigskip
+ \leftline{\vtop{\hsize=.6\hsize
+ To the District Judge of the \courtname\
+ COUNTY COURT and to the \notforwhom.}}
+ }}%
+ \else
+ \def\endofpleading{%
+ \signature
+ \bottomofpleading{%
+ Served the \nodate by \ignorespaces\sols \solicitors\
+ for the \forwhom}}
+ \fi
+ \gdef\amendnote{}% Reset it.
+ \let\dateofservice\empty
+ \let\dateofreservice\empty
+ \let\dateofrereservice\empty
+ \let\datewritissued\empty
+ \setamendcount{0}%
+ \global\maxp@rtywidth=\the\maxpartywidth}
+
+% These may change. They set up names.
+
+\gdef\Plaintiffs{\ifappeal Appellants\else\ifapplication Applicants%
+ \else Plaintiffs\fi\fi}
+\gdef\Plaintiff{\ifappeal Appellant\else\ifapplication Applicant%
+ \else Plaintiff\fi\fi}
+\gdef\Defendants{\ifappeal Respondents\else\ifapplication Respondents%
+ \else Defendants\fi\fi}
+\gdef\Defendant{\ifappeal Respondent\else\ifapplication Respondent%
+ \else Defendant\fi\fi}
+\gdef\Thirdparty{Third Party}
+\gdef\Thirdparties{Third Parties}
+
+% examples of use
+
+% This assumes that \clientpl has already been set true or false
+\def\arrangement{%
+ \def\endofpleading{}
+ \spleading{ARRANGEMENT}}
+
+\def\soc{%
+ \ifx\Writissued\empty\def\Writissued{Writ issued the \nodate}\fi
+ \clientpltrue
+ \pleading{STATEMENT OF CLAIM}}
+
+\def\defence{%
+ \let\Writissued\empty
+ \clientplfalse
+ \pleading{DEFENCE}}
+
+\def\dacc{%
+ \gdef\counterclaim{%
+ \vskip\the\clskip
+ \centerline{COUNTERCLAIM}
+ \nobreak}
+ \let\Writissued\empty
+ \clientplfalse
+ \pleading{DEFENCE AND COUNTERCLAIM}
+ \smallskip
+ \centerline{DEFENCE}
+ \nobreak}
+
+\def\counterclaim{% Counterclaim on its own
+ \let\Writissued\empty
+ \clientplfalse
+ \pleading{COUNTERCLAIM}}
+
+\def\reply{% Reply on its own
+ \let\Writissued\empty
+ \clientpltrue
+ \pleading{REPLY}}
+
+\def\rdcc{% Reply and Defence to Counterclaim
+ \let\Writissued\empty
+ \clientpltrue
+ \pleading{REPLY AND DEFENCE TO COUNTERCLAIM}}
+
+% County Court. Note: These macros do not yet reproduce
+% all (or indeed any) of the batty prescribed forms, although
+% it would not be difficult to achieve this.
+% Most macros are the same as the HC macros
+
+\def\poc{%
+ \let\Writissued\empty
+ \clientpltrue
+ \pleading{PARTICULARS OF CLAIM}}
+
+% The Affidavit macros. These are fairly complicated
+% First, some general bits and pieces
+
+\newtoks\shortinitials \shortinitials={}
+\newtoks\tempinitials \tempinitials={}
+\newtoks\surname \surname={}
+\newif\ifsomeletters \somelettersfalse
+\newif\ifspace \spacefalse
+\newif \ifpunct
+\newtoks\firstletter \firstletter={}
+\newif\ifmac \macfalse
+\newtoks\longinitials \longinitials={}
+
+\newcount\lettercount
+\newcount\surnamecount
+\newcount\front
+
+\def\affyno#1{%
+ \def\affno{\addsuffix{#1}}}
+\affyno{1}% set 1st as default
+
+% Now some stuff to extract initials from fullnames
+
+\def\itsaspace{%
+\dbhelp{It is a space}%
+ \ifsomeletters%
+ \edef\tin{\the\shortinitials\the\firstletter.}%
+ \shortinitials=\expandafter{\tin}%
+ \somelettersfalse\fi%
+ \lettercount=0\surnamecount=0\relax\unskip}
+
+\def\itsaletter#1{%
+\dbhelp{It is a letter-"#1"}%
+ \advance\lettercount by1% #1 is a letter
+ \advance\surnamecount by1\relax%
+ \ifnum\lettercount=1 \firstletter={#1}
+ \someletterstrue\fi
+ \ifnum\surnamecount=1\surname=\expandafter{#1}%
+ \tempinitials=\expandafter{#1}%
+ \else\ifnum\surnamecount>1%
+ \tempinitials=\expandafter{\the\tempinitials#1}
+ \maccheck{#1}%
+ \fi\fi}
+
+\def\maccheck#1{%
+\dbhelp{Doing MacCheck}%
+ \ta={Mc}
+ \edef\tone{\the\ta}%
+ \edef\ttwo{\the\tempinitials}%
+ \ifx\tone\ttwo
+ \mactrue
+ \surname=\expandafter{\the\tempinitials}%
+ \else\ifpunct\punctfalse\surname=\expandafter{\the\surname#1}%
+ \firstletter=\expandafter{\the\firstletter#1}%
+ \else\ifmac\macfalse\surname=\expandafter{\the\surname#1}%
+ \firstletter=\expandafter{\the\tempinitials}%
+ \else\surname=\expandafter{\the\surname\lowercase{#1}}%
+ \fi\fi\fi}
+
+\def\itspunctuation#1{%
+\dbhelp{It is punctuation-"#1"}%
+%\def\temppunct#1{\if#1\noexpand~-\else#1\fi}%
+ \somelettersfalse
+ \edef\tin{\the\tempinitials#1}
+ \tempinitials=\expandafter{\tin}%
+ \surname=\expandafter{\the\surname#1}%
+ \someletterstrue
+ \if#1\space\firstletter=\expandafter{\the\firstletter.}\else
+ \firstletter=\expandafter{\the\firstletter#1}\fi
+ \advance\surnamecount by1\puncttrue\relax}
+
+\gdef\length#1{\lettercount=0\surnamecount=0
+\unskip\ignorespaces\getlength#1!}
+
+\gdef\getlength#1{%
+\dbhelp{Character="#1"}
+ \unskip\ignorespaces
+ \if#1!
+ \let\next=\relax
+ \edef\tin{\the\shortinitials\the\firstletter.}%
+ \longinitials=\expandafter{\tin}%
+ \else% ie if not end of name
+ \edef\fullname{\fullname#1}%
+ \dbhelp{Fullname="\fullname"}%
+ \ifcat\noexpand#1\noexpand~ \itsaspace\fi%
+ \if#1\noexpand_\itspunctuation{ }\else
+ \ifcat#1-\itspunctuation{#1}\fi\fi%
+ \ifcat#1a \itsaletter{#1}\fi%
+ \let\next=\getlength%
+ \fi% it is an exclamation mark
+ \unskip\next}
+
+\gdef\deponent{%
+ \enddoc \endedtrue
+ \def\clearexno{\exno=0 \front=0}%Use \setexno{n} to reset to other number.
+ \shortinitials={}%reset the lot
+ \surname={}
+ \longinitials={}
+ \def\of##1{\def\hisaddr{##1}%
+ \ifx\hisaddr\empty\def\hisaddr{[{\it address\/}]}\fi}%
+ \def\occupation##1{\def\hisoccupation{##1}%
+ \ifx\hisoccupation\empty
+ \def\hisoccupation{[{\it occupation\/}]}\fi
+ \def\comma{, }}%
+ \of{}\occupation{}% set up the defaults
+ \def\nooccupation{\def\hisoccupation{}%
+ \def\comma{}}%
+ \catcode`\ =\active % Make spaces active ftb.
+ \global\catcode`\_=\other % Make underlines into letters
+ \let\tempt=~ \catcode`\~=\other \let\tilde=~ % check tilde
+ \let\tempb=\blank \let\blank=\space
+ \whatsnext}
+
+\def\whatsnext#1{%
+ \ifx#1\noname
+ \shortinitials={\blank}%
+ \surname={\blank\blank}%
+ \longinitials={\blank\blank}%
+ \def\fullname{\noname}%
+ \else
+ \edef\fullname{}%
+ \length{#1}%
+ \fi
+ \def\depsname{\hbox{\ignorespaces%
+ \the\shortinitials\space\the\surname}}%
+ \xdef\inits{\the\longinitials}%
+ \catcode`\ =10% reset the catcodes
+ \catcode`\~=\active
+ \catcode`\_=8
+ \let~=\tempt
+ \let\blank=\tempb
+ \gdef\deplname{I, \fullname, of \hisaddr\comma
+ \hisoccupation, make oath and say as follows---}}
+
+\def\affidavit{\par% Note: This does NOT set \clientpl
+ \clearexno
+ \draft{AFFIDAVIT}% This has been moved
+ \gettitle
+ \pleadingtrue
+ \endorsementtrue
+ \ifdraft
+ \def\signoff{\endofpleading\settled}%
+ \else\let\signoff\endofpleading\fi
+ \def\endofpleading{%
+ \bottomofpleading{\sworn}}%
+ \ifdraft\else
+ \def\doextras{\getfrontsheets\let\doextras\empty}
+ \fi
+ \endorsement
+ \heading
+ \sparties
+ \deplname % produces I, etc, make oath, etc.
+ \medskip}
+
+\def\endorsement{\tlap{\rightline{%
+ \baselineskip=13pt\tenbf\getendorsement}\medskip}}
+
+\def\bsendorsement{\tlap{\xcenterline{%
+ \baselineskip=10pt\ninebf\getendorsement}}}
+
+\def\getendorsement{%
+ \setbox0\hbox{Deponent}\dimen1=.4\wd0
+ \setbox0\hbox{Party\hskip\dimen1\forwhom}\dimen2=\wd0
+ \setbox0\hbox{Deponent\hskip\dimen1\depsname}%
+ \ifdim\wd0>\dimen2 \dimen2=\wd0\fi
+ \setbox0\hbox{No.\ of Affidavit\hskip\dimen1\affno}%
+ \ifdim\wd0 >\dimen2 \dimen2=\wd0\fi
+ \setbox0\hbox{Date Sworn\hskip\dimen1\whensworn}%
+ \ifdim\wd0>\dimen2 \dimen2=\wd0\fi
+ \vbox{%
+ \hbox to \dimen2{Party\dotfill\ignorespaces\forwhom}%
+ \hbox to \dimen2{Deponent\dotfill\ignorespaces\depsname}
+ \hbox to \dimen2{No.\ of Affidavit\dotfill%
+ \hbox{\ignorespaces\affno}}%
+ \hbox to \dimen2{Date Sworn\dotfill\whensworn}%
+ }}
+
+\def\frontsheet#1{% Produces frontsheets for exhibits
+ \vfil\eject
+ \endorsement
+ \heading
+ \sparties
+ \pageno=0
+ \nopagenumbers
+ \inform{Frontsheet for Exhibit "\inits \number#1"}%
+ \vtop{\raggedright\uchyph=0
+ This is the Exhibit marked ``\inits\,\number#1'' referred to
+ in the Affidavit of \fullname\ sworn before me this \nodate
+ \vskip1.5in
+ \hskip.6\hsize\nobreak Solicitor }%
+ \vfil\eject}
+
+\def\getfrontsheets{%
+ \ifnum\exno=0
+ \else
+ \loop
+ \advance\front by1
+ \frontsheet{\number\front}%
+ \ifnum\exno>\number\front\repeat
+ \fi}
+
+% End of affidavit macros
+
+
+% Originating Summons - long form
+
+%\gdef\os{%
+% \topofpleading{ORIGINATING SUMMONS}{0}
+% \def\endos{\bottomofpleading{\endostext}}
+% \ostext}
+%
+% Originating Summons - short form
+%
+% Minutes of Order
+%
+%\def\minutes{%
+% \topofpleading{MINUTES OF ORDER}{0}
+% \medskip
+% \centerline{MINUTES OF ORDER}
+% \medskip
+% {\scaps This Application}, \etc\par
+% {\scaps And Upon Hearing}, \etc\par
+% {\scaps And Upon Reading}, \etc\par}
+%
+\def\order{%
+ \topofpleading{ORDER}{0}
+ \medskip
+ \centerline{ORDER}
+ \medskip}
+
+% Other macros take the same form. (More will be added.)
+
+\def\statementofclaim{%
+ \topofpleading{\amend STATEMENT OF CLAIM}{0}
+ \medskip
+ \centerline{\amend STATEMENT OF CLAIM}
+ \par\nobreak\medskip}
+
+\def\endwrittext{%
+ {\scaps This Writ} was issued by \ignorespaces\sols \solicitors\ for
+ the said \plaintfs\ whose \addressis\ as stated above}
+
+\def\endgenwrit{% This can be removed
+% \signature
+ \bottomofpleading{%
+ {\scaps This Writ} was issued by \ignorespaces\sols \solicitors\ for
+ the said \plaintfs\ whose \addressis\ as stated above}}
+
+\def\sjsummons{% O.14. It may be necessary to set \clientpl
+ \origprocess{SUMMONS}{\summarytext}{}{}{\endsummarytext}%
+ }
+
+\def\spsummons{% O.86. It may be necessary to set \clientpl
+ \topofpleading{SUMMONS}{0}
+ \specifictext}
+
+\def\summons{% This is an ordinary summons
+ \topofpleading{SUMMONS}{0}
+ \summonstext}
+
+\def\endsummons{%
+ {\scaps Dated} \nodate
+ \bottomofpleading{This Summons was taken out by\sols \solicitors\ for
+ the above-named \forwhom\par
+ \medskip
+ To the \notforwhom\ and to \theirsols, of \theirsolsaddr, Solicitors
+ for the above-named \notforwhom.}}
+
+\def\defenceandcounterclaim{%
+ \reset
+ \def\doctype{DEFENCE AND COUNTERCLAIM}
+ \pleadingtrue
+ \clientplfalse
+ \draftparameters
+ \gettitle
+ \def\backsheet{\enddoc\bsdft}
+ \heading
+ \parties
+ \centerline{\amend DEFENCE}
+ \medskip}
+
+\def\reply{%
+ \reset
+ \def\doctype{\amend REPLY}
+ \clientpltrue
+ \heading
+ \ifnoparties\else\parties\fi
+ \centerline{\amend REPLY}
+ \medskip}
+
+\def\replyanddefencetocounterclaim{%
+ \reset
+ \def\doctype{\vtop{\hsize=2.5in
+ \centertext{\amend REPLY AND DEFENCE
+ TO COUNTERCLAIM}}}
+ \clientpltrue
+ \heading
+ \ifnoparties\else\parties\fi
+ \centerline{\amend REPLY AND DEFENCE TO COUNTERCLAIM}
+ \medskip
+ \centerline{\amend REPLY}
+ \medskip}
+
+\def\counterclaim{% This is for use in a Defence & Counterclaim
+ \bigbreak\centerline{\amend COUNTERCLAIM}\nobreak\medskip}
+
+\def\particulars{\clno=0
+ \par\smallskip\centerline{PARTICULARS}\par}
+
+\def\served{%
+ \bottomofpleading{%
+ Served the \nodate by \ignorespaces\sols \solicitors\
+ for the \dfdants}}
+
+% backsheet macros
+
+% Misc
+
+\edef\workdone{}
+\newtoks\tempwd \tempwd={}
+\newdimen\bstopincrease \bstopincrease=.5in
+\newdimen\bsbotincrease \bsbotincrease=.5in
+\def\chittitle{%
+ \slistpls\cr
+ \ v.\cr
+ \slistdfs\cr}
+\newdimen\storeparindent
+
+\def\osinhtext{LET\ignorespaces\getdefs\ attend
+ before Master \nomonth at Chancery Chambers,
+ Room No.\noday, Royal Courts of Justice, Strand,
+ London, WC2A2LL on a day to be fixed on the hearing
+ by the \plaintfs \getpls for the following relief,
+ that is to say---\par
+\medskip}
+
+\def\endosinhtext{And let the \dfdants\ within [14 days]
+ after service of this summons on \them\ counting the
+ day of service, return the accompanying Acknowledgment
+ of Service to the appropriate Court Office.\par
+ \nobreak\smallskip
+ Dated the \nodate
+
+ {\bf Note---}This summons may not be served later than 12
+ calendar months beginning with the above date unless
+ renewed by order of the Court.\par
+ \medskip
+ This summons was taken out by \ignorespaces\sols \solicitors\
+ for the said \plaintfs\ whose \addressis\ as stated above
+ \medskip
+
+ {\bf Note---}If a defendant does not attend personally
+ or by his counsel or solicitor at the time and place
+ above-mentioned such order will be made as the Court may
+ think fit just and expedient.\par
+ \medskip
+ A defendant who is a personal representative must,
+ within 21 days after service of this summons on him,
+ counting the day of service, lodge with the court an
+ affidavit in answer, stating the particulars required by
+ Order 99, rule 5 of the Rules of the Supreme Court.\par
+ \medskip
+ \centerline{\bf IMPORTANT}\par\nobreak
+ Directions for Acknowledgment of Service are given with the
+ accompanying form.\par
+ }
+
+\def\summarytext{% Spacing reduced to get it on one page
+ \twelvebase=17pt\twelvepoint
+ \smallskip
+ {\scaps Let all parties} concerned attend \chambers\
+ Royal Courts of Justice, Strand, London WC2A 2LL,
+ on \phantom{[Mon]}day the \nodate\ at \noname on
+ the hearing of an application on the part of the \plaintfs\
+ for the relief claimed in the Statement of Claim
+ \smallskip
+ {\scaps Take Notice} that a party intending to oppose
+ this application or to apply for a stay of execution
+ should send to the opposite party or his Solicitor to
+ reach him not less than three days before the date
+ above mentioned a copy of any affidavit intended to be used.}
+
+\def\endsummarytext{%
+ {\scaps Dated} \nodate
+ \smallskip
+ This summons was taken out by \ignorespaces\sols \solicitors\
+ for the \plaintfs.
+ \smallskip
+ TO \noname, of \noaddr, \solicitors\ for the \dfdants.\par}
+
+\def\specifictext{%
+ \smallskip
+ {\scaps Let all parties} concerned attend before Master
+ \if\mast\empty\blank\blank\else\mast\ \fi
+ at the Chambers of the Judge, Room No.~\phantom{100}, Royal
+ Courts of Justice, Strand, London WC2A 2LL, on
+ \phantom{Wednesday} the \nodate\ at \phantom{12}~o'clock in
+ the \phantom{after}noon on the hearing of an application on
+ the part of the \plaintfs\ for the following relief---
+
+ \cl An order pursuant to Order 86 of the Rules of the Supreme Court
+ for specific performance of the agreement in the Writ in this action
+ mentioned in the terms of the Minutes set out in the Schedule hereto
+
+ \cl All necessary and further inquiries and accounts
+
+ \cl In the alternative Directions as to the pleading in and further
+ conduct of this action
+ \schedule\par}
+
+\def\summonstext{%
+ {\scaps Let all parties} concerned attend before Master \blank
+ at the Chambers of the Judge, Room No.~\phantom{100}, Royal
+ Courts of Justice, Strand, London WC2A 2LL, on
+ \phantom{Wednesday} the \nodate\ at \phantom{12}~o'clock in
+ the \phantom{after}noon on the hearing of an application on
+ the part of the \plaintfs\ for the following
+ relief---\par\nobreak\medskip}
+
+\def\ostext{%
+ TO\ignorespaces\getdefs
+ \smallskip
+ {\scaps Let The \expandafter{\dfdants}}\ within [14] days after
+ service of this summons on \them\ \respectively, counting the day
+ of service, return the accompanying Acknowledgment of Service
+ to the appropriate Court Office
+ \smallskip
+ {\scaps By This Summons}, which is issued on the application of the
+ \plaintfs\unskip\space\getpls\unskip\space the \plaintfs\ \seek\ the
+ following relief, that is to say---\hfil\par}
+
+\def\endostext{%
+ If the \dfdants\ \do\ not acknowledge service, such judgment may
+ be given or order made against or in relation to \them\ as the
+ Court may think just and expedient
+ \medskip
+ Dated the \nodate
+ \medskip
+ {\bf Note}---This summons may not be served later than 4~calendar
+ months beginning with the above date unless renewed by order of
+ the Court.
+ \medskip
+ This summons was taken out by \ignorespaces\sols \solicitors\
+ for the said \plaintfs\ whose \addressis\ as stated above
+ \medskip
+ \centerline{\bf IMPORTANT}\par\nobreak
+ Directions for Acknowledgment of Service are given with the
+ accompanying form.\par
+ }
+
+\def\subjectmatter#1#2{%#1=matter,#2=text
+ \global\advance\mattercount by1
+ \rightappenditem{\scaps#1 \rm of} #2\to\matters}
+
+\def\matter#1{\subjectmatter{In the Matter}{#1}}
+\def\estate#1{\subjectmatter{In the Estate}{#1}}
+
+\def\re#1{\nopartiestrue\def\res{\vbox{\hsize=2.8in
+ \centertext{#1}}}}
+
+% Set up the parties
+
+\def\forwhom{\pltext\dftext%\unskip
+ \ifclientpl\plaintfs\else\dfdants\fi}
+
+\def\notforwhom{\pltext\dftext%\unskip
+ \ifclientpl\dfdants\else\plaintfs\fi}
+
+\newcount\ct % courts
+\def\court{\ifcase\ct IN THE HIGH COURT OF JUSTICE
+ \or IN THE \courtname\ COUNTY COURT
+ \or IN THE COURT OF APPEAL
+ \or IN THE HOUSE OF LORDS
+ \else IN THE HIGH COURT OF JUSTICE
+ \fi}
+
+\def\highcourt{\ct=0}
+
+\def\countycourt{%\ct=1 \div=0 \dref=0
+ \morecountycourtdefaults\countycourtstuff\getcourtname}
+
+\def\getcourtname{% adapted from \setupccrefs below
+ \begingroup\obeylines
+ \aftergroup\getnameofcase\casereferences}
+
+\def\getnameofcase{%
+ \def\dateref{}%
+ \def\caseref{}%
+ \def\courtname{\argument1}%
+ }
+
+
+\def\courtofappeal{\ct=2\def\appealtext{\courtofappealtrue}}
+\def\houseoflords{\ct=3}
+
+\newcount\div
+\newcount\dref
+
+\def\chancery{\div=1 \dref=1
+ \def\divref{CH\ }
+ \def\issuer{Chancery Chambers}
+ \def\chambers{Master
+ \if\mast\empty \blank
+ \else\mast\ \fi in Chancery
+ Chambers, Room No.\noday, }}
+
+\def\queensbench{\div=2 \dref=2
+ \def\divref{QB\ }
+ \def\issuer{Central Office}
+ \def\chambers{the Master in Chambers in Room No.\noday,
+ Central Office, }}
+
+\def\familydivision{\div=3 \dref=3
+ \def\divref{No.\ }
+ \def\issuer{The Principal [{\it or\/}
+ \blank District Probate] Registry}
+ \def\chambers{}}
+
+\newcount\subdiv
+\def\subdivision{\ifcase\subdiv
+ \or Companies Court
+ \or Commercial Court
+ \or Official Referee's Court
+ \or The Principal [{\it or\/} \blank District Probate]
+ Registry
+ \fi}
+\def\companiescourt{\subdiv=1}
+\def\commercialcourt{\subdiv=2}
+\def\OR{\subdiv=3}
+\def\probateregistry{\subdiv=4}
+
+\def\mrjustice{}
+\def\judge#1{\def\mrjustice{#1}}
+\def\judgename{\if\mrjustice\empty\else Mr Justice \mrjustice\fi}
+
+\def\mast{}
+\def\master#1{\def\mast{#1}}
+\def\mastername{\if\mast\empty\else Master \mast\fi}
+
+\def\divref{\ifcase\dref
+ \or CH\
+ \or QB\
+ \or Fam.\
+ \fi}
+
+\def\dateref{\ifcountycourt\else\number\year\fi}
+\def\caseref{\ifcountycourt\else --\phantom{A}--\fi}
+\def\casenumber{No.~\phantom{1234}}
+\def\issued{}
+\def\writissued{}
+\def\issued#1 #2 #3 {\def\writissued{%
+ Writ issued the #1 day of #2 #3}}
+
+\def\no#1 {\def\casenumber{No.\ #1}
+ \def\dateref{}
+ \def\caseref{}}
+
+\def\reference{\divref\dateref\caseref\casenumber}
+
+% Can't remember what these did...
+%\def\sref#1{\def\sref{#1}}
+%\def\cref#1{\creftrue\def\cref{#1}}
+
+\def\attention#1{\def\attentionof{#1}}
+\attention{}
+\long\def\comment#1{\def\faxtext{\if#1\empty
+ \else\medskip#1\fi}}
+\comment{}
+
+\def\backsheet{\enddoc\bsdft}% default
+\let\beginos\os
+
+% Here are all the default parameters set by LeXTeX---
+
+\greektrue % Used in \sssscl
+\cardtrue % Used in \ssssscl
+\clindtrue % hanging indentation in clauses
+\nocommaindatefalse % Comma in the date
+\qfalse % No quotes in quotations
+
+\footindent=10pt % Indentation of footnotes
+\clindent=23pt % Indentation of clauses
+\sclindent=46pt % Indentation of sub-clauses
+\ssclindent=69pt % Indentation of sub-sub-clauses
+\sssclindent=92pt % Indentation of sub-sub-sub-clauses
+\ssssclindent=115pt % Etc
+\sssssclindent=138pt % Etc
+\cnindent=65pt % indentation of "computer-numbered" clauses
+
+\hclindent=0pt % Indentation of clauses if clindfalse
+\hsclindent=\clindent % Ditto of sub-clauses
+\hssclindent=\sclindent % Etc
+\hsssclindent=\ssclindent
+\hssssclindent=\sssclindent
+\hsssssclindent=\ssssclindent
+
+\parindent=20pt % indentation of paragraphs
+\quoteindent=20pt % indentation of quotations
+\quoteparindent=20pt % \parindent in a quotation
+\rbracketsize=2.85in % The width of the \vbox used for \ssd etc
+\lbracketsize=2.225in % The width of a left bracket \vbox
+\brackdepth=.5in % The space left under "in the presence of---"
+\hfuzz=1.5pt
+\hsize=5.35in
+\vsize=8.5in
+\hoffset0.5in
+\voffset.5in
+\parskip=3pt plus .75pt minus .75pt
+\def\footnoterule{}
+
+\quoteparskip=1.5pt plus 1pt % The amount of \parskip in quotes
+\blankskip=10pt plus20pt minus 0pt % Used in \noaddr etc
+\signindent=3.5in % Indentation of signature
+
+\settledgap=1in plus.3fill minus.5in % v. space Settled, \inn
+\clskip=\medskipamount % amount of skip before a clause
+\sclskip=\smallskipamount % amount of skip before a \scl
+\ssclskip=0pt plus1pt minus0pt % amount of skip before a \sscl
+\sssclskip=0pt plus.5pt minus0pt % ditto before a \ssscl
+
+\twelvebase=18pt % \normalbaselines in \twelvepoint
+\tenbase=15pt % \normalbaselines in \tenpoint
+\ninebase=11pt % \normalbaselines in \ninepoint
+
+\twelvesmallskipamount=4.5pt plus1pt minus1pt
+\twelvemedskipamount=9pt plus2pt minus2pt
+\twelvebigskipamount=18pt plus4pt minus4pt
+% The next three are set by PLAIN
+%\tensmallskipamount=3pt plus1pt minus1pt
+%\tenmedskipamount=6pt plus2pt minus 1pt
+%\tenbigskipamount=12pt plus4pt minus4pt
+\ninesmallskipamount=2pt plus.5pt minus.5pt
+\ninemedskipamount=4pt plus1pt minus 1pt
+\ninebigskipamount=8pt plus2pt minus 2pt
+
+% The next three are used by xref/contents macros
+\notespace=0.2in % space marginal notes--text
+\maxnote=1.0in % width of note
+\clnamelength=0pt % Default width in table of contents
+\pagewidth=\hsize % used by the index macros
+\pageheight=\vsize
+
+\def\against{and} % the "and" between parties in pleadings
+
+\tolerance=750
+
+\def\engrossment{%
+ \draftfalse
+ \def\csettled##1{}
+ \def\cresettled##1{}}
+
+\def\setexno#1{\def\clearexno{\exno=#1 \front=#1}\clearexno}
+
+\countdef\totaldocuments=1 \totaldocuments=0
+\countdef\totalpages=2 \totalpages=1
+
+\def\advancepageno{\ifnum\pageno<\z@ \global\advance\pageno\m@ne
+ \else\global\advance\pageno\@ne\fi
+ \global\advance\totalpages\@ne}
+ \output{\plainoutput}
+
+\def\plainoutput{\ifnum\pageno=1 \global\advance\totaldocuments\@ne\fi
+ \message{Shipping out page}
+ \shipout\vbox{\makeheadline\pagebody\makefootline}%
+ \inform{(\ifnum\pageno=0 Unnumbered page\else Page \the\pageno\fi
+ \space of Document \the\totaldocuments,
+ Total of \the\totalpages\space\ifnum\totalpages=1 page\else pages\fi\space so far)}%
+ \inform{}%
+ \advancepageno
+ \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
+
+\let\backmatter=\empty
+\let\signoff=\empty
+
+\def\bstitle#1{%
+ \getbstitlewidth
+ \def\title{\setbox0\hbox{#1}
+ \ifdim\wd0<\bstitlewidth\copy0
+ \else\vtop{\hsize=\bstitlewidth\centertext{#1}}\fi
+ }} % used for backsheets
+
+\newdimen\maxpartywidth
+
+% These slightly complicated macros were derived from some suggestions made
+% by Amy Hendrickson in TUGboat Vol 11, No 3, p359.
+% \default defines eg \argument1 to be parameter 2.
+% Unfortunately it would not be possible to call \argument1 directly.
+% It would be necessary to use \csname argument1\endcsname[parameter 2]
+% The macro \argument gets round this difficulty; \argument{1} (or \argument1
+% if there is only one token to be used) converts to \argument1 (all one word).
+% So \argument12 converts to \argument1{2}. Clear?
+
+\def\default#1#2{\expandafter\def\csname argument#1\endcsname{#2}}
+\def\argument#1{\csname argument#1\endcsname}
+
+\def\highcourtdefaults{%
+ \resetpleadingdefaults
+ \ct=0% I think this should be elsewhere
+ \default1{\number\year}
+ \default2{\phantom{W}}
+ \default3{\phantom{4321}}
+ \def\divref{CH~}
+ }
+
+% get rid of old defs
+\def\dateref{}
+\def\caseref{}
+\def\casenumber{}
+
+\def\probatedefaults{%
+ \resetpleadingdefaults
+ \default1{}
+ \default2{}
+ \default3{}
+ \def\divref{File No.~}
+ \def\sparties{}}
+
+\def\countycourtdefaults{%
+ \resetpleadingdefaults
+ \default1{\phantom{1234}}
+ \def\divref{}
+ }
+
+\def\morecountycourtdefaults{%
+ \resetpleadingdefaults
+ \default1{\phantom{BORCHESTER}}
+ \def\divref{}
+ }
+
+\def\division{\ifcase\div% \blank Division
+ \or Chancery Division% 1
+ \or Queen's Bench Division% 2
+ \or Family Division% 3
+ \or\or\or\or\or\or\or% 10
+ \or Chancery Division (Probate)% 11
+ \else \blank Division
+ \fi}
+
+\def\chanceryp{\div=11 \dref=1
+ \def\divref{CH\ }
+ \def\issuer{Chancery Chambers}
+ \def\chambers{Master
+ \if\mast\empty \blank
+ \else\mast\ \fi in Chancery
+ Chambers, Room No.\noday, }}
+
+\def\countycourtstuff{%
+ \ct=1 \div=0 \dref=0
+ \countycourttrue
+ }%
+
+\gdef\ch{%
+ \pleadingtrue\highcourtdefaults
+ \chancery\setuphcrefs}
+\gdef\qb{%
+ \pleadingtrue\highcourtdefaults
+ \queensbench\setuphcrefs}
+\gdef\family{%
+ \pleadingtrue\highcourtdefaults
+ \familydivision\setupfamrefs}
+\gdef\case{%
+ \pleadingtrue\countycourtdefaults
+ \countycourtstuff\setupccrefs}
+\gdef\chp{%
+ \pleadingtrue\highcourtdefaults
+ \chanceryp\setuphcrefs}
+\def\probate{%
+ \pleadingtrue\probatedefaults
+ \familydivision\begingroup}
+
+\def\setuphcrefs{% The \endgroup is given by \lookatarg
+ \begingroup\obeylines
+ \aftergroup\setuphighcourt\casereferences}
+
+\def\setupfamrefs{% The \endgroup is given by \lookatarg
+ \begingroup\obeylines
+ \aftergroup\setupfamcourt\casereferences}
+
+\def\setupccrefs{%
+% \countycourtdefaults
+ \begingroup\obeylines
+ \aftergroup\setupcountycourt\casereferences}
+
+\def\setuphighcourt{%
+ \def\dateref{\argument1}%
+ \def\caseref{---\argument2---}%
+ \def\casenumber{No.~\argument3}%
+ }
+
+\def\setupfamcourt{%
+ \def\dateref{\argument1}%
+ \def\caseref{ of~\argument2}%
+ \def\casenumber{}%
+ }
+
+\def\setupcountycourt{%
+ \def\dateref{}%
+ \def\caseref{}%
+ \def\casenumber{Case No.~\argument1}%
+ }
+
+% Note: Do not concatenate the next two lines
+% The end of line is the delimiter of #1 of \casereferences.
+% roger is the delimiter of #1 of \lookatarg. See Amy Hendrickson's
+% Article in TUGboat for an explanation.
+
+{\obeylines\gdef\casereferences#1
+{\expandafter\lookatarg#1 roger }}
+
+\newcount\argcount \argcount=0
+\def\endofargs{roger}
+
+\def\lookatarg#1 {\def\thisarg{#1}
+ \ifx\thisarg\empty \let\go\lookatarg\else
+ \ifx\thisarg\endofargs\let\go\endgroup
+ \else\unskip\advance\argcount by1
+ \expandafter\xdef\csname argument\the\argcount\endcsname{\thisarg}
+ \let\go=\lookatarg
+ \fi\fi
+ \go}
+
+\def\registry#1{%
+ \gdef\regis{#1 Registry}}
+\let\regis\empty
+
+
+% Move the next def
+\def\appealcourt{\def\apcourt{ON APPEAL FROM
+ \headingskip
+ \courtappealled}}
+\let\apcourt\empty
+
+\newdimen\bstitlewidth
+\def\getbstitlewidth{\iffullsize\bstitlewidth=\hsize
+ \else\bstitlewidth=.5\hsize\fi}
+
+% add to counter too many backsheet in multiple affys
+\newif\ifended
+
+\def\datesworn#1{\def\whensworn{#1}}
+\datesworn{~~/~~/\number\year}
+
+\def\origprocess#1#2#3#4#5{%#1=text for \draft, #2=intro text,
+% #3=heading of document, #4=signature (if used), #5=end text
+ \enddoc
+ \storeparindent=\the\parindent
+ \global\parindent=0pt
+ \draft{#1}
+ \pleadingtrue
+ \gettitle
+ \heading
+ \parties
+ \def\endofpleading{#4\bottomofpleading{#5}}
+ \ifdraft
+ \def\signoff{\endofpleading\settled} % see \chit
+ \else\let\signoff\endofpleading\fi
+ \medbreak
+ \leavevmode
+ #2\par
+ \centertext{#3}
+ \nobreak
+ \amendnote}
+
+\gdef\os{%
+ \origprocess{ORIGINATING SUMMONS}%
+ {\ostext}{}{}{\endostext}}
+
+\def\osinheritance{%
+ \origprocess{ORIGINATING SUMMONS}%
+ {\osinhtext}{}{}{\endosinhtext}}
+
+\def\specialwrit{%
+ \clientpltrue
+ \origprocess{WRIT OF SUMMONS\break(SPECIALLY ENDORSED)}%
+ {\writtext}{STATEMENT OF CLAIM}{\signature}{\endwrittext}}
+
+\def\generalwrit{% No Statement of Claim
+ \origprocess{WRIT OF SUMMONS\break(GENERALLY ENDORSED)}%
+ {\writtext}{}{\signature}{\endwrittext}}
+
+\def\writ{\specialwrit}
+
+\def\pageparameters{
+ \def\footnoterule{}
+ \parindent=10pt
+ \quoteindent=20pt
+ \quoteparindent=10pt
+ \twelvepoint
+}
+
+% These should be redefined in RHlocal
+\def\myaddress{\ouraddress}
+\def\ouraddress{}
+
+\newif\iffax
+\def\faxsheet{\faxtrue}
+
+\def\printfaxsheet{%
+ \amendtextfalse
+ \gdef\doctype{Sent by Fax}
+ \inform{\doctype}
+ \draftparameters
+ \draftfalse
+ \getworkdone
+ \let\backmatter\empty
+ \let\signoff\empty
+ \clindfalse
+% \begingroup
+ \pageno=1
+ \nopagenumbers
+ \parindent=0pt
+ \centerline{\caps Fax from \counselname}
+ \centerline{\vtop{\baselineskip=13pt\halign{\hfil##\hfil\cr
+ \myaddress\crcr}}\strut}
+ \bigskip
+ \leftline{\vtop{\tenpoint\halign{##\hfil\cr
+ \today\cr
+ \noalign{\medskip}
+ Solicitors' Reference---\sref\cr
+ Counsel's Reference---\cref\cr
+ \if\attentionof\empty\else
+ \noalign{\medskip}
+ For the Attention of \attentionof\cr
+ \fi
+ }\strut}}
+ \bigskip
+ \ifpleading\def\title{\chittitle\hfil}\fi
+ \centerline{\vtop{\halign{\hfil##\hfil\cr\title\crcr}}}
+ \vfil
+ \centerline{\caps This Fax Consists of \the\count1\ Pages}
+ \centerline{\caps (including this page)}
+ \faxtext
+ \vfil
+ \def\addressfile{solicitors}
+ \getaddress
+ \leftline{\vtop{\baselineskip=13pt
+ \halign{##\hfil\cr
+ \sols\crcr}
+ \strut}}
+ \supereject
+ % \endgroup
+ \faxfalse}
+
+\font\eightsl=cmsl8
+\font\eightit=cmti8
+
+\def\ca{% \def\v has been moved since it caused spacing problems
+\begingroup\it\frenchspacing % This deals with, eg. Ltd. and v.
+}
+
+\def\v{\unskip\/\ {\rm v}\maybespace}% taken out of \ca
+\def\se{\unskip\/\endgroup\maybespace}% mod aftergroup
+
+\def\signed{%
+ \inform{signature}%
+ \par\nobreak
+ \vskip1in plus 1fill
+ \hbox{\hskip\signindent\vtop{%
+ \parindent0pt
+ \inn
+ \hbox{\today}}}%
+ \vskip 1in plus 2fill minus1in}
+
+\def\jsigned{%
+ \inform{signatures}%
+ \par\nobreak
+ \vskip1in plus 2fill
+ \hbox{\hskip\signindent\vtop{%
+ \parindent0pt
+ \inn
+ \hbox{\today}}}%
+ \vskip 1in plus 1fill minus1in}
+
+\def\copysigned{%
+ \par\nobreak
+ \vskip.75in plus 1fill
+ \hbox{\hskip\signindent\vtop{%
+ \parindent0pt
+ \hbox{\counselname}
+ \hbox{\inn}
+ \hbox{\today}}}%
+ \vskip 1in plus 2fill minus1in}
+
+% These are defined twice! One should go...
+\def\csettled#1{%
+ \par\nobreak
+ \vskip1in plus 1fill
+ \hbox{\hskip\signindent\vtop{%
+ \advance\hsize by-\signindent
+ \parindent0pt
+ \raggedright\tolerance=1000
+ Settled, \ignorespaces#1
+ \vskip\settledgap
+ \inn
+ \hbox{\today}}}%
+ \vskip 1in plus 2fill minus1in}
+
+\def\cresettled#1{% Note the \par
+ \par\nobreak
+ \vskip1in plus 1fill
+ \hbox{\hskip\signindent\vtop{%
+ \advance\hsize by-\signindent
+ \parindent0pt
+ \raggedright\tolerance=1000
+ Re-Settled, \ignorespaces#1
+ \vskip\settledgap
+ \inn
+ \hbox{\today}}}%
+ \vskip 1in plus 2fill minus1in}
+
+\def\silenthyphen{\space}
+
+\def\footnotemark{% One bracket deleted.
+ \let\@sf\empty\relaxnext@\ifhmode\edef
+ \@sf{\spacefactor\the\spacefactor}\/\fi
+ \def\next@{\ifx[\next\let\next\nextii@\else
+ \ifx"\next\let\next\nextiii@\else
+ \let\next\nextiv@\fi\fi\next}% bracket deleted.
+ \def\nextii@[##1]{\footmarkform@{##1}\@sf}%
+ \def\nextiii@"##1"{{##1}\@sf}%
+ \def\nextiv@{{\scriptfont0=\sevenrm % scriptfont changed to 7pt
+ \global\advance\footmarkcount@\@ne
+ \footmarkform@{\number\footmarkcount@}\@sf}}%
+ \futurelet\next\next@}
+\catcode`\@=\other
+
+\def\instructions{%
+ \getbstitlewidth
+ \begingroup
+ \def\doctype{INSTRUCTIONS TO COUNSEL}
+ \capacitytrue
+ \bsparams
+ \ifpleading
+ \else\xcenterline{\underbar{DATED\hskip2in \number\year}}\vfil\fi
+ \xcenterline{\vtop{\openup2\jot
+ \halign{\hfil##\hfil\cr
+ \title\crcr}}}
+\vfil
+ \headerfont
+ \xcenterline{%
+ \setbox0\hbox{\doctype}%
+ \ifdim\wd0<\bstitlewidth\copy0
+ \else\vtop{\hsize=\bstitlewidth\centertext{\doctype\strut}}%
+ \fi}
+ \rm
+ \medskip
+ \xcenterline{\formalcounselname}%
+ \vfil\vfil
+ \getaddress
+ \halign{\def\temp{##}\xcenterline{\upperc{\temp}}\inform{::\temp::}\cr
+ \sols\crcr}%
+ \smallskip
+ \xcenterline{\eightrm Solicitors' Reference: \sref}
+ \xcenterline{{\eightrm Counsel's Reference: \col/\cref}}
+ \supereject
+ \endgroup}
+
+\def\writecontents{\inform{Opening contents file: }%
+ \immediate\openout\cont=\contentswritefile}
+
+\def\minutes{%
+ \spleading{MINUTES OF ORDER}
+ {\scaps This Application}, \etc\par
+ {\scaps And Upon Hearing}, \etc\par
+ {\scaps And Upon Reading}, \etc\par}
+
+\vbadness=5000 % No messages about underfull pages
+\delimitershortfall=1pt
+\delimiterfactor=999
+
+% amend topofpleading to have 3 params, 3 being party.
+\def\dovcert{\sdcert{M}}
+\def\giftcert{\sdcert{L}}
+
+\def\capacityfont{}
+\def\capacity#1{\ifcapacity ({\capacityfont #1\/})\else\unskip\fi}
+
+\def\beginparticulars{%
+ \par
+ \vskip\clskip
+ \begingroup
+ \clno=0
+ \centerline{PARTICULARS}
+ \par\nobreak}
+
+\def\endparticulars{%
+ \endgroup}
+
+\def\writtext{%
+ {\scaps To The \expandafter\uppercase{\dfdants}}%
+ \unskip\space\getdefs\smallskip
+ {\caps This Writ of Summons} has been issued against you by
+ the \plaintfs\ \getpls\unskip\ in respect of the claim
+ hereinafter set out.
+ \medskip
+ Within 14 days after the service of this Writ on you,
+ counting the day of service, you must either satisfy the
+ claim or return to the Court Office mentioned below the
+ accompanying {\scaps Acknowledgment of Service} stating
+ therein whether you intend to contest these proceedings.
+ \medskip
+ If you fail to satisfy the claim or to return the
+ Acknowledgment without stating therein an intention to
+ contest the proceedings, the \plaintfs\ may proceed with the
+ action and judgment may be entered against you forthwith
+ without further notice.
+ \medskip
+ Issued from the \issuer\ of the High Court this \nodate
+ \bigskip
+ {\bf Note}---This Writ may not be served later than 4 calendar
+ months beginning with that date unless renewed by order of
+ the Court.
+ \bigskip
+ \centerline{\bf IMPORTANT}
+ \nobreak\medskip
+ Directions for Acknowledgement of Service are given with the
+ accompanying form.\par
+ \bigskip
+ %\vfil\penalty-5000\vfilneg
+ \baselineskip=18pt
+ \nobreak\smallskip\nobreak} % End of \writtext
+
+% set up defaults
+\bstitle{}
+\solsref{}
+\colsref{} % Omit Counsel's initials
+\timetaken{} % hours
+\casetype{}
+\value{} % omit pound sign
+\difficulty{} % out of 10
+\proposedfee{} % omit pound sign
+\legalaidno{}
+\comments{}
+
+\def\Writissued{}
+\maxpartywidth=4.5in % set \maxp@rtywidth.
+\def\amendnote{}
+\def\amend{}
+% Set up default in case no division is given.
+\ch
+
+\pleadingfalse % And reset this
+\resetpleadingdefaults
+\reset
+\input rhlocal
+\catcode`@=12
+\normalnumbering
+\twelvepoint
+
diff --git a/macros/plain/contrib/lextex/ltman.tex b/macros/plain/contrib/lextex/ltman.tex
new file mode 100644
index 0000000000..da5dab58c7
--- /dev/null
+++ b/macros/plain/contrib/lextex/ltman.tex
@@ -0,0 +1,1656 @@
+% This is LTman, the preliminary version of the Manual for \LT\.
+\ifx\lextexisloaded\undefined\input lextex\relax\fi
+\newif\iflongversion
+%\input newmacs
+% At the moment it is *very* preliminary and pretty messy.
+% It is also long since it includes a lot of macros, including
+% indexing macros which would normally be \input separately.
+% It is possible to produce it in two versions,
+% ie, with and without the text of the LeXTeX macros.
+% The default is to omit them.
+%
+% If you wish to print the full version, change \longversionfalse
+% to \longversiontrue.
+% However DO NOT DO THIS at the moment since the text of the macros is
+% missing!!!!
+\longversionfalse
+%
+%
+% These are the indexing and index-formatting macros.
+% They are adapted messily from manmac and elsewhere.
+%
+\def\index{\indextrue \writeindex}
+\def\indexname{Index} % ditto
+\def\topofindex{\centerline{\titlefont\indexname}}
+\def\botofindex{\vfill\eject}
+\def\indexreadfile{\jobname.inx} % file that gets index info
+\def\indexwritefile{\jobname.inx} % file that takes it
+\def\writeindex{\inform{Opening index file: }
+ \openout\inx=\indexwritefile}
+\def\readindex{\input \indexreadfile}
+
+% Use second version for formatting unsorted index
+%\def\formatindex#1 !#2 #3.{% orig "#1 !#2" #3.
+\def\formatindex"#1 !#2" #3.{%
+ {\ifcase#2 #1\or\tt #1\or\tt\bslash#1\or\tt<#1>\fi\space#3.}}
+\def\printindex{% Print the index
+ \write\inx{} % ensure that the index file isn't empty
+ \immediate\closeout\inx % index information has been fully gathered
+ \inform{Index: }\relax
+\vtop{\topofindex}
+ \begindoublecolumns
+ \advance\baselineskip by0pt plus1pt minus0pt % add some give
+ \tenpoint
+ \parindent=0pt
+ \parskip=0pt plus.8pt minus0pt
+ \everypar{\hangafter1 \hangindent10pt\formatindex}
+ \raggedright
+ \tolerance=1000
+ \relax
+ \readindex\relax % read the index info
+ \enddoublecolumns
+ \botofindex }% print the index page(s), don't terminate
+%
+% Manmac macros which can be used to print index in 2 cols.
+%
+\newbox\partialpage
+\def\begindoublecolumns{\begingroup
+ \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}%
+ \eject
+ \output={\doublecolumnout}%
+ \divide\hsize by2 \advance\hsize by-15pt % 15x2=inter col space
+ \multiply\vsize by2 \advance \vsize by1pt}%
+\def\enddoublecolumns{\output={\balancecolumns}\eject
+ \endgroup \pagegoal=\vsize}
+%
+\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \dimen0=\pageheight %8.5in
+ \advance\dimen0 by-\ht\partialpage
+ \setbox0=\vsplit255 to\dimen0 \setbox2=\vsplit255 to\dimen0
+ \onepageout\pagesofar
+ \unvbox255 \penalty\outputpenalty}
+\def\pagesofar{\unvbox\partialpage
+ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
+\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen0=\ht0
+ \advance\dimen0 by\topskip \advance\dimen0 by-\baselineskip
+ \divide\dimen0 by2 \splittopskip=\topskip
+ {\vbadness=10000 \loop \global\setbox3=\copy0
+ \global\setbox1=\vsplit3 to\dimen0
+ \ifdim\ht3>\dimen0 \global\advance\dimen0 by1pt \repeat}
+ \setbox0=\vbox to\dimen0{\unvbox1}
+ \setbox2=\vbox to\dimen0{\unvbox3}
+ \pagesofar}
+ %
+% Modify \onepageout
+\def\onepageout#1{\shipout\vbox{ % here we define one page of output
+ \offinterlineskip % butt the boxes together
+ \vbox to \pageheight{
+ #1 % now insert the main information
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins \kern-3pt
+ \hrule height\ruleht width\pagewidth \kern-\ruleht \kern3pt
+ \unvbox\footins\fi
+ \boxmaxdepth=\maxdepth
+ } % this completes the \vbox to \pageheight
+ \vbox{{\vskip10pt\hsize=\pagewidth \makefootline}}% This is added
+ }
+ \advancepageno}
+
+% index macros
+% adapted from manmac
+
+\chardef\*=`\* % \* produces an asterix in text mode
+\newif\ifsilent
+% The \null a couple of lines down prevents something odd happening
+\def\specialstar{\ifmmode\def\next{*}%
+ \else\null\let\next=\beginindexref\fi\next}
+\def\beginindexref{\futurelet\next\beginindexrefswitch}
+\def\beginindexrefswitch{\ifx\next\specialstar\let\next=\silentindexref
+ \else\silentfalse\let\next=\indexref\fi\next}
+\global\catcode`\*=\active \global\let*=\specialstar
+\def\silentindexref*{\silenttrue\indexref}
+%
+\chardef\bslash=`\\
+\def\indexref{\futurelet\next\indexrefswitch}
+\def\indexrefswitch{\begingroup
+ \ifx\next|\aftergroup\vindexref % case 1 or 2, |arg| or |\arg|
+ \else\ifx\next\<\aftergroup\angleindexref
+ % case 3, "\<arg>" means angle brackets. This may change.
+ \else\aftergroup\normalindexref \fi\fi\endgroup} % case 0, "{arg}"
+\def\vindexref|{\catcode`\\=\active \futurelet\next\vindexrefswitch}
+\def\vindexrefswitch#1|{\catcode`\\=0
+ \ifx\next\empty\def\indexreftype{2}%
+ \def\next{{\tt\bslash\text}}% type 2, |\arg|
+ \else\def\indexreftype{1}\def\next{{\tt\text}}\fi % type 1, |arg|
+ \edef\text{#1}\makeindexref}
+{\catcode`\|=0 \catcode`\\=\active |gdef\{}}
+\def\angleindexref\<#1>{\def\indexreftype{3}\def\text{#1}%
+ \def\next{\<\text>}\makeindexref}
+\def\normalindexref#1{\def\indexreftype{0}
+ \def\text{#1}\let\next=\text\makeindexref}
+\def\makeindexref{\ifhmode\unskip\fi
+ \xdef\writeit{\write\inx{"\text\space!\indexreftype"\space
+ \noexpand\number\pageno.\endgraf}}\writeit
+ \ifsilent\unskip\ignorespaces\else\next\unskip\aftergroup\ignorespaces\fi}
+%
+\newif\ifsortedindex
+\def\typeofindex{\ifsortedindex
+ \def\formatindex##1 !##2 ##3.{% orig "##1 !##2" ##3.
+ {\ifcase##2 ##1\or\tt ##1\or\tt\bslash##1\or\tt<##1>\fi\space##3.}}%
+ \def\indexreadfile{RHsind.tex}%
+\fi\index}
+%
+% If we are not using a sorted the index, comment out next line.
+%\sortedindextrue
+%
+% end of indexing macros
+
+\def\storypage{24} % listing of story.tex
+
+\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.075em
+ S$-\TeX}
+\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet
+%
+% Set/adjust the defaults
+\parskip=3pt plus .75pt minus .75pt
+\parindent 0pt
+\twelvebase=15pt
+\tenbase=11.5pt
+\ninebase=10pt
+\quoteindent=40pt \quoteparindent=20pt
+\hsize=5.35truein
+\vsize=8.5truein
+\hoffset0.5truein
+\voffset.5truein
+\clubpenalty=2500
+\widowpenalty=7500
+\finalhyphendemerits=7500
+\displaywidowpenalty=50
+\brokenpenalty=2500
+\global\cnindent=45pt
+\global\clskip=\smallskipamount
+
+% Start in 12 pt
+\twelvepoint
+
+% Misc defs
+\def\sh{\noindent\titlefont} % Change this to give new page etc
+\def\tbi{**{TeX book, the}}
+\def\T{\TeX}
+\def\TB{{\sl \T book\/}}
+\def\WP{{\sl Word Perfect\/}}
+\def\pctex{{\tt PC\TeX}}
+\def\MF{{\tt MYFILE}}
+\def\tex{{\tt .TEX}}
+\def\dvi{{\tt .DVI}}
+\def\log{{\tt .LOG}}
+\def\TEX{{\tt TEX}}
+\def\ver#1{{\tt $\backslash$ #1}}
+\def\vn{0.96} % VERSION NUMBER
+\def\r{\LT}% Change of name
+\def\botofcontents{\vfill\eject} % this material will end it
+
+% Latex logo
+\def\sc{\scaps}
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+\let\LT\LeXTeX
+
+% Start here
+\version{Version \fmtversion\ (draft 1)}
+%
+% Do not produce contents for the time being
+%\contents
+% Set title of contents page (for when used)
+\ctstitle{%
+ \centerline{\LeXTeX}
+ \medskip
+ \centerline{A version of \TeX\ adapted for use by members of the Bar}
+ \medskip
+ \centerline{\tenrm \copyright 1991 \rh}
+ }
+%
+
+\def\xyz{\iflongversion Long \else Short \fi}
+\inform{}
+\inform{This is the \xyz Version of the LeXTeX Manual}
+\inform{}
+\typeofindex
+%
+% This is the start of the text
+%
+%
+\centerline{\headerfont \LeXTeX\ref{With apologies to the designer of the
+\LaTeX\ logo.}}
+
+\medskip
+\centerline{A version of \TeX\ adapted for use by members of the Bar}
+\medskip
+\centerline{\ca Preliminary Incomplete Draft\se Manual}
+\smallskip
+\centerline{\tenrm \copyright 1991 \rh}
+
+\bigskip
+
+{\sh ^{Introduction}}
+
+\smallskip
+
+
+\noindent\T\ is not a *{word-processor}; It is a *{text-formatter}. You
+cannot use it to prepare your text; for that purpose you must use a normal
+word-processor such as \WP\ or a text editor such as \ca Emacs\se. \T\ is
+also not a ``*{what you see is what you get}'' program. It is suggested in
+{\sl**{LaTeX}The \LaTeX\ Guide\/} \ref{Page 7. \bo The \LaTeX\ Guide\ok is
+published by Addison Wesley, ISBN 0-201-15790-X.} that a better expression
+for programs of that type is ``*{what you see is all you've got}''. All
+that \T\ does it to convert a text file into printed output, but it can be
+extremely successful at the job.
+
+The way that \T\ works is to respond to commands inserted in the text in a
+similar way to that in which a word processor responds to its commands .
+The difference is that \T\ commands are visible and have no effect
+whatsoever while the file is being prepared; the commands inserted in a
+word-processed file often take effect immediately so that, for example, text
+to be centered is shifted to approximately the centre of the screen. Another
+difference is that any \T\ command can be redefined at any time. To take an
+example, the command |\centerline{This text is centered}| will normally
+simply centre the words within the squiggly brackets. However it is
+extremely simple to redefine the command |\centerline| so that it right or
+left justifies the text, or prints it in italic type. In order to left
+justify it all that would be necessary would be to add at the start of the
+text file the command |\let\centerline=\leftline|. This would affect all
+subsequent |\centerline| commands.
+
+This ability to define and redefine commands, or macros, makes \T\ extremely
+powerful and flexible. One result is that it is possible to divorce the
+preparation of the text, for example the body of a Pleading, from the layout
+of the document; the draftsman can concentrate on the content rather than
+the form. To take an example, the command |\writ| is used when printing a
+Writ. The draftsman need not be concerned with whether the command simply
+types at the top of the page ``[Usual Formal Parts]'' or inserts the full
+formal text. Further, if the command |\os| is substituted for |\writ| the
+formal parts will automatically change; the draftsman need not be concerned
+with what they say. Similarly if after re-reading the Instructions it
+becomes apparent that they are given on behalf of the Defendant all that is
+necessary is to substitute |\defence| for |\writ| and the appropriate layout
+will be produced.
+
+One well-known collection of macros that almost completely achieves this
+separation is called \LaTeX\ after its author Leslie Lamport. It is,
+however, designed principally for use by academics and so although extremely
+good at producing papers for learned journals, is not so good at producing
+the somewhat odd documents sent out by members of the Bar.
+
+Another set of macros which has been produced by me (with the assistance of
+many other people) is called \LT. The sole object of this package of
+macros is to assist in the formatting of the type of work produced by
+members of the Bar. It cannot claim to be any where near as good at its job
+as \LaTeX\ is at its, and it will be modified in the future as its
+deficiencies become obvious, but it is already reasonably effective.
+
+There are versions of \T\ running on most modern computers from the \bo
+Atari\ok home computer to the \bo Cray\ok super computer. In my own Chambers
+\T\ has been installed on an \bo Acorn Archimedes\ok, a \bo Commodore
+Amiga\ok, an \bo Apple Macintosh\ok and about half a dozen different MSDOS
+clones. There are at least six different versions of \T\ available for MSDOS
+machines, the differences between them being mainly questions of speed and
+ease of use.
+
+Every version of \T\ will format a given input file in an identical manner.
+Although the source code for the program is in the public domain, its
+author, Professor Donald Knuth, retains the copyright and will not allow any
+program to be sold or given away under the name of \T\ unless it can be
+demonstrated that its output is identical to the output of all other
+versions. Any version of \T\ is, however, allowed to use different names for
+the places where it keeps files. For example one version may keep certain
+files in a directory called |texinputs| while another may use an entirely
+different name. It is not therefore possible in this manner to describe in
+detail how to run \T\ or \LT\ on any particular machine and for this you
+must refer to the instructions for your particular version of \T.
+
+
+\TeX\ does not show you on screen what your text will look like as you type
+it\ref{It is usually possible to look at the output produced by \TeX\ using
+a screen previewer.}. One reason for this is that it is almost impossible
+to show \T's output on screen. A normal computer screen has a resolution of
+a few hundred dots in each direction. \T\ on the other hand uses scaled
+points for its calculations, and one hundred scaled points is roughly the
+wavelength of visible light; there are approximately 4,736,287 scaled
+points to the inch, and a normal line of type is about 5.35 inches
+long\ref{This is a slightly specious argument. The present generation of
+laser printers print 300 dots to the inch and so would print no more than
+1,605 dots on an average line.}. However, the main reason is that \TeX\ does
+not decide where to break a paragraph into lines until it has read the
+entire paragraph. The addition of one word to the end of a paragraph can
+alter the place where every line in that paragraph is broken.
+
+
+\bigbreak
+
+{\sh ^{Running \T.}}
+
+\nobreak\smallskip
+
+\noindent It is beyond the scope of this manual to explain the workings of
+\T\ in detail. It is almost essential for a user of \T\ or any macro package
+based on \T\ to acquire the main textbook on the subject, the \TB\ by
+Professor Knuth\ref{Addison Wesley, ISBN 0-201-13447-0. The quotations from
+this book used in this manual are printed with the permission of the
+publishers.}. A shorter guide is \bo a Gentle Guide to \T\ok, by Michael
+Droob. This can be downloaded in textual form from various electronic
+bulletin boards such as |Legal Teleforum| or |CIX| or from the mailserver
+|texserver@tex.ac.uk| or can be purchased in printed form from \bo
+UK\T\ok\ref{Details from Malcolm Clark, IRS, Polytechnic of Central London,
+115 New Cavendish Street, London W1M 8JS, e-mail: malcolmc@mole.pcl.ac.uk},
+the United Kingdom branch of the \bo \T\ Users Group\ok which has its
+headquarters in America.
+
+
+Running \T\ involves the following steps---
+
+\cl Prepare a file, using a word-processor such as \WP**{Word Perfect}\ or a
+text editor such as \bo Emacs\ok.
+
+
+\cl Save that file in *{ASCII}\ref{Text produced by \WP\ must be saved in
+*|DOS TEXT| format.} using the *{file extension} \tex. For the purposes of
+these Notes I will assume that the file itself is called ``\MF''\ref{Those
+familiar with computer manuals will know that stupid names of this type are
+always chosen for examples.}**|MYFILE|. The document should therefore be
+saved in the current directory as \MF\tex.
+
+
+\cl Apply \T\ to the file by typing \TEX\ \MF. Note that it is not
+necessary to type the file extension (although no harm will come from doing
+so). \T\ will produce two additional files, \MF\dvi\ and \MF\log. The
+latter contains error messages while the former, if your file contained no
+major errors, will contain the formatted text, ready for printing. (*|DVI|
+stands for ``*{DeVice Independent}''. A |DVI| file prepared on an IBM will
+be identical to one prepared on an {\sl *{Archimedes\/}}, an {\sl
+*{Amiga\/}}, an {\sl *{Atari}\/}, a {\sl *{Cray\/}} or a {\sl
+*{Macintosh\/}}.)
+
+
+\cl Print \MF\dvi\ref{This normally involves using a separate program. For
+example, Personal \TeX\ Inc.\ produce a program called ``PTI\,HP'' which
+prints on HP laser printers using an IBM compatible computer. |emTeX|, a
+public domain version of \T\ for MSDOS computers comes with printer drivers
+for most printers.}
+
+\bigbreak \clno=0
+\noindent\MF\tex\ need only have one \T\ command in it. That command is
+|\bye|, which tells \T\ that you have finished; anything that is typed after
+the |\bye| will simply be ignored. On the other hand, it could contain
+hundreds of separate commands. An intermediate type of file is the one
+called ``STORY.TEX'' which is set out in {\it Fig.~1\/} (and is taken from
+Chapter~6\ref{Page \storypage.} of the \TB\tbi). This file was prepared by
+Professor Knuth in such a way as to demonstrate a number of points---
+
+\def\boxit#1{\vbox{\hrule\hbox{\vrule\kern3pt
+\vbox{\kern3pt#1\kern3pt}\kern3pt\vrule}\hrule}}
+
+\newdimen\insertsize
+\insertsize=\hsize
+\advance\insertsize-12pt
+
+\setbox100=\vbox{\hsize=\insertsize
+\noindent\strut
+\tenbase=11pt
+\parskip=0pt
+
+\tenpoint
+
+\nrbeginlines
+
+**|STORY.TEX|
+|% This is STORY.TEX in text format, as of Mar 31, 1986.|
+|\hrule|
+|\vskip .75in|
+|\centerline{\bf A SHORT STORY}|
+|\vskip 6pt|
+|\centerline{\sl by A. U. Thor} |
+|\vskip .5cm|
+|Once upon a time, in a distant|
+| galaxy called \"O\"o\c c,|
+|there lived a computer|
+|named R.~J. Drofnats.|
+| |
+|Mr.~Drofnats---or ``R. J.,'' as|
+|he preferred to be called---%|
+|was happiest when he was at work|
+|typesetting beautiful documents.|
+|\vskip .75in|
+|\hrule|
+| |
+|\bye|
+
+
+\medskip
+\nrendlines
+\strut}
+
+\midinsert
+\boxit{\boxit{\box100}\advance\hsize by-6pt\centerline{\strut\tenit Fig.\ 1}}
+\endinsert
+
+\twelvepoint
+
+\clno=0
+\cl A *{percentage sign} (\%) in \T\ is a comment character and so the
+first line of the story will not be typeset by \T. A number of the
+following lines start with a backslash---the second line, for example, is
+*|\hrule|. A backslash introduces a \TeX\ command---in this case the
+command draws a horizontal line across the page; the next command (*|\vskip
+.75in|) tells \T\ to skip down the page by one inch. It should be noted
+that {\it all\/} of \T's commands start with a backslash.
+
+\cl The command *|\centerline| (note the American spelling) centres the text
+enclosed in squiggly brackets after it. (Many of \T's commands have
+parameters enclosed in brackets like this). The next |\vskip| skips down the
+page by six points\ref{There are 72.27 printers' points to an inch and so
+this is slightly more than \frac1/{12}th inch.}, and the next line centres
+the author's name in {\sl slanted\/} type, while the next after that skips
+by half a \hbox{centimetre}.
+
+\cl The text which follows is decidedly odd\ref{The name of the computer
+will be thought less odd by readers of the \TB\tbi.}, but it is intended to
+show various things, such as the use of the tilde ($\tilde{\phantom{x}}$)
+as a tie, or non-breakable space, between characters, the use of a number
+of hyphens to produce a dash, various accents, the use of the percentage
+sign to ensure that no spaces occur after the dash after ``called''\ref{In
+\T\ a carriage return produces a space. The \% `comments-out' the space.},
+the fact that many spaces have the same effect as one, and the fact that
+quotation marks are made up of two single left or right quotes. (Some IBM
+machines do not have left single quotes. This difficulty can be got round by
+typing *|\lq| instead; it is also possible to set up a shorter command to
+produce double left quotes.) Since the percent sign is a comment character
+it cannot be used directly for its normal purpose. In order to print a
+percent sign you must type a backslash in front of it (|\%|)**{percent sign
+(\%)}. Similarly, if you want to print \$, \&, \#, \* or \_, you must type
+|\$|**|dollarsign|, |\&|**{ampersand}, |\#|**{hashsign, (real)},
+|\*|**{asterix}, or |\_|**{underline}. Printing the backslash character
+itself (|\|)**{backslash}, or the *{squiggly brackets} |{| and |}| is
+slightly tricky but can be done if essential.
+
+
+When this file is \T ed, it will produce a *|DVI| file which, when printed,
+will produce the result shown in {\it Fig.~2\/}.
+
+\setbox101=\vbox{\hsize=\insertsize
+\noindent\strut
+\tenpoint% This is STORY.TEX in text format, as of Mar 31, 1986.
+\hrule
+\vskip .75in
+\centerline{\bf A SHORT STORY}
+\vskip 6pt
+\centerline{\sl by A. U. Thor}
+\vskip .5cm
+Once upon a time, in a distant
+ galaxy called \"O\"o\c c,
+there lived a computer
+named R.~J. Drofnats.
+
+
+Mr.~Drofnats---or ``R. J.,'' as
+he preferred to be called---%
+was happiest when he was at work
+typesetting beautiful documents.
+\vskip .75in
+\hrule
+\vskip4pt
+}
+
+\midinsert
+\boxit{\boxit{\box101}\advance\hsize by-6pt\centerline{\strut\tenit Fig.\ 2}}
+\endinsert
+
+
+\twelvepoint
+This text was printed in \T's *{default size}, that is to say, *{ten-point},
+and with narrow line spacing, \etc. The macro package \LT\ alters these
+defaults, setting the standard point size to 12~point and the spacing
+between lines to be 18~points. These can both be altered without difficulty.
+
+\smallbreak
+\LT\ adds a number of commands to those normally available in \TeX. If, for
+example, you commence the Story file with the line |\input lextex| ,
+substitute the line *|\opinion| for all the lines before the real text
+begins and omit the final |\vskip .75in| and |\hrule| the result when the file
+is \TeX ed will be something like {\it Fig.~3\/}. (Note
+that \T\ is case sensitive: |\input| is not the same as |\INPUT|.)
+
+The line |\input lextex| cause \T\ to read in the file containing the \LT\
+macros. Since this is a large file it takes quite a long time. \T\ has the
+facility to convert files such as \LT\ into a format which it can load at
+high speed. Again the way in which it does this varies from version to
+version. In general, however, the command will be something like |initex
+&plain lextex \dump|. Look up |initex| and |format files| in the manual
+which comes with your version of \T\ for more details. The result should be
+that a new format file is created with the extension |.fmt|. Your manual
+should say where this should be placed; if it doesn't, try looking for other
+files with the same extension and move it to the directory in which they are
+found.
+
+Having created a new format file \T\ can be run using the \LT\ macros by
+typing |tex &lextex filename| (where `filename' is, of course, replaced with
+the name of the file you wish to \T). (It is usual to create a batch file to
+do this automatically.) It is then no longer necessary to add |\input
+lextex| at the beginning of the file.
+
+\setbox102=\vbox{\hsize=\insertsize
+\noindent\strut
+\tenpoint
+
+% This is STORY.TEX in text format, as of Mar 31, 1986.
+%\hrule
+%\vskip .5in
+\twelvepoint % \twelvebase is the default size of 18pt
+\hfuzz=1.5pt
+\vsize=2.75in
+\parskip=3pt plus .75pt minus .75pt
+\quoteparskip=1.5pt plus 1pt % The amount of \parskip in quotes
+\parindent=20pt \quoteindent=40pt \quoteparindent=20pt
+%
+%\opinion % Calling it here causes problems. Fudge it.
+\centerline{\headerfont Opinion}
+\nobreak\vskip10pt\noindent
+Once upon a time, in a distant
+ galaxy called \"O\"o\c c,
+there lived a computer
+named R.~J. Drofnats.
+
+
+Mr.~Drofnats---or ``R. J.,'' as
+he preferred to be called---%
+was happiest when he was at work
+typesetting beautiful documents.
+\signed% Also necessary since no \bye
+}
+
+\midinsert
+\boxit{\boxit{\box102}\advance\hsize by-6pt\centerline{\strut\tenit Fig.\ 3}}
+\endinsert
+\twelvepoint
+
+
+
+You are now ready to learn in somewhat greater detail about \LT.
+
+\vfil\supereject
+
+\hfuzz=2pt
+\centerline{\headerfont \r}\par
+\bigskip
+
+It is customary in connection with computer programs to number the
+*{versions} which appear before the production version with numbers less
+than 1.0 and those of the production versions with numbers over 1.0. (The
+figure before the decimal point denotes a major release and that after it a
+small modification.) Thus the version of \WP\ currently in use is 5.1.
+These Notes and \r\ are both the \fmtversion\ versions\ref{Until recently
+\LT\ was known as |RHfmt| and went through versions 0.001 to 0.911. The fact
+that \LT\ has a number larger than 1 does not mean that it is perfect.} and
+as a result suffer from many deficiencies---and this manual contains a
+number of spelling and grammatical mistakes; it almost certainly describes
+some of the macros incorrectly\ref{You got it free and so you cannot
+complain \ca too\se loudly.}. \r\ itself has been in use for over two years
+but has been altered and rewritten on a number of occasions. A large part of
+it is pretty stable and relatively bug-free (in so far as it is possible for
+any computer program to be bug-free) but other parts, and in particular
+those that deal with pleadings are still far from perfect. These problems
+will usually manifest themselves as poor spacing or bad layout. They should
+not give rise to any insuperable difficulties.
+
+\medskip
+The written work of members of the Bar falls into three classes. First there
+is advisory work, whether or not in connection with litigation, then there is
+the production of non-litigious documents, and finally there is the
+production of pleadings of all types. \r\ has been designed to enable all of
+this work to be produced using \TeX\ as simply as is possible. I will try
+and explain the various commands under the same three headings, although it
+is perfectly possible to use, for example, a macro intended for use in a
+Statement of Claim in an Opinion\ref{Or Advice or other form of written
+advisory work.} or a Draft.
+
+\vfil\break
+{\sh ^{Written Advice.}}
+\nobreak\smallskip\noindent
+As was seen above, if you type *|\opinion| at the start of your file, an
+Opinion will be produced. Similarly, typing *|\advice|, *|\note| or
+|\jopinion| will put ``Advice'', ``Note'' or ``Joint Opinion'' at the top of
+the page. The command |\opinion| is actually shorthand for
+|\advising{Opinion}|. The command **|\advising||\advising{type of advice}|
+tells \T\ that what follows is written advice and should be formatted
+appropriately.
+
+It is very easy to set up other forms of header for written work. If
+you use the style that requires the name or the case-name to be put at the top of
+your written work then, for example, |\advice| could be redefined
+as---
+
+ |\def\advice{\centerline{\bstitle}|\hfil\break
+ |\smallskip\advising{Advice}}|.\hfil\break
+
+(For |\bstitle| see\ \pageref{bstitle} below.)
+
+\TeX, being an American program, believes that the ``\pounds\/'' symbol is
+unnecessary. Indeed, the font in which this is being typed does not contain
+a pound sign (although it contains various other odd symbols such as ?` and
+!` and possibly \AA\ and $\widehat \Psi$\ref{Mathematicians
+are apparently delighted by being able to type such wondrous things as
+$\Upsilon^{\Phi^{\varpi^\surd}}$ and $\sharp_{\forall_{\Phi_\triangle}}$,
+especially in a footnote.}). \TeX\ being a typesetting, rather than a
+wordprocessing, program, this does not cause significant difficulties since
+it is possible to use the pound sign from other fonts.
+
+In order to print ``\pounds'' the user of \r\ should type *|\pounds|. It is
+not essential to leave a gap between the ``s'' and the sum---\TeX\ will
+remove it if you do leave one.
+
+\font\seventeenrm=cmr17
+\tolerance=1000 \r\ sets up fonts in families of a particular point size.
+The default size---which I recommend should be used as the standard size---is
+*{12-point}; my view is that tenpoint script is not reproduced very well by a
+laser printer at *{300 dpi}. Other sizes are *{10-point}, and *{9-point}.
+They can be brought into use by typing *|\twelvepoint|, *|\tenpoint|, and
+*|\ninepoint|. The user \tenrm should not \ninerm find it necessary
+\eightrm to \sevenrm select \sixrm the smaller \fiverm or larger \sixrm
+sizes since \eightrm\TeX\ and \r\ together \ninerm automatically \tenrm
+select \twelverm the appropriate size in most situations. However, it is
+possible for the experienced user to select \seventeenrm any\ref{This is 17
+point.} \twelverm size if necessary. Any *{mathematics}, including simple
+fractions such as $15\over543$ or \frac{32}/{67}, will, with a bit of luck,
+be typed at the correct size.
+
+As is explained in the \TB, the command *|\rm| produces roman type, *|\it|
+produces \ca italic\se type, *|\sl| produces \bo slanted\ok type and *|\bf|
+produces {\bf bold} type in the current point size. \r\ adds a few more
+types of font. The command *|\ul| {\ul underlines the following text} and
+the command *|\xo| {\xo crosses it out}. There is also the command *|\xu|
+for underlined and crossed-out text, *|\xxl| for doubly crossed-out text and
+*|\uul| for doubly-underlined text. All these are intended for use with
+amended pleadings but at the moment need to be used with some care.
+
+*{Footnotes} are used by typing either *|\footnote| or (preferably) *|\ref|
+followed immediately by the footnote text in |{}| brackets---there must be
+no gap between the command and the opening |{|. (Very occasionally the text
+of a footnote may seem to disappear **{disappearing text} when the text is
+printed. For example, if a footnote is used in the *|\ssd| macro---see
+below---the text may disappear. The reason is too complicated too explain
+here. The solution is to type *|\footnotemark| where the footnote number
+should go and *|\footnotetext| immediately after e.g. the *|\ssd| macro.)
+
+Footnotes are normally numbered automatically. There are a number of
+commands available for use in relation to footnotes---see {\sl The Joy of
+\TeX\/}\ref{Published by Addison-Wesley. ISBN 0-8218-2999-8.}**{Joy of TeX,
+the} by Michael {Spivak}**{Spivak, Michael}, pages 162--165, for details.
+The command |\ref"*"{Like this}|, for example, uses an asterix as the
+marker\ref"\*"{Like this.}, **{asterix as footnotemarker} and similarly
+|\ref"\dag"{Or this}| and |\ref"\ddag"{And this.}| use a dagger\ref"\dag"{Or
+this.} and a double-dagger\ref"\ddag"{Like this.} to be used as a
+footnotemarker, and the command |\ref[45]{Like this.}| enables the number
+used for a particular footnote to be specified\ref[45]{Like this.}.
+
+\tolerance=500
+*{Case-names} are printed in the normal style, that is to say, in italic
+type. As an example, \ca Monnickendam \v. Leanse\se\ref{(1923) 39 TLR 445,
+67 Sol Jo 706}. \hfuzz=6pt This was typed---\par |\ca Monn|\-|ick|\-|endam
+\v. Leanse\se\ref{(1923) 39 TLR 445, 67 Sol Jo 706}|.
+
+The *|\ca| and *|\se| macros must surround the case name (and there must be a
+space after the ``ca''); the *|\ref| macro prints the reference as a
+footnote. In this case the ``v.'' was printed in roman type; if you prefer an
+italic ``v'', whether with or without the fullstop\ref{The All England
+Reports use an italic ``v'' without a fullstop.}, omit the backslash.
+\hfuzz=2pt
+
+A similar pair of macros is *|\bo| and *|\ok|. These set the names of
+books---such as \bo Bowen \on the Coal Act 1938\ok in {\sl slanted\/} type.
+In this case *|\on| was used in order to produce the vertical ``on''.
+
+Two further macros are |\beginquote| **|\beginquote| and |\endquote|.
+**|\endquote| These are, perhaps not surprisingly, intended for
+*{quotations}. The former should be used after a blank line and will cause
+the text which follows to be typed in tenpoint type. The first paragraph
+will not normally be indented, but subsequent ones will---
+
+\beginquote No quotation marks are used. If you want them, they must be
+typed manually. At a later stage it may be possible to provide them
+automatically but macros to do this are a bit tricky to write.
+
+\clindtrue
+\clearclno
+\cl It is possible to use the automatic clause numbering---see
+\pageref{Clausenumbering} below---in quotations, and mathematical
+expressions, such as $129 \over 7,934$, will be printed at a smaller size
+than they would be printed in twelvepoint type.
+
+\endquote
+
+\noindent
+In order to quote a numbered sub-clause, without the corresponding clause, it
+is preferable to use the macro *|\beginsclquote| which alters the indentation
+of the quotation---
+
+\beginsclquote
+\scl If |\beginquote| had been used, this sub-clause would have been inset too far.
+There are also the macros *|\beginssclquote| and *|\beginsssclquote|. In each
+case the macro which ends the quotation is the same, that is to say
+*|\endquote|.
+\endquote
+
+It sometimes happens that one wants to refer to something on a different
+page, earlier or later, of an Opinion. \r\ provides a number of macros to
+assist in this. At the point in the text which contains the matter to be
+referenced insert |\xref{stuff}| **|xref| (where |stuff| is a word of your
+own choosing). At the point in the text where you want to say ``see
+Page\dots'' type ``|see \pageref{stuff}|''. **|\pageref| It will now be
+necessary to run \TeX\ on the file twice; the first run will find the
+cross-reference and the second will insert it into the text\ref{This is
+similar to the \WP\ |generate| command. The reference to
+\pageref{Clausenumbering} above was put into the text using this command.}.
+As will be seen below\ref{\pageref{clauseref}.}, there is a corresponding
+command |\clref{stuff}| **|\clref| which inserts a reference to the
+appropriate clause or sub-clause, and various related commands.
+
+At the end of your Opinion type the command *|\bye|. This will automatically
+produce the following---
+
+\signed
+
+\vfilneg
+\smallskip
+It may be, of course, that you do not want Lincoln's Inn at the
+bottom of your Opinion. If the command |\let\inn=\middletemple|
+**|\middletemple| (or *|\grays| or *|\temple| or *|\innertemple|) appears
+before *|\signed| the appropriate alteration will be made. These
+alterations are usually made to the |RHlocal| file.
+
+It will be seen that the date has a comma in the middle of it. This
+is the default. Again, it is possible to alter this by incorporating in the
+file the command *|\nocommaindatetrue|. The date is inserted after the
+signature automatically by the command *|\today| which can be used elsewhere
+in your text to produce today's date.
+
+
+\bigbreak \noindent The command *|\bye| will also produce a
+backsheet**{Backsheets} for the Opinion. In order to be able to work,
+however, it must know what to put on the backsheet. This information may
+include the date, the title of the matter, the type of document---that is to
+say, is it an Opinion, a Note or something else?---and the name and address
+of the Solicitors.
+
+\TeX\ knows the date and has been told the nature of the document by the
+command |\opinion|, but it must find the remainder of this information in the
+file. The simplest case is that of an Opinion in a non-litigious matter
+where the Opinion is the only document being produced. In those
+circumstances the easiest method of providing \TeX\ with the information is
+to incorporate at the start of the file (that is to say, before the
+|\opinion| command) the following text---
+
+\beginlines
+|% backsheet info|
+|\bstitle{RE: JOHN SMITH}|
+|\solsref{XYZ/abc/42}|
+|\colsref{SUEGRA/99}|
+\endlines
+
+The first of these commands, *|\bstitle|, \xref{bstitle} sets up the title
+that will appear on the backsheet. This can, if required, be more than one
+line long. \LT\ will try to find an appropriate place to break the text; it
+can be told where to do so by the insertion of the command *|\break| at the
+appropriate place.
+
+The command *|\solsref| is short for ``Solicitors' Reference'' and it means
+the reference given \ca by\se the Solicitors. *|\colsref| is short for
+``Counsel's Reference''. The default macros expect this reference to be in
+the form used by the ``ACE'' Barristers' accounting system.
+
+*|\colsref| is a complicated macro and I have no intention
+of explaining here how it works. Its main object is to search a separate file
+called *|solicitors.tex|, which will probably be found in the directory called
+|\TEX\INPUTS|, for the name and address of the Solicitors concerned.
+Instructions for adding further names and addresses to this file will be found
+at the start of it.
+
+This simple Opinion requires only one other command and that is *|\bye|. This
+will tell \TeX\ that it is complete and can be fully processed. To summarise,
+the file will take the form---
+
+\beginlines
+
+|\bstitle{RE: JOHN SMITH}|
+|\solsref{XYZ/abc/42}|
+|\colsref{SUEGRA/99} |
+|\opinion|
+|This is an Opinion.|
+|\bye|
+
+\endlines
+
+In addition to printing the Opinion and its backsheet, \r\ will by default
+also produce a fee chit giving details of the work done and so on for the use
+of the Clerks. Some further information will be included on this if some or
+all of the following additional lines are included at the start of the
+file---
+
+\beginlines
+
+|\timetaken{3} % hours |
+|\casetype{breach of trust}|
+|\value{50,000} % pounds|
+|\difficulty{7} % out of 10|
+|\proposedfee{vast} |
+|\legalaidno{N/A}|
+|\comments{slightly tricky}|
+
+\endlines
+
+It is often useful to be able to produce such a chit in relation to a
+Conference, and particularly a telephone conference. \r\ provides the
+commands *|\conference| and *|\telcon| for this purpose; enter the required
+information (using the macros shown above) and then type one or other of
+these commands followed by |\bye|. For example---
+
+\beginlines
+|\bstitle{RE: JOHN SMITH}|
+|\solsref{XYZ/abc/42}|
+|\colsref{SUEGRA/99} |
+|\timetaken{.5} % in hours|
+|\casetype{breach of trust}|
+|\value{50,000} % pounds|
+|\difficulty{7} % out of 10|
+|\proposedfee{?} |
+|\legalaidno{}|
+|\comments{slightly tricky}|
+|\telcon|
+|\bye|
+\endlines
+
+Will produce something like the following---
+
+\bigskip
+\begingroup %preserve pagenumbering, etc
+
+%\vtop{
+\bstitle{RE: JOHN SMITH}
+\solsref{XYZ/abc/42}
+\colsref{SUEGRA/99}
+\timetaken{.5} % in hours
+\casetype{breach of trust}
+\value{50,000} % pounds
+\difficulty{7} % out of 10
+\proposedfee{vast}
+\legalaidno{}
+\comments{slightly tricky}
+\telcon
+\chit
+%}
+\endgroup
+
+\bigskip
+There is a further command called *|\faxsheet|.
+This does what might be expected of it. If it is the last command in the
+files before |\bye| it will automatically count and print out the number of
+pages being sent. The command |\attention{Mr Jones}| **|\attention| will
+mark the Fax for the attention of that gentleman; |\comment{Here at last are
+the documents I promised you.}| **|\comment| will put a (short) comment on
+this cover page.
+
+
+\vfil\eject
+{\sh ^{Non-litigious Drafts and similar documents}}
+
+\nobreak\smallskip
+
+\noindent A draft document is usually formatted somewhat differently to a
+piece of written advice. In order to tell \T\ that it is formatting a draft
+the text of it should commence with |\draft{document type}| **|\draft| (the
+document type being for example ``LEASE''). If you draft a lot of a leases
+it would, of course, be possible to define *|\lease| to mean
+|\draft{LEASE}|.
+
+Most drafts contain numbered clauses. The production of macros to number
+clauses automatically is tricky since people tend to have different ideas as
+to how documents should be numbered. \r\ has been written in such a way as
+to permit the default numbering style, which is that now used in statutes
+and other similar documents, to be altered as easily as is
+possible.\xref{Clausenumbering}
+
+Clauses are produced by typing the command *|\cl| at the beginning of a line
+followed by one or more spaces and then the text of the clause. The default
+is for clauses to be numbered in Arabic numbers\ref{If you go above 999, it
+may be necessary to make some alterations to the normal indentation of
+clauses.}, the number being followed by a full stop--- \goodbreak
+
+\clearclno
+\cl This is the first clause. There is also the command *|\ncl| which can be
+used when clause numbering is not required **{un-numbered clauses}. This can
+be useful when a subclause is followed by a proviso **{provisos} which forms
+part of the main clause.
+
+Sub-clauses have the command *|\scl| either at the beginning of a line or
+immediately after a *|\cl| possibly with one or more spaces between the two
+commands. There must be a blank line between a clause and its sub-clause
+unless they are intended to be on the same line. (It you do not leave the
+blank line they {\bf will} be on the same line, whether you like it or not.)
+
+Subsequent sub-sub-etc-clauses take the form *|\sscl|, *|\ssscl| etc.---the
+maximum being five `s's. In order to discourage the drafting style which
+uses such numerous sub-clauses the default numbering is as follows---
+
+\cl This is Clause 2
+
+\scl This is sub-clause 1
+
+\sscl This is sub-sub-clause 1
+
+\ssscl This is sub-sub-sub-clause 1
+
+\sssscl This is sub-sub-sub-sub-clause 1.
+
+\sssscl This is sub-sub-sub-sub-clause 2.
+
+\sssscl This is sub-sub-sub-sub-clause 3.
+
+\ssssscl This is *{sub-sub-sub-sub-sub-clause} 1
+
+\ssssscl This is sub-sub-sub-sub-sub-clause 2
+
+\ssssscl This is sub-sub-sub-sub-sub-clause 3
+
+\ssssscl This is sub-sub-sub-sub-sub-clause 4. (Using more than four
+sub-etc-clauses of this type is not recommended, since the spade is the last
+character in this particular font!)
+
+\nssssscl \relax This is |\nssssscl|
+
+\nsssscl This is |\nsssscl|
+
+\nssscl This is |\nssscl|
+
+\nsscl This is |\nsscl|
+
+\nscl Now |\nscl|
+
+\ncl Finally |\ncl|
+
+If the |\sssscl| or |\ssssscl| form of numbering is unwelcome, type\break
+*|\greekfalse| at the start of your document to turn off the *{Greek
+numbering} and (or) *|\cardfalse| to turn off the *{playing cards}. (Boring
+letters will be substituted.)
+
+\noindent|\cardfalse|\cardfalse
+
+\hfuzz=2.8pt
+\cl\scl\sscl\ssscl\sssscl\ssssscl
+\par
+
+\noindent|\cardfalse|\par\noindent|\greekfalse|\greekfalse
+
+{\overfullrule=0pt% !
+\cl\scl\sscl\ssscl\sssscl\ssssscl
+\inform{ (don't worry about this...)}
+\par}
+
+\noindent\cardtrue\greektrue
+
+\cl The clauses will have as a default hanging indentation. **{hanging
+indentation in clauses} As a result, the second and subsequent lines of the
+clause will be indented to the same extent as the first line and will line
+up with the number of the next sub-clause---
+
+\nobreak
+\scl Like this. In order to turn off this default type *|\clindfalse|. (The
+name is a sort of abbreviation for ``clause indentation false''.)
+
+\noindent|\clindfalse|\clindfalse
+
+\scl The effect will be that the second and subsequent lines will line up
+with the number of the same clause (or sub-clause) in the more normal manner.
+Hanging indentation is by default turned off in this way in Opinions.
+
+\smallskip
+
+In certain circumstances, for example, in Opinions, it may be necessary to
+reset the Clause **{resetting clause numbers} numbering, or to start from
+some number other than~1. The Clause number is held in a register called
+*|\clno|, while the sub-clause numbers are held in registers which use the
+names *|\sclno|, etc. Any such register can be reset at any time. To reset
+the clausenumbering to zero (so that the next Clause is numbered~1) type
+*|\clearclno|. If you are typing a rider **{riders} starting at, say,
+Clause~12, set |\clno| to one less at the start (i.e., to 11) by typing
+|\clno=11|. **|\clno| Similarly, subclauses and so on can be reset by typing
+*|\clearsclno|, *|\clearssclno| and so on.
+
+Although the style of numbering set out above can be said to be standard,
+there does not seem to be any standard form of `numbering' *{Recitals}. \r\
+by default uses capital letters for Recitals and small roman numbers for
+sub-recitals. The command *|\rec| at the beginning of a line followed by one
+or more spaces and then text prints recitals in the form---
+
+\clindtrue
+\rec This is a recital. The ``numbering'' and the indentation are
+automatic.
+
+\srec This was produced by *|\srec|.
+
+In addition to |\cl| and |\ncl| (and |\scl|, |\nscl| and so on) there are two
+other classes of clause-making macros. The first it *|\tcl|. This is used
+with a parameter in squiggly brackets, for example |\tcl{NOTE:}|. In this
+case the word ``NOTE:'' is put where the number would normally be, and the
+remainder of the first line of the clause is adjusted accordingly. The other
+is *|\xcl| which also takes a parameter, for example |\xcl{[1]}|. In fact
+all the other clause-numbering macros use |\xcl| in order to work.
+
+A recent addition to \r\ is the facility to use what is generally called
+``computer numbering''.**{computer numbering} If the command
+*|\computernumbering| appears in your file |\cl|, |\scl|, \etc\ will produce
+clauses numbered as follows---
+
+{\computernumbering
+\cl This is the first clause.
+
+\scl This is a subclause.
+
+\sscl This is boring.
+
+\ssscl The amount of indentation is set by a parameter called\break *|\cnindent|.
+Here it is set at \the\cnindent.\par}
+
+\bigbreak
+
+
+Cross-references in drafts often refer to a particular clause of sub-clause.
+If the command |\xref{stuff}|**|\xref| appears in a draft and elsewhere
+there appears, for example, ``|subject to
+\clref{stuff}|''\xref{clauseref}there will be substituted
+automatically\ref{After two runs through \TeX.} for the latter command a
+reference to the appropriate clause or subclause; it is not necessary for
+the draftsman to know whether the |\xref{}| command appears in a clause, a
+sub-clause, a sub-sub-clause or whatever. If
+|\def\clause{Paragraph}| appears at the top of the text then
+the reference will be to a paragraph number. Similarly ``Sub-clause'' can be
+redefined as ``sub-paragraph'' by |\def\subclause{sub-paragraph}|
+
+There are similar commands **|\noteref|**|\schedref|**|\appref|
+|\noteref{stuff}|, |\schedref{stuff}| and |\appref{stuff}| or
+cross-referencing footnotes, schedules and appendices.
+
+If at the beginning of a draft you type after a person's name ``{\tt of}
+|\noaddr|'' **|\noaddr| an appropriate gap (based on an address in *{Railway
+Cuttings, Cheam}) **{Hancock}will be left. (This does not yet always work,
+although it is better than it was.) There are similar macros known as
+*|\nodate| (which prints in effect ``\nodate''), *|\noyear| (which is similar
+but leaves you to insert the year), *|\noday|, *|\nomonth| and *|\noname|
+(which leave suitable blank spaces), and *|\nopounds| (which produces
+``\nopounds'').
+
+
+A normal hyphen in an upper-case name tends to look wrong as, for example,
+in SIR HENRY WILLIAM-WORDSWORTH. The macro *|\uc-|**{upper-case hyphen} can
+be used in these circumstances to raise the hyphen which gives a
+better-looking result---SIR HENRY WILLIAM\uc-WORDSWORTH. (There is also the
+macro *|\duc-| which provides a *{discretionary upper-case hyphen}, but this
+is for the real \TeX perts only.)
+
+If at the end of a draft (but before the signature) you type
+\hfil\break|\ssd{the said JOHN SMITH}| **|\ssd| **{signed, sealed and
+delivered} the effect will be--- \bigskip
+
+{\noindent\ssd{the said JOHN SMITH}}
+
+\bigbreak
+If you type |\ssc{SEVNEW LIMITED}| **|\ssc| the effect is like
+this---
+\smallskip
+{\noindent\ssc{SEVNEW LIMITED}}
+
+\bigskip
+Similarly, |\ssw{the said JOE BLOGS}| **|\ssw| will produce the
+following---
+
+{\parindent=0pt\ssw{the said JOE BLOGS}}
+
+(There is also a general purpose macro, *|\ssgen| which can be used to insert
+any text to the left of a big bracket. See also in the \TeX nical Manual
+(when it is produced---it will set out all the macros used in \LT\ and
+explain, or try to explain, how they work.) *|\rbracket| and *|\lbracket|.)
+
+
+\bigskip Although it has not been usual in the past to set out the
+testimonium in full, I have often noticed when drafts which I have settled
+are returned to me how Solicitors have written it in in longhand before
+giving the draft to their Secretary to type. Inserting it in full saves them
+the trouble. If you do not approve of this practice you can use
+*|\witnessetc| which will produce---
+
+\smallskip {\parindent=0pt
+\witnessetc\par
+}
+\par
+\medskip
+The macros *|\whereas| and *|\now| produce---
+
+\whereas
+
+\noindent and
+
+\now
+
+\bigskip\bigbreak
+
+The macros *|\wwhereas| and *|\nnow| have odd names but can be used where
+there is only one recital or clause; the former simply types ``WHEREAS'' and
+the latter ``NOW THIS DEED WITNESSETH''.
+
+Other useful macros are *|\schedule|, *|\appendix| and *|\part| which can be
+used to produce schedules and appendixes. It there is only one schedule it
+will be called ``the Schedule''. If there are more than one they will be
+numbered appropriately. If the command |\xref{stuff}| appears in a schedule,
+a reference elsewhere in the document to |\schedref{stuff}| will refer to
+the correct schedule (after two runs through \T).
+
+\centertext{It is sometimes quite effective to centre the text in a Schedule
+(or elsewhere---as in this paragraph) over several lines. \r\ provides the
+command {\tt\bslash centertext} for this purpose. Its usage is similar to
+that of {\tt\bslash centerline} but it centres more than one line. It is
+derived from a macro which can be found on page~317 (exercise 14.34) of the \TB.}
+
+The modern form of *{stamp duty certificate} can be produced by typing, for
+example, |\sdcert{A}| **|\sdcert| which produces---
+
+\sdcert{A}
+
+*|\dovcert| and *|\giftcert| provide the appropriate letters for use with
+deeds of variation and gifts inter vivos.
+
+
+It sometimes happens that a number of different versions of a draft or
+Opinion are prepared. **|\version| Typing |\version{Version 1}| will print
+{\fiverm Version 1} in miniscule type\ref{The size is 5-point.} at the bottom
+of each page. An example can be seen at the bottom of the current page.
+
+
+Another small control sequence which is useful in drafts is ``*|\,|''. This
+adds a small bit of space and can be used to separate two names in a deed.
+Another is *|\etc| which produces \etc\ \ **|\frac| |\frac 5/6| produces \frac
+5/6. (To produce \frac {27}/{85} it is necessary to put the double figures
+into squiggly brackets like this--- |\frac {27}/{85}|.) A `normal' fraction,
+such as $27\over 85$ can only be typed using ``*{maths mode}''. The fraction
+in the previous sentence was typed |$27\over 85$|.
+
+\bigskip
+The command *|\bye| produces an appropriate backsheet for the deed. It also
+types towards the bottom of the last page---\par
+\def\csettled#1{% Fudge it.
+ \par\nobreak \vskip20pt
+ \hbox{\hskip\signindent\vtop{%
+ \advance\hsize by-\signindent
+ \parindent0pt \raggedright\tolerance=1000
+ Settled,
+ \ignorespaces#1 \vskip20pt
+ \inn \hbox{\today}}}
+ \vskip20pt}
+
+\bigskip
+\settled
+
+\nobreak
+As in the case of *|\signed| it is possible to change `the Inn' to whichever
+may be required.
+
+\bigbreak A backsheet for a draft will be produced automatically. Again it
+will be necessary to supply \r\ with the appropriate information. However,
+if the appropriate information has been supplied earlier in the file (for
+example in an Opinion) it is not necessary to repeat it. The command
+|\draft{LEASE}| will have given \r\ the document name to insert on the
+backsheet.
+
+If an Opinion and a Draft are incorporated in the same file, it is often
+useful to know where one ends and the next begins. While it is processing a
+document \r\ will show a succession of triplets of numbers on the
+screen.**{Page numbering} The first number is the page number of the current
+document, the second is the *{overall page count}, and the third is the
+number of the document being processed. This information will also be found
+in the *|log| file produced by \TeX.
+
+It is sometimes useful to produce a *{Table of Contents} for a draft. If the
+command *|\contents| appears at the beginning of the draft this will be done
+automatically. It is, of course, necessary to provide the information which
+is to be entered into the table. This is done by using the ``magic''
+*{circumflex} commands. If immediately after a *|\cl| command there appears
+the command {\tt\hat\strut}|{Stuff}|, the Table of Contents will get an entry
+such as---
+
+\line{Clause 6. Stuff\dotfill 4}
+
+Similar results will be obtained if the command follows a *|\scl| or a
+*|\sscl|. In this case ``stuff'' will appear in both the Table of Contents
+and the text where it was found. If two circumflexes are used, **{circumflexes,
+two} however, ``stuff'' becomes invisible in the text and only appears in the
+Table of Contents.
+
+One final command is *|\engrossment|. This as the effect of removing the word
+``draft'' from the backsheets and deleting the ``Settled'' at the end of the
+draft.
+
+\vfil\eject
+{\sh ^{Pleadings}}
+
+\nobreak\smallskip
+\noindent
+Here we come to what is perhaps the most complicated part of \r, and the part
+containing most bugs. These notes for the time being will only skim
+the surface and show how the macros are used; they will not attempt to
+explain how they work---for that you must consult the \TeX nical manual
+(when written). However, if you have got this far you may not need any
+explanations and will be able to discover all the secrets by simply
+reading \LT.
+
+The macros were originally written by me some time in 1989. A considerable
+amount of work has since been done on them by Gilead Cooper, Robert Ham and
+others and their efforts and suggestions have persuaded me to make a number
+of further improvements. However, a large amount of work still remains to be
+done.
+
+\medskip
+I will start with High Court litigation. To take as an example a case
+commenced in the Chancery Division. This will normally have a reference
+consisting of three items, that is to say, the year, a letter and a number.
+To show that the case is in the Chancery Division type the following
+command---
+
+|\ch{|{\tt\number\year}| X 1234}|.
+
+
+If the full reference is not known simply type *|\ch| or
+|\ch{|{\tt\number\year}|}|. The commands for proceedings in the Queen's
+Bench and Family Divisions are similar; the former is
+|\qb{|{\tt\number\year}| X 1234}| **|\qb| and the latter
+**|\family||\family{|{\tt\number\year}| X 1234}|. Why in the latter case is
+it not |\fam|? Simply because *|\fam| is already used by \TeX\ for something
+else and the consequences of redefining it would be dire in the extreme.
+
+The name of a Plainiff is given by the following command---
+
+|\plaintiff{WILLIAM WORDSWORTH}|.
+
+His address takes the form |\of{Lakeside Villa, Putney}|. The names and
+addresses of Defendants and Third Parties are given in a similar fashion
+using |\defendant{name}| and |\of{address}|.**|\of| and
+|\thirdparty{name}|**|\thirdparty| and |\of{address}|. (If the address of a
+party is not given a blank space will be inserted in the document where
+appropriate .) It is intended that inserting the address should be optional;
+at present however this sometimes causes problems.
+
+If some parties have the same address, ie John Smith and Freda Smith both of
+Springtime Villas, put |\and| after |\plaintiff{JOHN SMITH}| and
+|\of{Springtime Villas}| after |\plaintiff{FREDA SMITH}|. (This is not very
+robust at the moment.)
+
+If you want to refer to a party as being, for example, a firm, type, for
+example,**|\firm| |\plaintiff{SUE GRABBIT \& RUNNE \firm}|. Other capacities
+include *|\widow|, *|\minor| and *|\patient|.
+
+
+The command **|\matter||\matter{123 New Square, Lincoln's Inn}| does what it
+might be expected to do. There is also the command **|\estate||\estate{A.B.
+deceased.}| Each will store the matter set out and in due course print it in
+the correct place on the pleading and the backsheet (adding `And' where
+appropriate).
+
+Having entered the names and addresses of the parties the next step is to
+ask \r\ to produce the appropriate type of pleading. Once again the command
+is vaguely logical, being |\pleading{type of pleading}|**|\pleading|. Thus
+|\pleading{STATEMENT OF CLAIM}| will produce a document containing the usual
+heading including the names of the parties. The body of the claim will be
+typed in using *|\cl| and *|\scl| for the clauses. It is possible to type
+*|\claim| to produce ``AND the Plaintiff(s) claim(s)---'' automatically. To
+reset the clause numbering at any time type *|\clearclno|. The command
+|\bye| will in this case also add at the bottom of the text the usual
+wording about the document being served.
+
+Pleadings are more complicated than written advice and drafts since \T\
+needs to know which party the draftsman is acting for. In the case of a
+Statement of Claim this is obviously the Plaintiff but \T\ cannot be
+expected to know this. The text should therefore contain the command
+*|\clientpltrue|. As in the case of an *|\opinion|, however, there is a
+shorthand command which will achieve this automatically. A Statement of Claim
+(with the client set to the Plaintiff) will be produced by the command
+|\soc|. If this command is preceded by the command
+|\writissued{12/03/91}| **|\writissued| the date when the writ was issued
+will be inserted at the appropriate place; otherwise the date will be left
+blank.
+
+
+The formal parts of a specially endorsed Writ are slightly different from
+those of a Statement of Claim. In this case *|\writ| does the necessary
+formatting and inserts the appropriate formal parts. Similarly *|\os| can be
+used for an originating summons. (There are also built-in macros called
+*|\defence|, *|\reply|, |\dacc|\ref{Defence and Counterclaim.},
+|\rdcc|\ref{Reply and Defence to Counterclaim.} which act as might be
+expected.
+
+Pleadings have another difference from drafts and written advice and that is
+that they are amended. The command *|\amended| when inserted before the
+command |\pleading| (or |\soc| or |\defence| or whatever) makes the
+necessary amendments to the formal parts. *|\reamended| and *|\rereamended|
+can also be used. An amended Statement of claim can therefore take the form
+|\amended\pleading{STATEMENT OF CLAIM}| or |\amended\soc|. **|\pleading|
+
+The amendments to the text itself are complicated. James Behrens has
+produced a useful note on the question of how to show amendments to
+Pleadings using \WP\ without using coloured ink. In \LT\ I take a slightly
+different approach in that I denote the first amendments by underlining
+additions and crossing-out deletions. For the re-amendments I underline
+twice and cross-out twice and for re-re-amendments underline thrice and
+cross-out thrice. Any such monochrome scheme does look messy if there are many
+amendments; it is best to delete and replace whole sentences rather than
+individual words and letters.
+
+The method of producing the underlining and crossing out is to use the
+commands *|\ul| and |\xo| \ca inside\se squiggly brackets (|{\ul like this}|.
+The brackets limit the extent of the underlining or crossing-out. The
+corresponding commands for double and triple underlining and crossing-out
+are *|\uul|, *|\uuul|, *|\xxo| and *|\xxxo|.
+
+If new clauses are inserted into a Pleading either the original numbers have
+to be altered or the new clauses have to be numbered in some distinctive
+manner. \LT\ uses the latter method. The new clause should be preceded by
+the command *|\acl| instead of |\cl|. (There are also the commands *|\ascl|
+and *|\asscl| for sub-clauses and sub-sub-clauses).
+
+\acl This is a clause starting with |\acl|
+
+Once again, in order to be able to process the text of a pleading \LT\ needs
+a certain amount of additional information. It does not this time need to be
+told the title of the matter since it can work that out for itself. It does,
+however, need to know the *|\colsref| so that it can produce the backsheet
+and add the Solicitors' name and address in the appropriate place at the end
+of the pleading. (If your file contains a pleading followed by an Opinion it
+is not necessary to tell \r\ the title for the backsheet of the Opinion
+since it will use the same title as it uses on the pleading.)
+
+
+An Originating Summons might, therefore, take the following form in your file---
+\beginlines
+|\solsref{XYZ/abc/42}|
+|\colsref{SUEGRA/99} |
+|\def\timespent{3} % in hours|
+|\def\typeofcase{breach of trust}|
+|\def\amountatstake{50,000} % pounds|
+|\def\difficulty{7} % out of 10|
+|\def\suggestedfee{?} |
+|\def\legalaid{}|
+|\def\remarks{slightly tricky}|
+\smallskip
+|\ch{1990 S 1234}|
+\smallskip
+|\plaintiff{ALGERNON SMITH}|
+|\defendant{ALFRED JONES}|
+|\defendant{ETHELRED UNREADY}|
+|\plaintiff{EGBERT SMITH}|
+|\matter{John Smith deceased}|
+|\matter{the Law of Property Act 1925}|
+\smallskip
+|\os|
+|\cl That it may be determined \dots|
+|\cl Further of other relief|
+\smallskip
+|\bye|
+\endlines
+
+The result of \TeX ing this file is shown on the next couple of pages.
+
+%NOTE: No it ain't; a slight problem arose with the new ve%rsion of \LT\ and
+%so I have removed it for the time being. The file does not like being \T ed
+%in the middle of another file for some reason
+
+\vfil \eject
+\inform{Printing demonstration pages of Originating Summons}
+
+\partcount=\the\pageno % preserve page count, using "spare" count reg.
+
+\solsref{XYZ/abc/42}
+\colsref{SUEGRA/99}
+\def\timespent{3} % in hours
+\def\typeofcase{breach of trust}
+\def\amountatstake{50,000} % pounds
+\def\difficulty{7} % out of 10
+\def\suggestedfee{?}
+\def\legalaid{}
+\def\remarks{slightly tricky}
+\smallskip
+\ch{1990 S 1234}
+
+\plaintiff{ALGERNON SMITH}
+\defendant{ALFRED JONES}
+\defendant{ETHELRED UNREADY}
+\plaintiff{EGBERT SMITH}
+
+\matter{John Smith deceased}
+\matter{the Law of Property Act 1925}
+\smallskip
+\os
+
+\pageno=\the\partcount % restore it
+
+\cl That it may be determined \dots
+\cl Further of other relief
+\smallskip
+\bottomofpleading{\endostext} % Not normally necessary
+\vfil
+\settled % fudge since no \bye
+\vfil\vfil\eject
+
+
+An Originating Summons is often accompanied by an Affidavit. If both
+documents appear in the same file, the affidavit being the second of them,
+the number of commands that need to be typed is limited. The first is
+|\deponent{WILLIAM WORDSWORTH}|.**|\deponent| This can optionally be
+followed by |\of{Lakeside Villa, Putney}|**|\of| and
+|\occupation{Poet}|**|\occupation|. (If the deponent has a non-hyphenated
+hyphenated name, that is to say a name where for example the person's
+surname is actually two words, join the words together with an underline
+character ($\_$), as in |\deponent{BRIAN HAMILTON_KELLY}|. This enables \LT\
+to extract the correct initials from the fullname. \LT\ is not psychic and
+so if a person has a title or other formal names which should not be used as
+initials (for example, George Seventeenth Duke of Borchester) it will be
+necessary to tell \LT\ what his initials and initialised names are. The
+commands to use are **|\shortname||\shortname{G. Borchester}| and
+**|\initials||\initials{G.B.}|.
+
+\initials{A.B.C.}
+
+The next command is *|\affidavit| which will print all the formal parts
+(including the endorsement at the top). The text of the affidavit should be
+typed using *|\cl| in the usual way. The commands *|\exhibited| and
+*|\bundled| will respectively produce `\exhibited\,' and `\bundled\,' (the
+initials and number being produced automatically).
+
+In this case the command *|\bye| should add at the end of the document---
+
+\noindent\sworn
+
+
+If the Affidavit is the only pleading it is, of course, necessary to set out
+the parties and so on in the file. In these circumstances \r\ will assume
+that you are acting for the Defence and refer to your Solicitors as
+Solicitors for the Defendants. To change this type *|\clientpltrue| at the
+beginning. The affidavit will also by default be treated as being the first
+sworn for the relevant party. To alter this to, for example, the second type
+**|\affyno||\affyno{2}| at the start. If the deponent is the same it will probably
+also be necessary to ensure that the exhibit numbers continue on where they
+left off in the previous affidavit. To do this if, for example, the last
+number was 10, type *|\exno=10| at the beginning of the new affidavit, but \ca
+after\se the command *|\affidavit| (which resets the count to zero).
+
+Minutes of Order can be produced by the command *|\minutes|. This will set
+out the formal parts of the Minutes.
+
+Pleadings for use in the County Court are produced in exactly the same way
+as those for use in the High Court. The commands are very similar. If the
+name of the Court and the case number are known the document should be
+headed---
+
+|\countycourt{BORCHESTER}|\hfil\break
+|\case{1234}|
+
+If, however, either are unknown it is acceptable to simply type
+|\countycourt| (or even |\case|) and \LT\ will supply defaults.
+
+
+
+\def\VT{{\tt\char'174}}
+It is sometimes necessary to produce a table in either a pleading or other
+document. \T\ has very sophisticated table producing commands bit they
+cannot be described a user-friendly. \LT\ now incorporates\ref{At the moment
+they are contained in a separate file, txsruled.tex. At a later date they
+will be incorporated into \LT\ itself.} the ruled table macros written by
+Eric Myers which normally form part of the \T sis macros (macros for
+physicists). The full documentation can be obtained elsewhere (and fuller
+documentation will appear in a subsequent edition of this manual). However, to
+produce a simple ruled table type *|\ruledtable|. On successive lines put
+the material that should appear in the lines of the table. Separate each
+column with the vertical bar character (\VT). End each line \ca except the
+last\se with |\cr| (which can roughly be translated as `carriage return').
+At the end of the table type |\endruledtable|. (This effectively replaces
+the last |\cr|.) There are commands available for producing tables without
+rules and for altering the thickness of the rules and so on. Here is an
+example---
+\bigskip
+{\obeylines
+|\ruledtable|
+|\bf Date Due| \VT|\bf Amount (\pounds)| \VT|\bf When Paid \cr|
+01/02/89 \VT 34.56 \VT 09/12/90|\cr|
+24/01/90 \VT 99.00 \VT Outstanding
+|\endruledtable|\par}
+
+This produces---
+
+\bigskip
+\begingroup % Keep txsruled local.
+
+\ruledtable
+\bf Date Due | \bf Amount (\pounds)| \bf When Paid \cr
+01/02/89 | 34.56 | 09/12/90\cr
+24/01/90 | 99.00 | Outstanding
+\endruledtable
+
+\endgroup
+
+\medskip
+It must, of course, be remembered that a large table may not fit on a page
+in portrait mode.
+
+\bigskip
+
+There are many other commands in \r\ and these
+Notes will be lengthened in due course. This particular version is being
+written in rather a hurry and so is incomplete. In the meantime try the
+Index (if it exists) and experiment with the commands that you find there.
+
+\bigbreak
+
+{\sh ^{Altering the defaults.}}
+\nobreak\smallskip\noindent
+There is one file that can be altered
+with impunity---that is to say, that I have no objection to you altering
+it. It is |RHlocal|. When you receive \r\ this is likely to
+contain the following text---
+
+\beginlines
+|% RHlocal|
+|% definitions of local matters|
+|%|
+|%|
+|\counsel{John Smith}|
+|%|
+|\def\col{AB}|
+|%|
+|%\let\inn=\lincoln|
+|%\let\inn=\grays|
+|%\let\inn=\temple|
+|%\let\inn=\middletemple|
+|%\let\inn=innertemple|
+|\def\ouraddress{%|
+|7 New Square\cr|
+|Lincoln's Inn\cr|
+|London WC2A 3QS\cr|
+|Telephone: 071 405 1266\cr|
+|Fax: 071 405 0554\cr}|
+\endlines
+
+You should insert your name between the |{}| after *|\counsel| in the form in
+which you like it to appear on pleadings. You should also substitute your
+initials for |AB| in |\def\col{AB}| in the form in which they are used in the
+ACE accounts package and ``un-comment'' one Inn. You should also substitute
+your address for mine (taking care to include the *|\cr|'s) in *|\ouraddress|.
+
+If you define your own macros either put them in a new file (called, for
+example |newmacs.TEX|) which you put in either the |\TEX| or the
+|\TEX\INPUTS|\ref{Depending on your version of \T.} directory and add the
+command *|\input newmacs| at the beginning of your text file, or add them to
+|RHlocal.TEX|; in the latter case you will have to create a new format file
+by typing |INITEX &PLAIN RHFMT \dump|\ref{Note that {\tt\bslash dump} must be in
+lower case. This is the command for the \pctex\ version of \T. The \bo emTeX\ok
+version uses a different system; please see the instructions.}.
+
+\bigskip
+{\bf Suggestions for improvements in this format file and these Notes will be
+gratefully received---and probably rejected out of hand.}
+
+If you are reading the long version of this Manual, the next part of these
+these Notes is a further document called ``\r\ \TeX nical Manual''. This
+sets out the \r\ macros in full. I suggest, however, that only those who have
+used \r\ for some time actually bother to look at it. However, it contains
+details of {\it all\/} the macros that are to be found in \r, including a
+large number which are not mentioned in this document or elsewhere---See also
+the Index. You may also find it useful when developing your own macros, since
+it may help you to avoid the many mistakes which I have made. It may also set
+out the text of other macro files which I use.
+
+If, however, you are reading the short version of this Manual, the next part
+will be the index which makes rather boring reading.
+
+
+\bigskip\vfill\eject
+%
+% Read in the commented macro files
+\iflongversion\input RHstuff\relax\fi
+
+\vfil\eject
+%
+\def\indexname{%
+\vtop{%
+\centerline{\bf Index}
+\medskip
+\rm This is a fairly rough index. It is produced automatically by the
+|MANMAC| macros, and as a result there may be a number of duplicated page
+references, and the page numbers are not necessarily in order. In later
+editions I will perhaps try to rectify this, but at present I could only do
+this by hand, and that would take too long.
+\medskip%
+For those who are interested, the index entries were produced by using a
+slightly modified version of the codes shown in {\sl the \TeX book\/} at
+pages 423--424\ref{This is to be found in RHindex.TeX.}, were sorted by a
+comparatively simple program written in the ``C'' language, and were then
+``massaged'' very gently using a text-editor. The \r\ macros then
+formatted the result.
+\medskip
+Of course, if you are reading an early version of these Notes, the index will
+not be sorted and so you should not have read the previous paragraph. Forget
+that you did.}}
+
+% stop LeXTeX thinking that this is a pleading
+\chitfalse
+\let\backmatter\empty
+\let\signoff\empty
+
+% Print the index
+\printindex
+\bye
+
diff --git a/macros/plain/contrib/lextex/read.me b/macros/plain/contrib/lextex/read.me
new file mode 100644
index 0000000000..59a28bdfed
--- /dev/null
+++ b/macros/plain/contrib/lextex/read.me
@@ -0,0 +1,103 @@
+LeXTeX
+
+LeXTeX is a collection of macros intended to enable lawyers,
+and in particular Barristers, to format their work using
+TeX. The package consists of the following files---
+
+READ.ME This file.
+
+LEXTEX.TEX The principle macro file.
+RHLOCAL.TEX A file containing local modifications.
+SOLICITORS.TEX A database file.
+
+LTMAN.TEX A Manual for LeXTeX.
+EXAMPLE1.TEX A file containing some examples.
+
+DPI300 A Directory containing the following
+ fonts at 300dpi---
+
+ xcmr12
+ xxcmr12
+ xxxcmr12
+ ucmr12
+ uucmr12
+ uuucmr12
+ xucmr12
+
+DPI360 A Directory containing the same fonts
+ as DPI300 but at 360dpi (magstep1)
+
+TFM A Directory containing the tfm files
+ for the same fonts.
+
+
+Installing the package is to a certain extent machine and
+software dependent. The files LEXTEX.TEX, RHLOCAL.TEX and
+SOLICITORS.TEX should be installed in the directory
+containing input files. In the emTeX distribution this is
+called \EMTEX\TEXINPUTS.
+
+The files LTMAN.TEX and EXAMPLE1.TEX can also be installed in
+this directory. Alternatively they can be put in the working
+directory (which may be \EMTEX itself).
+
+The fonts need to be installed in the appropriate
+directories. Various versions of emTeX seem to store fonts
+in different directories and to set up the paths to find
+them in different ways. These paths are set up by files
+called, for example, LJ.CNF. Details of these can be found
+in the file called something like
+\EMTEX\DOCS\ENGLISH\DVIDRV.DOC. It may be necessary to
+rename DPI300 and DPI360 to 300DPI and 360DPI or to make a
+corresponding alteration to the CNF file or files. Some
+systems may require the files to be given the extension .PK
+
+The files in the directory TFM should be copied into the
+directory \EMTEX\TFM. Some systems require them to be given
+the extension .TFM
+
+There are two ways of running LeXTeX. The first involves
+creating a format file. To do this it is necessary to use a
+version of TeX called IniTeX. In the case of emTeX this is
+actually the same program as TeX. To create the format file
+using emTeX type---
+
+TEX -I &PLAIN LEXTEX \dump
+
+Note that it is essential that \dump is typed in lower case.
+
+After a fair time TeX will report that it has created a
+format file called LEXTEX.FMT. This should be moved into the
+directory called something like \EMTEX\TEXFMTS. (Some
+implementations of TeX call this directory simply FMT or
+FMTS.)
+
+Now to format the Manual type---
+
+TEX &LEXTEX LTMAN
+
+To format the file EXAMPLE1.TEX type TEX &LEXTEX EXAMPLE1
+
+The second method of using LeXTeX does not involve creating
+a format file. In this case simply type---
+
+TEX &PLAIN LTMAN or TEX &PLAIN EXAMPLE1
+
+This will be somewhat slower than the first method.
+
+To print the resulting files is very system dependent. In
+the case of emTeX the command---
+
+PRTHPLJ LTMAN should work provided that the correct paths to
+the fonts have been set up. The documentation on the printer
+driver is very thorough and you should have no real
+difficulties.
+
+Roger Horne
+7 New Square
+Lincoln's Inn
+London WC2A 3QS
+
+rhorne@cix.compulink.co.uk
+rhorne@lix.compulink.co.uk
+
diff --git a/macros/plain/contrib/lextex/rhlocal.tex b/macros/plain/contrib/lextex/rhlocal.tex
new file mode 100644
index 0000000000..cc950e9068
--- /dev/null
+++ b/macros/plain/contrib/lextex/rhlocal.tex
@@ -0,0 +1,31 @@
+% RHlocal
+% definitions of local matters
+%
+%
+\def\rh{Roger C\uc-H. Horne}
+\counsel{\rh}
+%
+\def\col{RH}
+%
+%\let\inn=\lincoln
+%\let\inn=\grays
+%\let\inn=\temple
+%\let\inn=\middletemple
+%\let\inn=innertemple
+%
+\def\ouraddress{%
+7 New Square\cr
+Lincoln's Inn\cr
+London WC2A 3QS\cr
+Telephone: 071 405 1266\cr
+Fax: 071 405 0554\cr}
+
+\gdef\myaddress{%
+7 New Square\cr
+Lincoln's Inn\cr
+London WC2A 3QS\cr
+Telephone: 071 405 1266\cr
+Fax: 071 405 0554\cr
+Lix: LON\,031\cr
+email: rhorne@cix.compulink.co.uk\cr}
+
diff --git a/macros/plain/contrib/lextex/ruled.tex b/macros/plain/contrib/lextex/ruled.tex
new file mode 100644
index 0000000000..9843b5d594
--- /dev/null
+++ b/macros/plain/contrib/lextex/ruled.tex
@@ -0,0 +1,62 @@
+% file: ruled.tex TeXsis version 2.14
+% $Revision: 1.8 $ : $Date: 91/06/04 14:03:51 $ : $Author: myers $
+%======================================================================*
+% RULED TABLES. Plain TeX macros for making nice ruled tables.
+%
+% The actual guts of the ruled.tex macros are in the file TXSruled.tex,
+% which is loaded at the end of this file. Here we just include
+% the interline spacing macros from TeXsis since they are also of
+% use in the table making macros.
+%
+% (C) copyright 1990, 1991 by Eric Myers and Frank E. Paige
+%--------------------------------------------------*
+% INTERLINE SPACING. (from TeXsis)
+
+\def\singlespaced{% sets interline spacing to \normalbaselineskip
+ \baselineskip=\normalbaselineskip % reset interline
+ \setRuledStrut % set ruled table spacing
+ }
+\def\singlespace{\singlespaced} % synonym for \singlespaced
+
+\def\doublespaced{% sets interline spacing to 1.5 the \normalbaselineskip
+ \baselineskip=\normalbaselineskip % increase interline
+ \multiply\baselineskip by 150 % spacing by 1.50
+ \divide\baselineskip by 100 % of normal
+ \setRuledStrut % set ruled table spacing
+ }
+\def\doublespace{\doublespaced} % synonym for \doublespaced
+
+\def\TrueDoubleSpacing{% sets interline spacing to twice \normalbaselineskip
+ \baselineskip=\normalbaselineskip % increase interline
+ \multiply\baselineskip by 2 % spacing by 2.0
+ \setRuledStrut % set ruled table spacing
+ }
+\def\truedoublespacing{\TrueDoubleSpacing} % synonym for \TrueDoubleSpacing
+
+\def\triplespaced{% sets interline spacing to 3.0 the \normalbaselineskip
+ \baselineskip=\normalbaselineskip % increases interline
+ \multiply\baselineskip by 3 % spacing by 3.0
+ \setRuledStrut % set ruled table spacing
+ }
+
+\def\widenspacing{% increases the interline spacing by 1.25
+ \multiply\baselineskip by 125 % increase the interline
+ \divide\baselineskip by 100 % spacing by a factor of 1.25
+ \setRuledStrut % set ruled table spacing
+ }
+\def\whitespaced{\widenspacing} % synonym for \widenspacing
+\def\whitespace{\widenspacing} % synonym for \widenspacing
+
+
+% \setRuledStrut creates a vertical strut to hold the interline
+% spacing in ruled tables. It is defined in TXSruled.tex
+
+\def\setRuledStrut{\relax}
+
+%--------------------------------------------------*
+% RULED TABLE MACROS:
+
+\input TXSruled.tex
+
+%>>> EOF TXSruled.tex <<<
+
diff --git a/macros/plain/contrib/lextex/solicit.tex b/macros/plain/contrib/lextex/solicit.tex
new file mode 100644
index 0000000000..2f6cf425ae
--- /dev/null
+++ b/macros/plain/contrib/lextex/solicit.tex
@@ -0,0 +1,112 @@
+% >$.!tex.texinputs.solicitors.TeX
+%\ifx\solsisloaded\relax\endinput\else\let\solsisloaded=\relax\fi
+\message{Version RH/0.2}
+%
+% Each entry begins with the control sequence \z:
+% followed by the Chambers' shortname of the firm
+% followed (immediately) by a :
+% followed by the name and address.
+% Spaces in the name and address do not matter.
+% Each line ends with \cr
+% The last line should in addition either end with
+% \par or be followed by a blank line (or both)
+%
+% These will later be modified
+%\def\tel#1{\afterassignment{\xdef\stel{#1}}}
+\def\tel#1{}
+\def\dx#1{}
+\def\fax#1{}
+\def\tlx#1{}
+\def\mbx#1{}
+\def\email#1{}
+%
+
+\z:INGLED: Ingledew, Brown, Bennison \& Garrett\cr
+ International House\cr
+ 26 Creechurch Lane\cr
+ London\cr
+ EC3A 5AL\cr\par
+
+\z:DICKIN: Dickinson Dees\cr
+ Cross House\cr
+ Westgate Road\cr
+ Newcastle upon Tyne\cr
+ NE99 1SB\cr\par
+ \tel{091-261 1911}
+
+\z:DJFREE: D.J. Freeman \& Co.,\cr
+ 43 Fetter Lane,\cr
+ London EC4A INA\cr
+ \cr\par
+
+\z:FREERB: Freer, Bouskell \& Co.\cr
+ 10 New Street\cr
+ Leicester\cr
+ LE1 5ND\cr\par
+
+\z:CHARLE: Charles Russell\cr
+ Hale Court\cr
+ Lincoln's Inn\cr
+ London WC2A 3UL\cr\par
+ \tel{01-242 1031}
+
+\z:ABBOTT: Computing Service\cr
+ Aston University\cr
+ Aston Triangle\cr
+ Birmingham B4 7ET\cr\par
+ \tel{021-359 3611}
+
+
+\z:FARRER: Messrs Farrer \& Co\cr
+ Solicitors\cr
+ 66 Lincoln's Inn Fields\cr
+ London WC2A 3LH\cr\par
+ \tel{01 242 2022}
+
+\z:TUGBOAT: \TeX\ Users Group\cr
+ 653 North Main Street\cr
+ P.O. Box 9506\cr
+ Providence, RI 02940\cr
+ U.S.A.\cr\par
+ \tel{401 751 7760}
+ \fax{401 751 1071}
+
+
+\z:OVEREND: S.K. Overend Esq\cr
+ 4 Paper Buildings\cr
+ Temple\cr
+ London EC4Y 7EX\cr\par
+ \tel{353 3366}
+
+\z:BARCO: The General Council of the Bar\cr
+ 11 South Square\cr
+ Gray's Inn\cr
+ London WC1R 5EL\cr\par
+ \tel{242 0082}
+ \fax{831 9217}
+
+\z:SUEGRA: Sue, Grabbit \& Runne\cr
+ 1234 Lincoln's Inn Fields\cr
+ London WC7A 9JJ\cr\par
+
+\z:DEWILDE: %Robin de Wilde\cr
+ New Court\cr
+ Temple\cr
+ London EC4Y 9BE\cr\par
+
+\z:OXFORD: Oxford Text Archive\cr
+ 13 Banbury Road\cr
+ Oxford OX2 6NN\cr\par
+ \tel{0865 273238}
+ \fax{0865 270708}
+ \email{ARCHIVE@vax.oxford.ac.uk}
+
+\z:SEAN: %Sean Overend
+ Cliffside\cr
+ Yealm Road\cr
+ Newton Ferrers\cr
+ Plymouth\cr
+ Devon PL8 1BL\cr\par
+ \tel{0752 873030}
+
+
diff --git a/macros/plain/contrib/lextex/txs.doc b/macros/plain/contrib/lextex/txs.doc
new file mode 100644
index 0000000000..3d6a9059b2
--- /dev/null
+++ b/macros/plain/contrib/lextex/txs.doc
@@ -0,0 +1,569 @@
+% file: TXSruled.doc TeXsis version 2.14
+% $Revision: 1.1 $ : $Date: 91/06/04 13:58:47 $ : $Author: myers $
+%======================================================================*
+
+\def\VT{\char'174} % the vertical var character ``|'' is needed below
+
+ While |\halign| in Plain \TeX\ is convenient for making simple
+tables, it is still difficult to make tables with horizontal and
+vertical rules. Indeed, typesetting ruled tables in \TeX\ has often
+been likened to programming a computer in assembler language. Even
+\TeXbook\ acknowledges that ``people who know how to make ruled tables
+are generally known as \TeX\ Masters.''\reference{Masters}
+D.E.~Knuth, {\sl The \TeX book} (Addison Wesley, 1986, ISBN
+0-201-13448-9), page 245
+\endreference\space
+The macros described below take a great deal of the difficulty out of
+making ruled tables, so that anybody can be a
+\TeX\ Master.
+
+ The basic idea behind making a ruled table is similar to
+|\halign|, and the syntax is the same as the Princeton table macros
+known as |TABLES.TEX| by Ray Cowan,\reference{Cowan} Ray F.~Cowan, {\sl
+Making Tables with Macros} (unpublished)
+\endreference
+although the \TeXsis\ macros are quite different internally and run
+about 5 times faster. You begin the table material with |\ruledtable|
+and end it with |\endruledtable|. The table material is a list of items
+to appear in the rows and columns of the tables. Just as with |\halign|
+you can separate items in different columns with |&| and end a row with
+|\cr|. The |&| alignment character separates columns without putting a
+vertical rule between the columns, while |\cr| ends a line and puts a
+thin horizontal rule under it. To get a vertical rule between columns
+replace the |&| with a `{\tt\VT}' (the vertical line), and to end a line
+without a horizontal rule under it replace the |\cr| with |\crnorule|.
+One important thing to remember is to end the last line in the table
+with |\endruledtable| instead of |\cr|!
+
+ As an example here is a simple ruled table,
+{\singlespaced
+\bigskip
+\ruledtable
+Year | World Population \cr
+8000 B.C. | ~~~5000000 \crnorule
+~~50 B.C. | ~200000000 \crnorule
+1650 A.D. | ~500000000 \crnorule
+1850 A.D. | 1000000000 \crnorule
+1945 A.D. | 2300000000 \crnorule
+1980 A.D. | 4400000000
+\endruledtable
+\smallskip}
+\noindent
+and here are the instructions that created it,
+\TeXexample
+\ruledtable
+Year |VT World Population \cr
+8000 B.C. |VT ~~~5000000 \crnorule
+~~50 B.C. |VT ~200000000 \crnorule
+1650 A.D. |VT ~500000000 \crnorule
+1850 A.D. |VT 1000000000 \crnorule
+1945 A.D. |VT 2300000000 \crnorule
+1980 A.D. |VT 4400000000
+\endruledtable
+|endTeXexample
+This example also appears in \TeXbook, where it is typeset using
+|\halign|. Compare how the two are constructed
+and see which way you think is easier.
+
+ By default each item in the table is centered in its column.
+Inside a table the tie character ``|~|'' takes up the
+space of exactly one digit (it is the same as saying |\phantom{0}|),
+and this has been used to line up the digits of the entries in
+both columns. It is also possible to change the definition of
+the |\TableItem| macro so that each entry in each column is left
+or right justified. This is described a little bit later.
+
+ Something to note about this example table is that the outer
+rules are thicker than the others. You can also get a thick
+vertical rule between columns by using ``{\tt\bs\VT}'' in place of
+``{\tt\VT}'', and you can get a thick horizontal rule below a row by
+replacing the |\cr| with |\crthick|. The widths of thick and
+thin rules are controlled by the dimensions |\thicksize| and
+|\thinsize|. If you don't want thick rules at all simply say
+|\thicksize=\thinsize|, which makes the thick rules as thin
+as the thin rules.
+
+ Some synonyms: |\CR| is the same as |\crthick|, |\nr| is the
+same as |\crnorule|, and |\crrule| is the same as |\cr| (actually
+it's the other way around!). |\tab| is the same as |&| --- it
+separates columns without a vertical rule. |\vb| is the same as
+{\tt\VT}, it separates columns with a thin vertical bar, while
+|\Vb| is the same as {\tt\bs\VT} and separates the columns with a
+thick vertical bar. You can also use |\dbl| to separate columns
+with a double vertical rule.
+
+ As in Plain \TeX\ you can use |\span| in place of |&| (or the other
+column separators) to join two columns together into one, and you can
+use |\omit| as the very first token in a column to tell it to omit the
+fancy column layout (the centering or other spacing). You can also use
+|\multispan| to |\span| and |\omit| several columns, just as in an
+|\halign|. The only difference is that the number of columns you tell
+it to |\multispan| is the number of columns of the table it spans ---
+with an |\halign| you would count the columns {\it and} any vertical
+rules.
+
+\table{table-example-II}
+\caption{Another example of a ruled table.}
+\singlespaced
+\ruledtable
+\multispan3\hfil AT\&T Common Stock \hfil\CR
+ Year \dbl Price | Dividend \cr
+ 1971 \dbl 41-54 | \$2.60 \cr
+ ~~~2 \dbl 41-54 | \$2.70 \cr
+ ~~~3 \dbl 46-55 | \$2.87 \cr
+ ~~~4 \dbl 40-53 | \$3.24 \cr
+ ~~~5 \dbl 45-52 | \$3.40 \cr
+ ~~~6 \dbl 51-59 | ~~.95
+\endruledtable
+\endtable
+
+ \Tbl{table-example-II} is another sample table, again taken
+{from} \TeXbook. Something important to notice is that the last
+ruled table example didn't have a table number or a caption,
+while this one does. That's because the last example was created
+using just |\ruledtable|, while this example is inside of
+|\table|. The point is that |\table| and |\ruledtable| do
+separate things and can be used either separately or together:
+|\table| creates the space for the table and gives it a caption
+and a number, while |\ruledtable| actually constructs the body of
+the ruled table. The instructions that created \Tbl{table-example-II}
+are:
+\TeXexample
+\table{table-example-II}
+\caption{Another example of a ruled table.}
+\singlespaced
+\ruledtable
+\multispan3\hfil AT\&T Common Stock \hfil\CR
+Year \dbl Price |VT Dividend \cr
+1971 \dbl 41-54 |VT \$2.60 \cr
+~~~2 \dbl 41-54 |VT \$2.70 \cr
+~~~3 \dbl 46-55 |VT \$2.87 \cr
+~~~4 \dbl 40-53 |VT \$3.24 \cr
+~~~5 \dbl 45-52 |VT \$3.40 \cr
+~~~6 \dbl 51-59 |VT ~~.95
+\endruledtable
+\endtable
+|endTeXexample
+\bigskip\goodbreak
+
+\table{SiHCl}
+\singlespaced
+\tenpoint
+\tolerance=1000 % here for the caption which is a pain
+\ruledtable
+\vctr{Molecule} | \vctr{Region} | Radius |
+ \vctr{$\alpha _{\rm HF}$}|\multispan{2} $l_{\rm max}$ \crnorule
+\cskip | \cskip | \cskip |\cskip| \crule | \crule \crpart
+ | | (au) | | initial state | final state \CR
+
+SiCl$_4$ | outersphere | 6.21 | 0.7238 | 4 | 7\crnorule
+ | Si | 2.20 | 0.7275 | 2 | 3\crnorule
+ | Cl | 2.40 | 0.7233 | 2 | 3\cr
+
+SiHCl$_3$ | outersphere | 6.21 | 0.7260 | 4 | 7\crnorule
+ | Si | 2.16 | 0.7275 | 2 | 3\crnorule
+ | Cl | 2.40 | 0.7233 | 2 | 3\crnorule
+ | H | 1.20 | 0.7772 | 1 | 2\cr
+
+SiH$_2$Cl$_2$ | outersphere | 6.25 | 0.7295 | 4 | 7\crnorule
+ | Si | 2.20 | 0.7275 | 2 | 3\crnorule
+ | Cl | 2.40 | 0.7233 | 2 | 3\crnorule
+ | H | 1.20 | 0.7772 | 1 | 2\cr
+
+SiH$_3$Cl | outersphere | 6.30 | 0.7360 | 4 | 7\crnorule
+ | Si | 2.20 | 0.7275 | 2 | 3\crnorule
+ | Cl | 2.40 | 0.7233 | 2 | 3\cr
+
+SiH$_4$ | outersphere | 4.10 | 0.7524 | 4 | 7 \crnorule
+ | Si | 2.04 | 0.7275 | 2 | 3 \crnorule
+ | H | 1.20 | 0.7772 | 1 | 2
+\endruledtable
+
+\caption{Parameters used in the MS-X$\alpha$ calculations for
+ the chlorosilane molecules, H$_{\rm x}$SiCl$_{\rm 4-x}$;
+ x=0-4.}
+
+\endtable
+
+Sometimes it is desirable to have rules across only some of the columns
+of a table. In this case put |\crule| in the columns that are to have
+rules, |\cskip| in the columns where no rules are desired, and
+end the line with |\crpart|, which signals that the line contains a
+partial rule. The column headings in \Tbl{SiHCl} are an example of
+partial rules in a table.
+That table was created with the commands,\reference{Bozek, 1991}
+J.D.~Bozek, Ph.D. thesis (unpublished), Department of Chemistry,
+University of Western Ontario, London, Ontario CANADA
+\endreference\relax
+\TeXexample
+\table{SiHCl}
+\singlespaced\tenpoint\tolerance=1000
+
+\ruledtable
+\vctr{Molecule} |VT \vctr{Region} |VT Radius |VT
+ \vctr{$\alpha _{\rm HF}$}|VT\multispan{2} $l_{\rm max}$
+\crnorule
+\cskip |VT \cskip |VT \cskip |VT\cskip|VT \crule |VT \crule \crpart
+ |VT |VT (au) |VT |VT initial state |VT final state \CR
+
+SiCl$_4$ |VT outersphere |VT 6.21 |VT 0.7238 |VT 4 |VT 7 \crnorule
+ |VT Si |VT 2.20 |VT 0.7275 |VT 2 |VT 3 \crnorule
+ |VT Cl |VT 2.40 |VT 0.7233 |VT 2 |VT 3 ...
+
+\endruledtable
+\endtable
+|endTeXexample
+\bigskip\goodbreak
+
+ Ruled tables are normally centered on the page, but you can turn
+off the centering with |\noncenteredtables|. Then the table becomes just
+another piece to add to a horizontal list. One thing this lets you do is
+have two tables side by side on the page, like so:
+\noncenteredtables
+\medskip
+\line{
+\ruledtable
+Item ABC | Item DEF \cr
+Item GHI | Item JKL \endruledtable
+\hfil
+\ruledtable
+Data 111 | Data 222 \cr
+Data 333 | Data 444 \cr
+Data 555 | Data 666 \endruledtable}
+\smallskip
+\noindent This pair of tables was produced by saying:
+\TeXexample
+\noncenteredtables
+\medskip
+\line{
+\ruledtable
+Item ABC |VT Item DEF \cr
+Item GHI |VT Item JKL \endruledtable
+\hfil
+\ruledtable
+Data 111 |VT Data 222 \cr
+Data 333 |VT Data 444 \cr
+Data 555 |VT Data 666 \endruledtable}
+\smallskip
+|endTeXexample
+\noindent Saying |\centeredtables| turns table centering back on.
+Tables are then centered across the page, and a table is then
+added to a {\it vertical} list.
+\bigskip\goodbreak
+
+ Usually |\ruledtable| makes tables as wide as their natural
+width, but it is possible to make them wider by setting the dimension
+|\tablewidth| to the width desired before saying |\ruledtable|. We can
+make the same table in \Tbl{table-example-II} but with the width set to
+10cm:
+%
+\bigskip
+\noncenteredtables
+\tablewidth=10cm
+\line{\hfil\vbox{\singlespaced
+\ruledtable
+\multispan3\hfill AT\&T Common Stock \hfill\CR
+Year \dbl Price | Dividend \cr
+1971 \dbl 41-54 | \$2.60 \cr
+~~~2 \dbl 41-54 | \$2.70 \cr
+~~~3 \dbl 46-55 | \$2.87 \cr
+~~~4 \dbl 40-53 | \$3.24 \cr
+~~~5 \dbl 45-52 | \$3.40 \cr
+~~~6 \dbl 51-59 | ~~.95\rlap*
+\endruledtable
+\hbox{* (first quarter only)}
+\vss}\hfil}
+\smallskip
+\noindent
+The careful reader will notice that the version of
+\Tbl{table-example-II} in \TeXbook\ had a footnote to the last entry,
+and we have added that here. To do so we had to put the footnote in an
+|\hbox| and stack it under the table, so we had to turn off table
+centering. The table is therefore a bit more complicated to make, but
+not much:
+\TeXexample
+\noncenteredtables
+\tablewidth=10cm
+\line{\hfil\vbox{\singlespaced
+\ruledtable
+\multispan3\hfill AT\&T Common Stock \hfill\CR
+Year \dbl Price |VT Dividend \cr
+1971 \dbl 41-54 |VT \$2.60 \cr
+~~~2 \dbl 41-54 |VT \$2.70 \cr
+~~~3 \dbl 46-55 |VT \$2.87 \cr
+~~~4 \dbl 40-53 |VT \$3.24 \cr
+~~~5 \dbl 45-52 |VT \$3.40 \cr
+~~~6 \dbl 51-59 |VT ~~.95\rlap*
+\endruledtable
+\hbox{* (first quarter only)}
+\vss}\hfil}
+|endTeXexample
+\centeredtables % turn back on!
+\noindent
+If we had not wanted to add the footnote, then the table would have
+been typed the same way as \Tbl{table-example-II} except for setting
+the |\tablewidth|.
+
+ Important note: |\tablewidth| is turned ``off'' after the
+table is made, so the next table will have its natural width unless
+you explicitly set |\tablewidth| again!
+\bigskip\goodbreak
+
+ |\ruledtable| normally inserts a |\quad| of space around each
+item. If you have a very wide table, especially one with many columns,
+you may wish to reduce this. |\TightTables| make this spacing a single
+space, the minimum acceptable. |\LooseTables| restores the default
+spacing. You can define this space to be something else by
+re-defining |\tablespace|, for example as
+\TeXexample
+\def\tablespace{\ \ }
+|endTeXexample
+\noindent
+If the table is still too wide with |\TightTables|, you will probably
+have to reformat it or print it in landscape mode.
+\bigskip\goodbreak
+
+ The careful reader may also have noticed that in the
+examples in \Tbl{table-example-II} and \Tbl{SiHCl} we said
+|\singlespaced|. That's
+because the spacing of the rows of a table can be controlled just like
+the spacing of the text with |\singlespaced|, |\doublespaced|,
+etc. The space between the rows of a table is set by a strut called
+|\tstrut|, which holds the rows apart. Its default definition is
+\TeXexample
+\def\tstrut{\vrule height 3.1ex depth 1.2ex width 0pt}
+|endTeXexample
+\noindent
+You can change the spacing between rows by changing the definition of
+this strut. One of the things |\singlespaced| does is define the
+|\tstrut| to be 0.5ex higher and deeper than a parenthesis.
+|\doublespaced|, |\triplespaced|, and |\widenspacing| all increase the
+height and depth of the strut in proportion to the increase in the
+baseline spacing.
+
+ If you put something in a table which is larger than the strut,
+then it will touch the rows above or below. You can fix this by
+inserting your own strut into that row. More simply, you can say
+|\bigitem{|\meta{stuff}|}|, and ``stuff'' will be positioned correctly
+with a nice amount of space above and below.
+\medskip
+
+ You can also decide whether or not you want diagnostic messages
+printed when a table is created. |\tableinfotrue| causes a message to
+be printed on your terminal every time a ruled table is created. The
+message tells you how many rows and columns were in the table. This is
+useful information, because it can tell you immediately if you made a
+mistake in the table or left out a row or column. |\tableinfotrue| is
+the default, but you can turn off these messages by saying
+|\tableinfofalse|. In any case, you will be warned if a row has a
+different number of columns from the previous one.
+\medskip
+
+ The tables we have demonstrated so far all contain numbers, but
+sometimes it is desirable to have an entry in a table which is a
+paragraph of text. For that purpose, you can use
+|\para{|\meta{text}|}|. The width of the paragraph is determined by
+the dimension |\parasize|, which defaults to 4 inches.
+\medskip
+
+\table{tablemac;a}
+\caption{Basic table macros for use with {\tt\bs ruledtable}.}
+\intablelist{Basic macros for {\tt\bs ruledtable}}
+\tablewidth=\hsize
+\LeftJustifyTables
+\ruledtable
+\sl Macro name\relax
+ | \sl Description \relax \crthick
+\tt\bs ruledtable\relax
+ | \para{Starts a ruled table.}\cr
+\tt\bs endruledtable\relax
+ | \para{Ends the ruled table.}\cr
+\tt\bs cr\relax
+ | \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
+\vtop{\noindent\hsize=1.6in\normalbaselines
+\tt\bs crthick \hfil\break \rm or \tt\bs CR\hfil }\relax
+ | \para{Similar to {\tt\bs cr}, but the rows will
+ be separated with a thick horizontal rule.}\cr
+\vtop{\noindent\hsize=1.6in\normalbaselines
+\tt\bs crnorule \hfil\break \rm or \tt\bs nr\hfil }\relax
+ | \para{Similar to {\tt\bs cr}, but the rows will
+ not be separated by a rule.}\cr
+\vtop{\noindent\hsize=1.6in\normalbaselines
+\tt\char124\quad \rm (vertical bar)\hfil\break
+or \tt\bs vb\hfil} \relax
+ | \para{Separates one column from the next, and
+ puts a vertical rule between them.} \cr
+\tt\&\ \rm or\tt\ \bs tab \relax
+ | \para{Same as {\tt\char124}, but does not put
+ in the vertical rule between the columns.}\cr
+\tt\bs\char124 \relax
+ | \para{Same as {\tt\char124}, but puts in a
+ thick vertical rule.}
+\endruledtable
+\line{\hfil {\sl Continued...}}
+\endtable
+
+\fulltable{tablemac;b}
+\caption{Additional macros for use with {\tt\bs ruledtable}.}
+\intablelist{Additional macros for {\tt\bs ruledtable}}
+\tablewidth=\hsize
+\LeftJustifyTables
+\line{{\sl Continued...}\hfil}
+\smallskip
+\ruledtable
+\sl Macro name\relax
+ | \sl Description \relax \crthick
+\tt\bs multispan\lb{\it n}\rb\relax
+ | \para{Makes the next entry span the next $n$
+ columns, where $n$ is an integer, $n>0$.
+ See other notes on {\tt\bs multispan} below.} \cr
+\tt\bs omit \relax
+ | \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
+\tt\bs para\lb{\it text}\rb \relax
+ | \para{Formats {\it text} into a neat little
+ paragraph like this one. The width of the
+ paragraph produced is determined by the dimension
+ {\tt\bs parasize}. The default is 4 inches. } \cr
+\tt\bs parasize=\meta{dimen} \relax
+ | \para{Sets the width of paragraphs for the {\tt\bs para}
+ macro.} \cr
+\tt\bs TableItem\lb\#\rb\relax
+ | \para{Used in the standard template, this
+ macro centers its argument in the column. The
+ user can redefine it for special effects.} \cr
+\tt\bs tablespace
+ | \para{The spacing around each item for {\tt\bs TableItem}.}\cr
+\vtop{\noindent\hsize=1.4in\normalbaselines
+\tt\bs LooseTables \hfil\break
+\tt\bs TightTables\hfil}\relax
+ | \para{Set {\tt\bs tablespace} to {\tt\bs quad} and {\tt\bs\ }
+ respectively.\hfill\break\ }\cr
+\vtop{\noindent\hsize=1.6in\normalbaselines
+\tt\bs TrailingSpaces \hfil\break
+\tt\bs NoTrailingSpaces \hfil}\relax
+ | \para{Use trailing spaces and glue items in table entries
+ (default) or ignore them. See text.}\cr
+\tt\bs bigitem\lb\#\rb\relax
+ | \para{Use this for something that would normally
+ not fit in one line of a table to make the spacing
+ between rows large enough for this item.} \cr
+\tt\bs vctr\lb\#\rb\relax
+ | \para{Centers the item {\it vertically} so that
+ it can appear between two rows.}\cr
+\tt\bs centeredtables\relax
+ | \para{Turns table centering on. Each table
+ will be centered left-to-right on the page.
+ This is the default.} \cr
+\tt\bs noncenteredtables\relax
+ | \para{Turns table centering off. Each table
+ is returned as an {\tt\bs hbox}, and it is up
+ to the user to place it as desired.} \cr
+\vtop{\noindent\hsize=1.6in\normalbaselines
+\tt\bs tableinfotrue \hfil\break
+\tt\bs tableinfofalse\hfil}\relax
+ | \para{Turns on or off the diagnostic message telling
+ you how many rows and columns were found in the
+ table. }\cr
+\tt\bs thicksize=\meta{dimen} \relax
+ | \para{This dimension specifies the thickness
+ of the thick rules in the table. The default
+ size is 1.5 points.} \cr
+\tt\bs thinsize=\meta{dimen} \relax
+ | \para{This dimension specifies the thickness
+ of thin rules in the table. The default
+ size is 0.8 points.} \cr
+\tt\bs tablewidth=\meta{dimen} \relax
+ | \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.}
+\endruledtable
+\vss
+\endtable
+
+Tables \use{Tb.tablemac;a} and \use{Tb.tablemac;b} summarize the
+most important commands for making ruled tables.
+\medskip
+
+ Finally we can discuss how you can change how each column of
+a table is constructed. The macros which build the table take
+each entry and pass it to a macro called |\TableItem|. The
+default definition of |\TableItem| is:
+\TeXexample
+\let\TableItem=\@TableItem % default is centered
+\def\@TableItem#1{% % centers item in ruled table
+ \hfil\tablespace % left glue
+ #1\killspace % item, no space after
+ \tablespace\hfil % right glue
+ }%
+|endTeXexample
+The |\hfil| glue on both sides of the argument causes the item to be
+centered in the column, while |\tablespace| (which defaults to |\quad|)
+insures that there will be at least some amount of space between the
+item and the vertical rules on each side. Because of the way that
+\TeX\ handles macro arguments, if you type a table with spaces between
+the text and the next column separator, an extra |\space| will be
+inserted into the table. If you first say |\NoTrailingSpaces|, then
+|\killspace| in the above macro is defined to remove any trailing glue
+items. |\hfill| is redefined by the table macros so that if it is the
+last token in an entry, then that entry is properly left justified,
+but to insert any other trailing glue, you must say
+\example
+\meta{text}\meta{glue}\null
+\endexample
+\noindent
+The default is |\TrailingSpaces|, which does incorporate any trailing
+spaces into the table but which also treats any trailing glue items
+normally. You may wish to change this default in your |TXSpatch.tex|
+file.
+
+ You can change the definition of |\TableItem| to suit your own
+purpose. The simplest modification is to omit the |\hfil| on the left
+or right so that each entry is right or left justified. This is so
+commonly used that saying |\RightJustifyTables| or
+|\LeftJustifyTables| makes the appropriate change for you. Saying
+|\NoJustifyTables| restores |\TableItem| to its original centering
+function.
+
+ Since |\TableItem| is used to create every column of the table, you
+cannot use it to modify a single column. To justify just one column
+you can simply put |\hfill| to the left or right of each item in the
+column, since |\hfill| is infinitely more stretchy than |\hfil|. (The
+behavior of glue items other than |\hfill| depends on whether
+|\NoTrailingSpaces| has been set.) With a little more work it is
+possible to design special or unusual tables by redefining the
+``preamble'' of the table. This is possible because |\ruledtable|
+uses |\halign| with a preamble called |\TablePreamble|. The default
+definition of |\TablePreable| is:
+\TeXexample
+\def\TablePreamble{% % \ruledtable preamble
+ \TableItem{####}% % the first item
+ \plaintab\plaintab % && means repeat this
+ \TableItem{####}% % the subsequent items
+ \plaincr}% % end of preamble
+|endTeXexample
+\noindent
+The syntax for |\TablePreamble| is like an |\halign| preamble in Plain
+\TeX\, but with |&| replaced by |\plaintab|, |\cr| replaced by
+|\plaincr|, and |#| replaced by |####|. If you have read this far and
+want to try changing |\TablePreable| then you should read the source
+code and the comments that go with it in the file |TXSruled.tex.|
+
+As a final note we point out that it is also possible for you to create
+your own column separators with the macro |\nextcolumn|. This macro
+takes a single argument which is used to separate one column of the
+table from another. Thus for example, the |\dbl| macro for creating a
+double vertical rule between columns is defined as:
+\TeXexample
+\def\dbl{%
+ \nextcolumn{\vrule width\thinsize
+ \hskip\thinsize\vrule width\thinsize}}
+|endTeXexample
+
+%>>> EOF TXSruled.doc <<<
+
+
diff --git a/macros/plain/contrib/lextex/txsruled.tex b/macros/plain/contrib/lextex/txsruled.tex
new file mode 100644
index 0000000000..69e33bd1db
--- /dev/null
+++ b/macros/plain/contrib/lextex/txsruled.tex
@@ -0,0 +1,409 @@
+% file: TXSruled.tex TeXsis version 2.14
+% $Revision: 1.3 $ : $Date: 91/06/02 02:22:54 $ : $Author: myers $
+%======================================================================*
+% RULED TABLES. E. Myers and F.E. Paige
+%
+% The following macros will typeset tables with vertical and
+% horizontal rules. The syntax is similar to Ray Cowan's TABLES.TEX,
+% but the macros have been completely rewritten. Vertical and horizontal
+% rules are drawn by macros using vertical spacing controlled by struts.
+% Usage:
+% \ruledtable
+% <item> <tab> ... <item> <cr>
+% ...
+% <item> <tab> ... <item> \endruledtable
+% where <item> is an element of the table (every row must have exactly
+% the same number of items, although some may be blank), <tab> is any
+% one of
+% & for no vertical rule
+% | [or \vb] for vertical rule
+% \| [or \Vb] for thick vertical rule
+% \dbl for double vertical rule
+% and <cr> is any one of
+% \nr for no horizontal rule
+% \cr for horizontal rule
+% \CR [or \crthick] for thick horizontal rule
+% The last <cr> must be omitted in favour of the \endruledtable
+%
+% For horizontal rules across only some columns use
+% ... \nr
+% \crule | \cskip & \Crule ... \crpart
+% where \crpart is a special \cr for the partial rule line and
+% \cskip no rule for column
+% \crule horizontal rule for column
+% \Crule thick horizontal rule for column
+% The number of columns must be identical to the other rows.
+%
+% To change the appearance of the table, modify \TableItem.
+% Several modifications are built in:
+% \LeftJustifyTables left justify each column
+% \RightJustifyTables right justify each item
+% \NoJustifyTables center each item (default)
+% \tablespace horizontal spacing around each item
+% (default is \quad)
+% \TightTables use \ horizontal spacing
+% \LooseTables use \quad horizontal spacing (default)
+%
+% Use \bigitem to expand the vertical strut for high or deep items.
+%
+% These macros have been reorganized and substantially revised from
+% version 2.13. The following functional changes have been made:
+% (1) The @ signs have been removed from the names of the macros
+% used to save the Plain \cr, \span, and & so that they can be used to
+% modify the preamble. See above.
+% (2) Macros for partial horizontal rules have been added.
+% (3) \tabskip glue has been added so that \tablewidth works
+% correctly -- the table stretches uniformly over all columns.
+% (4) \linecount has been moved to the \cr macros. It produces a
+% warning if the number of columns is different from that in the
+% previous row.
+% (5) Trailing spaces in the table items are added to the output.
+% A macro \NoTrailingSpaces inserts an \unskip after each item to remove
+% them. But this also removes trailing skips unless they are followed by
+% an empty \hbox or something similar. This is done automatically for
+% an \hfill (frequently used to left justify an item).
+% The default is \TrailingSpaces, but you may wish to insert
+% \NoTrailingSpaces in your TXSsite.tex file.
+% (6) \para uses \normalbaselines rather than specific pt values
+% for the interline spacing and the final strut.
+%
+% (C) copyright 1990, 1991 by Eric Myers and Frank E. Paige
+%======================================================================*
+% Counters and such:
+\catcode`@=11 % @ is a letter here
+\catcode`\|=12 % make sure | is not active
+\catcode`\&=4 % and that & is alignment tab
+
+\newcount\ncols \ncols=\z@ % number of columns in table
+\newcount\nrows \nrows=\z@ % number of rows in table
+\newcount\curcol \curcol=\z@ % current column counter
+\let\currow=\nrows % current row counter
+
+\newdimen\thinsize \thinsize=0.6pt % thin rule width
+\newdimen\thicksize \thicksize=1.5pt % thick rule width
+\newdimen\tablewidth \tablewidth=-\maxdimen % start ``turned off''
+\newdimen\parasize \parasize=4in % paragraph size in tables
+
+\newif\iftableinfo \tableinfotrue % report rows and columns? Yes
+\newif\ifcentertables \centertablestrue % center tables? Yes
+\def\centeredtables{\centertablestrue}%
+\def\noncenteredtables{\centertablesfalse}%
+\def\nocenteredtables{\centertablesfalse}% % synonym !
+
+\let\plaincr=\cr % save real \cr
+\let\plainspan=\span % save real \span
+\let\plaintab=& % save real alignment tab &
+\def\ampersand{\char`\&}% % to print `&' in text
+\let\lparen=( % save left paren
+\let\NX=\noexpand % shorthand for \noexpand is \NX
+
+%---------------------------------------*
+% Main macros:
+% \ruledtable <table stuff> \endruledtable turns on the ruled
+% table definitions and makes the table with \halign. It handles all
+% the control stuff; the real work is done by \@RuledTable.
+
+\def\ruledtable{\relax % make ruled table
+ \@BeginRuledTable % initialize table
+ \@RuledTable}% % now process table body
+
+% \@BeginRuledTable does all the work of setting things up before
+% we read in the body of the table
+
+\def\@BeginRuledTable{% % initialize table
+ \ncols=0\nrows=0 % reset row and column count
+ \begingroup % keep the following local
+ \offinterlineskip % so vrules touch
+ \def~{\phantom{0}}% % ~ is phantom digit
+ \def\span{\plainspan\omit\relax\colcount\plainspan}% \span USER columns
+ \let\cr=\crrule % \cr gives a \tablerule
+ \let\CR=\crthick % \CR gives a \thickrule
+ \let\nr=\crnorule % \nr give no rule
+ \let\|=\Vb % thick vrule between columns
+ \def\hfill{\hskip0pt plus1fill\hbox{}}% % so it is not removed
+%
+% support old \tablestrut in place of \tstrut if it exists
+%
+ \ifx\tablestrut\undefined\relax % if not defined, no problem
+ \else\let\tstrut=\tablestrut\fi % use \tablestrut
+%
+ \catcode`\|=13 \catcode`\&=13\relax % make | and & active
+ \TableActive % | and & get active \def`s
+ \curcol=1 % reset column count
+%
+% define \Halign to do an \halign with or without a width
+%
+ \ifdim\tablewidth>-\maxdimen\relax %
+ \edef\@Halign{\NX\halign to \NX\tablewidth\NX\bgroup\TablePreamble}%
+ \tabskip=0pt plus 1fil % let things stretch
+ \else %
+ \edef\@Halign{\NX\halign\NX\bgroup\TablePreamble}%
+ \tabskip=0pt % no stretch between columns
+ \fi %
+%
+% center text if needed
+%
+ \ifcentertables % should table be centered?
+ \ifhmode\vskip 0pt\fi % yes: force vertical mode
+ \line\bgroup\hss % center across page
+ \else\hbox\bgroup % else: just put in \hbox
+ \fi}% % end of \@BeginRuledTable
+
+
+% \@RuledTable builds the table with \@Halign and getting the
+% table body text as its argument.
+
+\long\def\@RuledTable#1\endruledtable{% % ruled table alignment
+ \vrule width\thicksize % thick rule on side
+ \vbox{\@Halign % then do \halign
+ \thickrule % thick rule on top
+ #1\killspace % body of table
+ \tstrut % vertical strut for last line
+ \linecount % count this line
+ \plaincr\thickrule % \cr, thick rule on bottom
+ \egroup}% % end of \halign and \vbox
+ \vrule width\thicksize % thick rule on side, end \hbox
+ \ifcentertables\hss\fi\egroup % finish table centering
+ \endgroup % end group from \ruledtable
+ \global\tablewidth=-\maxdimen % and reset width
+ \iftableinfo % report rows and columns
+ \immediate\write16{[Nrows=\the\nrows, Ncols=\the\ncols]}%
+ \fi}% % end of \@RuledTable
+
+%---------------------------------------*
+% Preamble and item macros:
+% \TablePreamble is the preamble for the \halign in \ruledtable.
+% To change how each item is processed change \TableItem.
+% To make a more complicated table you can change \TablePreamble,
+% but if you do so use the following substitutions in a standard \halign
+% preamble:
+% for & use \plaintab
+% for \cr use \plaincr
+% for # use ##
+% for ## use ####
+
+\def\TablePreamble{% % \ruledtable preamble
+ \TableItem{####}% % the first item
+ \plaintab\plaintab % && means repeat this
+ \TableItem{####}% % the subsequent items
+ \plaincr}% % end of preamble
+
+
+% \TableItem contains glue or spacing around the item
+
+\def\@TableItem#1{% % centers item in ruled table
+ \hfil\tablespace % left glue
+ #1\killspace% % item
+ \tablespace\hfil % right glue
+ }%
+
+\def\@tableright#1{% % right justifies item in ruled table
+ \hfil\tablespace\relax % left glue
+ #1\killspace% % item
+ \tablespace\relax}% % right glue
+
+\def\@tableleft#1{% % left justifies item in ruled table
+ \tablespace\relax % left glue
+ #1\killspace% % item
+ \tablespace\hfil}% % right glue
+
+\let\TableItem=\@TableItem % default is centered
+
+\def\RightJustifyTables{\let\TableItem=\@tableright}% % to right justify
+\def\LeftJustifyTables{\let\TableItem=\@tableleft}% % to left justify
+\def\NoJustifyTables{\let\TableItem=\@TableItem}% % to center
+
+
+% \TightTables makes the spacing of a table as tight as possible.
+% \LooseTables, the default, gives more pleasing spacing.
+
+\def\LooseTables{\let\tablespace=\quad}% % table spacing is \quad
+\def\TightTables{\let\tablespace=\space}% % table spacing is space
+\LooseTables % default is \quad
+
+
+% \TrailingSpaces, the default, allows trailing spaces and glue
+% to change the appearance of a table. \NoTrailingSpaces removes all
+% trailing spaces and glue before inserting the table glue.
+
+\def\TrailingSpaces{\let\killspace=\relax} % do not kill trailing space
+\def\NoTrailingSpaces{\let\killspace=\unskip} % kill trailing space
+\TrailingSpaces % default
+
+%---------------------------------------*
+% Table Height and Width:
+%
+% Normally tables are set to their natural width. If \tablewidth
+% has been set then we set the table to that width instead,
+% but only for the next table. Then \tablewidth is turned off
+
+% \setRuledStrut sets up the vertical strut \tstrut with
+% the appropriate dimensions to hold up one line of a ruled table.
+
+\def\setRuledStrut{% sets interlines spacing for ruled tables
+ \dimen@=\baselineskip % \dimen@ = extra space
+ \advance\dimen@ by-\normalbaselineskip % between lines
+ \ifdim\dimen@<.5ex \dimen@=.5ex\fi % minimum space
+ \setbox0=\hbox{\lparen}% % get character size
+ \dimen1=\dimen@ \advance\dimen1 by \ht0 % space above line
+ \dimen2=\dimen@ \advance\dimen2 by \dp0 % space below line
+ \def\tstrut{\vrule height\dimen1 depth\dimen2 width\z@}%
+ }%
+
+\def\tstrut{\vrule height 3.1ex depth 1.2ex width 0pt}% default
+
+
+% \tstrut does not produce the correct spacing if the entry in
+% the table is too high. The following constructs a strut higher than its
+% argument and then prints the argument. The minimum space value should
+% be the same as in \setRuledStrut.
+
+\def\bigitem#1{% % larger table entry
+ \dimen@=\baselineskip % \dimen@ = extra space
+ \advance\dimen@ by-\normalbaselineskip % between lines
+ \ifdim\dimen@<.5ex \dimen@=.5ex\fi % minimum space
+ \setbox0=\hbox{#1}% % get argument size
+ \dimen1=\dimen@ \advance\dimen1 by \ht0 % space above line
+ \dimen2=\dimen@ \advance\dimen2 by \dp0 % space below line
+ \vrule height\dimen1 depth\dimen2 width\z@ % make strut to size
+ \copy0}% % print argument
+
+
+% \vctr{stuff} centers the stuff vertically, so that it can
+% appear between two ROWS.
+
+\def\vctr#1{\hfil\vbox to 0pt{\vss\hbox{#1}\vss}\hfil}%
+
+%---------------------------------------*
+% Vertical rules:
+% \tab, \vb and \Vb are used in a table to separate columns with no
+% rule, a thin rule, or a thick rule, respectively. \nextcolumn{<rule>} skips
+% to the next column and puts the <rule> between columns. Use this to build
+% your own separators.
+
+\def\nextcolumn#1{% % move to next col.
+ \plaintab\omit#1\relax\colcount % tab, insert #1, count
+ \plaintab}% % tab to next user col.
+
+\def\tab{% % no rule between columns
+ \nextcolumn{\relax}}% % count column
+
+\let\novb=\tab % synonym for \tab
+
+\def\vb{% % thin rule between columns
+ \nextcolumn{\vrule width\thinsize}}% % count and rule
+
+\def\Vb{% % THICK rule between columns
+ \nextcolumn{\vrule width\thicksize}}% % count and thick rule
+
+\def\dbl{% % double rule between columns
+ \nextcolumn{\vrule width\thinsize % count and rule
+ \hskip\thinsize\vrule width\thinsize}}% % and skip and rule
+
+% \TableActive makes | the same as \vb and & the same as \tab so
+% these single characters can be used between columns. Here we have to
+% make & and | active so we get the active version of the characters,
+% hence the temporary change of \catcode.
+
+{\catcode`\|=13 \let|0
+ \catcode`\&=13 \let&0
+ \gdef\TableActive{\let|=\vb \let&=\tab}%
+}% end \catcode`s
+
+%---------------------------------------*
+% Horizontal rules:
+% These replacements for \cr put a wide \vrule at the end of the
+% line and maybe put a rule under the line, then begin the next line
+% with the wide \vrule from the preamble.
+
+
+\def\crrule{\killspace % \cr plus rule
+ \tstrut % strut for spacing
+ \linecount % count this line
+ \plaincr\tablerule % \cr, regular rule below line
+ }%
+
+\def\crthick{\killspace % \cr plus thick rule
+ \tstrut % strut for vertical spacing
+ \linecount % count this line
+ \plaincr\thickrule % \cr, rule, begin next line
+ }%
+
+\def\crnorule{\killspace % \cr plus no rule
+ \tstrut % strut for spacing
+ \linecount % count this line
+ \plaincr % \cr, norule, begin next line
+ }%
+
+\def\crpart{\killspace % end partial rule line
+ \linecount % count this line
+ \plaincr} % and end it
+
+
+% These rules go across the table.
+
+\def\tablerule{\noalign{\hrule height\thinsize depth 0pt}}%
+\def\thickrule{\noalign{\hrule height\thicksize depth 0pt}}%
+
+
+% Rules for individual columns. You must use \cskip in columns
+% with no rules to \omit the \TablePreamble.
+
+\def\cskip{\omit\relax}%
+\def\crule{\omit\leaders\hrule height\thinsize depth0pt\hfill}%
+\def\Crule{\omit\leaders\hrule height\thicksize depth0pt\hfill}%
+
+%---------------------------------------*
+% Counting macros:
+% These macros count rows and columns of the table. After the
+% first line has been processed \the\ncols is the total number of
+% columns in the table, which may be useful. During processing,
+% \the\curcol is the number of the current column, while \the\currow is
+% the number of the current row.
+
+
+\def\linecount{% % count and check row
+ \global\advance\nrows by1% % advance row counter
+ \ifnum\ncols>0% % if \ncols set
+ \ifnum\curcol=\ncols\relax\else % if new \ncols different
+ \immediate\write16% % then write message
+ {\NX\ruledtable warning: Ncols=\the\curcol\space for Nrow=\the\nrows}%
+ \fi\fi % end of tests
+ \global\ncols=\curcol % save columns in \ncols
+ \global\curcol=1} % reset counter
+
+\def\colcount{\relax %
+ \global\advance\curcol by 1\relax}% % advance column counter
+
+%---------------------------------------*
+% TEXT TABLES.
+% To put text in a table use \para{<text>}, with \parasize set
+% to the desired width of the text.
+
+\long\def\para#1{% % make a paragraph for tables
+ \vtop{\hsize=\parasize % width - set before \para called
+ \normalbaselines % set normal baseline skips
+ \noindent #1\relax % insert text
+ \vrule width 0pt depth 1.1ex}% % hold depth of box
+}%
+
+%---------------------------------------*
+% TABLES.TEX
+% For compatability with Cowan's TABLES.TEX we also allow the
+% syntax \begintable ... \endtable, which do the same thing.
+%
+
+\def\begintable{\relax % make ruled table
+ \@BeginRuledTable % initialize table
+ \@begintable}% % now process table body
+
+\long\def\@begintable#1\endtable{% % ruled table alignment
+ \@RuledTable#1\endruledtable}% % same as \ruledtable
+
+%---------------------------------------*
+% Turn off @ as letter before we exit
+
+\catcode`@=12 % @ is not a letter
+
+%>>> EOF TXSruled.tex <<<
+
diff --git a/macros/plain/contrib/literate/makeprog.web b/macros/plain/contrib/literate/makeprog.web
new file mode 100644
index 0000000000..ea477fe0f5
--- /dev/null
+++ b/macros/plain/contrib/literate/makeprog.web
@@ -0,0 +1,1055 @@
+@ % sect. 2
+The program begins with a fairly normal header, made up of
+pieces that will mostly be filled in later. The input comes
+from files |doc_file| and |change_file|, the output goes to
+file |prog_file|. Messages from \MAKEPROG{} are written to
+|term_out|, which is supposed to be the terminal.
+@^system dependencies@>
+
+If it is necessary to abort the job because of a fatal
+error, the program calls the `|jump_out|' procedure, which
+goes to the label |end_of_MAKEPROG|.
+
+@d end_of_MAKEPROG = 9999 {go here to wrap it up}
+
+@p @t\4@>@<Compiler directives@>@/
+program MAKEPROG(@!doc_file,@!change_file,@!prog_file);
+label end_of_MAKEPROG; {go here to finish}
+const @<Constants in the outer block@>@;
+type @<Types in the outer block@>@;
+var @<Globals in the outer block@>@;
+@t\4@>@<Error handling procedures@>@;
+procedure initialize;
+ var @<Local variables for initialization@>@;
+ begin @<Set initial values@>
+ end;
+
+
+@ % sect. 3
+Some of this code is optional for use when debugging only;
+such material is enclosed between the delimiters \&{debug}
+and \&{gubed}.
+
+@d debug==@{ {change this to `$\\{debug}\equiv\null$' when debugging}
+@d gubed==@t@>@} {change this to `$\\{gubed}\equiv\null$' when debugging}
+@f debug==repeat
+@f gubed==until
+
+
+@ % sect. 4
+The \PASCAL\ compiler used to develop this system has
+``compiler directives'' that can appear in comments whose
+first character is a dollar sign. In production versions of
+\MAKEPROG{} these directives tell the compiler that it is
+safe to avoid range checks and to leave out the extra code
+it inserts for the \PASCAL\ debugger's benefit.
+@^system dependencies@>
+
+@<Compiler directives@>=
+@{@&@=$D-@> @} {no debug overhead}
+@!debug @{@&@=$D+@> @}@+ gubed @; {but turn everything on when debugging}
+
+
+@ % sect. 5
+Labels are given symbolic names by the following
+definitions. We insert the label `|exit|' just before the
+`\&{end}' of a procedure in which we have used the
+`|return|' statement defined below; the label `|restart|' is
+occasionally used at the very beginning of a procedure; and
+the label `|reswitch|' is occasionally used just prior to a
+\&{case} statement in which some cases change the conditions
+and we wish to branch to the newly applicable case. Loops
+that are set up with the \&{loop} construction defined below
+are commonly exited by going to `|done|' or to `|found|' or
+to `|not_found|', and they are sometimes repeated by going
+to `|continue|'.
+
+@d exit=10 {go here to leave a procedure}
+@d restart=20 {go here to start a procedure again}
+@d reswitch=21 {go here to start a case statement again}
+@d continue=22 {go here to resume a loop}
+@d done=30 {go here to exit a loop}
+@d found=31 {go here when you've found it}
+@d not_found=32 {go here when you've found something else}
+
+
+@ % sect. 6
+Here are some macros for common programming idioms.
+
+@d incr(#) == #:=#+1 {increase a variable by unity}
+@d decr(#) == #:=#-1 {decrease a variable by unity}
+@d loop == @+ while true do@+ {repeat over and over until a |goto| happens}
+@d do_nothing == {empty statement}
+@d return == goto exit {terminate a procedure call}
+@f return == nil
+@f loop == xclause
+
+
+@ % sect. 7
+We assume that |case| statements may include a default case
+that applies if no matching label is found. Thus, we shall
+use constructions like
+@^system dependencies@>
+$$
+\vbox{\halign{#\hfil\cr
+|case x of|\cr
+ \quad 1: $\langle\,$code for $x=1\,\rangle$;\cr
+ \quad 3: $\langle\,$code for $x=3\,\rangle$;\cr
+ \quad |othercases| $\langle\,$code for |x<>1| and |x<>3|$\,\rangle$\cr
+|endcases|\cr
+}}
+$$
+since most \PASCAL\ compilers have plugged this hole in the
+language by incorporating some sort of default mechanism.
+For example, the compiler used to develop \.{WEB} and \TeX\
+allows `|others|:' as a default label, and other \PASCAL s
+allow syntaxes like `\&{else}' or `\&{otherwise}' or
+`\\{otherwise}:', etc. The definitions of |othercases| and
+|endcases| should be changed to agree with local
+conventions. (Of course, if no default mechanism is
+available, the |case| statements of this program must be
+extended by listing all remaining cases.)
+
+@d othercases == others: {default for cases not listed explicitly}
+@d endcases == @+end {follows the default case in an extended |case| statement}
+@f othercases == else
+@f endcases == end
+
+
+@ % sect. 8
+The following parameter is set big enough to be sufficient
+for most applications of \MAKEPROG{}.
+
+@<Constants...@>=
+@!buf_size=500; {maximum length of input line}
+
+
+@ % sect. 9
+A global variable called |history| will contain one of four values
+at the end of every run: |spotless| means that no unusual messages were
+printed; |harmless_message| means that a message of possible interest
+was printed but no serious errors were detected; |error_message| means that
+at least one error was found; |fatal_message| means that the program
+terminated abnormally. The value of |history| does not influence the
+behavior of the program; it is simply computed for the convenience
+of systems that might want to use such information.
+
+@d spotless=0 {|history| value for normal jobs}
+@d harmless_message=1 {|history| value when non-serious info was printed}
+@d error_message=2 {|history| value when an error was noted}
+@d fatal_message=3 {|history| value when we had to stop prematurely}
+@#
+@d mark_harmless==@t@>@+if history=spotless then history:=harmless_message
+@d mark_error==history:=error_message
+@d mark_fatal==history:=fatal_message
+
+@<Glob...@>=@!history:spotless..fatal_message; {how bad was this run?}
+
+@ % sect. 10
+@<Set init...@>=history:=spotless;
+
+
+
+
+
+@* The character set. % sect. 11
+
+\noindent One of the main goals in the design of \MAKEPROG{}
+has been to make it readily portable between a wide variety
+of computers. Yet \MAKEPROG{} by its very nature must use a
+greater variety of characters than most computer programs
+deal with, and character encoding is one of the areas in
+which existing machines differ most widely from each other.
+
+To resolve this problem, all input to \MAKEPROG{} is
+converted to an internal seven-bit code that is essentially
+standard \ASCII{}, the ``American Standard Code for
+Information Interchange.'' The conversion is done
+immediately when each character is read in. Conversely,
+characters are converted from \ASCII{} to the user's
+external representation just before they are output. Such
+an internal code is never relevant to users of \MAKEPROG{}.
+
+\noindent Here is a table of the standard visible \ASCII{} codes:
+$$\def\:{\char\count255\global\advance\count255 by 1}
+\count255='40
+\vbox{
+\hbox{\hbox to 40pt{\it\hfill0\/\hfill}%
+\hbox to 40pt{\it\hfill1\/\hfill}%
+\hbox to 40pt{\it\hfill2\/\hfill}%
+\hbox to 40pt{\it\hfill3\/\hfill}%
+\hbox to 40pt{\it\hfill4\/\hfill}%
+\hbox to 40pt{\it\hfill5\/\hfill}%
+\hbox to 40pt{\it\hfill6\/\hfill}%
+\hbox to 40pt{\it\hfill7\/\hfill}}
+\vskip 4pt
+\hrule
+\def\^{\vrule height 10.5pt depth 4.5pt}
+\halign{\hbox to 0pt{\hskip -24pt\O{#0}\hfill}&\^
+\hbox to 40pt{\tt\hfill#\hfill\^}&
+&\hbox to 40pt{\tt\hfill#\hfill\^}\cr
+04&\:&\:&\:&\:&\:&\:&\:&\:\cr\noalign{\hrule}
+05&\:&\:&\:&\:&\:&\:&\:&\:\cr\noalign{\hrule}
+06&\:&\:&\:&\:&\:&\:&\:&\:\cr\noalign{\hrule}
+07&\:&\:&\:&\:&\:&\:&\:&\:\cr\noalign{\hrule}
+10&\:&\:&\:&\:&\:&\:&\:&\:\cr\noalign{\hrule}
+11&\:&\:&\:&\:&\:&\:&\:&\:\cr\noalign{\hrule}
+12&\:&\:&\:&\:&\:&\:&\:&\:\cr\noalign{\hrule}
+13&\:&\:&\:&\:&\:&\:&\:&\:\cr\noalign{\hrule}
+14&\:&\:&\:&\:&\:&\:&\:&\:\cr\noalign{\hrule}
+15&\:&\:&\:&\:&\:&\:&\:&\:\cr\noalign{\hrule}
+16&\:&\:&\:&\:&\:&\:&\:&\:\cr\noalign{\hrule}
+17&\:&\:&\:&\:&\:&\:&\:\cr}
+\hrule width 280pt}$$
+(Actually, of course, code @"20 is an invisible blank
+space.) Code @"3E was once an upward arrow (\.{\char'13}),
+and code @"3F was once a left arrow (\.^^X), in olden times
+when the first draft of \ASCII{} code was prepared; but
+\MAKEPROG{} works with today's standard \ASCII{} in which
+those codes represent circumflex and underline as shown.
+
+@<Types...@>=
+@!ASCII_code=0..@"7F; {seven-bit numbers, a subrange of the integers}
+
+
+@ % sect. 12
+The original \PASCAL\ compiler was designed in the late 60s,
+when six-bit character sets were common, so it did not make
+provision for lowercase letters. Nowadays, of course, we
+need to deal with both capital and small letters in a
+convenient way, so \MAKEPROG{} assumes that it is being used
+with a \PASCAL\ whose character set contains at least the
+characters of standard \ASCII{} as listed above. Some
+\PASCAL\ compilers use the original name |char| for the data
+type associated with the characters in text files, while
+other \PASCAL s consider |char| to be a 64-element subrange
+of a larger data type that has some other name.
+
+In order to accommodate this difference, we shall use the
+name |text_char| to stand for the data type of the
+characters in the input and output files. We shall also
+assume that |text_char| consists of the elements
+|chr(first_text_char)| through |chr(last_text_char)|,
+inclusive. The following definitions should be adjusted if
+necessary.
+@^system dependencies@>
+
+@d text_char == char {the data type of characters in text files}
+@d first_text_char=0 {ordinal number of the smallest element of |text_char|}
+@d last_text_char=127 {ordinal number of the largest element of |text_char|}
+
+@<Types...@>=
+@!text_file=packed file of text_char;
+
+
+@ % sect. 13
+The \MAKEPROG{} processor convert between \ASCII{} code and
+the user's external character set by means of arrays |xord|
+and |xchr| that are analogous to \PASCAL's |ord| and |chr|
+functions.
+
+@<Globals...@>=
+@!xord: array [text_char] of ASCII_code;
+ {specifies conversion of input characters}
+@!xchr: array [ASCII_code] of text_char;
+ {specifies conversion of output characters}
+
+
+@ % sect. 14
+If we assume that every system using \.{WEB} is able to read
+and write the visible characters of standard \ASCII{}
+(although not necessarily using the \ASCII{} codes to
+represent them), the following assignment statements
+initialize most of the |xchr| array properly, without
+needing any system-dependent changes. For example, the
+statement \.{xchr["A"]:=\'A\'} that appears in the present
+\.{WEB} file might be encoded in, say, \hbox{\mc EBCDIC}
+code on the external medium on which it resides, but
+\.{TANGLE} will convert from this external code to \ASCII{}
+and back again. Therefore the assignment statement
+\.{XCHR[65]:=\'A\'} will appear in the corresponding
+\PASCAL\ file, and \PASCAL\ will compile this statement so
+that |xchr[65]| receives the character \.A in the external
+(|char|) code. Note that it would be quite incorrect to say
+\.{xchr["A"]:="A"}, because |"A"| is a constant of type
+|integer|, not |char|, and because we have $|"A"|=65$
+regardless of the external character set.
+
+@<Set init...@>=
+xchr[" "]:=' ';
+xchr["!"]:='!';
+xchr[""""]:='"';
+xchr["#"]:='#';
+xchr["$"]:='$';
+xchr["%"]:='%';
+xchr["&"]:='&';
+xchr["'"]:='''';@/
+xchr["("]:='(';
+xchr[")"]:=')';
+xchr["*"]:='*';
+xchr["+"]:='+';
+xchr[","]:=',';
+xchr["-"]:='-';
+xchr["."]:='.';
+xchr["/"]:='/';@/
+xchr["0"]:='0';
+xchr["1"]:='1';
+xchr["2"]:='2';
+xchr["3"]:='3';
+xchr["4"]:='4';
+xchr["5"]:='5';
+xchr["6"]:='6';
+xchr["7"]:='7';@/
+xchr["8"]:='8';
+xchr["9"]:='9';
+xchr[":"]:=':';
+xchr[";"]:=';';
+xchr["<"]:='<';
+xchr["="]:='=';
+xchr[">"]:='>';
+xchr["?"]:='?';@/
+xchr["@@"]:='@@';
+xchr["A"]:='A';
+xchr["B"]:='B';
+xchr["C"]:='C';
+xchr["D"]:='D';
+xchr["E"]:='E';
+xchr["F"]:='F';
+xchr["G"]:='G';@/
+xchr["H"]:='H';
+xchr["I"]:='I';
+xchr["J"]:='J';
+xchr["K"]:='K';
+xchr["L"]:='L';
+xchr["M"]:='M';
+xchr["N"]:='N';
+xchr["O"]:='O';@/
+xchr["P"]:='P';
+xchr["Q"]:='Q';
+xchr["R"]:='R';
+xchr["S"]:='S';
+xchr["T"]:='T';
+xchr["U"]:='U';
+xchr["V"]:='V';
+xchr["W"]:='W';@/
+xchr["X"]:='X';
+xchr["Y"]:='Y';
+xchr["Z"]:='Z';
+xchr["["]:='[';
+xchr["\"]:='\';
+xchr["]"]:=']';
+xchr["^"]:='^';
+xchr["_"]:='_';@/
+xchr["`"]:='`';
+xchr["a"]:='a';
+xchr["b"]:='b';
+xchr["c"]:='c';
+xchr["d"]:='d';
+xchr["e"]:='e';
+xchr["f"]:='f';
+xchr["g"]:='g';@/
+xchr["h"]:='h';
+xchr["i"]:='i';
+xchr["j"]:='j';
+xchr["k"]:='k';
+xchr["l"]:='l';
+xchr["m"]:='m';
+xchr["n"]:='n';
+xchr["o"]:='o';@/
+xchr["p"]:='p';
+xchr["q"]:='q';
+xchr["r"]:='r';
+xchr["s"]:='s';
+xchr["t"]:='t';
+xchr["u"]:='u';
+xchr["v"]:='v';
+xchr["w"]:='w';@/
+xchr["x"]:='x';
+xchr["y"]:='y';
+xchr["z"]:='z';
+xchr["{"]:='{';
+xchr["|"]:='|';
+xchr["}"]:='}';
+xchr["~"]:='~';@/
+xchr[0]:=' '; xchr[@"7F]:=' '; {these \ASCII{} codes are not used}
+
+
+@ % sect. 15
+Some of the nonprintable \ASCII{} codes have been given
+symbolic names in \MAKEPROG{} because they are used with a
+special meaning.
+
+@d tab_mark=@"09 {\ASCII{} code used as tab-skip}
+@d line_feed=@"0A {\ASCII{} code thrown away at end of line}
+@d form_feed=@"0C {\ASCII{} code used at end of page}
+@d carriage_return=@"0D {\ASCII{} code used at end of line}
+
+
+@ % sect. 16
+When we initialize the |xord| array and the remaining parts of |xchr|,
+it will be convenient to make use of an index variable, |i|.
+
+@<Local variables for init...@>=
+@!i:0..last_text_char;
+
+
+@ % sect. 17
+Here now is the system-dependent part of the character set.
+If \MAKEPROG{} is being implemented on a garden-variety
+\PASCAL\ for which only standard \ASCII{} codes will appear
+in the input and output files, you don't need to make any
+changes here.
+@^system dependencies@>
+
+Changes to the present module will make \MAKEPROG{} more
+friendly on computers that have an extended character set,
+so that one can type things like Umlaute. If you have an
+extended set of characters that are easily incorporated into
+text files, you can assign codes arbitrarily here, giving an
+|xchr| equivalent to whatever characters the users of
+\MAKEPROG{} are allowed to have in their input files,
+provided that unsuitable characters do not correspond to
+special codes like |carriage_return| that are listed above.
+
+@<Set init...@>=
+for i:=1 to " "-1 do xchr[i]:=' ';
+
+
+@ % sect. 18
+The following system-independent code makes the |xord| array
+contain a suitable inverse to the information in |xchr|.
+
+@<Set init...@>=
+for i:=first_text_char to last_text_char do xord[chr(i)]:=" ";
+for i:=1 to "~" do xord[xchr[i]]:=i;
+
+
+
+
+
+@* Basic Input and output.
+
+\noindent The input conventions of \MAKEPROG{} are identical
+to those of \.{WEB}. Therefore people who need to make
+modifications to both systems should be able to do so
+without too many headaches.
+
+
+@ % sect. 20
+Terminal output is done by writing on file |term_out|, which
+is assumed to consist of characters of type |text_char|:
+@^system dependencies@>
+
+@d print(#)==write(term_out,#) {`|print|' means write on the terminal}
+@d print_ln(#)==write_ln(term_out,#) {`|print|' and then start new line}
+@d new_line==write_ln(term_out) {start new line}
+@d print_nl(#)== {print information starting on a new line}
+ begin new_line; print(#);
+ end
+
+@<Globals...@>=
+@!term_out:text_file; {the terminal as an output file}
+
+
+@ % sect. 21
+Different systems have different ways of specifying that the
+output on a certain file will appear on the user's terminal.
+Here is one way to do this on the \PASCAL{} system that was
+used in \.{TANGLE}'s initial development.
+@^system dependencies@>
+
+@<Set init...@>=
+rewrite(term_out,'TTY:'); {send |term_out| output to the terminal}
+
+
+@ % sect. 22
+The |update_terminal| procedure is called when we want to
+make sure that everything we have output to the terminal so
+far has actually left the computer's internal buffers and
+been sent.
+@^system dependencies@>
+
+@d update_terminal == break(term_out) {empty the terminal output buffer}
+
+
+@ % sect. 23
+The main input comes from |doc_file|; this input may be
+overridden by changes in |change_file|. (If |change_file|
+is empty, there are no changes.)
+
+@<Globals...@>=
+@!doc_file:text_file; {primary input}
+@!change_file:text_file; {updates}
+
+
+@ % sect. 24
+The following code opens the input files. Since these files
+were listed in the program header, we assume that the
+\PASCAL\ runtime system has already checked that suitable
+file names have been given; therefore no additional error
+checking needs to be done.
+@^system dependencies@>
+
+@< Set init... @>=
+reset(doc_file); reset(change_file);
+
+
+@ % sect. 25
+The output goes to |prog_file|.
+
+@<Globals...@>=
+@!prog_file: text_file;
+
+
+@ % sect. 26
+The following code opens |prog_file|. Since this file is
+listed in the program header, we assume that the \PASCAL\
+runtime system has checked that a suitable external file
+name have been given.
+@^system dependencies@>
+
+@<Set init...@>=
+rewrite(prog_file);
+
+
+@ % sect. 27
+Input goes into an array called |buffer|.
+
+@<Globals...@>=
+@!buffer: array[0..buf_size] of ASCII_code;
+
+
+@ % sect. 28
+The |input_ln| procedure brings the next line of input from
+the specified file into the |buffer| array and returns the
+value |true|, unless the file has already been entirely
+read, in which case it returns |false|. The conventions of
+\.{WEB} are followed; i.e., |ASCII_code| numbers
+representing the next line of the file are input into
+|buffer[0]|, |buffer[1]|, \dots, |buffer[limit-1]|; trailing
+blanks are ignored; and the global variable |limit| is set
+to the length of the line. The value of |limit| must be
+strictly less than |buf_size|.
+@^system dependencies@>
+
+We assume that none of the |ASCII_code| values of
+|buffer[j]| for |0<=j<limit| is equal to 0, @"7F,
+|line_feed|, |form_feed|, or |carriage_return|.
+
+@p
+function input_ln(var f:text_file):boolean; {inputs a line or returns |false|}
+ var final_limit:0..buf_size; {|limit| without trailing blanks}
+ begin limit:=0; final_limit:=0;
+ if eof(f) then input_ln:=false
+ else begin
+ while not eoln(f) do
+ begin buffer[limit]:=xord[f^]; get(f);
+ incr(limit);
+ if (buffer[limit-1]<>" ") and (buffer[limit-1]<>tab_mark) then
+ final_limit:=limit;
+ if limit=buf_size then
+ begin while not eoln(f) do get(f);
+ decr(limit); {keep |buffer[buf_size]| empty}
+ print_nl('! Input line too long'); error; mark_error;
+@.Input line too long@>
+ end;
+ end;
+ read_ln(f); limit:=final_limit; input_ln:=true;
+ end;
+ end;
+
+
+
+
+
+@* Reporting errors to the user. % sect. 29
+
+\noindent Errors are reported to the user by saying
+$$
+ \hbox{`|err_print('! Error message')|'},
+$$
+followed by `|jump_out|' if no recovery from the error is
+provided. This will print the error message followed by an
+indication of where the error was spotted in the source
+file. Note that no period follows the error message, since
+the error routine will automatically supply a period.
+
+\noindent The actual error indications are provided by a
+procedure called |error|.
+
+@d err_print(#)==begin print_nl(#); error; mark_error; end
+
+@<Error handling...@>=
+procedure error; {prints '\..' and location of error message}
+ begin @< Print error location @>;
+ update_terminal;
+ end;
+
+
+@ % sect. 32
+The error locations can be indicated by using the global
+variables |line| and |changing|, which tell respectively the
+the current line number and whether or not the current line
+is from |change_file| or |doc_file|. This routine should be
+modified on systems whose standard text editor has special
+line-numbering conventions.
+@^system dependencies@>
+
+@< Print error location @>=
+begin
+if changing then print('. (change file ') @+ else print('. (');
+print_ln('l.', line:1, ')');
+print(' '); {this space separates the message from future output}
+end
+
+
+@ % sect. 34
+The |jump_out| procedure just cuts across all active
+procedure levels and jumps out of the program. This is the
+only non-local |goto| statement in \MAKEPROG{}. It is used
+when no recovery from a particular error has been provided.
+
+Some \PASCAL\ compilers do not implement non-local |goto| statements.
+@^system dependencies@>
+In such cases the code that appears at label
+|end_of_MAKEPROG| should be copied into the |jump_out|
+procedure, followed by a call to a system procedure that
+terminates the program.
+
+@d fatal_error(#)==begin print_nl(#); error; mark_fatal; jump_out;
+ end
+
+@<Error handling...@>=
+procedure jump_out;
+begin goto end_of_MAKEPROG;
+end;
+
+
+@ % sect. 35
+Sometimes the program's behavior is far different from what
+it should be, and \MAKEPROG{} prints an error message that
+is really for the \MAKEPROG{} maintenance person, not the
+user. In such cases the program says
+|confusion('indication of where we are')|.
+
+@d confusion(#)==fatal_error('! This can''t happen (',#,')')
+@.This can't happen@>
+
+
+
+
+
+@* The kernel.
+
+\noindent Let us now consider the routine |get_line| that
+takes care of merging |change_file| into |doc_file|. The
+|get_line| procedure also updates the line numbers for error
+messages.
+
+@<Globals...@>=
+@!line:integer; {the number of the current line in the current file}
+@!other_line:integer; {the number of the current line in the input file that
+ is not currently being read}
+@!temp_line:integer; {used when interchanging |line| with |other_line|}
+@!limit:0..buf_size; {the last character position occupied in the buffer}
+@!input_has_ended: boolean; {if |true|, there is no more input}
+@!changing: boolean; {if |true|, the current line is from |change_file|}
+
+
+@ % sect. 128
+As we change |changing| from |true| to |false| and back
+again, we must remember to swap the values of |line| and
+|other_line| so that the |err_print| routine will be sure to
+report the correct line number.
+
+@d change_changing==
+ begin changing := not changing;@/
+ temp_line:=other_line; other_line:=line; line:=temp_line;
+ end {$|line| \BA |other_line|$}
+
+
+@ % sect. 129
+When |changing| is |false|, the next line of |change_file|
+is kept in |change_buffer[0..change_limit-1]|, for purposes
+of comparison with the next line of |doc_file|. After the
+change file has been completely input, we set
+|change_limit:=0|, so that no further matches will be made.
+
+@<Globals...@>=
+@!change_buffer:array[0..buf_size] of ASCII_code;
+@!change_limit:0..buf_size; {the last position occupied in |change_buffer|}
+
+
+@ % sect. 130
+Here's a simple function that checks if the two buffers are
+different.
+
+@p function lines_dont_match:boolean;
+label exit;
+var k:0..buf_size; {index into the buffers}
+begin lines_dont_match:=true;
+if change_limit<>limit then return;
+if limit>0 then
+ for k:=0 to limit-1 do if change_buffer[k]<>buffer[k] then return;
+lines_dont_match:=false;
+exit: end;
+
+
+@ % sect. 131
+Procedure |prime_the_change_buffer| sets |change_buffer| in
+preparation for the next matching operation. Since blank
+lines in the change file are not used for matching, we have
+|(change_limit=0)and not changing| if and only if the change
+file is exhausted. This procedure is called only when
+|changing| is true; hence error messages will be reported
+correctly.
+
+@p procedure prime_the_change_buffer;
+label continue, done, exit;
+var k:0..buf_size; {index into the buffers}
+begin change_limit:=0; {this value will be used if the change file ends}
+@<Skip over comment lines in the change file; |return| if end of file@>;
+@<Skip to the next nonblank line; |return| if end of file@>;
+@<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>;
+exit: end;
+
+
+@ % sect. 132
+While looking for a line that begins with \.{@@x} in the
+change file, we allow lines that begin with \.{@@}, as long
+as they don't begin with \.{@@y} or \.{@@z} (which would
+probably indicate that the change file is fouled up).
+
+@<Skip over comment lines in the change file...@>=
+loop@+ begin incr(line);
+ if not input_ln(change_file) then return;
+ if limit<2 then goto continue;
+ if buffer[0]<>"@@" then goto continue;
+ if (buffer[1]>="X")and(buffer[1]<="Z") then
+ buffer[1]:=buffer[1]+"z"-"Z"; {lowercasify}
+ if buffer[1]="x" then goto done;
+ if (buffer[1]="y")or(buffer[1]="z") then
+ err_print('! Where is the matching @@x?');
+@.Where is the match...@>
+continue: end;
+done:
+
+
+@ % sect. 133
+Here we are looking at lines following the \.{@@x}.
+
+@<Skip to the next nonblank line...@>=
+repeat incr(line);
+ if not input_ln(change_file) then
+ begin err_print('! Change file ended after @@x');
+@.Change file ended...@>
+ return;
+ end;
+until limit>0;
+
+
+@ % sect. 134
+@<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>=
+begin change_limit:=limit;
+for k:=0 to limit-1 do change_buffer[k]:=buffer[k];
+end
+
+
+@ % sect. 135
+The following procedure is used to see if the next change
+entry should go into effect; it is called only when
+|changing| is false. The idea is to test whether or not the
+current contents of |buffer| matches the current contents of
+|change_buffer|. If not, there's nothing more to do; but if
+so, a change is called for: All of the text down to the
+\.{@@y} is supposed to match. An error message is issued if
+any discrepancy is found. Then the procedure prepares to
+read the next line from |change_file|.
+
+@p
+procedure check_change; {switches to |change_file| if the buffers match}
+label exit;
+var n:integer; {the number of discrepancies found}
+@!k:0..buf_size; {index into the buffers}
+begin if lines_dont_match then return;
+n:=0;
+loop@+ begin change_changing; {now it's |true|}
+ incr(line);
+ if not input_ln(change_file) then
+ begin err_print('! Change file ended before @@y');@/
+@.Change file ended...@>
+ change_limit:=0; change_changing; {|false| again}
+ return;
+ end;
+ @<If the current line starts with \.{@@y},
+ report any discrepancies and |return|@>;
+ @<Move |buffer| and |limit|...@>;
+ change_changing; {now it's |false|}
+ incr(line);
+ if not input_ln(doc_file) then
+ begin err_print('! CWEB file ended during a change');
+@.CWEB file ended...@>
+ input_has_ended:=true; return;
+ end;
+ if lines_dont_match then incr(n);
+ end;
+exit: end;
+
+
+@ % sect. 136
+@<If the current line starts with \.{@@y}...@>=
+if limit>1 then if buffer[0]="@@" then
+ begin if (buffer[1]>="X")and(buffer[1]<="Z") then
+ buffer[1]:=buffer[1]+"z"-"Z"; {lowercasify}
+ if (buffer[1]="x")or(buffer[1]="z") then
+ err_print('! Where is the matching @@y?')
+@.Where is the match...@>
+ else if buffer[1]="y" then
+ begin if n>0 then
+ err_print('! Hmm... ',n:1,' of the preceding lines failed to match');
+@.Hmm... n of the preceding...@>
+ return;
+ end;
+ end
+
+
+@ % sect. 137
+@< Initialize the input system @>=
+begin line:=0; other_line:=0;@/
+changing:=true; prime_the_change_buffer; change_changing;@/
+limit:=0; buffer[0]:=" "; input_has_ended:=false;
+end
+
+
+@ % sect. 138
+The |get_line| procedure puts the next line of merged input
+into the buffer and updates the other variables
+appropriately. A space is placed at the right end of the
+line. We output points to show the user the progress in
+reading.
+
+@p
+procedure get_line; {inputs the next line}
+ label restart;
+ begin
+restart: if changing then
+ @<Read from |change_file| and maybe turn off |changing|@>;
+ if not changing then
+ begin @<Read from |doc_file| and maybe turn on |changing|@>;
+ if changing then goto restart;
+ end;
+ buffer[limit]:=" ";
+ if (line mod 500) = 0 then
+ begin print(line:1); update_terminal;
+ end
+ else if (line mod 100) = 0 then
+ begin print('.'); update_terminal;
+ end
+ @!debug else begin print('.'); update_terminal; @+ end @+ gubed @;
+ ;@/
+ end;
+
+
+@ % sect. 139
+@<Read from |doc_file|...@>=
+begin incr(line);
+if not input_ln(doc_file) then input_has_ended:=true
+else if change_limit>0 then check_change;
+end
+
+
+@ % sect. 140
+@<Read from |change_file|...@>=
+begin incr(line);
+if not input_ln(change_file) then
+ begin err_print('! Change file ended without @@z');
+@.Change file ended...@>
+ buffer[0]:="@@"; buffer[1]:="z"; limit:=2;
+ end;
+if limit>1 then {check if the change has ended}
+ if buffer[0]="@@" then
+ begin if (buffer[1]>="X")and(buffer[1]<="Z") then
+ buffer[1]:=buffer[1]+"z"-"Z"; {lowercasify}
+ if (buffer[1]="x")or(buffer[1]="y") then
+ err_print('! Where is the matching @@z?')
+@.Where is the match...@>
+ else if buffer[1]="z" then
+ begin prime_the_change_buffer; change_changing;
+ end;
+ end;
+end
+
+
+@ % sect. 141
+At the end of the program, we will tell the user if the
+change file had a line that didn't match any relevant line
+in |doc_file|.
+
+@<Check that all changes have been read@>=
+begin
+if change_limit<>0 then {|changing| is false}
+ begin
+ for limit:=0 to change_limit do buffer[limit] := change_buffer[limit];
+ limit := change_limit; changing := true; line := other_line;
+ err_print('! Change file entry did not match');
+@.Change file entry did not match@>
+ end;
+end
+
+
+@
+The |put_line| procedure outputs the next line from
+|buffer| to |prog_file|. Perhaps we should give here a
+progress report, too (with asterisks?)
+
+@p
+procedure put_line;
+ var i: 0..buf_size;
+ begin
+ for i:=0 to limit-1 do write(prog_file, xchr[buffer[i]]);
+ write_ln(prog_file);
+ end;
+
+
+
+
+
+@* The main program. % sect. 190
+
+\noindent We have defined some procedures, and it is time to
+use them---here is where \MAKEPROG{} starts, and where it
+ends.
+@^system dependencies@>
+
+@p
+ begin initialize;
+ print_ln(banner); {print a ``banner line''}
+ print_ln(copy_right); print_ln(rights_res); {print a copyright notice}
+ @< Initialize the input system @>;
+ debug print_ln('begin copy');
+ gubed @;
+ @< Copy all program parts to the output @>;
+ debug print_ln('end copy');
+ gubed @;
+ @< Check that all changes... @>;
+end_of_MAKEPROG:
+ @#
+ {here files should be closed if the operating system requires it}
+ @;@#
+ @<Print the job |history|@>;
+ end.
+
+
+@
+A program part begins after a line that begins with
+\.{\\beginprog} and ends before the next line with
+\.{\\endprog} starting it. If we find the starting line we
+set |state| to |begin_prog|, between to lines |state| has
+the value |inner_prog| and with the ending line |state| is
+set to |out_of_prog|.
+
+@d begin_prog = 0
+@d inner_prog = 1
+@d out_of_prog = 2
+
+@< Glob... @>=
+@!state: begin_prog..out_of_prog;
+
+@
+@< Set init... @>=
+state := out_of_prog;
+
+
+@
+After we have read the introducing line for a program part
+which is signaled with |state=begin_prog| we change the
+state to |inner_prog| to start copy the next line;
+
+@< Copy all program... @>=
+begin get_line;
+while not input_has_ended do
+ begin @< Look at the input line and store in |state| the result @>;
+ if state = inner_prog then put_line
+ else if state = begin_prog then state := inner_prog;
+ get_line;
+ end;
+if state = inner_prog then err_print('! Input has ended prematurely');
+@.Input has ended...@>
+end
+
+
+@
+We first define a few macros to improve the readability of
+the program part behind. After \.{\\beginprog} no letters
+may appear and after \.{\\endprog} either the line is ended
+or white space is to be there. The comparison is facilitated
+by the fact that |buffer[limit]=" "|, i.e.\ the last
+character of a line is always a space.
+
+@d cmp_prog(#) == (buffer[#]="p") and (buffer[#+1]="r") and
+ (buffer[#+2]="o") and (buffer[#+3]="g")
+@d cmp_begin == (buffer[1]="b") and (buffer[2]="e") and (buffer[3]="g") and@|
+ (buffer[4]="i") and (buffer[5]="n") and cmp_prog(6) and@|
+ ((buffer[10]<"A") or (buffer[10]>"Z")) and@|
+ ((buffer[10]<"a") or (buffer[10]>"z"))
+@d cmp_end == (buffer[1]="e") and (buffer[2]="n") and (buffer[3]="d") and
+ cmp_prog(4) and @|
+ ((buffer[8]=" ") or (buffer[8]=tab_mark))
+
+@< Look at the input... @>=
+begin
+if buffer[0] = "\" then
+ if limit >= 10 then
+ begin @+ if cmp_begin then state := begin_prog; @+ end
+ else if limit >= 8 then
+ if cmp_end then state := out_of_prog;
+end
+
+
+@ % sect. 195
+Some implementations may wish to pass the |history| value to the
+operating system so that it can be used to govern whether or not other
+programs are started. Here we simply report the history to the user.
+@^system dependencies@>
+
+@<Print the job |history|@>=
+case history of
+spotless: print_nl('(No errors were found.)');
+harmless_message: print_nl('(Did you see the warning message above?)');
+error_message: print_nl('(Pardon me, but I think I spotted something wrong.)');
+fatal_message: print_nl('(That was a fatal error, my friend.)');
+end {there are no other cases}
+
+
+
+
+
+@* System-dependent changes. % sect. 196
+
+\noindent This module should be replaced, if necessary, by
+changes to the program that are necessary to make
+\MAKEPROG{} work at a particular installation. It is
+usually best to design your change file so that all changes
+to previous modules preserve the module numbering; then
+everybody's version will be consistent with the printed
+program. More extensive changes, which introduce new
+modules, can be inserted here; then only the index itself
+will get a new module number.
+@^system dependencies@>
+
+
+
+
+
+@* Index. % sect. 197
+
+\noindent Here is a cross-reference table for the
+\MAKEPROG{} processor. All modules in which an identifier
+is used are listed with that identifier, except that
+reserved words are indexed only when they appear in format
+definitions, and the appearances of identifiers in module
+names are not indexed. Underlined entries correspond to
+where the identifier was declared. Error messages and a few
+other things like ``system dependencies'' are indexed here
+too.
+
diff --git a/macros/plain/contrib/literate/origin b/macros/plain/contrib/literate/origin
new file mode 100644
index 0000000000..1736482bc3
--- /dev/null
+++ b/macros/plain/contrib/literate/origin
@@ -0,0 +1,41 @@
+Date: Mittwoch, 14. Dezember 1988, 01.58 Uhr und 33 Sekunden MET
+From: XITIJSCH%DDATHD21.BITNET@uwavm.acs.washington.edu
+Subject: documented macros
+To: mackay@june.cs.washington.edu
+X-Munix-To: mackay@june.cs.washington.edu
+
+This mail contains the MAKEPROG system. The system consists of
+three files: makeprog.web, progdoc.doc, and progdocu.tex.
+
+-- progdocu.tex is a kind of user documentation, it is written with
+ Plain TeX and should be printed first.
+
+-- progdoc.doc is a macro package to document programs (e.g. macros).
+ This macro file is documented with the MAKEPROG system itself.
+
+-- makeprog.web is a WEB program that extracts the program part of a
+ document written with progdoc.
+
+I have added the file progdoc.tex, too. This file is the result of
+a MAKEPROG run over progdoc.doc. It serves for two purposes: on the
+one hand it is a test file for the makeprog program and on the other
+hand it is needed to print progdoc.doc if you don't have a running
+makeprog program.
+
+I hope that this system is useful to everyone who wants to write
+documented maintainable programs and not only tricky hacks.
+
+ With regards
+
+ Joachim
+
+----------------------------------------------------------------
+
+ TH Darmstadt
+ Institut f\"ur Theoretische Informatik
+ Joachim Schrod
+ Alexanderstr. 10 Bitnet: XITIJSCH@DDATHD21
+ (Please try again if I don't answer ---
+ D-6100 Darmstadt our Bitnet connection is very instable...)
+ West Germany
+
diff --git a/macros/plain/contrib/literate/progdoc.doc b/macros/plain/contrib/literate/progdoc.doc
new file mode 100644
index 0000000000..3777d687d7
--- /dev/null
+++ b/macros/plain/contrib/literate/progdoc.doc
@@ -0,0 +1,496 @@
+% This is PROGDOC.DOC as of 05 Dec 88
+%---------------------------------------------------------
+% (c) 1988 by J.Schrod. Put into the public domain.
+
+%
+% Macro package for the documentation of programs (and TeX macros)
+% english version
+%
+
+%
+% first version (for ftp/Bitnet) (88-12-05)
+%
+
+
+
+% documented with itself...
+\input progdoc
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% local macros
+%
+
+\font\mc=cmr9 % for names like ASCII
+\font\sc=cmcsc10 % caps and small caps 10pt
+
+\def\WEB{{\tt WEB\/}}
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em\TeX}}
+
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+\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'').
+
+The separation of the sections is done in this version (which is based
+on Plain~\TeX{}) by the macros |\chap| and |\sect|. But this can be
+changed easily, e.g.\ for preparing the documentation with \LaTeX{}.
+Then the last section group of this macro package must be omitted and
+the rest must be realized as a style option.
+
+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}') while the vertical bar itself can be obtained by
+|\origvert|.
+
+This macro package does not offer the creation of an index because it
+is not known which syntactical tokens the language has that should be
+mentioned in an index. As well the creation of a table of contents
+and of headings would be preferable to allow better orientation in the
+document. Some remarks about future enhancements which should be done
+urgently are set in slanted type.
+
+
+\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. 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.
+{\tolerance=10000
+(I agree with D.~Knuth that |\identifier_several_words_long| is much
+better readable than |\IdentifierSeveralWordsLong| and both are better
+than |\pr@@@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 the usage of a group because not all macros
+have to be defined global this way.
+\par}
+
+\beginprog
+\chardef\escape=0
+\chardef\letter=11
+\chardef\other=12
+%\chardef\active=13 % is defined in Plain already
+
+\chardef\atcode=\catcode`\@
+\chardef\uscode=\catcode`\_
+
+\catcode`\@=\letter
+\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\/}.
+
+Verbatim texts are set in monospace, we use (like in \WEB{}) the
+character set with the extended {\mc ASCII}. For \LaTeX{} we would
+have to add here |\ttex| to all size modifications like |\xpt|,
+|\xiipt|, etc.
+
+\beginprog
+\font\tentex=cmtex10 % typewriter extended ASCII 10pt
+\let\ttex=\tentex % only for PLAIN with base size 10pt
+
+\def\setup_verbatim{%
+ \def\do##1{\catcode`##1\other}\dospecials
+ \parskip\z@skip \parindent\z@
+ \obeylines \obeyspaces \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=`\|
+
+\catcode`\|=\active
+
+\def|{%
+ \leavevmode
+ \hbox\bgroup
+ \let\par\space \setup_verbatim
+ \let|\egroup
+ }
+\endprog
+
+
+
+
+\chap Program 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|. 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, too.
+
+
+\sect The implementation method is quite simple: We read the next
+line, test, wether the end is reached (by comparing with |\endprog|)
+and otherwise set the character actually read. Every character is
+inspected and tabular characters are expanded.
+
+Wether a line is set or wether the end of the processed area is
+reached is indicated by the switch |\if@print|. At the beginning of
+the |\beginprog| 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| 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\beginprog{%
+ \endgraf
+ \bigbreak
+ \begingroup
+ \setup_verbatim \catcode`\|\other
+ \@printtrue
+ \ignore_rest_line
+ }
+\let\end_verbatim=\endgroup % internal command !
+\endprog
+
+
+\sect 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.
+
+When a line is to be formatted, we first check with |\check_print|
+wether it contains |\endprog|, 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 a line with |\endprog| was found,
+|\set_next_line| is 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 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.
+
+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 |\do_check| compares the line with a sample line that is
+available in |\@endverbatim|. During the definition of
+|\@endverbatim| 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 vertical
+bar.
+
+\beginprog
+\def\do_check#1{%
+ \def\@line{#1}%
+ \ifx \@line\@endverbatim \@printfalse
+ \fi
+ }
+
+{\catcode`\|=\escape \catcode`\\=\other % | is temporary escape char
+ |gdef|@endverbatim{\endprog} % sample line
+} % here \endgroup can't be used
+\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~1, this
+is reset at the end of the line.
+
+\goodbreak
+
+\beginprog
+\newcount\char_count \char_count\@ne
+
+\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~1 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. 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\@ne
+ \def\next##1\end_line{\relax}%
+ \else \let\next\print_char
+ \fi
+ \next#1\end_line
+ }
+\endprog
+
+
+
+
+\chap Document Structuring.
+
+The layout of the document shall be like in \WEB{}. This can be done
+easily in Plain. If \LaTeX{} shall be used for the document
+preparation, this part of the macro must be eliminated. It will also
+be better to include the program parts \LaTeX-like as an environment
+between |\begin{prog}| and |\end{prog}| and to define control
+sequences |\makebaractive| and |\makebarother| for the switch of the
+special meaning of the vertical bar (`{\tt \origvert\/}') (for the
+{\tt tabular\/} environment!)
+
+All sections are enumerated, the number of the next section is stored
+in the counter |\sectno|. We differenciate between main sections
+which start a group of sections and between normal sections within a
+group.
+
+\beginprog
+\newcount\sectno \sectno=\@ne
+\endprog
+
+
+\sect The main sections are started with the macro |\chap| that 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.
+
+The deletion of the paragraph indentation is done with |\everypar|.
+We do not care if |\everypar| is used for something else and delete it
+after usage.
+
+\begingroup \sl
+Here the title, the section and the page number should be written to
+an auxiliary file so that a table of contents could be created at the
+end of the run (at |\bye|), and the dealing with |\everypar| should
+not be so cruel.
+\endgroup
+
+\beginprog
+\def\chap#1.{%
+ \endgraf
+ \vfill\eject
+ \noindent {\bf \number\sectno.\quad #1.}%
+ \advance \sectno\@ne
+ \endgraf
+ \medskip \nobreak
+ \everypar{%
+ \setbox0\lastbox
+ \global\everypar{}%
+ }%
+ }
+\endprog
+
+
+\sect Normal sections are started with |\sect|. This macro has no
+parameter. Between two paragraphs we set 2~pica space (if possible)
+and prefer the page breaking. Between the section number and the text
+one quad of space is set.
+
+\begingroup \sl
+The page break manipulation could be more sophisticated.
+\endgroup
+
+\beginprog
+\def\sect{%
+ \endgraf
+ \vskip 2pc plus 1pc minus 6dd \goodbreak
+ \noindent {\bf \number\sectno.}\advance \sectno\@ne
+ \quad \ignorespaces
+ }
+\endprog
+
+
+\sect We are finished and just have to restore the category codes.
+
+\beginprog
+\catcode`\@=\atcode
+\catcode`\_=\uscode
+
+\endinput
+\endprog
+
+
+
+
+
+\bye
+
diff --git a/macros/plain/contrib/literate/progdoc.tex b/macros/plain/contrib/literate/progdoc.tex
new file mode 100644
index 0000000000..92d4693c01
--- /dev/null
+++ b/macros/plain/contrib/literate/progdoc.tex
@@ -0,0 +1,197 @@
+% This is MAKEPROG.WEB as of 29 Nov 88
+%---------------------------------------------------------
+% (c) 1988 by J.Schrod.
+% Major parts of this program have been taken from TANGLE.WEB
+% by D.E.Knuth, which is not copyrighted.
+
+%
+% Version 1.0 was released in November, 1988.
+%
+
+
+\def\title{MAKEPROG (V\version)}
+\def\version{1.0}
+\def\years{1988}
+
+\font\ninerm=cmr9
+\let\mc=\ninerm % medium caps for names like EBCDIC
+
+\def\hang{\hangindent 3em\indent\ignorespaces}
+\def\item#1{ % fixed item of 30pt width
+ {\parskip=0pt\endgraf\noindent}% % new line
+ \hangindent 30pt %
+ \hbox to 30pt{\hfil#1\kern 1em}%
+ \ignorespaces % ignore following blanks
+ }
+
+\def\PASCAL{Pascal}
+\def\MAKEPROG{\leavevmode\hbox{\mc MAKEPROG\/}}
+\def\ASCII{\leavevmode\hbox{\mc ASCII\/}}
+\mathchardef\BA="3224 % double arrow as relation
+
+\def\topofcontents{\null\vfill
+ \centerline{\titlefont The MAKEPROG processor}
+ \vskip 15pt
+ \centerline{(Version \version)}
+ \vskip 2cm}
+\def\botofcontents{\vfill
+ \hangindent 3em
+ \noindent $\copyright$ \years{} by J.~Schrod.\hfil\break
+ All rights reserved.
+ \par \vskip 1ex
+ \noindent The source of this program may be used for
+ noncommercial purposes, but credits must be given to the origin.
+ \par}
+
+
+
+
+
+@* Introduction. % sect. 1
+
+\noindent This program converts a documentation file to a
+program file, i.e.\ all files between \.{\\beginprog} and
+\.{\\endprog} are copied verbatim. It was written by
+J.~Schrod in September, 1987. This program is written in
+\.{WEB}.
+
+The program uses a few features of the local \PASCAL\
+compiler that may need to be changed in other installations:
+
+\item{1)} Case statements have a default.
+
+\item{2)} Input-output routines may need to be adapted for
+use with a particular character set and/or for printing
+messages on the user's terminal.
+
+\noindent System-dependent portions of \MAKEPROG{} can be
+identified by looking at the entries for `system
+dependencies' in the index below.
+@!@^system dependencies@>
+
+\noindent The ``banner line'' defined here should be changed
+whenever \MAKEPROG{} is modified. The copyright notice must
+not be changed.
+
+@d banner=='This is MAKEPROG, Version 1.0.'
+@d copy_right==' (c) 1988 by J.Schrod.'
+@d rights_res==' All rights reserved.'
+
+
+% from progdoc.doc 05 Dec 88
+%------------------------------
+% These lines were inserted by hand (not with MAKEPROG).
+\chardef\escape=0
+\chardef\letter=11
+\chardef\other=12
+%\chardef\active=13 % is defined in Plain already
+
+\chardef\atcode=\catcode`\@
+\chardef\uscode=\catcode`\_
+
+\catcode`\@=\letter
+\catcode`\_=\letter
+\font\tentex=cmtex10 % typewriter extended ASCII 10pt
+\let\ttex=\tentex % only for PLAIN with base size 10pt
+
+\def\setup_verbatim{%
+ \def\do##1{\catcode`##1\other}\dospecials
+ \parskip\z@skip \parindent\z@
+ \obeylines \obeyspaces \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
+\let\origvert=|
+\chardef\vbar=`\|
+
+\catcode`\|=\active
+
+\def|{%
+ \leavevmode
+ \hbox\bgroup
+ \let\par\space \setup_verbatim
+ \let|\egroup
+ }
+\newif\if@print
+
+\def\beginprog{%
+ \endgraf
+ \bigbreak
+ \begingroup
+ \setup_verbatim \catcode`\|\other
+ \@printtrue
+ \ignore_rest_line
+ }
+\let\end_verbatim=\endgroup % internal command !
+\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
+\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}
+\gdef\check_first_part#1 #2\end_line{\do_check{#1}}
+\endgroup
+\def\do_check#1{%
+ \def\@line{#1}%
+ \ifx \@line\@endverbatim \@printfalse
+ \fi
+ }
+
+{\catcode`\|=\escape \catcode`\\=\other % | is temporary escape char
+ |gdef|@endverbatim{\endprog}
+} % he \endgroup can't be used
+\newcount\char_count \char_count\@ne
+
+\def\print_char#1#2\end_line{%
+ \print_first_char{#1}%
+ \print_rest_of_line{#2}%
+ }
+{\obeytabs\gdef\@tab{^^I}}
+
+\def\print_first_char#1{%
+ \def\@char{#1}%
+ \advance \char_count\@ne
+ \ifx \@char\@tab \print_tab
+ \else \@char
+ \fi
+ }
+\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@
+ }
+\def\print_tab{%
+ \loop \space \mod_viii\char_count
+ \ifnum \count_mod_viii>\z@
+ \advance \char_count\@ne
+ \repeat
+ }
+\def\print_rest_of_line#1{%
+ \def\@line{#1}%
+ \ifx \@line\empty \char_count\@ne
+ \def\next##1\end_line{\relax}%
+ \else \let\next\print_char
+ \fi
+ \next#1\end_line
+ }
diff --git a/macros/plain/contrib/literate/progdocu.pdf b/macros/plain/contrib/literate/progdocu.pdf
new file mode 100644
index 0000000000..21b71d84f0
--- /dev/null
+++ b/macros/plain/contrib/literate/progdocu.pdf
@@ -0,0 +1,1022 @@
+%PDF-1.2
+7 0 obj
+<<
+/Type/Encoding
+/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/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/quotedblleft/bracketright/circumflex/dotaccent/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/endash/emdash/hungarumlaut/tilde/dieresis/suppress
+160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis]
+>>
+endobj
+10 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F1
+/FontDescriptor 9 0 R
+/BaseFont/XWOTUP+CMR12
+/FirstChar 33
+/LastChar 196
+/Widths[272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 272 326.4 272 489.6
+489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4
+462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2
+734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6
+272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6
+544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8 435.2 489.6 979.2 489.6 489.6
+489.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611.8 816
+761.6 679.6 652.8 734 707.2 761.6 707.2 761.6 0 0 707.2 571.2 544 544 816 816 272
+299.2 489.6 489.6 489.6 489.6 489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6
+761.6 272 489.6]
+>>
+endobj
+11 0 obj
+<<
+/Type/Encoding
+/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/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/endash/emdash/hungarumlaut/tilde/dieresis/suppress
+160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis]
+>>
+endobj
+14 0 obj
+<<
+/Encoding 11 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F2
+/FontDescriptor 13 0 R
+/BaseFont/XVGRAL+CMCSC10
+/FirstChar 33
+/LastChar 196
+/Widths[319.4 552.8 902.8 552.8 902.8 844.4 319.4 436.1 436.1 552.8 844.4 319.4 377.8
+319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4
+844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.6
+566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5
+813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8
+535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8
+591.1 613.3 613.3 835.6 613.3 613.3 502.2 552.8 1105.5 552.8 552.8 552.8 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 683.3 902.8 844.4 755.5
+727.8 813.9 786.1 844.4 786.1 844.4 0 0 786.1 552.8 552.8 319.4 319.4 523.6 302.2
+424.4 552.8 552.8 552.8 552.8 552.8 813.9 494.4 915.6 735.6 824.4 635.6 975 1091.7
+844.4 319.4 552.8]
+>>
+endobj
+17 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F3
+/FontDescriptor 16 0 R
+/BaseFont/VHRTPX+CMBX10
+/FirstChar 33
+/LastChar 196
+/Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4
+575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4
+869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900
+863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8
+319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9
+319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9
+511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8
+638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4
+575 1041.7 1169.4 894.4 319.4 575]
+>>
+endobj
+20 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F4
+/FontDescriptor 19 0 R
+/BaseFont/EVJIWC+CMR10
+/FirstChar 33
+/LastChar 196
+/Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8
+500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8
+750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8
+680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8
+277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6
+500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500
+500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3
+777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3
+277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8
+277.8 500]
+>>
+endobj
+21 0 obj
+<<
+/Type/Encoding
+/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/dieresis/visiblespace
+160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/dieresis]
+>>
+endobj
+24 0 obj
+<<
+/Encoding 21 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F5
+/FontDescriptor 23 0 R
+/BaseFont/XBOEEL+CMTT10
+/FirstChar 33
+/LastChar 196
+/Widths[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 525 525 525 525 0 0 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525]
+>>
+endobj
+27 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F6
+/FontDescriptor 26 0 R
+/BaseFont/BDJSYF+CMSL10
+/FirstChar 33
+/LastChar 196
+/Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8
+500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8
+750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8
+680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8
+277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6
+500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500
+500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3
+777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3
+277.8 305.6 500 500 500 500 500 808.6 444.4 500 722.2 777.8 500 902.8 1013.9 777.8
+277.8 500]
+>>
+endobj
+30 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F7
+/FontDescriptor 29 0 R
+/BaseFont/JVBQOD+CMR9
+/FirstChar 33
+/LastChar 196
+/Widths[285.5 513.9 856.5 513.9 856.5 799.4 285.5 399.7 399.7 513.9 799.4 285.5 342.6
+285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5
+285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1
+799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7
+770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9
+571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3
+542.4 542.4 456.8 513.9 1027.8 513.9 513.9 513.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 642.3 856.5 799.4 713.6 685.2 770.7 742.3 799.4
+742.3 799.4 0 0 742.3 599.5 571 571 856.5 856.5 285.5 314 513.9 513.9 513.9 513.9
+513.9 770.7 456.8 513.9 742.3 799.4 513.9 927.8 1042 799.4 285.5 513.9]
+>>
+endobj
+31 0 obj
+<<
+/Type/Encoding
+/Differences[0/dotmath/arrowdown/alpha/beta/logicaland/logicalnot/element/pi/lambda/gamma/delta/arrowup/plusminus/circleplus/infinity/partialdiff/propersubset/propersuperset/intersection/union/universal/existential/circlemultiply/arrowboth/arrowleft/arrowright/notequal/lozenge/lessequal/greaterequal/equivalence/logicalor/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/integral/space
+160/space/dotmath/arrowdown/alpha/beta/logicaland/logicalnot/element/pi/lambda/gamma
+173/delta/arrowup/plusminus/circleplus/infinity/partialdiff/propersubset/propersuperset/intersection/union/universal/existential/circlemultiply/arrowboth/arrowleft/arrowright/notequal/lozenge/lessequal/greaterequal/equivalence/logicalor/space/integral]
+>>
+endobj
+34 0 obj
+<<
+/Encoding 31 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F8
+/FontDescriptor 33 0 R
+/BaseFont/DKMWFB+CMTEX10
+/FirstChar 33
+/LastChar 196
+/Widths[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 525 525 525 525 0 0 525
+525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525
+525 525]
+>>
+endobj
+36 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 3551
+>>
+stream
+xÚµZIsÜƾçWLr1èa ÑØœ“É.ÚN¢Š&vªÂ  ‡L“LéÇçmÝXf(ÚIåÂiôúú­ß{ÍMàÁænC?ßnÞl¿ú&Ü„Úôf»Û„±òu´¹Îý<ÙlßþÓÛîÍÕu¤ïϯ¿÷þoWÐúë·Ø{ž†Ñ®þµýî«oÔ†Wì6:ô£ls¦~¢h‡ïº+¥¼ÿ”ûú
+ýÄ*ÔŸ.¹˜©düE$ØñÀaE((ó#Ê?V+—suÇÞÏà+ÐÀ±žñï|l¢œv ,ŠÍEgž‡BÓÛoÎì2G½åáªGæ‚É »âP7O™0J%Ê{Ã
+˜Û04¿v§ÎMÑÞŠ;Òeœ{ ¥_%Ÿñ3êl¨Á}kÙ°íFqÜa@ú<qQ¤ƒ£¬âÌÜ}¦Î—w;Äìvë[•„å©Ê.=…KÞ“Öü¸*’Š%Ïe8×ÞŒ#êÚÓ±GsË(þÃqbm x?¶6}ÁÚ´³6ØêP”}7,ã„…¶k¯G˜ ãÂp/¤ŸÌœæDSNòÂÁzvðƒ01ŽütÁÄê©(aË$óóȆˆE[4OC=€fÄz†_’âwäI‚[ uWH× ÿ,WU)›Žáy/ÚìíPeÚ×ÖÎ,–ÎK¯Ô'ÎýD/ÔGȽAñ$¹“ìÀ4Ô#Ÿ)5 µX˜©N&sÞ§ã ð†»gh¾È@K[Á
+)Š>àFxÿ$bÁ®.
+f˜N¥ÆLlf/€º8v¤Y!ÍØd…S•a%™Íàk0å<¨cUW®/±*²vŽÀRñ# û‘”Âã¡Gƒpæ®(kÈjÏB›b›Ð-eú’ÌU˜øAþë|]ú,´jëäÃÔ_úxÓ ¦"‚wè»ÃÚÕÀîZl‡Ø~ŘÀ/$ôŽœÏGÙ”¾c{­ðÑvü;…bašÌEJ{Õ£,îOm‹<_ƒŒLùñçAFlýä(çCF6M³–†Žüpx®…§Q²òhÏIIó­4}‰Ô{s!ò·k …HF/*¨ŽmBÛË®õáØëÒXıw Ý湟E+EË/)Ú,Ñ{% Ã^á²q]Yº$Ý¿@~bFÀÓêÁé CÊPºF$ AÀsNõ­I›9có×$`º“¯HÍã @©ž“€Õ†¶yâVe›}pn¥\nºÒ±#åî½äE ó‰úݵïI3_e/ó'N1Q°º#^0ôÃp6À%`.–$>º˜‡emÚ’­*MEO qßòì–çÒÅà÷ ÷ÀYÛ–5 Áoê©[´m`èãI†¬Õ§¶<6´_Ð.ΩíÖ|lJa
+çKÎRZ
+vלíÿÃ}äé*÷´¥õ àdƒÞ*óèó3‡Õ p.‚J9ˆ—¾ƒ¦<}ŽqS8n}
+Éë!>;´²~å£a—<çº:œ}?8g’/œ và8$_G
+féíw¦g×a®õ·•€ýú’gÞºò£ ´"0Ñ{Ñk ô’GÞ>@Äÿ+pÿ„¸™nxhŒÐb‡wÄ:§j
+
+Ð5?ˆ)¯b­bQþœI’;šº5vSþÝõÝ|gÎîµp•ë`™Dî„!Ý`Æ‹­åšK])jÉÖ%©(ÈÚ¢¾[ÃWúŸÉM+ÿcÀ[9ü0Ûˆâ 6 â”æÂìAÄYôa«Â«¼Ûn7(ÚDåX<lBQqG:šÍ‡Í›­|4UþO9ü¯Ðä@;•¡½YjqaGê^®ƒHýÕŠ9ö a9¼Š:g†q¹þ"¢§í\³NúQþUB)¶ˆ³"|ÁÇK…–ßýOv€w
+endstream
+endobj
+38 0 obj
+<<
+/F1 10 0 R
+/F2 14 0 R
+/F3 17 0 R
+/F4 20 0 R
+/F5 24 0 R
+/F6 27 0 R
+/F7 30 0 R
+/F8 34 0 R
+>>
+endobj
+6 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 38 0 R
+>>
+endobj
+41 0 obj
+<<
+/Type/Encoding
+/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/alpha/beta/gamma/delta/epsilon1/zeta/eta/theta/iota/kappa/lambda/mu/nu/xi/pi/rho/sigma/tau/upsilon/phi/chi/psi/omega/epsilon/theta1/pi1/rho1/sigma1/phi1/arrowlefttophalf/arrowleftbothalf/arrowrighttophalf/arrowrightbothalf/arrowhookleft/arrowhookright/triangleright/triangleleft/zerooldstyle/oneoldstyle/twooldstyle/threeoldstyle/fouroldstyle/fiveoldstyle/sixoldstyle/sevenoldstyle/eightoldstyle/nineoldstyle/period/comma/less/slash/greater/star/partialdiff/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/flat/natural/sharp/slurbelow/slurabove/lscript/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/dotlessi/dotlessj/weierstrass/vector/tie/psi
+160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/alpha/beta/gamma/delta/epsilon1/zeta/eta/theta/iota/kappa/lambda/mu/nu/xi/pi/rho/sigma/tau/upsilon/phi/chi/psi/tie]
+>>
+endobj
+44 0 obj
+<<
+/Encoding 41 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F9
+/FontDescriptor 43 0 R
+/BaseFont/WJWHRT+CMMI10
+/FirstChar 33
+/LastChar 196
+/Widths[622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500
+500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9
+750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5
+762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9
+388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6
+298.4 878 600.2 484.7 503.1 446.4 451.2 468.7 361.1 572.5 484.7 715.9 571.5 490.3
+465 322.5 384 636.5 500 277.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 615.3 833.3 762.8 694.4 742.4 831.3 779.9 583.3 666.7 612.2 0 0 772.4
+639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.5 494 437.5
+570 517 571.4 437.2 540.3 595.8 625.7 651.4 277.8]
+>>
+endobj
+45 0 obj
+<<
+/Type/Encoding
+/Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/sterling/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/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/quotedblleft/bracketright/circumflex/dotaccent/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/endash/emdash/hungarumlaut/tilde/dieresis/suppress
+160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis]
+>>
+endobj
+48 0 obj
+<<
+/Encoding 45 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F10
+/FontDescriptor 47 0 R
+/BaseFont/JQUXWB+CMTI10
+/FirstChar 33
+/LastChar 196
+/Widths[306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8
+306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7
+306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6
+525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9
+743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7
+460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7
+460 664.4 463.9 485.6 408.9 511.1 1022.2 511.1 511.1 511.1 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627.2 817.8 766.7 692.2 664.4 743.3 715.6
+766.7 715.6 766.7 0 0 715.6 613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1
+511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 511.1]
+>>
+endobj
+49 0 obj
+<<
+/Type/Encoding
+/Differences[0/minus/periodcentered/multiply/asteriskmath/divide/diamondmath/plusminus/minusplus/circleplus/circleminus/circlemultiply/circledivide/circledot/circlecopyrt/openbullet/bullet/equivasymptotic/equivalence/reflexsubset/reflexsuperset/lessequal/greaterequal/precedesequal/followsequal/similar/approxequal/propersubset/propersuperset/lessmuch/greatermuch/precedes/follows/arrowleft/arrowright/arrowup/arrowdown/arrowboth/arrownortheast/arrowsoutheast/similarequal/arrowdblleft/arrowdblright/arrowdblup/arrowdbldown/arrowdblboth/arrownorthwest/arrowsouthwest/proportional/prime/infinity/element/owner/triangle/triangleinv/negationslash/mapsto/universal/existential/logicalnot/emptyset/Rfractur/Ifractur/latticetop/perpendicular/aleph/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/union/intersection/unionmulti/logicaland/logicalor/turnstileleft/turnstileright/floorleft/floorright/ceilingleft/ceilingright/braceleft/braceright/angbracketleft/angbracketright/bar/bardbl/arrowbothv/arrowdblbothv/backslash/wreathproduct/radical/coproduct/nabla/integral/unionsq/intersectionsq/subsetsqequal/supersetsqequal/section/dagger/daggerdbl/paragraph/club/diamond/heart/spade/arrowleft
+161/minus/periodcentered/multiply/asteriskmath/divide/diamondmath/plusminus/minusplus/circleplus/circleminus
+173/circlemultiply/circledivide/circledot/circlecopyrt/openbullet/bullet/equivasymptotic/equivalence/reflexsubset/reflexsuperset/lessequal/greaterequal/precedesequal/followsequal/similar/approxequal/propersubset/propersuperset/lessmuch/greatermuch/precedes/follows/arrowleft/spade]
+>>
+endobj
+52 0 obj
+<<
+/Encoding 49 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F11
+/FontDescriptor 51 0 R
+/BaseFont/IAGTSF+CMSY10
+/FirstChar 33
+/LastChar 196
+/Widths[1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8
+275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8
+611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9
+820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7
+666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8
+500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4 444.4
+444.4 611.1 777.8 777.8 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 0 0 777.8
+777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8
+777.8 777.8 1000 1000 777.8 777.8 1000 777.8]
+>>
+endobj
+53 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 3848
+>>
+stream
+xÚZ[sÛ¸~ï¯ðÛRíŠKàmû²Nœ‹³Ýn&övÓ©:SZ¢%Ö©!©xÝÉ﹤H9ÉŒf‚¸|ç;ºü ¸Ø^ÐãÍÅ‹Û^ë‹ÌÏâ‹Ûû‹àbÉÅ«yo›…VÞãb©Óл]d‘×pù·®Xüûöݯ“‹TúÅ‘oBèý~¹üùÕû‹0õ~}ÃíŒÉ —Êø5¾Ý‹e¨·Á¡Ëú¸/êE˜x}Þ—Mß´WvÜæÐr£Íq]l¸ê±ìwXŠ¼ÞŽ´Ï×ÔŠ]ѳ©“ TÙ * ¸Ý4ë©”–¥¥Éݱ¬zÅ1Þû*/kžô»^ı¯£‹eè+^Ô+ªüH_¸º>w†·Å}ÓŠ°ýWÖ-µüPƒÖ”Ý›U%ôÔ°+{l~ìz|ƒ%÷yKŘu3Y~šùI,K[­Êúp„ÆQhžSE¢}«,X@¬ïò¾/ÚGœ3o7‹ð„¯Í‘%Xç5ÏßõíqÝÛâ¤QËo´ÞÄ®7öDü’ßp£®X£d–¼Þp•FŠQqˆr’bXÍã<Z,£ioÛ6ÇC‡Ë36< UÙ²öÜ„üÒÜ˼<u—f¨d‘꜖ÃÄøÁ æõ.?Lƾ2ÒâûÅÒ¨À+EˆuÓ¶Ew {hê¬Åꤷ‚£m±9œí%
+m2Ö«OhÛEKmà`A£–dž/ÖT¡|ÎT¡ÞWÊéû~ÉT‡…t²’©cùÆ
+¬#sÅÚ¦åŠ=¹¬‘s!/°c+¯Ãs‡­O±þŽt[p­àC±.ÀpØ„W€ßÉf°Jögºí€PîЮVwÅ|1Ýû(ñµ=wˆ¿“a–&R~zŠ5+8熂£’êÁŒc¼ Šk@³ÖŠ¨ì¾‰CÃb.OZD# {]Ö[®CC1aŠ^«².d¶ëûNÃò¾I €–öŒˆã*DغyNN3“s9†,ëÌ-@Çbé±&ôˆyüáÓ‚ ù˜Ážkz‰ƒTô½ ¢ÁªŠÛ8«Áê dvdó8[-Í`“ºágñGßæ!5ûŸØa«l_!‰C7·öÀ+Âd–Ãzó˜¢3&ÓJR?Š¿aƒ€lI+Ë'ï¹D Ãá“è4<€šr[Ãaܼ©3–¢LèëÌ òœ‰G~`æv‚ÔŒøÎN°.ï'rMíY„g« ÁÕd'Z<5C¸‚ÏR\
+|Šãb pßTUƒ
+ëóGÐÉ®¤¥=3H(
+À9ïP…ò ѱYc& &€6WÇ–÷&±1.ô‘ɪÑv“èRNDŽÖpÉE°r"ðçéجÚbÝlëòbr˜êmÁ¦Ë²JxQ•t¢§‘°R3A<ÙíåßßüíÕL×pƳ)E(òpXfH%–!
+oÞu `ZUù  3NÛaFM )5š!³aBÆâÀÕˆXƒ;Cï<°Tž±/|›¦ãÙŠ±"äß*õ^ëœ|NTŠ\, øТ-&7\ñß~¦ßDaùEýF~옠¼Û5ÇjÃJ<(fÿÔ
+rf(a¦ ìžÐu ¼w’„òÙ~j6äµð­’…çÕLx aò5ãpð>6@Ø2l€ÐBæb/v•X>C¬ôÄo÷ÒÒP i.93¬XyÂÀÚ]~:ŽÈX"áIìG'=” xUô@ù|}œó ³D(Z˜eà؉<AÉö£L$Uœ1AÀœê¾xØSçœ òØ]³/1Ësºbv²‹)ïbê1 ƒ÷u³ß‹Ò³)D’>Bùá :š2t¼§àøúϸ‹z±ÁàÆRåúAÆ[Vs#ÖÖç\ádºnÝ–‡^¾·Íq˜á¶ðÅQ¾J’$Õ# ‡1µ< ÇÒÇßóÎŽ&=)tëæÌlÈ0 vjÔÌÍ^!»Ì€NïÅ?E˜§Œaå &œIC)Ó yË4o‰…Fh8ù*¨ØË ¥ÉXá±SlâqÎG0?G˜ïɦ©÷ËÍò=¯Ÿy 4ü‡ö•â¯Ü
+ÎI¹ÝQ>ÒŠú’™D€þcÌÌ?ÓÞÛ÷8hlÅCû{(+#¹|ÈÈâÚÿö‘‹ûœ&ZHŸÆð˽-¸iNçÐ'sèéï_Þpáe¾‘œ ·»yoBqDž({fû‚"jã]V8¡cq¶Ð-Z F. 6EÞ‹µ|pbˆÂ#sá‘—,B[ò°7·\M>„¢ gBÀ'ÍâD’jÓ‘‚ЉrÑݱg¡0ð˜H 3|
+8£ô]KËN* a/~yâÖ/ʾ&ØCY7©ÏxÔr–º_Î}¼¾½~wóòíOWW—·o¯B5Õ`úq䮲)tK1“s‚×ö»\¾ZºŸ'zJl‡÷SeÅ5{4ß2
+N&|ý{¿Á.µCâÓFïw°%?ZPÿK0"'†òêÐ[Å\£’þÊÆ ð{Uv}[<ŸF8µ®0“<pÛ’“z\}&RƒMÈÂo Ô¬)tD'yŽûÀ1¢?AÈ„£p7– „“\sÇ!dB>öÑgK‹BËP°€#V~ëj 8â#dã@¹ ŒÀi3ïZûéil¯û€¸R´!ÄôßÑ€.ûü¡@râ?w3f©—ïgwc¾Ö_g”c²†áH”œ»È “!-%ƒÏR%ÈŒ‘é5Á5)‹[טà1üƒ0÷Ç¡*×e_=q=pø»rƒä”>S6
+‰5"iÞuܨ±_í?~ ü° ›xb<|ûÝ° (»Á
+³lHí1³ËÉêÏèýà ¢G›9ÙØC1»A1&{ŽBŽ–ÃßʬÓ;w3d"göÌPO.±t‡«È7,ù_€v¬Ë¢†rhóYÀ¥(mx’†°NËø_¨¶‡q?°"bà—cÝ—ÒÿòR—ý“?sL
+LÎ)•¿qÁs ÌÌ{.IÆñízÑwƒÇ›æ‘)GÿMiä)^¡W°¦±¤IÜu’àÀÆr7²† íÄ_ócÓÈŸVšÞúÝÇñ)Æ•ðc¾4os‰éŠNþ‘³’À:;¹J1x] ?ñ÷6?È´»¦q1®ñ™¿3÷Á&öÙÙ’¿xuû§ÿ
+endstream
+endobj
+54 0 obj
+<<
+/F3 17 0 R
+/F7 30 0 R
+/F4 20 0 R
+/F8 34 0 R
+/F5 24 0 R
+/F9 44 0 R
+/F10 48 0 R
+/F11 52 0 R
+>>
+endobj
+40 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 54 0 R
+>>
+endobj
+9 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-34 -251 988 750]
+/FontName/XWOTUP+CMR12
+/ItalicAngle 0
+/StemV 65
+/FontFile 8 0 R
+/Flags 4
+>>
+endobj
+8 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 714
+/Length2 3868
+/Length3 533
+/Length 4419
+>>
+stream
+xÚí•gTûºÆA¥EPéEH3´H‘jè½÷H€HB ½#H/Ò¥ˆ›*ˆôÞ¥‰€€ 6]Š€¡7…ƒ{ßsîºûÜ/wÝowÝ™/ó>ï3Ïÿ7ïÌš?÷}]A„«RÙƒ KaZúÂP 0àæ†a‘pÊ£Ç!¥€Â’’Â@G ~(%"!
+G4ùKB¹+£¼‘]ÎÞ è
+Šˆ¡bÂ@I  ¸Äÿ¿úŒ0¨§H5E —ýSµ÷Àb‘ÜŸ_ÁÕóþ³v@]M‰ôFÚ²²éQÄ6¬ü‡¶“&Mßu­¯·ÓÅŽòFú 7Ñ$à©'‘áκÓTgßtcÒN@ìrϪ´%tYwãñ,å³ |C-K‡Rob×Çhkͯ µï cm,ªùóÄ|­InÏí!òpnm»½÷™ëÎ'ûÚ¾ ÊÍùÛ¦«W¢W›‰¤ì'•¼4’øslŽÞ’b>Âæ´Lø·PZ—‘ð £}yA£ÀñU'Ów…µyÀw–
+óÖTU¥X­øõò
+ÆMFkëy6ÇO,¹›´ÙÍûÍ´¦}´E¦°êLT)?‹ošÁ%ÇØì£yŸaÆÊü™ûÆ¡wÞ‡(T³Ê\o—׿Y™Ý™íÑhÚ²Fos}ˆòB âúƒÒ‰ºë u=?ž?<Þ•–üѦ¾E>¨pñö&*ÿ]Ñ¢ÖêÎP§ïe™iždV‹
+ÅÎWb.(‘aäoiÙe?=7 ƒ¨Kž»HPâÞP|y¦^9J’"|Zt±Óµ ŠFÜÆîVbq®êOÏÖÌsø<ëE¯º7óÈ{ôÞõ¥“=ª6î'[X©³ÝVìóˆ}öïu…C-¯ŒOn†úešÅ뱘<qŽÉ+"þVµ'â.†ÅÒz ;Fñ™cbJ—õæZ2-¾Þê罉·"̵lè3kÖ<\^øþxªU§±?)(7Ëz¼=ë›å<ìŒ~g©Ù _nD½kÊ-½HS¦ö܉*8p–h ¬©8^¶WšQÆyñ4ì÷äæa0g¨]Ô³”¡ïµ¾Ç6ê*oÒµ•åd5&÷¯~8Á :gE/-4¦ךe?·9ÿü&ØÈœm¢Î—–Ê´ÏL5>6‹×d')¡XÖóÊ®œHŠ]öõI2%ì俪6åž‹:h7R_*ä?PŠFBêÅ¢îµ4ãÒåÂË™ÄZa±ªcÃL¦¼ƒ*©*áƒ|ÔJ[Øá‘M”mªGRÁ³Ï©9¡ÉpÎ*L* ³¿Ç;äàu¹ª´Ç¿‘Äæ3ýÁ?Fù®—ê.Â÷È}Å:MUó‰ƒfÅz¾šž5éû ëõksBF·96…œËÖšíÊŒ)¬„„sA·ÞâZ—ìXåÆyœdOgŸß5o=¼GÃ7õƒ€×ú°äÔ‰…ñtë@;ÁH¦ý^£ïÚlqÕèÙÀ†RŒ’]W¹CˆÓ–)(ógW‘\9ÐJ‹üù½ß¶Q‡ ¥?Oo¡Û§+ú™¨TkT +âÍ2Ø ¦ÉV½É›j¥ ¢ŽÊTÍ‘jëÄÇ[~樞䄯Ý—9"¢úƒ%k—>ýÎd“É'§;Þ×­Þ­[¦ýDQ7ó±2«A˜GÏGVêzz¹LõésF’KÞ™óÇiæ˜ká»Ëß™œ‚_Ys‹ÎD‹m†A U
+ûøX¯/™WD±/‘2¬jÏIs=㨡¶âm™VO‚Gñ˜#"ÒÖ¦¥tè-¹tÅ*E=`µF'=ý0[Æ¡F³é]>]k«ÀÐü8=锾è)ÄçÀÙM:
+>Úš¨c|éÏ»ÙÄg3ìVy¾,­´i`ÃXNêð1VÜ/zwv2âr ?haßd(A<ÜÂÆx
+)Ÿ\R ™Ÿ˜¼äxˆ¼aˆ’±¦Šx;7dÅç‰1²Sy,W…UEsDP³ÐØøíÒp.ÀÀÑ
+Ëã=O_²‚Êܱ‡Õ°,3$îûõØX9ŠV·‹åGÈokì}ª‚ùÐÔ›êXä=kÓÍÜCd¦¿{YKéÒq¹@ )‰Žzr:TW™Õ3Ìûø¯­Zƒ2tyômý  ¸£‚WñÙ£ŒîË  Úꕸþ“ŒÍòL«4Iºø‘ i‡8ñ[¶ÙÊ/L u¿ Ì6Ç›’Øü~?äæÖþÇ¢4¾i‰¼˜«,
+niÈ`é[3ÂàõÅÕ‰cè=„\ñŠΨ vIˆì†îÝÏâî‹íÉåOÈT-fÚE¦ÐRPB½Œˆ•3¿Ñ¼–k)Ú>œ¤pn=\užíˆ¨®+שè¨*of{3¦,}î¯î*|z‡äDw¥ÛÀh ®0~ÌGQ÷
+q/ªI‚2,¬Ávdä[{¸S½NÒënt ¯ÍnO‡Ü‡<ºï›ï¨‰¥Íã¬áŒ™íñbL‰Ä¢µÄé‚+í¼ 2­où›—†ÄÆA3B?•’™÷P Ã?ûÚV°ÂÇÒÙ¶üõèÊ‚„;º§ñ§I‹}»nK¶àÑHŽk¢,]~o]ð€ŸçÕƒHŽšòùus÷Aœá#6U
+Ñþž™g\>“%–lš¹GÅ.$¬h;¬Ëgd#«ÆýÒZX:Lž›»¡s™ØAzµÝ—žW‚V‹C#ýÕêíy—1Œãîa.F”xŠù†Êsˆ*•ÕÇ’Á^ÜùzV /Ih"å¨9,AJ‹÷ˆž«¹‚öåïyH7·sÜ1]¶S©ô”*B$~XŽ!]ÙŠ,t¶ûí’×)…É L§I;…úY»QøÞÔƒÁûК6=% Jï‹À« ô)ÓwX@®îÅ4»“{_×Í}°-¢åÙLôû öH\rèqhyEr×®.7ßS£ós·ª û1›ãŠ…?{z ÉEñq"Ö“!i]lx \GèËä°qJómÖ´Sn‚øYF×ÜœóÒâÁ*i…í‡èè(<
+ŒLqêìµi6³ µ" ŠË[57Ô Xqây558?4òðöt¥æê£úHþ €ºIæ6ôh¿÷έø.H-ö‹?ó"9×xÔŠA¸úÚ¡Ð!_5˽u—‹£q«‚×jIxÙŒijÝìÔ]´à`.Q8ÛšÑIÉHdW}[(Õ`O¸ÿîíÈåÍ»Ä!Ø0ýsfu•Md6—Hº†]?|g-l¤r°l¥€Ã‹<jÆ!O
+õÃcC¿
+öU›}í¡""d´Mn%ó…Ž$¥Õ]2d(¶…9ô„F/r<<kwìlª­äÔ'J0sY“|9[ÄCåósYð R¨Î<€Œ@ãò:?»âeÜóoýOèc䙇s!†RÞ7ji—¶f³f[¡|Z‹™g {—ñŸâcs¬È$GÞŽt~{+ }Á[Ç #´½jĆB͵E/¼[ ¸´!Æ Dºy8­8u&OžTD<‰–WädSæ÷{þgÝfÆQûöÏ\x!ÿËðÿÿ'ìÑH8çêÇ:
+endstream
+endobj
+13 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[14 -250 1077 750]
+/FontName/XVGRAL+CMCSC10
+/ItalicAngle 0
+/StemV 72
+/FontFile 12 0 R
+/Flags 4
+>>
+endobj
+12 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 720
+/Length2 2629
+/Length3 533
+/Length 3175
+>>
+stream
+xÚí“y<T}ßÇ/%ÆP&“å9É–uÆ6–d¬É.Y†Æ ³XY*[Ù"d„ ](dÍNBYŠD*{)!û.·ê¾®ûõt?ÿܯû¿çõœóÏù~¾Ÿóù½Ï÷ü~âÇÍ,äPX’ M"Råàòp @×D×Bàò0°¸¸.‡¡âID= §ÀÕÕá
+Z·íçÖXPr~,äç*ÞrŠ
+å<vt
+ùÒ½]d‡C¸«i4ÈìÊT²VK¸ÇÂ;Ðnæò——äÈ·31Å»,=¸ßFÅr¾ ¢eêÆUÄVüGloòu‚_ÅëøtΆåv˜-Ø]ÛW®<ûö ¼<ï|hEYq'ŽƒõÑyJ`ŽIð
+yÇÒÃú‹¡.šlY:ô…͹"MkÇK3“  ¦RÓ
+ã¶Í@÷õºßýVKpá s™ÐߢuW¸¹ï4d ç5b¿ò„5rN#K[ÿ«¤VVRZÚTKO{|»Ï›.d_*¹£Y¿œ·k#³àƒ…\b‡ä¶¿¬$‡m>Qƒpg«U]´ÒºÜ°,šxèôp|ú=ÿèà"¿wRÿ0ŸVå‰7ezúækËoú˾%~ª#‘Zt_m¢,>ô_ðòfäžÔ¯Šê4^ûÝc_ŠÆ.'Eic€·)›ìQõA[èÇË] Õ5©Rü¡È&)›+T/02$«kÚã=?
+[éåÇØÜöÕ»ó1'²æ×Ý'”ÏÃýÄÙ#^¼¯‹£?Ò:¿v‹ß-Ó›´Ñ>ÿ!PÕúy)GW§mÇäk·pm™ÆHÃBŠÛŸÒM1ǘö }‘CŠòÆóï¡vÛ ÃËb:YŠÇ\n
+Ÿ~8Ì’êÑ— ÒäóœÒ&QIÕÆÀ’ìP|cÓ› ñGêÍ®­Xðž}árb½fbýÈLûÊUŽ-÷ •eÅs"ê¦f™Gm‚•é3ð^ÿ×
+‡ïoZ^œ5UÚçXñà€izÓŽT¬÷Î]Ç”|ãF·³ï.²°E(_®VF\“Ñ2T¹5É%
+2ì ¤~UáŒÄ5¼ÉûW¯ûP¥ÈòpM§ä¯Qr†xcîÂÐÍ[ìÍ•~Î-ˇ·³ ]£RÎh÷ôõ›þÇS{1‹ØŸ©/EŠô¿¥µ¶§Ý²Ñl±i`_¹Òùž†EÈÙøˆŽ´»ßõµð¥ž­g ÄÏÒ6ólkræw>QögÝ«É«l)^,³{³8q5ìêÂCV&ì`ÚÄ|9#…ùõÌÿ¸díýãe±½q‚=ó®dÄÙÒ•Š· ¹’ ­k¾½xÿwƒrf¯ÅúžŠÚOì¸@Ü
+T žŽFÊ-qÛ 5
+Aò+蓪§/¥æϘggš‹ÒÓ¤Ðbhª›ïõ¬íl§ßƒš‘s/SŽIÕ0öÕ¯¼k,~.NQòÅ„œåSžÖ0ËÒ7q(Mì82**Y°Ó÷‡Æ¸ó¤vìªìZ_Ý©ŠÐÍ6$ºÕüOnÑê>G¨²GcËJòëϘŽ;ú»MS¬ú`þrõöL|%´µ»:"*'fΩôȨÒ6[$6­Ââßbíú!5?"5{jxþQ~‚uòqèMú‰:° ±ë½Ø²¦Lgß&_íÃv[n]¥Ü©ÍœØqhÉKMPÿTÊÈ$(y8³Ö©²šÕ"쓉˜h#Fµ’5«c‚Q«ƒðX­³JäÚt$Ÿ¬´,¯ÞÈÕ wCŒÿ^%é]»Õ„žÑÅŸø¨ I  ÔSº‚f¸Ý­ksäS³•¾™ãuˆae¡ì/ãhdøQȺˆøòýu£Êîô¦µ V …Q13KZ¡ªm,G&%ÐuvŸék·“iNg"çÙøDã› Å<½™ç¦žÈ C<wvª<¹C¼òôàŸW¢¤Ê
+1ðs9Gi"è,B[j*–ç'Ø­ê
+YúÒ¾kù¢/ÌÉ1zýý«ùåê…ßÞ„j¥ÈK¼Š ;Ñ…_C³Œ*/[0! Ï41=E£<M¼3J õëvæÈ.ö
+àÌäF[ýã£Íz]ȹó¦ý°íbㆡAy‚Ç· ?·:ÃZ
+Äúõ2Ûç¹ú«*Òïšçf;gÇÃ’Ï™A´¹ç5æ{‡2Ü3ƒ3¿Ä™¨snhFK¢/Z«ô§ñi^¤3âm
+]$½zÅCš?õkÿ†ò]Yy(ç`.ûª©gŒÝšl•1ÖpmUsÀ„{[pWÀI™îˆ!áºÒGщ†AdCâc?oÐEwÿ³W^°v¦YðȪ÷ŸsºÙ6„,œõ~·YZ˜ßÍ¿úÍòÃÊôØF»…ççàÊ©º¢Œòó]JV:‰t² 3g÷Q¡ö_^àÿø?àJÀaÈT’†ì ÿF®n×
+endstream
+endobj
+16 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-301 -250 1164 946]
+/FontName/VHRTPX+CMBX10
+/ItalicAngle 0
+/StemV 114
+/FontFile 15 0 R
+/Flags 4
+>>
+endobj
+15 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 721
+/Length2 5962
+/Length3 533
+/Length 6514
+>>
+stream
+xÚívUTݺ-®A‚‚5A‚Ó¸»»¦±àÝhCh,Ü!8AÜ] nœ‚‡àèÃÿï³ÏgïórÇ}»ãVÕÃúæš5¿Y³¾‡ÅÌ £Ï% †YC”`.p.^n^1€¼¦œ/ÀË Êá13Ë»A¬à0+8D À+*ÊP‚X?.1A1 3@æêãæ`g°Ê³ýÅÈ:CÜl¬\
+ê`#ëb…
+êù‡¸€ÿÕÂcpà©èèqüçoýÇ®Ž•ƒ ÜÀÇõ¿tÿ¢ÿ]óþwý›ƒ7Àø˜/ï#ññþçÊì_º)ºØÀÀ.v
+qñ >ί
+Ôž-düùˆ¯e xÚ:Ñê‘N—0áé$¼6zGoÈæÓÒýSÏùY›‰\gN†®5aú¬¤ÆF7]îEÈHwó˜‚óâèùb22TË[ÃéJ$}Aÿ ƒ‡#ª;–'HR÷` ö-;„Rþ šþww>ߺ›¶oõ&k5zùbj/º¾b·yÆ‹ÕµÓ‰á@Fw
+C®vC,-ÄpíbiÑú´yÚZf¢üë‰è•!Á¦0•mu62¥Ù¨ÁÓë>>óÐ.¼Ø»ž÷jÛ+$£ÿx‘¬»£þ'rÈWL–y;õ‡À+mG#RïÁÉÙƒÒJ\Œ×½E«‡á'ʤҸ2l*âûC4÷[r`ó|<°®Ì·ž›Q5É9êx>cül2+¬)20Éïï5ÂW¨è y`ô!+`à)Ùªt‘,鼄e?»CÌpA1U±¬uoH™R|u*öÀ諽À•Xç»^6¨­(ÚœT^ËKÖ§A•áL—¦»?-x0¡ƒË~íî¶eÏž5E± üvR |3!YPúüOÖÑY(;C~6¡*‚f´àÝl+à%Ú¢.~ÌSÜÊóÿYÏŽŠŠµ¨3µ,+}îÏ^Šžéã« J‘½
+.QÑ~\±»zò¶>þ‰±îYÖ ¬/ gÂa wzÛO(#]žçYèç]ç9èÅž.Ïh
+¤NT• 5!¦ÞPëß­fºê5:v6&ð¤\Ë› ÑŒ°¦ß¸ç€˜ïOX•ÔüÄ+‘ñîDËÿHåyÏY, l^j[¬E¬’ã)¼$³3ëÔE†Äs+ïïŒ)œì T›B÷ñ±kÐ/¦¢`7‚yéå6æüþBþt$ïÉ7ž?Hÿ)e2—-Xs}*@¨:Ó·ñ¢Q°ñêô<s•Þ‘7Ç~j.¼G}‡˜Ž&Í$~ßln3‰e#7¶²Ú$Åœ.>pò*@Î]n2(§l —©Ihm+ ë½(vá^¦¾—§îÇÏý¥`ÿ[q(A(ÿ êfÑi@ÎÆ*g`ÞÞVøˆYC«Ò\•7†aÍa݆>#”2A­%ÁK‡tÒ¶® ÕÏxáO1‡3Ñ¿QV´µ—ªuæ`‚Áä‡k?Í“ÂŽp.Ì~úäj|=
+Ç,eíæÏà2áïÁa…Š¦ª“ÍTú=±×ÜËè½:ý\«{Ô</þ-¼gôCèFî=j¥»¦ó#ß±†wM0WHTª€…ª>2Å—é…SSm¯ɇ‰~!8éQm™j¤Í
+#þ*øÁË÷Ç“[Vz4Ëê/€ÀÌOÒÇ›L=ä¸ûµì)´ mMW(ò¨÷Öþ²«^t¡‘f2FìšË4›å½’ß+pˆN¬±þ2“{à´´–½qñâžy=b l4O Ö>ÏŒ*m¦^¯–uZHCA ä3V^¯Á§é±<F&Æd)P˜{~£r¡ËØGM»«çS×h•;}Ã¥NÞr|Û(4ª¥.ð$vî{‘Q˜’<‘3îöÕJƒ™dy:AòÖ¹“´–Ê(üT*¯÷cO\Õ(}Rsݧ%íJ¼ZIØòÈp=“ÂiBÔçµìå~t:ÞQ̖輸¹Jq]1®'é.†qW|ýj»Ôâ~Å'us{:æ͆ÆþÕ<6~ÁžÖœÆßvSÁUÆÎÊ¢ØÃòýøpg}F ªUOOë)Ùƒ‘r‡Ý·¼i¡ËÄ`Å‘Û8Õ”P1«QÙq
+ íÄnŸó£ÐPدûÆXá=í`-|s­;›ÃVÇ0Õ൶4 I]%á„P¯£˜™ú ë ¡yW¶ÿ¯`?û)w†j47 Á7¯×ùƒc¥Ôe¹çß
+¡ã-6§fGó[“m"ÑwS”;ÃðÌp#H¢’¯"Gc¼{ÎRYäEÝ>ª2˘XÊ—Â.^ÙHK«ƒç×X/ÉÑ{Ðp³éŠײFšT»l r”FžŒ½¢rH°Lõv>bX錃SÙ&f=LĦŸÿæBì¤ôÌv*Ûˆ>£é¬j³“ûÁò»tÎ`t‚énÞG(Úø‘IÖTR‹!Cfæ$¡·@œ³ìMz íÝ7°VÐo¼"ÀÞçW|fðÚ½©j<~ë¼Âz¶ÁÙo @ª9”ü½9L0©ŸÂÔ¬¡Ì¬£0Š¤'*§.Å/sð°'ñ»ä˦ͬñ»íÊ Ì­$µ}j¡i˲µ7“7 ö#ÄhN¿Ò1Ÿ¹«?¡ÑUÑ¿áѹhÖ‘ÀΆËæUÖ.ÈŠ´ÆÆ@~·âzMXz¾›¥°çòóòh½aÚÑÔ/3/°¾ˆñžµ¬«øÜÕPóóì$ïŽF5[“Hð®Uùpö,jô  è¹M,+Œßˆý|ÞH±ødÅԉšÿÄ„¦àMB;D…kCÇÓíÁP_îù\W“ŠÌL[– ãÏ°=ž|Þd‚@mÐP:ûŒ³|·ñ”•/”Ѻˆ’N”U`®j8+¸¼¸áÓ+ªâ$‚#µç'TÕnžÒ, \¯DúÓ_ösž§BŸ~¾ÊåiïÃ8ÉzÌIŽ¨´†ƒà4¥Â¨¡òúCôŸØª•oQóM|æûS,ã…ý Ñí:µÒí²IK—jÌSh»ÆåòDñJîXšï`Zwb4a 7J/ÐóÑ°ï5~j3?+ž¨WIÝ°­ ¹½åÜÕA´&ƒÄåâNüÉ‚9°MÕÚÂKžì“cÍá¿5»Á$ 3Ù f—e hÔmDñü¡.¥u²Ukò‚,Y’îN(nœ¨ýLp98Hh¶Lé÷‹ô®´Z;•ž|ÞÂU¬àIüdâ®éÌßåC¥YQçØVÛÀÉ
+ÐÚúÕF?,½í²'ÄÒQ² É_°Ä­V$Ùa$¼+-ªùN.Ã0ÌÂn=–a©_…ñ92á¬]›.Т©°Æ0 ¹L‘KE*óZ!@bt’[s¡[@­Bï£Ë©Ý·Ã5U襈œ'“¯ÞÊRhÝw†€Æ‡c’ôrRS…ÔÂУP–`±'g¶!²êN«§#lÎ̓LºÜvðç¾}"@¾F'~ï$â‡u’>ü‚ûŒQ2GšÒnUkz^yâ;Þ¡.YV¹¢×W¥eÝÙùÝØxMSáÃÛ‚ÈãXjèj"£WÓaUÚQ²=º‚ûn‰Þǧ¸‰EÍRF1-ò&hOÄ/Ž9ƪx$ ´*òûggÆä‡}Ot,övD¸ÃðÙ}´ÎÃBTœ_°Ù9]ý|¦®©Icëß|s°ÏáÕã(¬óüÈá#‰£ûýëÒ­»& ­b¾§%{^õÃèTâ}³„}Á2þáÙ}QXƒXË“t5ч—浌üÕ}¬AãI¾–Mæm†l”fq3 ¿$} ÙÇGsbéºTˆØDí0þÜV7ïÃy#¢ìË7ÒµùÖA‘î®™0U9Ù?òX&ÄwŸ-#”ÊO‚¯’öm£wIÞ»î‚JÃ;®$\úæ^¯·ªÆh3Ù¯AßÍ£æ7å#£ž2Ûª¤ lXz6,ºà".mÖ]í—‹EyÆ$›‰HùcÕóÎ}àªyv0!òé3$Ò+7¨._¾WY&*/w¦”2i^áòÅ_èyh90¿î5^ú"ѶOã«¥`>k†*ýpÇöxj?o|c’e'éÚ™¡+»ø·sý×$CíÉ*|Øí“ÅN€¢Tæ™ \^ëü1Šý?˜‡¥Ò^x[ŸÅ
+±ð#xkL'•­¯Í+¬é~FÅýÝ°[p–» ªýñˆðœÊö¢äBõä)Q§ù¨¬9õGi‹ num°œQ#+ªsjJcìŽc¼n™÷±w¿$Åî¢ü¦‡wSD‘u0Lo)Ll¤¨ìÁKJêŽææaÌši‘½O¤)ûœt–·~õ±q¤¨y¿ƒ‹‰ò”TqÝcýøD}•¹¥âŸîgÌa})J*HG›`ˆ•—‰ÀÈM‰¡µ0qœóQš SžüF”ÈAÇ5Qßþò¨ÙÉÝ”²Ä1)ÔV®o!v¹ˆcºÜ©é}Ù¾O`éI5vÞ`Ÿc
+¡¸s’0y£Æ~ôJx²¢€YwãÁnËXÓìÄb>)eÚ ÚÌy”H,nq5-ŒÉ´?Þâ©‘Õ}c:¸»ÐûPGç_…ieÇî|2½AêxÞK•ùX ^-NÍík?H,‡ö^/uvf Â–f¾qQŸò½&¬P#û¤Åűg•EÛ›÷éçdN«Ðv[‰CÙ”.ïüô“`›ØѬäë
+tàqmëµ 4ÙíHò®± c–Ú–æ|xíª;d­LŠêö÷sM„¯_œ¥!\“v×Ao»>žF\ŠÕ»²—36£ë×ÄrÛŸl'å2“õ_n¦™Yr²V hÊBî/zhWEb>å™5Ïõ-Êœlµ‹Ð2ˆ2ç䔜¸§ËèÕ.ÝHNOî:é;MŒ ½‰>‰o—Ó²}2äÖ{•°ýRk¸(M*J`A|˜õ©ñøZ¬¹š€s^î/
+£/Âaô(q mx+}§ì®v#
+Vù$ž¹_ð­¿Š6DÖ(…¿œaj^Z}3Hh&,ŒÊ¤´˜‘hÚ¨>üêéK0õó<M¦L)ö7Åñ+5ËÖ§?ÿj¹K²Å¾^‚jÈY“场 #óòt ˪.ãHx©w…xçŒ{ý`at—Ñ|e$<
+}gº_Æ;#g€ú¨7…ñd¡»ð­
+=&{“^8’ŠÕ
+endstream
+endobj
+19 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-251 -250 1009 969]
+/FontName/EVJIWC+CMR10
+/ItalicAngle 0
+/StemV 69
+/FontFile 18 0 R
+/Flags 4
+>>
+endobj
+18 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 720
+/Length2 13973
+/Length3 533
+/Length 14530
+>>
+stream
+xÚíµc&ïÖîYê²»lÛ¶mÛO=eÛ¶«Ëì²mw—mÛ¶]uþ{ïyÏļg¾œ8ß&&3#ã^k]yÝ¿\¹"’œXI•^ØÔÞ(aoçBÏÌÀÌC$*¯ÂÌDÄÌÀÄ$KN.ê4v±´·3vò1ss³I
+âzê¯Ô
+æPŸ2tlt<:8ˆGÈÄ·ÓUê)
+òV”qï×Ò Ú拨ë¶ÞÂ&’jcoþ¢…ÔÐO± âü/ta žÆ]m Ð%>¿ô
+ŽÞd×£<ÀXy^Ìš;EkJ %ëœç‡ÈevYSžúö«RŒú=*á’¢ÃâT®¯÷)5‰Ï/^ñïàØÌs!Ëñ«:•×4Y¨j¶7Ñ‹zõ ¦6ŒçrÏzaظ›Ý˜âwÅЧðû•˜0öŽ(C¾ÚYç×¢§Ü]…Š5±è0:\qHAsÚS:ø*“ó8¤µFVÕ«~ž¬X7ÙÌØîù˨ò“,ʈû:2uïaÑ^ÏëOpxp†À-f‘|È¿—»]9¦B]"FÔzg“‹²3{†Ö9+o„â¼Θî»GUµœe˜±(=¸—KXè÷‹W±dp>§õŠÓµ‹ÄöT”ïHÆZÂv ŠÑËÆv_IŽdvÊ? ã¥r3Õó^„Œ¢2
+ªÈ )¿Ã.üYäG›Ù–0Ý]àÚ&-¯'¦*ï2•ÝmiÎCݺ+«Ò,#h Jøò‹¡>¬ ˜)z@)W,]š("¿MŠù°Ã>!¢–MÕhw­ŒŒQ¹ë¹:áÀ»:Èç—MfRÎè.T§ën—Ö† ˜hQ
+ÖºáW™NÛNMûktµê²˜gá(à&ðCüóñeŒ…²èêIq«ÿ*ñÕÓ?îòÅ°`Õ´<ˆúÜátÞä$µIùè ðó­ÖFY×s-»a;cP½úT žÎK ÛËÄd-ŠVN®Ð ˆ«rcQaÐRÌäÜÿ°åtþ´ù¹CyNÑÜtgÅнüi¤¥Û/UÙ¡cî
+yš;§î6h|E´eyóìÄ€—Ï–ü‹Qβ†Œ‹JHS ¦UvÈOóNÍ76E}”§Å)«õ‹·_bzÐ7ny‘n¤8´F`ÇÏ7ÖícÀ#ù‘Ò©Æñ‹?N%bîqÇã•Âü·«›µ¦$Üä Œ#ß'yOû€7kþõ…ßQªìÊ
+ï9üò+†J¸~_QaçaðõK@çX³}„´æDÑ3Ì©¹E®ªôÕu²?2s<ÑÆdQŸÒvÇŒXh.çøÓªÞp
+‡ç–oÅbÌgªL¤xÈ!r4ús…PÒX‹lŸ‹ÛÂà.¿­pPéR.1-[J±”•4oe…‡8 ™×·
+Ì\bVP+«<Ç-ˆFhX”Ž!æâ/ùõ<Úy¨’yÛN_R|Ôœ¾ìÓëq}z|ÔÖJ$ÒêÈíOò—ôfs&î݆q…‹üûtgmðAAcLÛ
+Q¯Ü>„8z%…pƒ4f”qÉ
+XÏH#Wv,Xð7 (¹œ½l}oʼb&]@WFÜѸy‡à>+G˜”ç?¨¨`„¤”²Ú¸ÍÍ <'Lkµva­H^øì™ØÚ ÒV;®é¬<…Þ’ "àµÐÈ\×1Vu„ñw‡;þ¬T<õ™’zc?²‡Rœ.«Y¦•Éz-]ÞqK2Áli/# }Þ?[Mo­˜¼e(¨L
+ˆ‚–jOdôu/‰?ÜFÓÜ€?ÊÔ±c6 Ú–ºÎ_.|ëI É!œ”\kQ=k'ª ŒÐûlL„#]‚¨ø 3%J
+Þ0®0„ÆhŸð†%²Ãã,E&F§$iô)fò} Bà*Ò}„´³›‚ÂxàêxÖ5†¸(Ö
+_²Ä¦Œ´:ÇÍÒxfõ櫵/Š©Ê íG½y&&J:ˆØ$ Ž-ðÊê?ƒÎî‹dK³pšÛà¸Ú)>P¤”x->33 3((ð¨x{<‡KOÝ¥eÊj½jtñY§¦ÖlŽPqñµ€•4ЦùH‘á¼°TŠe1:ð”˜GØ/þ¤S¾JþŒdâÛ·GQ5¶³Y߇½ïÜÆZ$[DYÄ02q,Ì£ÿÁªÏs\Üd åub–êO‹P*5„-HÍà¢=$ʆw?ôg ’å%æf0w¼=Qôoœs¹¤Ï:XUß„Ç‘¹Sú
+°Ù])’‘®¶CÄËV´d
+~%CÈ1ß,ÙïŠh´¨ò*Ü) ã+‡‹‰u¡±èàÛ‘ ·àŸ]{—“ªànÜ-JÓ–/Uxç˜ÅØûwa½6ßH‰ ÆíàÕW×±Šë.£8ËÈ)¬C†™yÙXnbN›Vk•<š/5Ž¦dá³=ðƒùô‡·ˆHßaý«U#h#,À2«  P:¤_ÛUx—# ¤Á˜ÉtOç\½<Æ?•´Ç¥ÞE5ÁrÊ„Íu#C„Yk}ûµìêáã¨ÑÚ«êX–© ™2Yšl(uŠVBÑSAB«6ÇÞ.ÆN¦*Ø¢#!{":_h¾êºØ
+ê[ Š9”T„q_…þAv7Uû¡rN6³à‰#LE*ªáÒ™µ•´$1YŒÌ+Íþѽ‚l0Ì,KÍu* 1Ýd;=C÷÷þè~^7Öõ«ahÿvÑjïøuĦRšÀÇúƒ‘[о›¨qOÎ^‘¯G±Ã‰Ó5ìŠÚ„ ùÎ Iel½ežœfÀ¤*ê‹"ÊȼZ\<€¹7幡…E°@Ÿ4¥CpJá ÌœëMé£lXªè™»ªúS5GÆÄùŽöòK—vjÄð}û°G~¼‹ùºTŽÊäÇ~pF ,¸«z<ÆÀ™Þ¬û4c6
+©‡ÌÐ’|Fˆøö‡Ú“ úd„A!”óÛd¶“âqŸ«´Îq%_n‘íx#:*ÞÆJ¶ª²Cp˜‹þ› N)™ÍK³G}Ø™º»}*¢Œ»Èa)êÁ®D¡rZu²¼zÅÙ\9ÍD¹=Ï¡²¤²¶‘û
+÷±ªÜ‰SVüàôÊ‹J,Z§ãïWȬ©$Xﱶ[ÜL ù®ÇŽ2Ö²G0ØøØj a­ê#dùNjGÀ#d…xšã:AŒ¿ZQ|Ç/ Ù‘È<qÉ<‘O
+6/ê˜ šý¾if´ÝÄæ„ê'¼ß4ýÖ/Òk×"Ù\ÎuÈjéP{¾”ÂËsó€Ú;9]Ò¬ôÞ(Ò}è¯êýýJy2 r íÔü"oa˜|A1ÿ»µÙ…1‚Ÿ?Ê:"KÞè+쟿]—ñ&­mè‘Ûq®•mÅÌ…¦ZËD䆫]FxŸûrš@°ˆö6Œ:­ñ .çtDœ›EzìÉ ²T"À·õ‹·4™púò<Æ
+y&6^Õ9(Y¢À›
+ì‡3À†‹ ?6‘EþÃk²ƒ1>ì8 ‘÷Ä·SùC!ÿÀþª¹ØHþíìÎ\qþò¨¼Kp-Åé*öbÝ&­M¨ºhf¯+Ê«Àí|¦zk@{ê î9+Àµ‰ÃÉå˺Š÷ESì#uæÚ°ÅÈŠ+€¡öó—“îü±‹jW
+Œƒî·1Ì¡›ÓÿÒÎß+‚›ÎŽ—€ÎW=8á뤎ÇÚ߆Y­ÂåcVxŽ+”![Å«7oÌæݺB2w’ Iw!'½dd‘í ƒ·#úË@‘Ö¡;N½mªN¿#†¦†,Ði±˜ÊEÿT¹4¸Œ¯2_)2…~¢êÖòÕšIÜ/pFì$$â€M¤‡e5ÔZH ×5Q”%d¹O_R¬ëkÄ3EOù.:¥Ú›é”ûº.ÿQ;‹ïf§sq)¡³¸ÞÖßÅd9ŸE«¥Y¾ww¡Pvçù},]iv¸¥IcŽ±­ûfo€žÏa Æõ—”TÁ/M£òÇUD{X´²÷ĨŽ¶‹òMH])g|öàY"i0m•%*®ÜærÙé1>„náŽ[:ç÷‰Ý3Ý/…Y8<ÓËÈMIª}©Ä9(‘HÃ3¹b›–†&J^B´zèH]xWãOêáCZ§¢Cëàžç1„Šô^MI·{´›ÐMg.ictè³TR–Ê ÑÆ
+"Íø90Öd´f²Øvvå!äñµÜI™&£¾”†8§‹Š¹
+é6QiÚ¶$wò®]Z“é¼R¡º@G´ÎZ"ŒÝnSxXŒ$èþ~|ºØ!ˆÔcì)Yû &îÐÆÎÑœbÚÓ
+]Ç
+UOéå77Rd¦mÊ@ ämr%Íaê6æVBmÎpì8ý€ªãÆ÷r‘fs¿ø6ì­ö¹{}dç—}q³_=Ï.Eñ"ï&áWÛ0uã¿?Úf.ø=áÐ&«KQ‹ìÛR
+—/Ê@€ò°É:9õ<ʵ@nL‡ØrÁÁ÷UªBDW¦ï§ýÛeîµvÄ#òçç´ùÚ- mÅÉN}»˜cÜbÿIC(7Õäøá{MÚÞ^yBN!n7~j¦i 5AŒ¬™ PTݺ]€-AÌSMÆ–T½¹bÞV8w<.t èý–±uÂ
+À÷Âoœ²Žœ®=à‹BF"áms F\ÆáBðnÁ½¼]äwB- 7—ñû$ ±sžÕã¤wϹæ@q£Ñ€Â`ÃIµúS;ù·©®£êÚ}tZœæ/ºóc#4âìmfvXKTÐ6e5
+=8êôš0` Š!AŽ(“ðHO¿)º÷=òd‰ÕõÛbÿ¶øu|G¸l2àe™™mcÃÆÚ©~:»
+(QÒC‡ø€6éõº
+ôø½·Šé…šYX:¥ð9ù°D÷–EÿÛæù¡ØqrË>Ê®Ø枨 =ÑV¡0<Àá5SÝ5m¤™<ºycÀ윙ÒGçÂ[ت½hÐyÙ Õ=øþD'ý6 ‘]ýCòºß ï›}k9Óàvéémá×WåÞ[x=ö!C
+ƒÒ“æ~=îÏ! ãþq.,í9p£~½4Ç%$O3‚ý9ÕûGÆb
+ü™|sŽ>Q—Ž
+Ÿ"v:WÍ|DänÈý°{~?5=0³ ßêÉ/°ÜF–¬_ ÇÝ}ëŒ]2AEà=;Ï:
+í ÇhÍìsò¸QÐÆü~ˆÑÞvú°0 ñNø¬çT‡’ÅôœRHr(á^(“ºz¥XÛd^2"€BN‹]A†ÄµÕ„á.ÅIœÅ\ L}bHÇi?Aî†Ù
+úØ{û|Ĥ˜ »¯,Y×Ú_²N/çr‡îï'b­Ë®G¤÷üú2ÄJé´_àöW´4Y†&"ÎÛ$¼Aq~ñÀ_R‚²dêeyY\o+ý¥Â8ü<Åñ]Ÿ˜¹k¦”@èꆂžö$EáãlVr¸–õºOŠÍ[Db ¯Q
+n.)˜[õx‘q©y²á·t^rÊg9C Á°NL\«é~¾™8wŸà¬+8îP¹‹E oMÉBs¯iJEÖáž­’ ­jçStjT³ƒ
+ڧƴ¹ìØ/ºÌ?ŸÙŒ½J`²¸wLù{î~°ÙƒQ_å0$IAö›þ¢¯ê‘êàñœ(#¦¬1j‘ ºz+ÀHÛLá¨èŸÀèsm†÷ÄîÝÚ˜}æ/#c­>Ðã³Ú{ì‚ë9 Û²œú9¬BŠ[b}´Õ:ݞŨ9çxƒv¨CÕ#Rq¼<)!@ÞUP†V‹Bré|èu6¢Ÿµ/~[ð¸(Ê<[ÉÈ®/›·)†Ì•ÞÇÔRá2Œ^#2l+&£!&ùÅf Û‰Û÷”YSMæÕ`;1ó.|tïNýfš6í?Ò¼«ÿ%aè¶1Õ±µû6¹dAþ* LGag3,P~ªù­p&2 57 (i}ÅõgžÜZsØR‰hö#Båa‘a>aç×ù9kZæÔ °nŒL¶3,ã{·¦Œ_ynn¬Œ)IPÖÍÍÌí®‘¤´FÏAdÔ•]¬…Å@v§Í
++~lF¡#tý½²;]äÝ&ä)"¦bÌmüU3{…~ïóQ§^¼á`Ê4h{fÁ„Šj&caÂ%j°ôs#9Wÿû=J9yfpX±ñ¸Çº–[õQ®\«“¯:+zÉŽzé–²\YVÌàÇ>“AàËXõ=•žk
+û¥é#)7ÒéøîBýfÑ¿A™‘çN‘èÍìçmi~<«t ²í{ËŸ EçP& õbt„/ˆ»ÜoX}OÅNò#j¢ñbØ3Šf¡ÞjòBf“?´µÊ‰ŒÆ
+8( SOE„ðå¨}°x¨}b¡JíØó2zcØû“¦Uýzëh¶¹.<°ä© „{º¿´jà¬W4äÈde˜z]´Ûl]¶ùêã܆²û€‚¿ÖÑòáSÛÄ¢JúÈû§ƒ¥Ödf"PÊì ] m¿”H¹l‡ÀÈÆ= ³MƒQL¨">H,AÛ€}®ô¨tÂMg[üšÚûWð«Ö ™s=ƒ±ÀVÄ‹‘YŠ¡í°m’ìíÜa˜¤>HKU'WEGÑ‚óðIþ|M©£ ògþfÓ½¸C”?ãÚH0xV&‡Í/¦Oü«nÐGq‡c`Ê­8Ù4 É' +Þ::
+v[º!¬¨a° z
+»²æôd$ºYâ¢mÁ²f6-Œm:ÑÈèž=Õk«Tì_Ú0dÀmš ;c¬†;Ì΢–ÁšR!5$Q÷Ýz¤4X²Þ¦mŽR²kĸ¦ ׺ŸYÕŽFÁå É“•ûᇃ2í
+¥Ëež= àÑâAæ–æ_6ö°
+ Ñ=—
+JxÑéµTˆ%2 ÐWlŸ¤~_/d+Î^Á‰n%ÐØ"« ÖÛý×wÕí{ö:aGQàZMŽW ¿ _]Àçß%9|Ìð`ɶTIœÛí BÅ
+H»]ˆG‚ßL7 ‹¹y^Á¡ë!ͯá¯p"Vt‰GFDíâ;Æ¢Q*˜ú5ÚÎÈ3Í4ñ ¹„ßy3pKJWY›/^ã¶&ÜTÙd˜ û‹Ùuë`…(ƒ‚TÄ0±9œ U–·U‡sv¡œŸ¸):zfÈ×Lÿ‡ìÿoðÿ € ÐØÉÅÞÖØÉö
+endstream
+endobj
+23 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-4 -235 731 800]
+/FontName/XBOEEL+CMTT10
+/ItalicAngle 0
+/StemV 69
+/FontFile 22 0 R
+/Flags 4
+>>
+endobj
+22 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 719
+/Length2 3614
+/Length3 533
+/Length 4164
+>>
+stream
+xÚí“gX{›ÆˆJè-
+E¤$ˆô”éE!$!ä„š4)‚ˆDŠ U@PŠÒUšá "à¡"UŠÒ‹(²Ïû¾{íy÷Ë^ûm¯™óÜÏ=÷ÿ÷fFVê²¢ÆßkâO +B• š`#¤­-†*A †@YY#EÆùŒQd¬&ª¡¡6 ’À*ê`(DSUåðeÁFþD çåMËûÓøaI84Š
+¶ñGã°dšl€Çƒ¯üùH
+6
+Äb”€@(ŒÁ¡É`¬Ž
+°8ÿ÷úW÷2
+G ÛÒˆÿŠýÓþ«†þg}8Ž
+vzh<<ÿywõo«!h Žà¶!£ ó/áß© ý©!Šª`E˜ƒ‚/@ aÿÕfGÀýFÁšƒÕ ȘÊ/M!‘°ò¯ïàp¿ÿ¬=q‡ÃÁb©X40ÂÆ)·,7‚€ÜŸ‘‹Ø}¥mßÇëŒ$n̘
+}rvóµÞh/0TvWM Îmþ[ùσîëf£îußÓ^4i~›¼nÏ©oùƒ_õÉ·÷Tws8-ÝÁüÏþh´gè¥ÝÖvVnáa:†I:ãî«XZïVËÅ7XÉ_þ /ñ,åý·‡UhëLCéè·/ë{ŒýF»>
+fÄÇXR-|\È|DprIQ|XŽš(ØëX/¯=ê9–¡òUáôšyúébŠ‚¿x$"6W€ûçãøÐÅpÈSûÀ2Y8#G³”»%êq™¹þ=ΨŸbqá׸’.mIä)´¹Üµœ>nùr°Û:¸rÙE÷mœUb a±üX³ßX;>ÔñlIÍ>à3 jpw7¬F|3»‰—h‡mœqµ7¾öJSÜ>­äˆDÁ3ãcS= h{@ÑÞ‘pÂXeuï>—‡ž>(fæ8¿÷Ò!²jdç^2=0ãXU¦n& ÊcˆM(Ük RBýXÖäð
+¬'xÚ1«’¤
+~Eá½!(ôdSËÃSííÀ‹ä¼#¶;Ç]›º
+SJI4e—ðÓ&ñýn{›a¹ô½m‰»††èÏ/•ót $‹ŒMQeTgðχ°yjjF2ÿ^Á±»QÂ`hº¸²#2‘iR‘)zÚÝ‚– *Ë ívð“9›^G‚æjkR&x<SùÄ=$$óëb3ÆûùRn²A
+>½×•MÈù¼³ò’ŸËDðÚ¢öujâCæÅB6Èñ€¶W§lí´×î¥ðíÚMÊà ø›…ØÞ/ð׸‹,ìË¢‘Äûr¹WÌ<'ÛµG0Ü$\snWϼYX½,¬CºÀ‡mü@BØT%ºt#2m~+e_ÔÜu_šþÈeôüªÂr˜V†¢Ê#1úy
+7þªFÀÏgŠ1^ÀŽ·½us®Ÿ¤¶ïÒß«LiÊ'>)
+Ûùò¦—rDk/ á#¿‘s*:öCÉ3oé÷
+!ù“<‹ñ1K;q‘áÒ é\õ½æ¯Æë ä,Aú,r«…sÜX?KŽ¹¾‰Á?¨ZS‚$ª ~¶næ’c§Zœ£KjƒÝ Æž‹Š¢NÞy¼ [çãÜaЬ­'ñ*.:ÁºûœkLCXÝÃÕ3²L$Å
+šÂsªõ “l'Òr~Wd½#>Í1ïV .)ðœüšwÅî&ù¹žËÆÍš¼¸g @vrÈ|BèèS)ç99Íïa™ÁäÀ¥¿TƒŽSSrXÊD8\“âú
+bcU\݈§g |b©9ù§­µ‹®3I0Y|DO÷õŒ¾§>9T¯ˆ¯jWé, :-:Ì{ó¨g~†Cîܨ 3ç°c©øá% OKt Ø”‡×ë{¨Vò”Ð:»8ÌÑštÏ•¡é†ç2¥.kcæ©Æ V­H‘
+HpâèôVv|O£¹#HáBynLoÜ<Ö%UºUwí›â›2 ÑS™o}·ä'¸tT)G[·qûùž†)ÂO´éÃÌ{Zi\`¼üËûGb%\˜Ž~³êfŽ•í´ÚïïNÚÕ÷l(æ 8ËQôüÎOúÍ°|m¸Ùjû¢mÞjC#gž®5tEØ«@ß ¾¦ýðX­ßˆ®ªEtÛNW5x€oJ­ti¥;
+\¦r Ü|Æ;–=ì$rQ!@Ê@Ì’õ<ããÆÁiZ¬Èi‰žÎyªíuôDjÅ0¾±ñÇ6Û«<* ºô¸›ÃÝ>—Í7mÆJWüÇÌ$ÔïT=|½¡("w ê˜.4q›+j¼yöA°eèæü¤»zlsvhŸ½o+;KÜÔBÙD]ƒIø¢wH·à§¶þS·¥‚µ­hyf»¡HsôÈñ±GðI¡Ñ•§·ªDp·/\+5ÕM1]³Üò=ö…F»mþ Hŵöwœ¦Sà—OU(ŸwËQüÉ/xhgvžXJ§LÂZøì¡õ¦]®Ö„Ð72B>ÃDÑÙòû͈(í~ƒ÷åÏ¿Ö&U3åNM7Åû·Û
+\/dŸa§,»ñ…Õ~lúòJ¶cÕ«,Té8ðËlþ±¨›1ÕòÇ
+o5îa*íóR 5Î5IHàfúbBì~-¼\²F‡¥l±"MÓhÒ‘­Øn|¢ ¼Y[œ
+Ú”ºåÿñâÌB8 ÷ê· Ë) $«t5ºNó„ÅÉ}î ;¼ØQ#d%N§£Ö
+3üki'¯{º#’HMn|åëô+ºu„~ÚÚ»¤’ÃТ­6o+IWv«6J3óÚsÚÙEÔ‰òT’ *Ú³`úQ(ˆÉÛ|NJ59@ÇÙU®x@¬~Âr\ú¾gët¥ï-ÀÑÉÞ÷«ôÀè­˜,èjke˜ºÊÃXFÒxQöb#šÂûxºMKî£Ñøe
+Wù»8j¨ÇtR°ì”T¢!àz4Ã6ÁºK2SÙÜú‘Å-”Wúm;†’àÑÍ´cVoœ¦­K(©ÝþK-®Øt±qŽE»Õˆ —ëDvó™Å‹cV[=°£„Ï9`_«„®(<x]¦5\ÂݬBQ¡b­lBª?Ö=ÿªØÄËóB :˨¬…øü|ÄF«vIA\®§» ŽÁñu0êøøÃÕ.ˈ–À–ðŽ ¨vÿ™déçŽV4ÁÞƒýê±›eFkísv©i‰•­·ñ³]þ0{GE[OÆ$"ó{x!ÿËøÿÿ'Ðx,ŠDö÷C‘|Àÿ
+endstream
+endobj
+26 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-62 -250 1123 750]
+/FontName/BDJSYF+CMSL10
+/ItalicAngle -9.46
+/StemV 79
+/FontFile 25 0 R
+/Flags 68
+>>
+endobj
+25 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 722
+/Length2 3626
+/Length3 533
+/Length 4181
+>>
+stream
+xÚí’gXû¶Æ¥ˆ¢€C EZè†&½6M:H‘ ¤HDº [zïEzW*EŠÒAšŠÒ‹t¤H¿l÷Ù÷<gŸóå>÷Û}îÌ—Yïzçýÿfͳÿf(¨ˆp¶Eª9cñ‚"B"Ò€²®¡Ž‚€À`eŽG;cUàx¤4 …Š
+öCùôY qþ”ßüí++ÚËd¿)Ê
+M±¡ªŒa}Иn
+ÒÖþ £j´Ši<º/®–Ús¹ßx‰8€ÂmÔŸ"¶ÂŒ¹Í\&W
+¹ªxIÖÔ¹HkCGÁã´“©ÖRÛjÍÒ4nC"Ækš#L‰–GÛ¦P›’¯ìOðáÌ+TÔû……&§Ùñ²WÆõ¿¥_‰èT7~2Ð0‚i„ºÒjï7t³ü ¨˜¿JCØ«ª²G<"±W>(“U„½Lr€)û ´¬XµDä?ô÷P]ÝƦKÃBgÉA_•~”Ö*gër”ta=^®B³37í,­ŒŸ?a×l¾Âª+ÉñÞìÝF>™cÛvvÂgGaÞ7­&‚»_§©Ù“Ķ“}Þû–)¨Ê´VÖGÁY†Åí6BF–ù›” ÎÍKˆè9U1“@ëõX‡‰ ®
+kUÏI-©èÒìWý3r`oMLÚ¨ßÌNPú¶ß®âì–«ˆš3žN±¿k(þ“þÛøʃ'·Ú#eFñ–ñ…`æ…K4Ö‚ŠÆY{f‰Ôô©%{.Û„vý­åÚrÕø‡ÙÅ'8[S:GYÐÄ÷uP‰~P[rØÞ¢rò³‘ŒÚ!¬wZƽ¿¹?5¤!íPÑàiXØ!Ñ”y.»·]/zYØé<>ò1Zo$ø3¶–&>×Õ#“HnU ›¢±¼îõ2-žð}ü‘)….Øå ÆS>æëÙKجʒ‘?‹\OqLíQnFî¢ÃÓ°kù0˾éŸcAªÑ_è={þ’GÈ+GÙ{Gðê¤\X¾~/ªCÆp7¶~€M¸£a•Y1goQº!QÂvÊ>”ÇÀ¹’µþ ©#õîf@¬ AUŸsn¶l¯û•‘c­ Ö¢Ä7E>fÖ³ìËPô[øpÀÍ{ýÈŠ~dýÒU%|O<³N;ç{|öÄ
+´œ|.·OÉE5ñDª`²ŸŸ¾«\ÜÉÛ?œ$RÅfs(.6¥ÕåúY= ø˜,nÄQ‹Ò©K_ÿP´{B€¹’7»ÇŒ3Æm¬ßxïÒÑ<ž%áÊWâœm¾¸më¥/"«çW$ âkz¸0‰è$lÅøeÚÀ£<ý“ˆâWdCOñ{Û§õÑù‡w³8uýBnø‚I¨¯ÚnZÓ•ÉöäE°éÔÔfŒ‹Ê‹k[pDÑ`f«,V³Úô}ÅG'+~ª½Ò~xÂ]KKÂ,v|v«Y÷f½ã×e7Εîþ©(P'2=sö£lнØkž…­‰³Æ"
+ÜàÊg"ÔµŸRû
+“7kTîI¨çMè´Ù?$í"žjhq<¯ó¹,ÓR]Ü–•68_ZJF6ÚÀ…‚,ä¯+~yUPZúÎámsÇ|û|çû¿Â…ÔÕÐVMShðµÑ˜kõ*àÓˆ×ÜùÞl6†/ˈ޺æ¤'¯]jÞ0sÕüÜ9~éE ßj€Î©“â:‰}ù]zDcŽJâ x'£*Äb—2+ê(¦L’ãð¶K¥Å`ùÕþáÞv\°ƒ­ã›…â’”æeÈκƊãÙésàÓ^Uã[»€¶hþ6±àž½ZØ|÷äyþ?àÿD€ Çáà8Gè¿
+endstream
+endobj
+29 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-39 -250 1036 750]
+/FontName/JVBQOD+CMR9
+/ItalicAngle 0
+/StemV 74
+/FontFile 28 0 R
+/Flags 4
+>>
+endobj
+28 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 712
+/Length2 3400
+/Length3 533
+/Length 3948
+>>
+stream
+xÚí•y8”}ÛÇQ¶A–l)5Ô l3vŠŒ]¨±oYf¹ÆŒÆ cì»ì*{ö-K‘ Ù·ìd+B‘­H![„ÇÝýÞÏ{¼÷óþóÏïñ^×?×ù=¿×÷÷¹Îëw?ˆ
+žDÔ@R
+â^ò®È…ëÏý ®Æ6oÛ¶yyñ•Lq_ÁöÖ[ÚRzvI|èt•dÓ7à^­u¥hŽ¬--ëô&‡âܸÞ!pæåþX§ã¦ÄJ´±{¼r>j¡ŽJ =¦é¡/ši·]NGPÇXæõ*—:íç,zhúCUÜ4`ä…Îz¼B;¶ÔÊ”šS²|ÌCÇ8µÎgCs-kËO5±ñ._µßHcØì¸7߬Éÿ,YU¦ís×IçžÛ‹Ò°O¡R('ö­>Âo,×¥¥vþTüi&XizŸf n¿ÊÈÿËÔUëA±Š÷ ©Ý“"qã¶z¼¬½½Ð¸áÀS&]~!ÏpøªâºFíMfœWJ°¨»QÒìb–tñÉhÿ‰èüÀž¸+»ßCÓÝc
+ÕZu$²ÿ,ä¿¡q×ç‘íÐíÄ-~i`yëj×%ZU·¸¾^öÁQŒM!ËCf¦„õðòA6SõæjÖÈ2!= QiQ«d]3‰†æ««ˆ
+û†Žë$âÍ›•¹ÎìÔ¬Ôªæ ‰Ò:Ž àç q¹ÛWÜágÆÍÓpþ Ík.­­¼è‰gÕVZ*½!­u­QL@dHÅøL;Ú_„½>†å$!R¶¬“>[1ÑzuÂÕ“öÜÛ~ó0¬ø„ê>óó)î‡ßãŒY×<±¤g‚Þ²‘[LöFâJÀJ uÚƒ¯iôŠ94^Ú|Ô³ˆÛ<À=¶¬¥R”ƒ®.=º¶Ü!gÜTy«ùm3É)+wûôgib[5GuHþ/¨qg¥¤ìN]w1â´TPÚ~O²‰:>ñùp†í•üÈÃ0ÖÙ'^¶EŒQñ]šõÁ“.O]ÎÎÞ»ñ‰}Ä#fcf;Ìü¹|î°§àpæÝõ ¼éV`öƒµÌ&7®Îorç–tD,xŒÞpg4(…Ò'„›%v;ĸD˜ÙÕ
+ydãKÇïú˜r;!yVs†©yÊlÁÚ47¤ŸÎs) Ó÷¿nØß2¨_ Æq,+ ‚fÅU¯º„¶Mµ ³¯.Õs–ÓίÜ?ÊÊÿ1—éØëaxyÐ %ÐÌ&0jš¦è¤¦ÏùŠ;‰ºQC Šó~ৱLš4s礪}5Üéó/œ½_1'ñ1|¬>,sòN}à‰Ë¥Êì.†Ún®ö·K#n©Mš->¦zVn:¿€ß nyutÖL†7×6—t7¶éXSeòíÊ»\ÆAíI‹ÄÜq°Vø…™àqe;ÓƒC›X
+6ª§t#„=b&¹_LåÛÞÛÀ?ürQ­2äŒUU—Dá½t‚i®“ÙŒBöuÔÇ°ãvÙôÓ<^å„fë3ŒŸ°¾q=SõjáOaŠ–3µuâhÝ ¦y+L×:FÕž8ü\K|tbsŽÃV¡|=·šÓ<ºËtöÌD¬|¤¤NÚ â–Ïh|žë„ÆÀ—=•œS¹5Åõ×ñ1èÅWp"r™ï§SÑ+ç³®UvfEzÂBEå&ÕS7>Ô/%r¨ù&'$}¯x Úr×®–'HÖ_‘ÇãëþYãÉ“Ç;Í#äóÊEq~ ‚i)òƒÒ )VæB Þ9¡í„<ëÏ°sïñ£bð|¼ñÇ…Ü3™-$¢…B­#¨x:Šó.!£öVÛ™7¥öœ#Õðgm׋·9]ú;¢Åß<Wíg
+ü¢:‘!oVJKÇQ¥zezo0¾™V3aqR*ßPËñMç¡~JL*pË·((ºAõ­°–u"ÃÎ|MÝÉ&9ôl77ÇtÉ®A©f¶ á;íÉꥄ¶¹ß‰}uÚOî´µ=S:L³4[¦}bŽqëzÑØŽw^O4C~z™©K™@[Êú¡lÉ.†ôææ2àoÉ;ú,k%åT9-¹J„Êå£TÊ
+<Ơͱ …gI9¥Nù…*¯­¶ Ê|
+š³ä¡A‰v
+ WO_|(˜U“8À€ŽÜ¦¿Wãl4p9„ÎH”à;µåš¹ö1 ôNoñQ¢ÙV­X󱵡(«Û9Ñdö­’"¡ø]·ìk·S¬ÏËW-&´Á¦®„›‘g®k"ïì~¬9ËM.×IêÉ;X¼:qùgå~ždšß6ÉQ¼Âs@u±<¬2º˜½¾KkfO7èÉÁ¡÷4µkšÅU \Ÿ±fáTQð£ÔÑË¥ê4·ÀÚC3Ù*. Ú̧Ôæ]aôóHó¯'mó2ñµãy8¾uOæŒ6q³Ô¸Áâý ÓECU¾²«Xäb£Üãó’íEëo Y×F}#.úçñ|~Ž_â«
+ûV=ˆ~9îÕ9z‘8).Ϡ̕°­‡¹yÝe$ǹñµÔA™îà¼Õ=­¶CJÔ4Ð{áf·ELø—Q¯Ýûu¯Í}-†øä†òm4B;f7w+úÑ‘rúãK…ú_Q_ítÊRU’9Q&ªiAi±—
+
+%6°KîÉ4ôŽB§°•ÛUÓ–é«"ÖBrDUZ…~ålq?s ÌOöDaEQGz)Rë&õI柔zäh¨·õÉôê`ÔÁÛ`þDè5ø¥Ëͱåd’]ÝÆ\\Q6 Æ–›K¿63¾7q3öãÄÀ–Sû±h†IËí\?‡çï…»• ß—FC%¬Þa¬ (C«–¨¼ÖVZgî€t×u¬Ï‚#&¹šLÇì+©vwhJý„j>'b¿¿²¨ÆèöÆ÷ÞÚ¦Rßlõ”Út(":Í¢ò¶èÐx~ïÎØÜaA“ºfï¢:²rf¹trŸ™omOç’k„°Ežˆ/QÁ”¦@¬fËÖg⧺&.‘íôܪ®˜n hSX¼£‚jÿ±<|±ogŽ]K¦¿½ W[®H§ù€g:­OãßR"Xc“y=;5ÞFÐûH,tûz™EÏ-òxÞðS†Že^òŠvP¸ln‹é)dNè€1ù^·W:×>‹8w2³üÅôµrv؆t™ÏéýVÅ‹»íÄ'ÀTB›5GrC¤–¯‰}Iþòq•(3aþÖâ{Ø9ÃÁ€ÅyªæýÈhÇXïõÊd…%]¥äo !a¡ ãŽà-á€é!u¢›—‡DŽ¼ù¹ìS¶×ž< Ƹ*‚# ù3Ê£'²™ì³ÆvZÊ®Õ$8袑s'–s¼W"³ÇBB8ßËÄD¿ÝÚþ0ý3)æÐîÿî#aIÛn•vø‚©WΔzïçól?¸mÒiSŠm¹¤B;º$5mg8δèOî_û”ÇóÚ1kÿÓìUOshMˆU8µwtK ºkþ]ÞûÑŒ­/}ñâó_ÍVgªg¸ˆã:Q‹—o^+Ú{Oa>+¼¾–Ò4Ÿ™¹zšªHÁ è<”hE«Ï§‹:wTÏ‘ ­/÷L0XS¶N[ò~·'@E­û>:Ç×jè]ÆÚ«Öa¹<[¢*sñÑ^ËÐvÝEµðÎÍ̇%ħÌf§=¹>ì3¨­<‘ ×lýnl©{ùM‘îƒmÔY$§˜0Œ…&f|õ¼ÖÖ‹.e¥/SuŽ€Žn¡¤'\÷²îç”:=žôh%µóçß?½& ˜SGÎâàiÑmz]+Q»~ëŽè½06Ô¬xOÚȇAÐ{<ëÃ}k·÷INk} ††V
+EÛäëÏ—>qQ¯oŒæë—¶å`ºå räl‚±LðšÖœò6v”Aï™ÞÄÔhÆá
+<3ätžD’¹ñ.“'TÏ7A øÁB¢F€ÄËTxmâô!\ªÕû-ƒU É ÏP.ô¨ 8=¨nÝx“€Û›B`ÉB}2Õ+Ž“…SLr€°·}çr­ØÒ{Ui5ÇKéøQ§þtTŒV[Ç ËXŽ+Â(³ØrlÁø“…»9‚_LxN-Bî0-…²+déöˆBY%Bg¿ýº¢UéNñµ«økêÓ—Žª+ûfëÎ9<ª¨bñ Ф\ÿm>ÕÀGÿÁ›ñs߬n<o=¿–ï›CýxÑ<aOßjG»™÷‘û¾
+ áPW?é<ÛÈúÛ¯}0>Rð¬TEö05ÄwããxUí ñ§¸  ÷,²Îsè\[;ç“5~Ú5»áïŠËÅXi~¨@P+!}dž’ƒ »/Ÿ­¥¢óÒ&yAO¨ý$>a=r²Æ¸jNE¦]‹UQ<¦‚l!yãrÈ-ê’1=gáIa^=2éûÈ‹¦ÖýW‰…ª¿PFù£5+X[-ª³1Ëýު߈칗øp¬3= c.a»ú[¾Ç®ès$)‹¿@œrÚÓ²iKÑ6ñü\83UyËUÆâU•MÐ]Çè“”`HXI™(¥x  1†@ÿà ôÿÿ'Ð
+endstream
+endobj
+33 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-23 -233 537 694]
+/FontName/DKMWFB+CMTEX10
+/ItalicAngle 0
+/StemV 69
+/FontFile 32 0 R
+/Flags 4
+>>
+endobj
+32 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 719
+/Length2 6040
+/Length3 533
+/Length 6597
+>>
+stream
+xÚí—eP\[·®Ñ¬q ÚX 8 înÝ@CÓ@Ó¸Cp \ƒ[ ¸{p÷
+óú_'Gg7$TuCð—êCþ¡S…€¡nŽÿ^UBZ ÖÒp[ÈûO
+êúê k@‘Öv@$ òwÿ;ßÆýMÀ#§¢ªÿZ†ó__õŸ²†%ŽÔñrþOß¿ôÇ|ÿ;þÓ!ÔhÌËÍËË÷GøgüëÉôߦ“‡[;¡p[ 6Ò¶D€ÿ3ñ_±ddœ<}¸øAÀ?7(
+½ðû?uºp¨‹DI(ÈËË+Â/ðwÖÚ €À‘o„?+þWlýÓÄb ÈÌ"…¢š¿ áüeqÑ=Ï ß:¾ è(:L¼Ì#›:Áar/Ú‡‡:h\,áÝîkĤ^³ÑIFÔú«Š%t_šõyy=¯\%ã°m7Þü%Zûkš¸Á§ëÓbn\Ç™'èc†I°vÎC:wžÐS6ÞÍúw.ƒ+8;‡—궣vÚPD­çå=T9³Í/kžÀ'dÁFÄ^5üÄ~ŽÁ ÐGÝs).Ý€ÙzE‡mHJ&QÄ•ãUðb£€ºàþÝç+ ¯¼Æ’ÂÉ=G¹-âY(ZK©zA!ã/ÍZâån Šä'Œê¹(‰ózÒ®Coü%¬6Ì)§œåQæèíÏV™Ôß¡`ë ìÏsðÐ~OìA+Ÿ+gHªT!S™Ñ,—•Ì#é×JKŽúÂü!S!™gßOÙT1x0G}m®wwÍ°ÚFá-ü•ä1ŸÃ.z<˜³—±¬ÍM!¸ŒëË…™û|(Æ’¬šbéi¿
+"»x-ýŽ©ØRdjz2‹“üùÒQt°  •Ìàæôߘ"Çã6©a¸‹"“e
+÷?ÂUÎ4ÁÙ܉ãŸfȺ…4M®îGbo£¥f“Y†»°ºÊ¶ÔFja‘ŽßÍ»ô{/S, âA’ aêù¬çâ_/…(hÜP—Ñd ì‘ÀÄI?mýñ6t†”\÷Ñ9KÔª_´-x„»œ7nž#¾RDRb¤wÏë#͘˜‚NÆÇVÃùR’O%“D÷„o…ûš×*áÓÙt•í-!Ïaoã‡6/ç¤ à‰‹ÜúßäÐÂ2üoú‘â> …Á"bNzµ¯Ñ8ÚôÐÊaqdÎI†TÚ´ÑmÓk;‰BÖ³ü˜@
+ÆrVOÕG’R·X#½² "©ƒ²…V!’
+p:Ĭ™BLyŽØz¬Ë TE9ò&¾
+µGø”б-Uú“5fŒÓîG±3«ƒex2ÿé¬?d(ÒiÖDS»~*ª WÖZyÝÐVÛr8†›qÓi(î ¯ò«nyº‚ò@©CDû¸6x§j­ëŽ?Ö ÌÕ¥•´G› Ø9uÁ“œ¤©‹Ñ¦¯fáÀæÜók¡&×TqCÑ Ãý­-™šeÊY4ñŒ¢ICù™o³1Ü
+ìÇ"ˆÁOâQñÜêI¿u}ÀáÙÕ{Kb![?H
+ˆÂÇÊN3°S u†\S˜šëšý/)CžŠz×þ×þR m£C. ÝÌqµ6û=áPT
+éôÓRçSÀÁ¬£+Q©Û2Ë–áç É–oæjS&0D劬9¬{rh6ëÆ%òa|}çIÐVÂ/-ܦË5úê,ºùæÁ>RúVïòÇR»¨é²ê¡"¿¬]^›kÀ™>WŒEÜ.%–ŠŸ®Šd ë]æ®sÞ!¾«¥Bây~~»Ú¼SòÚ{ei·¾÷î"íty7XhaÝÀèÖR«[ßE+ÆÀR¸Õ7qÎçuTFñ| ûs¶öpÀA‘pÓ6kë°A–LŽ+óÇ‚ÈýZǧÔî‘~ü Ä‚Þ˜&ݲÔAíÛrÿ’X†‚©N»Ô暧ZerÆÙ“¹ÝÞíÓsa©öÝe¯¾S6=´`Ôσ~D¨U^%„šéjû~´oí­ô°Ûß®“rÊíúJÜJ>¡ÔWÛæw?ƒðB²£x¿¯XøÚÄ7‡Ñ\"Ãh¾»CHvB¹8n
+Žÿ˜,\MŒŠõ•éæ*Ìÿ«Ôö¢o3öÓ¤¬w¨ŽC HQ`Jë:ß~¨ÛþÍzØ‹ ^{Û!ÔÝBöJâÁ©“Í#`¼ywO“!ÖúäªK¨÷Ã#ZE#ækÅx,½ëî©Ì¸)¸/Eò³0µ'v;ë±Oιµp>»kߨ‹!šžb
+š—C4„+T”Cœ4ï)<ÃgRc*Y¨&½¯Ê¹˜† §±;h–f¿"ܨEû5†&JxŒ›²£Ö”§~,ÛèèZ7qþ5Ñl.x‚¢ê¹ö^I/©­Ö  Cßk¾ê; ™5¨,m÷*û•c8Ó>=t°Vl‰ÌóI0ʧ¥WÑ™Àžç<z—㇞¯Ñ"à…ˆ‚Gg…IP(1fö¦?^e‹Äu'Óa#`ëéÉã_še"±ýX©:½‰Ó±¹xÒî‹y‚gfWö®´- ¾î3È,¨U­*ýÈÂWlJuXñ”œ“Ênç i¦îΑSœ fÊÕèŸÂ´ !‹åÔCûbÞl³qßlHüàM÷ýíŒè{KföË2‹mÓÕ ±7|{©ª ¢¾©M´ŠåéÊ«~Ökßj[Ù|V̧ÔFKÊ<†ï;š·||¼xT'YTozÀž ÇVëèÛ‰ÇX°3ù±Û"gQÞO¯üªGEPus+#…„ljí.24½’¶ßF«¾˜æ0S:Yê$FIi~[PÇ"÷}õ҃vélQºÆѹx•*þ4•'îyاaÇJ»XÛWRS^eWMõMûñϾÑ1¤1‰PÁR?Óq™aèÅ <ϼ×Ö­‰Ä¦‰Re&ÿT
+žå׳M×$cAÓ]R¡ÎXÖsíùßVó"ç÷3™>ß-ʯ¹8[çöùéáhv6FŸ@;i|?ÌÜìl¡%a°_Š;fW\“Ǩ¢bwù«Qk Þ
+—²%Ðio
+ô±õ5ò£±a[UZ1UQƨ{:Œ‡xJù–w¦*~´Ú^¸
+4J~è9;™ö~oD§%¹7˜Õ†¡$†YÁ¯øã¨öî”\&¸b—MÙÂÇØÎDK\¯¸ñdýk Ïf#˜ú£,g´á6}”·Ž'§¾Yo¦ûæsä ÅôƪD…óV®¾çÓ8”tÄß 1$fqçg$±Çñp4&€Юݤœ?ÛäTd^󆑋©¯ŒÞPçœC¶Ôè;|:_“ ³”§²¼l §n?°u Kïoôñ<Kb#ëMGáVé&ž›©0ï`ªÎÇ{Iº{—=ê/Y6œensÀÑÕ_ßrR¤2Í™(2¾N-UÒ?pV´p+=CS/¿ò¡ü…ÜT»¹¾û O|¡Ãédë §9ïÏð\5‚|lÖ"kxº¤,—UNÂA¼*qôGC1Ùïó!ƒ ^¶í,·£
+Ek3 ‰Ç™6åÝßòÀ[*i}Ä0 WvDì~«µ.õJ|‡o_°wjvx$Ycf‚vÞ<(ôÚ#
+Ûû&fØŽSu|&^ IÜýnàO‘§é7‘®¬:#)¬&'3ý"–”¢<‚Nª·cc¶«RGÔK“x)¥¡HˆÚå§?…4'g` ×;zC¸ª·óo•h1Tc|Eû@ßkàŸÙdŸG9ç³åVL ¤2t”‚>7ÄT1é²5ƒîæh"^<+ZŽ´œÃ°(~Ÿ½bï9¡Ö÷ýBúy·Ë–ᬕ*˜à†aH³Ýv ×ÊcMÿ°ý£¸oÕEãlå>yVþ+ƒ.?l«±y„¼Wœý±í>æ¢pL¤Øo1q¼ís_ÝÅp8ØXј0ª"ŠN}n¾(¬®G‡›TA“0G•
+Áã-nƒ…Öž
+˜{Ú1w„¾T?ð–kÄ•s3¿1xéVUy·èVD°QêWKQ9ƒ.zOÉúÝWÓb§ÃF;ÅGçY¾˜m Sv]/÷]ÛôÖ“Æ÷Éå`°K£ÉrˆmëÁA»T…_G%°¡I¹ý¯2ý0Ÿ8ðbI{—øˆAÞTð›˽Ý—'
+Z•©çêy'$ üíÏßå,X­ä›jòüí›&e¾µä„àË1œ^ór#éĬ£˜î4ÆŠº¬îßNìds0A‡ãm-³r÷»8‰‘ƒ$Cwtᶜ•œ¼àŠvùã
+ÐoÆ”ä À ]Tÿ&T¥‰}~óE!P°è£0Î'O8žÿ¤ †ÒqS‘ñ'-ù†˜j†Ñ{I[»LMöõœÆ÷‡—€xm½L§ ”¨»ZÆÍBV”"2¶&$UÈ~O®ÖÊ\Q#üqÙ$ÉôÓÓwžå­"šé±M#v¼ºã¹f†ÛJøG¹*,–¼·b3(i©H}U“Hæ#bB5ŒÆö;FÞ¼‚(Üå¬ÔÁ‚\œ¿‘WŽ¸š¯“Çn×W¤ÒôdóÈé†fs¤o—‚úÀÏ·Z—“ 88—[bT‹ñW™_íKŸªXz`$Ó5x¢¡ÌŒ‹]òNµ cñ‚ˆÏâ1ÕO¾¯hlÒ¢·Ë[†‘Q%%˜qÛ7ÊɆv®WßRÖ'FU-µžxzeBíñãú“ãÇŠ7,Šî³ÒGâ Ç8ø8‡œ~FMŸPpW?ñÂ&Yê|+Ùã<\˜²ã›ÏìT<·ey?Ìÿçk¦©ˆÅÙò1ð #ún„Ôâ$ KÙ ÝQ—Xv†+ª[ýk Ÿ°×IÆ$2axtêo}ûž›v]~"§Ý«‰Ñ°—¤í
+=A–ÏúÊÊ‹P #@¨[÷iéOÙÚ:¾³ # £ŽO¦ä‚1kT.ãz÷ÕëŒÌrÍT¤ú§ÍÏnÐY>0ð_9‚Åðß(KPàžƒ}ë$‰ïâ.Ò)2‘êç7w’öŠÒ5 %KÓˆAƒ‚†ÏÔê-¿tjdžeNo})X‡LÅÍÎ'rß㢅œ¸´øzãR$½óÓùæÌÒ ëeL/Š|‘Ör¸É‹Úqò¡¬Æmó:ÑcTx³è•
+ˆ<ÇŸì×VvŸ½è#v–&4Ü3ìg<¶Ž2T‚¦­åwâY m gÔp\°qTªð©[y²1¡Ù
+endstream
+endobj
+43 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-32 -250 1048 750]
+/FontName/WJWHRT+CMMI10
+/ItalicAngle -14.04
+/StemV 72
+/FontFile 42 0 R
+/Flags 68
+>>
+endobj
+42 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 727
+/Length2 1073
+/Length3 533
+/Length 1603
+>>
+stream
+xÚí’iPSW†ÁF¡‘(A–‚Ôv‚¢D
+" —àJ¸‰ÉM "£ Š²hKŠ8¬Å¢‚¸ (‹¨¨ƒSЂ¸ (ŠTqC”ˆŠ¨uŠýÓé¿Nïýs¾÷{Ï{žûÝccÈ!y
+ÅaÐGŒb$*™Ê
+ÞÆÆK
+ù"F½ùd
+àG¿Ö}~4"ŠùèGKä”±JÑñVü
+UcÔ¼ŸV+Ƕˆ…8ò¥Â?…/©˜L±2–ääHŽÎšÛF¡¹º3%î¯Æ`Y'‡,oàLq¥;¹:©¹T
+Qlì>h¾øSŽh†¡
+ð›i1 %nÌvJr€@ð¥~+]µ…`®x]@6ðE÷äìÁη{šÎ³TJ솼%m‰¶s\ôºou»ð8 ^ñ0Å·¾æMâµ¹žoé‡ÛÙ¯['=ŸµUÔÄn2rÝeÙÄßóä~d]þ¥roônQ§Ýµf#ë­®/^¨âßÝôlÕÛUš¼wC™öŠõþLJÞ6;õM5Iõ1â®­°«»~Ó€ã÷³òð<%ÎPE(T_M>õva1[ÿá‚Ü™ésQ 7ƇíGBKõcº¹mJ}•Èd…£ÅOû|fe¸_<iÚٞݲUM5(“çœ#*²»"6ñÎ?^~>Ø;mu|Aز®–ÛÓ‡ˆ¹œþ¢ Ý?¤Ð&óHEkΪ¼wUG=Ô4­Òõt’©KGbg«f®ñ*Õ»¸òT':MTS[þRþõîÅù3gÔǮЎ·|ðRÄÞ’˜ÔOþÕZ£ÂÍô-þêI¹OVe.3â`GFN·ûjZ²þЯ–ÆiíÏëOÕ©È*ü>}ZvxNƒA50µæ>´’Ÿ
+K,µ…¹»ývIhû‰,ßl÷fp®Í#mâòÁ÷§ŒÎN°¯LÔZ ¬¬‹¿;i¿±8¡ktÚ©áNuÈÎM ÞUëòŒÁò µîö‘ØUw×M2‰"D—E¼®Ê8„Ù„{;ƒ·Ñ"‹³.6xŽ¯úrH­ÍýÊÉåõ žÏ§_x>œBH^Â}¸ñ»°e Ï<Í<„&¶ÕòÆJx.¸b|k wÖi]\Î*¬,nÙ„9ÁF³N¨$Çj×çlO)·é©b&\{ÊÙG(œÐr×ÉÎ̱$Õ¤Í\`ïy9ߣyõmë›ÃG\Jàb­C,U„%qÃÕGÖ–MqªKu‹ºNp'^]“+:ÈÌvÚÕÕ Q½iÆ)qGÕF‡Þ8^r‘aõùí©ø{ÕÓ›:ÛýBMµéÃ-;M÷ïîµ6û駋JÆ=hQ„UÕ¼›7/+ãªJ±‡ç>r%ëLKIË<OÒ›F5(¹ï ç´*M´iÅ[è×OÓO?«í/ÂñˆîÍ™KBµH@í2¢»Öq½T)°Û?*%ªXDZ%2[·‹ Ìæ;z$×3‡Ã²Ú’ZOt¨³&Q3DªmìEyzû«V¶Zm¾ ^ÊžcÎîËåúØ–¨-\òN¢kmÌ3zÑ)E†¬Ý^ýq• ɦg¤Qy©A£w7,zxe2·MÙÏyɪ ½}¼ÿÕ¶G;꣺eMK¬ôq®ÕqƒI„€æ“«{³ôÊ -°õ‡V×Í'(T=;7êwô[Àê¥Oµt˜ñ³­6™«ö]îëù…¶+Ï6«¯ÁÙÛs=ð;Ãï,ÙS~ÛR”cåk@O.1I1$n;ãåþ*3+U—•ž”÷$uǼç¼eýp`ð½¾¥7(ÿòÁÿ🈠_Š‰£ùÒ(<þæCYX
+endstream
+endobj
+47 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-163 -250 1146 969]
+/FontName/JQUXWB+CMTI10
+/ItalicAngle -14.04
+/StemV 68
+/FontFile 46 0 R
+/Flags 68
+>>
+endobj
+46 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 728
+/Length2 6514
+/Length3 533
+/Length 7070
+>>
+stream
+xÚí”eT\Ͷ®‘<Ðww×@àNÐèn¤q î$X kÜ]B€ Á×л\Nö·÷>gœïœ?wÜw֚ܵï|׬§fÕ(&z-].9[¨5P
+qñqó‰4ôTùx|ܼ¼ò8LL
+n@+
+Q´‚Å|bbü
+lÿp‰
+ röù—
+vñ€Ý
+߃ñÌü(·2‘“u¦_Þõ¨ôpÞ¹D—u!Ükˆš5¤€ý~´çü‹©¹ ²í½ù Ž¡'ø}}ef˹ß&GЇ°ú¢.ƒtoA÷(‰b[çAKâžÕn•
+r‘ªõŽþƒ¡jƤ'÷.¼DÉÜ&’,íʱå …ÜøÖ&“æ_÷}˜©4þhF,67Y
+¹^OÐÒ•Æäïj3/ã´øßç´±À
+]å¢ÛÀ#á‹Gq¬š¶—•äK®þàÏ?¥uðâæ$š+|5ÎìµÏOØËv9Àn–Ÿ™w"Ÿ Hc2´}/Yß6›dÊ‘úmãl•­|VûDPpò²HÆ/øEŠé ÈŽ>zT+ÅvbwþâÀ²1¸FŽtzêmZ;K¡§ÐsÍŒ0ÛS8‚b!üm#õÛɧj¸ÜaÖth&˜žãЃ¯QR\¶=,¿rô¨¶7c:[ÝÓW jpXÝs.Í Ó;úø4ßj0pƒâ±Sï—æÏYÍ!Ì,ÀVª‹\NRbøaÿL_ÃîyêÅi619Ö“q¦g‰ï|c!
+y_ÑÎûÚ}‘X%²¬:>nvóà‰êÄ­ÞB²3,©L2”ÞÌö_óð¤ˆ<O,7&úª\¨˜Xìž™BžÜªÔ²Ó„Ô“Ó|Ó~ú
+väèøâ";)SPÆ~ˆîz¼“
+
+n¶
+iNNäð÷7ØðbXâ92?‚§³]¾Âù¶”¾÷]=Å@57#æîÑùÓ·@G”ë ]À}e[ÚcºalP:ÿ¢_†£7ÿKV}xa„{üµÐ»É‡çÍIßvd—¼ÂØãÓ„„˃»=_W=üd(>ÎÇ&¨››¦Ú*ÒECÆ
+Áú臩rÞ/^©Õæ§_œ3¸ºvOÆ—Úc®.ÔE3•LãQ²[£ô»"²}ŽÆÐw8ñ7s'áÕt²ÞYÙLКÇ…6äYÔ*ixÿN[x¥œø‘ø÷¡±ÞIªŸ–nørç$Ô3,§W‹ØÊ°>±ß…4!+ -µÓ±Q\j}7¯Ï}AU; `±]n, [òÓ@øë³}ÝGˆåªÌé§<ñ,›»,¦Ž#Eë¸*—îz† l |âÿe¥ÉNé¸oÐêâ;ö¼(ù:v*8º YLéÖK‡‡Jã´ÐÖç^3æéŠäWJh™ð´Yâ¯ÜHÜ7Ì•S#áo—^2˜YÓKéšM.mGÚ:ƒ¾“¼L°“¼q¿f£†ÿlÛÿèDðüŽíÆO«¯c #'B!gBIY§“žBJ
+Ý"#ÞçLo‹ï$+B'¤5ïØEDEªc,JûåŠ?\²3|~Žªý´àxŒúeŒÐTEÏ$?‰Ï7‰%&€ŽžeFùº‘IJmú[8 þÊF×mwK9£®! Ö€öž«É{Ç•ênñG‘jÍÃ#4C¡œlãxÂÙ ùv-ÅGUÑä›$À ÿ
+¢È_F8®ëüëb=„\”l9(ó¤üch“‹Ù˜W^”èÛéŒåû^à Hå@Nf/2¿žú’?$Í'ƒø=¾g.÷P"Pœª€ã©SHRlR5!Û ja`sàD6ƒê­Å§LÙþtÅ©–>þ֥Ш’=Å.’ˆŽ<uœ2\©ŸÛ¿7×Â:ÍÞ:gÞÛ“æë2¥¹îèøà6N•‹ÀËÙŸïx<l)žÿèû,?|ä0~—íh³ì~gØkXÞ"ä¾SØÞ°…¶œWø92—Q~ì³WfnÜ5G¡»ŽR‚hæùŠµÎí5¥tTiÅËŽ>cΦ¿5RRH…ºQ­ïÙªaöj›g‚uwÒ’3®}Ë“]²Šw½•TfÒF—dµ²ïbC,Cc„.44o^3ß;|0zjÈÞõº<:$Vg1^½_ß:è? T# Ý){Ç’cF÷ž³è´Ô:6b.YÂe¤‹à”œÏNpÚIžÈ{æ~ö²ºéK@º¶›Gõ
+è¾åd®Œµœ9ØimÞç2É4¶Ì4Œ¥|ómy².W×6Ü\l‘Š9ó‚#Ž4d<³¥2I>%_õM¢H1=Ï›ÒݹÐ@x×aàºGl}LPE¯ZÆôÚD•ðL9ª;fG¦½®ùÓAÎH†++±É©")Í ëT°ìã^:¼\Xõ™÷êA3Æ7áCN¦œdáÝr#|òŠð ûÉÙ=“×bÕٵƫѮ“f?»þ^¦ª«\ÒŸz#¾á’¿×±iKs®•ÄÏÏÜ)ØYøÇÊø3ÚßÇ"È=Ù8éIr1KêÊÓMá_NFdZÅ~€J2姑S
+e³ËY³ôžÖDVÞ|­¼úS#æŠ2&,X™Pi‹À^L™Læ³DvŒ
+’¡a¬C;G¯ hG‘ä¹Û¨p«ö"åUjšayFx8x«YYL`EÃþ–Ú6Â{<#ïu°ŠñÕ_H‡ÓÂöu—PTpùA¯mè‹Í-;®üº¨-8*+áÀ冗Ÿ'¹]å'·bôùñ™ÑÍW.˜M4[FVÄ£ëT‘ÓÍg6‚)`R€xõ#n¶+€x™Á]éöÓÝFð‡:j–º$ÇÅÀ%n,°YÕ!k¡úV0¦ª#¹›Ôo,:^š¹dŽÃ9Éü[*wßÉÖ·õzL Z§/[ÓùTË6ì&c«JªV©¥ Ð\J³¤RICtµ3`ÒØúˆ¤ªwÇ6rrE”ÏbØäøˆí½¡»>K¤™ ’x‰Êöʧ4âOÈ´§ä¡ä×äã_lûu¬gØö%¾üæ˜3M¬q%·ÕfüöŒ\žo›³­«H[œ
+Ÿ¾@mYãBÎ2Å5*”™Ýbs÷¶T´°ÂÐxÏÂ[ʧ3MvÇêìŠßšðA‘QÊ ™}ôˆveÅ>;S„¾m ²‚-ûƒ.HœÄ!Ô!Ë–TBûÊ‚œ<½*
+Ìc0Õçù]×¥íM{Éì—Õ“Ð.L_×o§+•Ü:ÔC¶ÝÃýÑ„;TTª™2ùÚjV+P“ð’c¡á»0;ø Š 5UIrO$Z>´0 ZL2"sl\ü¬kÚªK¡¹5çn':lØmª_|ë’Èy‘ê¶N¤% Jð.Ñx¶m‰‘ZNz¹0Rz+³Ì3ytÞέMäNIfR›]d~Æûûâi^÷%ñàf*™øqÄZËã –gTwºs˜×¯Á¾J¯ç°¥<6,M‡ŸFå£ð :íœd\(v<oC1¯oT5h¦jÉÈX_,IA+y [áGfã)Ç”êzâ :Lï×â5¥3VvAg¶4@2Z0?ß|ÆGüKÇ2µ‘& =WYûS‘ƒQÚ­|»+”ˆòôGÁê>à£gç|/Åè¹T°b‹ž—E°#óaéÞ5ó,ÈÁÙ@ú¥%w N/³^X5û1¼Ò‡>Îö±w]* O‡Šytƒwv±†ˆ;2>#†¾W¦áÄOnЊê£D$¾Vü8ãÐòÐAY^êkþ‰¤ZfŠ!ƒJÈz¥Õ'ò¹Ð‡F72³L9=s@0ÛØG_
+š‹*ò­ÌÞ¹Œ'0è‡ÁT6™C‘ø‚ËÔŸ«]3¿ù®~x4Ü•-¦Xb™ÌCùXÔçAøŽJA‡¦ÐÏV•›¾‰|é'íK$Ï]}ÒÞ+ŽÙ¶Ð?÷#e‚±­a>ܾnÖ_¬Ž)t…íÕƒ Íí
+üúñq Æ*@ßå;ÂÀ.qÛÓ¤’ó!ÌËQ9”¥ÆÆ¢’å4™< ˜Çmα.Ÿ%IX ËhåÔz~U¸ápã˜)inZ‹~'Èš\ìàÉ’¸Yã÷•+/bG49æûÃêLhòÇ'×’)B7@ô Qê+U Rß$”{4M]G€’30ý¬¼ý =§÷õ"»Ï‹¸»H«ôgUfÇУ«–
+' Xòós7j_=?¢?ñ‚Þgyå÷{}> ѱ
+÷¨Fn=7Y&Ð/ ¨R#?¨FEo¼©BNâuªºÝšMlôð¼ŤÏAs²‡€ä¢É¿ÓH­KRWâa7 ìF!ÝÎà©Æ¢ÕÒÉ¥7ùÁyvQ=åÚAþÇÒèÚŽ!ÕnÚ rôÍ6f¼HóP(¾>÷*±#Í´³Ý,âD¾kXá3@ɉ*$»ì¦Ê¯WëƦ5üR
+-fT§=0•¯ïo^Y uº>ìÿõƒìÃ$QqAV‘m>N3òÀ™ñ×¹6L2æí s‹IÄpz¿ß¢Uîù\TÿØÊs¿xéá¡÷I_ß5Ö·aº)Ú0ÖîPtéµU\èéJÉ×Í‹XMwa’Gìgö0ÛHžŽù«Æ ÇW‹ŠŸ8„ÏÖŠfgÐ[ºs¦ºïœ‚m(ª¾·Üdsf'ì&è›.Â=ï
+Ñi¢]tïùdp0¾•l`X~M VÇÓ`ˆdjî•“–ªÚÀå>‰ï¹çɹ Ñßùi{Od¶Þ^£j#Ø |ͼ½_9öšz1 ”lšŽ7åa÷8-N5œû
+¯_ŒÒcòu˜“þ. ±á´M­)?þU•¯AR%KCã"%ñcÔÞM6Ô@Ü”ëH!}°i¥WÃÐD²æÙ}ÉxCñn(7»ªßY¿nÆ.¼i¦åØ0aD+Æ×;%oz°¶S £Ÿuðv-¿Ø;õè^Ð÷ä3 î;fѦ>±èOœ'|È[ºn.qÉ·4,YRíÄâòV’áM¤5Æ6-™¹}‹eÅ_¬tˆQ•žOÍÙqàŒó˜7Ò ®3)LôœŸ9#Ggs‚¡>
+OŽFSç˜ä=pËg îŽ&
+Y°£rî–0ö‰¶¹ÀH®ÖRfëw`6ÜAÁ°<® à®AÞ¼ÄÇâA²p¼$EáIÊÙâ"AöÆÏÔ¯b‡¿$xxµX£}Œ©ÖR”“Æå2Hlí(ÁyùcP¡U2¸z§m¹ê”šßT²Gq§6^éWË8-•ö‹áí¸pbµý4ÇdÛ‰ÅRp(e…ò¹ª‚<ðŒF +\úUô"KâÏ#+ôþš¢ÆzÆÞloÙ! g8–†<AWþ¥?µÍ¶Ù~µ±dåXM˜:Ò÷™øÀ£ñü&æ¨)p qUŒvÀU{ò…S?↓ÍhËé¥(ÔéýT‘¨É/±"(L7Š‘šôh¾Ke%¶¬ìïÈü˜ñðÑÚÂ3 w?‰¦ƒm êu —#Z´À®è§ow´,Xwª£°ž®ûm#É®« YÚßÇÓÝ$½‰’tPS>NÔôÜ–¤ ¨Q]åØ“{Jº"Kê!.í<¡ê°ô<PŽÌ÷—Öî@¦ Sr’†y’)¬)‰‘ÏÉ$ ™(îM—ë]ô(ÎNªk¢¾«°t0Æã°=ãŽL`/–Ñâ­vÇãM×o~pÖJ˜ñÙ:=3—[ñ¶YFÉíbôlu!£)¥˜õ튈Aàt›—Ë^ʳ5ÀX%b‘<•‡¸'p»+v¨ïåŠ@B_Nsê@ÇKìwºüÈÅSÏ(@`µeRƒõ•„B7 ®^xÀ}»ºÛáG°$ïxó)µIiàB{ÙKÓ㤼yÇ8:I›jçÓWGŸÔË'¨ùˆwŽ$—LÁ¼?^n;L˜t™…Ou vê
+ Tô.uM9¥ÑÍþJÖ:®¥±¹’Ãô­oÜÄMìvц÷Žyƒ#+¹ÛŒã!$CYýø×ÌÜ^”‘@Ñï†
+Îff×a©ßé>r”ó`ÝÀ “ Šüz |Øæy‹4ό߼ù ¬ ŽŽÛ ÷úur£sÌ@-9¥-eüj¡]¨ô­~Â
+4Tdõãâ,gÁ¼~(ó\•*C÷+„ úE»{PÇQ[y™ü—EˆC®y,ÉêãM©«‘ž+¡Èô\Ü Ü†¾ÁËŽ?þg5‰qâÆÕ.·ÿÔBm ŸA`Bº¢HRÎp­û”&‘}ûÖ"VY¢ÿ!Þ3/8,‹þµÑP‡²J!Ú˜¯3׺÷ÆôH %ÓX%á~“’™ÂåÖâ¢ááõ¥š\Ùâðm¸êYo¾l1öt}EîìÚ‘(:ñb’‹3ö˜åg2MJ’ çˆ÷Ê6Èà$oN"‘ó6Î ÃÎ OÂ. ©™
+n¼uxo<ý¶¶iÕ2¯›L3Ýügxˈºøveà£X.ÂO0Ü–‘šŠì h£½CØÈ£~Ìg Þö¦ñ,ž÷ì>r+Ø TyßV"tïch5 Qb+³¾´©øé1TšîUd Z/\Þ0ª”þZZ@ç”R 4ÎÃòeŸè5  ·°®ìГ–ÿƘûܦ#ž ¢-¯?C\ñ¹Òx1õHu¥úe©Z
+mEþáÍmJ> r›nä}ˆ_×î}‰0 Žb¼äÖ!]˜öͤ¬¯½_½£wøÈû–C£"c몇-‘,ë“ÀõÏFVèâ7P~Àe¡ºêÅã½Ë–¾±§2Ù<a‰ŽMÙ뼦ܫ+ GnÚƒ?á.Ž«e¨m@¾*TÞ´Þó$uÒÁuqxÿ/Ÿÿ_àÿ6Î@+7lå愃óz3ñ
+endstream
+endobj
+51 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-29 -960 1116 775]
+/FontName/IAGTSF+CMSY10
+/ItalicAngle -14.035
+/StemV 85
+/FontFile 50 0 R
+/Flags 68
+>>
+endobj
+50 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 724
+/Length2 601
+/Length3 533
+/Length 1113
+>>
+stream
+xÚSU ÖuLÉOJuËÏ+Ñ5Ô3´Rpö Ž44P0Ô3àRUu.JM,ÉÌÏsI,IµR0´´4Tp,MW04U00·22°25çâRUpÎ/¨,ÊLÏ(QÐpÖ©2WpÌM-ÊLNÌSðM,ÉHÍ’œ˜£œŸœ™ZR©§ à˜“£ÒR¬”ZœZT–š¢ÇÅeh¨’™\¢”šž™Ç¥r”g^Z¾‚9D8¥´
+@W¦äçåT*¤¤¦qéûåmKº…dgaqºán¥99~‰¹ ãÁ…!Ÿ˜›™S U‘Ÿ[PZ’Z¤à›Ÿ’Z”‡®4<â8ßÔ”ÌÒ\tYÏ’ÄœÌdǼôœT]C=cSˆDf±[fEjJ@fIr†BZbNq*X<5/Ý)Àà;DßÓÑ=$ØMµÙ€Ä̼’Ê‚T„r0ßÁSQf…B´ž!P!ÂX±h¶¹æ%ç§dæ¥+—$æ¥$¥À0]åä”_Q­kd© kiLj††f
+æ榵¨
+Có2 KS=]L ,Œ ®L.-*JÍ+' aü´L`(¥¦V¤&sÍž#šÉ¯#«ý5áË«Já»Nœ»¹a–zÔ&CI¿óM“ƒX›òý¦Çž;w\[çóÂŽ™gîÉß4½0·Ñš3çØ›ûþÊ;—ñn‘ŸY¶ÆØ(ù$Ç÷g÷ú´0½eXœWÒžìË1ÿJÔ—Å]aKu¬¹×ÿz]XýáÞüßU- ûÝ£Ò%6· t½ 6µ¨,˜Õ`Ñï÷ÇN|+ªèKgÞ÷dªq;÷)yA«æW§ïpºq3ÇÉz¡ºí]£ÏK½&j¹ØŸuù~xÙ?Ë° «ä*¼Öûó wOÙ­¹\v»Âwv%ß|ùáðþ3Ù:Y³Y}î|vÿ¿ß¿Ã÷X¯©çd?/°yÊa^¯:ïËÛæ-³w^fyŽás˜Òì”ò“íß[ïàÓžûù÷Ðô¿|‹g—ë÷¦û…•š;ºûãùÄà¢}
+[Š¾¯ŠØ×£˜»÷~㮶m7 {–õ?Òéúhr=<ÿÉ©¨ªŸ qKÏøÝ®<°:­Ïÿw}Ô¼­žè8ÛØwÆÿµ·Ã›îK3¤?'”lóqf<|m¿l÷áãekê¶Ï™ª¬óßVÜÙütÝ­SGq3²ÿÎé¾®­î°òûå Óä`ÝÛ¤ÏýÜ©î¯Éƒô v[#¶¶7 ;³®ýÌøQàáù&Uƒ³ŸŽ¯®ýíÄ!R5cçœÏXÔÖù™g¿’ ±[ôþ³ ëQ†ÏKE\Ù–ôä?ó«u7+5§)ˆluªÊf÷=dô¦ò´Û×b³/)5îwÊŽïYຈserèßÛ–
+"?÷?žñ-`ëÁÄæÕ»#¥ÔK–ü.?S±á½øOU—`ʼnW“òs¤æöÞôå1 p0, HÎIM,*ÉÏM,Êæâ
+endstream
+endobj
+1 0 obj
+<<
+/Creator( TeX output 2006.04.07:1630)
+/Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks)
+/CreationDate(D:20060407165636+00'00')
+>>
+endobj
+5 0 obj
+<<
+/Type/Page
+/Resources 6 0 R
+/Contents[35 0 R 4 0 R 36 0 R 37 0 R]
+/Parent 3 0 R
+>>
+endobj
+39 0 obj
+<<
+/Type/Page
+/Resources 40 0 R
+/Contents[35 0 R 4 0 R 53 0 R 37 0 R]
+/Parent 3 0 R
+>>
+endobj
+3 0 obj
+<<
+/Type/Pages
+/Count 2
+/Kids[5 0 R 39 0 R]
+/MediaBox[0 0 595 842]
+>>
+endobj
+35 0 obj
+<<
+/Length 1
+>>
+stream
+
+endstream
+endobj
+37 0 obj
+<<
+/Length 1
+>>
+stream
+
+endstream
+endobj
+4 0 obj
+<<
+/Length 33
+>>
+stream
+1.00028 0 0 1.00028 72 769.82 cm
+endstream
+endobj
+55 0 obj
+<<
+>>
+endobj
+56 0 obj
+null
+endobj
+57 0 obj
+<<
+>>
+endobj
+2 0 obj
+<<
+/Type/Catalog
+/Pages 3 0 R
+/Outlines 55 0 R
+/Threads 56 0 R
+/Names 57 0 R
+>>
+endobj
+xref
+0 58
+0000000000 65535 f
+0000086053 00000 n
+0000086753 00000 n
+0000086421 00000 n
+0000086606 00000 n
+0000086217 00000 n
+0000014884 00000 n
+0000000009 00000 n
+0000025582 00000 n
+0000025398 00000 n
+0000000913 00000 n
+0000001829 00000 n
+0000030302 00000 n
+0000030114 00000 n
+0000002797 00000 n
+0000033781 00000 n
+0000033591 00000 n
+0000003795 00000 n
+0000040597 00000 n
+0000040409 00000 n
+0000004731 00000 n
+0000005648 00000 n
+0000055429 00000 n
+0000055243 00000 n
+0000006625 00000 n
+0000059900 00000 n
+0000059707 00000 n
+0000007369 00000 n
+0000064381 00000 n
+0000064195 00000 n
+0000008289 00000 n
+0000009257 00000 n
+0000068631 00000 n
+0000068443 00000 n
+0000010404 00000 n
+0000086506 00000 n
+0000011149 00000 n
+0000086556 00000 n
+0000014774 00000 n
+0000086318 00000 n
+0000025336 00000 n
+0000014945 00000 n
+0000075536 00000 n
+0000075342 00000 n
+0000015899 00000 n
+0000016845 00000 n
+0000077448 00000 n
+0000077253 00000 n
+0000017752 00000 n
+0000018734 00000 n
+0000084827 00000 n
+0000084632 00000 n
+0000020350 00000 n
+0000021302 00000 n
+0000025224 00000 n
+0000086688 00000 n
+0000086710 00000 n
+0000086731 00000 n
+trailer
+<<
+/Size 58
+/Root 2 0 R
+/Info 1 0 R
+>>
+startxref
+86848
+%%EOF
diff --git a/macros/plain/contrib/literate/progdocu.tex b/macros/plain/contrib/literate/progdocu.tex
new file mode 100644
index 0000000000..68cc23af6d
--- /dev/null
+++ b/macros/plain/contrib/literate/progdocu.tex
@@ -0,0 +1,280 @@
+% This is PROGDOCU.TEX as of 05 Dec 88
+%---------------------------------------------------------
+% (c) 1988 by J.Schrod. Put into the public domain.
+
+%
+% english documentation for the MAKEPROG system
+% just one sheet---it is very primitive
+% Plain TeX and typographically unpleasant.
+%
+
+%
+% first version (for ftp/Bitnet) (88-12-05)
+%
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% local macros
+%
+
+\chardef\letter=11
+\chardef\other=12
+\chardef\atcode=\catcode`\@ % save old catcode of @
+\catcode`\@=\letter % for the usage of private macros
+
+
+
+% fonts
+
+\font\mc=cmr9 % medium caps for acronyms
+\font\sc=cmcsc10 % caps and small caps 10pt
+\font\tentex=cmtex10 % typewriter extended ASCII 10pt
+\let\ttex=\tentex % only for PLAIN with base size 10pt
+\font\ftnrm=cmr12 scaled \magstep1 % roman 14pt
+
+
+% short hands
+
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em\TeX}}
+\def\MAKEPROG{{\mc MAKEPROG}}
+\def\CWEB{{\mc CWEB\/}}
+\def\WEB{{\tt WEB\/}}
+\def\TANGLE{{\tt TANGLE\/}}
+\def\WEAVE{{\tt WEAVE\/}}
+\def\TIE{{\tt TIE\/}}
+\def\DVI{{\tt DVI\/}}
+
+
+% local formatting
+
+\def\item#1{% % item with a fixed indention of 3em
+ {\parskip\z@skip \par \noindent}% % parskip is restored again
+ \hbox to 3em{\hfil #1\quad}%
+ \hangindent 3em
+ \ignorespaces
+ }
+
+% |...| verbatim from progdoc.doc. look there for the explanations.
+
+\catcode`\|=\active
+\def|{%
+ \leavevmode
+ \hbox\bgroup
+ \let\par\space \setupverb@tim
+ \let|\egroup
+ }
+\def\setupverb@tim{%
+ \def\do##1{\catcode`##1\other}\dospecials
+ \parskip\z@skip \parindent\z@
+ \obeylines \obeyspaces \frenchspacing
+ \ttex
+ }
+
+
+
+\catcode`\@=\atcode
+
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\centerline{\ftnrm The MAKEPROG System}
+\vskip 2mm
+\centerline{\sc Joachim Schrod}
+
+
+
+\beginsection Introduction
+
+D.~Knuth has introduced the concept of ``Literate Programming'' where
+programmers should explain to potential human readers of their
+programs what they want the computer to do. To support this for
+Pascal programs he has created the {\sl \WEB{} system of structured
+documentation}, an extension of Pascal. In \WEB{} a program is
+splitted into sections, every section contains a documentation and a
+program part (both parts can be empty).%
+\footnote*{In fact there is a third part, the macro part, which is not
+important in this context.}
+Such a \WEB{} program is transformed by the \TANGLE{} processor into a
+program source and the \WEAVE{} processor produces an output which can
+be fed into \TeX{} to get a fine looking document.
+
+At the Technical University of Darmstadt we have used this
+concept---with \CWEB{}---in many of our projects, e.g.\ for our
+portable \DVI{} driver family. But for many programming languages a
+\WEB{} system is not available and is often difficult to make; e.g.,
+to prettyprint \TeX{} macros is a non-trivial task due to \TeX's
+dynamic lexical analysis. To stop this gap I have developed the
+\MAKEPROG{} system. It makes it possible to document programs with
+\TeX{} in a \WEB{} like fashion, the program parts of the
+documentation file can be extracted to yield the program file. During
+the extraction process the documentation file can be altered with
+change files.
+
+The \MAKEPROG{} system consists of two parts: (1)~the \MAKEPROG{}
+processor which does the extraction and (2)~the macro file |progdoc|
+which makes formatting facilities available. The \MAKEPROG{}
+processor is derived from \TANGLE{}, therefore there should be no
+difficulties for every site running \WEB{} to install \MAKEPROG{}.
+The macros in |progdoc| are implemented with \MAKEPROG{}, the file
+|progdoc.doc| is the definitive source. |progdoc.tex| is only
+delivered to allow the printing of |progdoc.doc|.
+
+The following deficiencies are known to me (some are not inherent but
+there wasn't the time to do it until now):
+
+\item{---} \MAKEPROG{} does not rearrange the code as \TANGLE{} does.
+This is the most important feature which is lacking. The support of
+stepwise refinements is one of \WEB{}'s main advantages. But for a
+few programming languages---e.g.\ \TeX{}---this is not so problematical
+because their identifiers are dynamically bound at run time.
+
+\item{---} \MAKEPROG{} does not prettyprint the program part because
+it knows nothing about the host language and therefore nothing about
+the lexical and syntactical structure of the program. Instead it just
+prints the program part verbatim. But compared with wide spread
+verbatim setting macros they have the advantage that you can print
+your program part if you have embedded tabs in it. The macros will
+replace every tab with one to eight spaces according to the current
+column.
+
+\item{---} \MAKEPROG{} produces no index. This is impossible because
+it does not know what an identifier looks like. (This can even change
+inmidst a program, cf.\ \TeX!)
+
+\item{---} Because the documentation file is a \TeX{} file and \TeX{}
+does not recognize change files the complete documentation (with a
+change file) cannot be printed. \TIE{} must be used to create a new
+master file which can be printed afterwards.
+
+\item{---} The macros in |progdoc| do not produce a title page and a
+table of contents. This could be done easily.
+
+\item{---} There is no \LaTeX{} version of |progdoc| available. But
+this is simple, too---look at the comments in |progdoc.doc|.
+
+\item{---} The page breaking is not very lucky. I still have to play
+with the penalties.
+
+\item{---} \MAKEPROG{} should insert the actual date as a comment line
+in front of the produced program file. The syntax of the comment line
+(start and end of a comment) must be specifiable.
+
+
+
+
+\beginsection How To Use \MAKEPROG{}
+
+The documentation is produced with the macro set |progdoc| built on
+Plain \TeX{}. Therefore the documentation file must start with
+|\input progdoc|. Afterwards you can structure your document into
+sections and the sections into groups. The first section of a group
+starts with |\chap|, it corresponds to the starred section (`|@*|') of
+a \WEB{} program. |\chap| has one parameter, the title of the section
+group. The parameter is ended by a dot. The dot is printed by the
+macro. Every other section starts with |\sect|. These macros produce
+a number in front of each section; this number is incremented with
+each new section.
+
+Within a section one or more program part(s) can be specified with the
+macros |\beginprog| and |\endprog|. Both macros must start at the
+beginning of a line. If |\beginprog| does not start at the beginning
+of a line verbatim typesetting will be switched on but no extraction
+to the program file will result afterwards. After |\beginprog| the
+rest of the line is ignored. If |\endprog| does not start at the
+beginning of a line or if it is not followed by white space (blanks,
+tabs, or end of line) neither verbatim typesetting nor extracting will
+stop.
+
+Outside of the program part---in the so called documentation
+part---you can use the vertical bar to print small texts verbatim,
+e.g.\ identifiers, macro names, etc. A vertical bar starts the
+verbatim mode, the next vertical bar stops it. You can use
+|\origvert| to get an original vertical bar. |\vbar| is the character
+with the {\mc ASCII} representation of a vertical bar in the actual
+font.
+
+After you have finished writing your document you can print it with
+\TeX{} and you can run the \MAKEPROG{} processor to extract all
+program parts into a program file. During the extraction \MAKEPROG{}
+will recognize change files like \TANGLE{} does.
+
+
+
+
+\beginsection Installation
+
+The first step is to install the \MAKEPROG{} processor. Because it is
+derived from \TANGLE{} this should be rather easy. Just take your
+local \TANGLE{} change file and you should have very few alterations
+(perhaps much to delete). You will need to put the \MAKEPROG{}
+processor somewhere where your local command processor will find
+it---perhaps you will even need a command script around it. But this
+will be the same as it was with \TANGLE{}. By the way, you can
+contact me if you need change files for MS-Pascal~V3.11 or higher, for
+the HP-Pascal compiler on a HP-UX machine, or for the Pascal compiler
+on a PCS~Cadmus System, contact me. Also you can get an object file
+for an Atari~ST from me.
+
+You can test your new program by running |progdoc.doc| through it.
+The output must be identical to |progdoc.tex|. Well, the main work is
+now done. You still have to put |progdoc.tex| in a directory where
+\TeX{} will find it and then have much fun. (Don't worry---be
+happy$\,\ldots$)
+
+
+
+
+\beginsection Errors and Remarks
+
+If you have found an error or if you have some remarks or suggestions
+please contact me. My Bitnet address is |XITIJSCH@DDATHD21| but please
+note that you perhaps have to mail me again because our connection is
+very instable and incoming mails are often lost.
+{\it I will acknowledge every mail within a week}.
+
+\medskip
+
+\noindent You can also reach me with the old fashioned mail:
+
+\smallskip
+
+\begingroup
+\obeylines \parskip=0pt \parindent=3em
+Detig$\,\cdot\,$Schrod \TeX{}sys OHG
+Joachim Schrod
+Kranichweg 1
+\vskip .5\baselineskip
+D-6074 R\"odermark-Urberach
+FR Germany
+Phone: $(+60\,74)~16\,17$
+\endgroup
+
+
+
+
+
+\beginsection Distribution
+
+You can give the \MAKEPROG{} system to everyone you want but it must
+be the complete system, i.e.\ at least the three files |makeprog.web|,
+|progdoc.doc|, and |progdocu.tex|. {\it It is explicitly forbidden to
+pass on the system without the documentation---if you distribute\/
+|progdoc.tex| without |progdoc.doc| your bad conscience will torture
+you until eternity.} Furthermore this restriction for distribution
+must be told to everyone who gets the \MAKEPROG{} system from you.
+
+Of course I do not make any warranties. (The usual blablah should
+follow here.)
+
+
+
+\bye
+
+%% That's it. Excuses to everybody out there who {\it can} write english...
+
diff --git a/macros/plain/contrib/make-env/make-env.tex b/macros/plain/contrib/make-env/make-env.tex
new file mode 100644
index 0000000000..886ffeb3f8
--- /dev/null
+++ b/macros/plain/contrib/make-env/make-env.tex
@@ -0,0 +1,117 @@
+% make-env.tex
+%
+% J. Daniel Smith
+% 12 January 1990
+%
+% Print an address on an envelope according to strict USPS standards.
+%
+% Usage:
+% Place the address in a file with an extension of .adr. The
+% address is set with the \setaddress command, and \\ is used to
+% break lines. The \setattn command can be used if desired to
+% direct the letter to someones attention.
+%
+% Since this file is also ususally included into a letter, it is
+% also an easy spot to set other things that pertain to the letter
+% itself such as \firstname, etc.
+%
+% These macros use the "landscape" \special of dvips. The exact
+% syntax for other drivers might be slightly different.
+%
+% Bugs:
+% The \fontdimen parameters aren't restored after the address is
+% set, so the Attn: line also uses the strict USPS spacing which I
+% don't think is really necesary. The paremeters should be reset so
+% that the Attn: line will look better.
+%
+% various macros for setting up the information to appear on the
+% envelope. These are place in the lettermac.tex file so that the
+% same .adr file can be used with both letters and envelopes. The
+% ones of primary importance for envelopes are \setaddress and \attn
+%
+\input lettermac
+\input zip % ZIP code barcodes. This *must* be after lettermac.tex
+%
+% Hacks to get the size of the envelope right. These are for a legal
+% size envelope.
+\hsize=9.5true in\hoffset=0.5true in
+\vsize=4.125true in\voffset=1.1875true in
+%
+\special{landscape} % envelopes are printed in landscape mode
+%
+% The USPS has very specific guidelines about printing the address on
+% an envelope. Of course, they will take just about anything, but
+% they like it if the address is in ALL CAPS with no punctuation.
+% 10 point Helvetica (cmss) is one of the recommended fonts with a
+% 14 point baseline. If you want to override the default setting, the
+% \envfont can be specified in the .adr file.
+\font\envfont=cmss10 at 10.95true pt % cmss10 is smaller than 10pt Helvetica
+%\font\envfont=helv at 10true pt % PostScript font Helvetica
+\baselineskip=14true pt
+%
+% Remove punctuation. This is done by making the punctuation
+% characters to be TeX's ignored characters.
+% Hopefully setting TeX's font parameters right will increase the
+% interword spaces to the 1em that the USPS likes.
+%
+% the \catcodes have to be set before the address is read in, since once it is
+% read in, the \catcodes are fixed and can not be changed.
+\catcode`.=9 \catcode`,=9 % 9 = ignored character
+% read in the address
+\getaddress{Letter address file}
+% restore the \catcodes changed above
+\catcode`\.=12 \catcode`\,=12
+%
+% uppercase the address (from page 331 of the TeXbook) to make it the
+% way the USPS likes it. \Xaddress where the lettermac macros store
+% the address when it is read in.
+\def\next#1\endname{\uppercase{\def\Xaddress{#1}}}
+\expandafter\next\Xaddress\endname
+%
+%% for testing....
+%%\vbox to \vsize{\hrule
+%% \centerline{top}
+%% \vfil
+%% \centerline{\vrule left\hfill right\vrule}
+%% \vfil
+%% \centerline{bottom}
+%% \hrule}
+%%\eject\end
+%
+% put the address on the envelope in the correct font.
+% The USPS wants the address in a box that extends from 5/8" from the
+% bottom of the envelope to 2 1/4" from the bottom. This works out to
+% be 1.625 inches total. With the font and baseline skip defined above,
+% this is more than 8 lines (9 is too many).
+%
+% \leftline{\returnaddress} % some type of return address
+\ \vfil % fill up with blank space
+\vbox to 2.25true in{
+\vbox to 1.625true in{\envfont\leftskip=4.5true in
+ % the \fontdimen parameters need to be changed
+ % here in case a different \envfont has been
+ % loaded.
+ \fontdimen6\envfont=10true pt % size of an em
+ \fontdimen2\envfont=10true pt % interword space
+ \fontdimen3\envfont=1true pt % interword stretch
+ \fontdimen4\envfont=1true pt % interword shrink
+ \fontdimen7\envfont=0pt % extra space
+ % the address
+ \address\vfil}
+%
+% The USPS wants the start of the barcode no further than 4" from the
+% right edge of the envelope and no less than than 3 1/4". It
+% prefers between 3 7/8" and 4". In addition it must be 1/4" up
+% from the bottom (plus/minus 1/16"). This 0.25" is provided by the
+% Attn: line below.
+\vfil
+\rightline{\hbox to 4true in{\box\zipbarcode\hfil}}
+%
+% The \attn line if used. This is also set in the \envfont so
+% that everything will be consistant (except perhaps the return
+% address, but that should follow the format of the letterhead.)
+% This is put in a 0.25in \vbox, so that the barcode will be up 0.25
+% in from the bottom of the envelope.
+\vbox to 0.25true in{\vfil\leftline{\envfont\enspace\Xattn}\vskip0.1true in}
+} % \vbox to 2.25true in
+\eject\end % not \bye, it has a \vfill in it
diff --git a/macros/plain/contrib/make-env/test.adr b/macros/plain/contrib/make-env/test.adr
new file mode 100644
index 0000000000..7306043c3b
--- /dev/null
+++ b/macros/plain/contrib/make-env/test.adr
@@ -0,0 +1,10 @@
+% test.adr
+%
+% J. Daniel Smith
+% 13 February 1991
+%
+% sample test address for "make-env.tex" macros
+%
+\setaddress{John Q. Doe \\
+ 1234 Main Street \\
+ Anytown, USA \zipbar{12345-6789}}
diff --git a/macros/plain/contrib/mathtime/mathtime.tex b/macros/plain/contrib/mathtime/mathtime.tex
new file mode 100644
index 0000000000..7347dc65b0
--- /dev/null
+++ b/macros/plain/contrib/mathtime/mathtime.tex
@@ -0,0 +1,978 @@
+%%% Start-of-TeX-file mathtime.tex
+%%% ====================================================================
+%%% @TeX-file{
+%%% author = "Adam H. Lewenberg",
+%%% version = "1.30",
+%%% date = "08 April 1994",
+%%% filename = "mathtime.tex",
+%%% address = "Department of Mathematics
+%%% University of Illinois at Urbana-Champaign
+%%% Urbana, Illinois 61801
+%%% USA
+%%% Tel: (217) 333-3350",
+%%% checksum = "36707 978 4110 34084",
+%%% email = "adam@math.uiuc.edu",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "MathTime PostScript TeXplorator's",
+%%% supported = "yes",
+%%% abstract = "These macros replace the Computer Modern
+%%% math fonts by the MathTime math fonts (from
+%%% the TeXplorators Corp.)",
+%%% docstring = "This file contains macros to define
+%%% text fonts and math fonts using PostScript
+%%% fonts for text and the MathTime fonts for
+%%% math. An example of how this is
+%%% done is given at the bottom of this file.
+%%% This file uses the mtmacs.tex set of macros
+%%% that come with the MathTime fonts. These
+%%% macros are compatible with:
+%%% PLAIN
+%%% AmSTeX (version 2.1 or later)
+%%% AmSTeX+AMSPPT.STY
+%%% LAmSTeX (version 2.0 or later)
+%%%
+%%% These macros are decidedly NOT compatible
+%%% with LaTeX or the NFSS (New Font
+%%% Selection Scheme).
+%%%
+%%% A sample style using these macros is given
+%%% in the file mttim10.tex (available
+%%% separately).
+%%%
+%%% Note that these macros are USELESS without
+%%% the MathTime fonts. These fonts are
+%%% available from the TeXplorators Corp
+%%% and are NOT freely-copyable (although
+%%% inexpensive).
+%%%
+%%% 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.",
+%%% dependencies = "mtmacs.tex MathTime-fonts"
+%%% }
+%%% ====================================================================
+%%% mathtime.tex version 1.30
+%%% Adam H. Lewenberg adam@math.uiuc.edu
+%%% Department of Mathematics, University of Illinois at Urbana-Champaign
+%%% -- Please report any bugs to the above address. --
+%%%
+%%% COPYRIGHT: This file copyright 1993, 1994 by Adam H. Lewenberg. For
+%%% restrictions on use see below.
+%%%
+%%% RESTRICTIONS: This file is freely copyable. If you want to change
+%%% something, change the filename from mathtime.tex to something else and
+%%% indicate any changes in the file itself, or else remove my name
+%%% from the file completely. However, you are allowed to remove all
+%%% lines beginning with "%% " (two percent characters followed by a
+%%% space).
+%%%
+%%% SUMMARY: A generic PostScript-text-fonts/MathTime-math-fonts
+%%% style. Note well that if a non-PostScript font is used for the text
+%%% faces, bad things will happen. For use, see the instructions
+%%% following the \endinput below. For information on mtmacs.tex, see the
+%%% mtmacs.tex documentation that comes with the MathTime fonts.
+%%%
+%%% The mathtime.tex macros can be used within a group safely.
+%%%
+%%% The MathTime fonts are available from the TeXplorator's Corporation
+%%% (address given below). Although the file mathtime.tex is freely
+%%% copyable, the MathTime fonts are not.
+%%%
+%%% The TeXplorators Corporation
+%%% 1572 West Gray, #377
+%%% Houston, TX 77019-4948 USA
+%%%
+%%% GLOBAL CONSTRUCTS:
+%%%
+%%% (none)
+%%%
+%%% COMPATIBLE WITH:
+%%% Plain
+%%% AmSTeX
+%%% AmSTeX + AMSPPT.STY
+%%% LAmSTeX
+%%%
+%%% (See COMPATIBILITY NOTES below!!)
+%%%
+%%% THINGS TO DO:
+%%%
+%%% 1. Change \MathRoman and other mtmacs.tex commands to work in
+%%% eight point.
+%%%
+%%% USE: The file mathtime.tex by itself does not change fonts, rather,
+%%% it sets up macros to change fonts. For an example and instructions
+%%% on the font-changing macros, see the bottom of this file (search
+%%% for the string 'Sample Implementation'), or see the file mttim10.tex.
+%%%
+%%% COMPATIBILITY NOTES: mtmacs.tex changes the catcode of _ (the
+%%% underscore character) from 8 (subscript) to 13 (active). This can
+%%% cause problems if some other macro package tries to play with the _
+%%% character (for example, old versions of the eplain.tex package). A
+%%% fix is given below in section 2.
+%%%
+%%% When using with AmSTeX+AMSPPT.STY load mathtime.tex AFTER the
+%%% \documentstyle{amsppt} command and BEFORE \topmatter.
+%%%
+%%% Neither plain.tex or amstex.tex defines a smallcaps control
+%%% sequence (although AMSPPT.STY defines \smc). So I have made the
+%%% control sequence \CapsAndSmallCaps{...} define \sc to be the font
+%%% \tensmc if is called outside of AMSPPT.STY.
+%%%
+%%% FONT FAMILIES: A comment about font families: There are only
+%%% sixteen font families available to TeX. Here is a summary of the
+%%% families PLAIN uses:
+%%% 0 text roman
+%%% 1 math italic
+%%% 2 math symbols
+%%% 3 math extensions
+%%% 4 text italic
+%%% 5 text bold
+%%% 6 text slant (oblique)
+%%% 7 typewriter (monospaced)
+%%
+%%% AMSTEX has the potential to use 6 more:
+%%% MSAM* math symbols A
+%%% MSBM* math symbols B
+%%% EUFM Euler Fraktur medium
+%%% EUFB Euler Fraktur bold
+%%% EUSM Euler Script medium
+%%% BOLD Bold versions of cmsy/cmmi NB: Uses TWO (2) families!!!!
+%%
+%%% Those marked with a * are used by AMSPPT.STY. So, if AMSPPT.STY is
+%%% called, there are only 6 left. So, at best you have 8 remaining
+%%% and at worst you have 2 remaining. The only families used up by
+%%% mathtime.tex are in the optional macros \NewCalligraphic and the
+%%% \OldNumeralsNewFamily macros. In short, \NewCalligraphic and
+%%% \OldNumeralsNewFamily should be used with care. (But read section
+%%% 3E carefully on ways of using OldNumerals wihtout using up a font
+%%% family.)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 1. Preliminary business
+%%
+%% 1A. Ensure that this file is loaded only once.
+%%
+% Load mathtime.tex only once.
+\ifx\mathtimeloaded\undefined
+ \let\next\relax
+ \let\mathtimeloaded\relax
+\else
+ \message{[mathtime.tex already loaded]}%
+ \let\next\endinput
+\fi
+\next
+%
+%%
+%% 1B. Save various catcodes.
+%%
+% Save the catcodes of @ and ". (From Michal Jaegermann)
+\edef\recoveratcodezqrz{\catcode`\noexpand\@=\the\catcode`\@}
+\catcode`\@=11
+\edef\recoverquotecodezqrz{\catcode`\noexpand\"=\the\catcode`\"}
+\catcode`\"=12
+%
+%%
+%% 1C. Define a generic load-only-once macro.
+%%
+\def\loadonlyonce#1{%
+ \expandafter\ifx\csname #1\endcsname\relax
+ \else \message{[#1 already loaded]}\endinput\fi
+ \expandafter\let\csname #1\endcsname\empty
+}
+%
+%%
+%% 1D. Make a banner macro.
+%%
+\def\FONTStyle#1{
+\message{This is the #1 style.}
+\message{For use with (PlainTeX/AmsTeX/AmsTeX+amsppt.sty/LamsTeX).}
+\message{--Please report any problems to adam@math.uiuc.edu--}
+}
+%
+%%
+%% 1E. Define some \newif's.
+%%
+\newif\ifAMSTEXloaded
+\newif\ifAMSPPTloaded
+%
+\expandafter\ifx\csname amsppt.sty\endcsname\relax
+ \AMSPPTloadedfalse\else\AMSPPTloadedtrue\fi
+%
+\ifx\amstexloaded@\relax\AMSTEXloadedtrue\else\AMSTEXloadedfalse\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 2. Load mtmacs.tex and reinstate the catcode of @.
+%%
+\input mtmacs
+% Make the catcode of @ a letter again. (The old version of mtmacs.tex
+% would fiddle with the catcode of @.)
+\catcode`\@=11
+%%
+%% NOTE WELL: The catcode of _ (the underscore) is changed from 8
+%% (as it is in PLAIN, LATEX, AMSTEX, etc) to "active" by mtmacs.tex.
+%% This can have dire consequences if some other package needs to use
+%% the _ in its \catcode=8 role. If this is the case, put the lines
+%%
+%% \xdef\recoverunderscore{\catcode`\noexpand\_=\the\catcode`\_}
+%% \catcode`\_=8
+%%
+%% right BEFORE the underscore is used, and then put
+%%
+%% \recoverunderscore
+%%
+%% right after you are done using the underscore.
+%% Fortunately, this circumstance is relatively rare.
+%%
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 3. Define the various fonts:
+%% 3A. Math fonts
+%% 3B. Text fonts
+%% 3C. AMSfonts
+%% 3D. Other fonts (Calligraphic)
+%% 3E. Other fonts (Old Style Digits)
+%%
+%% The format is slightly different in each case, but the font sizes
+%% are given by the following:
+%%
+%% {10pt sz}{9pt sz}{8pt sz}{7pt sz}{6pt sz}{5pt sz}
+%% #1 #2 #3 #4 #5 #6
+%% text script scriptscript
+%%
+%% In every instance it is important to put something for each font
+%% size even if you do not plan to use that size. For example, in none of
+%% the packages is the nine point used, but put something in anyway.
+%%
+%%%%%%%%%%%%%%%%%%%%%%
+%% 3A. Math fonts
+%% Example of use:
+%%
+%% \mathitalic{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%% \mathsymbols{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%% \mathextension{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%%
+%
+% family 1 (uses MTMI)
+\def\mathitalic#1#2#3#4#5#6{
+ \MTMI{#1}{#4}{#6}
+ \font\teni=\fontname\textfont\@ne
+ \font\seveni=\fontname\scriptfont\@ne
+ \font\fivei=\fontname\scriptscriptfont\@ne
+ \ifAMSPPTloaded
+% \font\ninei=MTMI at #2 \skewchar\ninei=45
+ \font\eighti=MTMI at #3 \skewchar\eighti=45
+ \font\sixi=MTMI at #5 \skewchar\sixi=45
+ \fi
+}
+%
+% family 2 (uses MTSY)
+\def\mathsymbols#1#2#3#4#5#6{
+ \MTSY{#1}{#4}{#6}
+ \font\tensy=\fontname\textfont\tw@
+ \font\sevensy=\fontname\scriptfont\tw@
+ \font\fivesy=\fontname\scriptscriptfont\tw@
+ \ifAMSPPTloaded
+% \font\ninesy=MTMI at #2 \skewchar\ninei=48
+ \font\eightsy=MTSY at #3 \skewchar\eightsy=48
+ \font\sixsy=MTSY at #5 \skewchar\sixsy=48
+ \fi
+}
+%
+% family 3 (uses MTEX)
+\def\mathextension#1#2#3#4#5#6{
+ \MTEX{#1}
+ \font\tenex=\fontname\textfont\thr@@
+ \ifAMSPPTloaded
+% \font\nineex=MTEX at #2
+ \font\sevenex=MTEX at #4
+ \font\eightex=MTEX at #3
+ \fi
+}
+%
+%%
+%%%%%%%%%%%%%%%%%%%%%%
+%% 3B. Text fonts
+%% Example of use:
+%%
+%% (The format is similar to the math fonts, except the first
+%% argument must be the base name of the font.)
+%% \Roman{ptmr}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%% \Boldface{ptmrb}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%% \Italic{ptmri}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%% \Slant{ptmro}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%% \Typewriter{pcrb}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%% \CapsAndSmallCaps{ptmrc}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%%
+%% Each of these control sequences also defines a macro which defines
+%% the font they call. For example, \Roman{ptmr}..{} defines the macro
+%% \RomanFont to be ptmr. Thus, you can say things like
+%%
+%% \font\bigtext=\RomanFont at 20pt
+%%
+%% So, you can more easily change from one font style to another
+%% since \bigtext will not be a specific font but rather a large
+%% version of whatever the Roman font is. The macros so defined are:
+%%
+%% \RomanFont
+%% \ItalicFont
+%% \SlantFont
+%% \BoldfaceFont
+%% \TypewriterFont
+%% \CapsAndSmallCapsFont
+%%
+%% The font defining macros are all implemented ad-hoc because of the
+%% ad-hoc nature in which font families use fonts in the various macro
+%% packages. The following table spells this out.
+%%
+%% PLAIN
+%% fam text script scriptscript
+%% 3 10 10 10
+%% 4 10 undef undef
+%% 5 10 undef undef
+%% 6 10 7 5
+%% 7 10 undef undef
+%%
+%% AMSTEX
+%% fam text script scriptscript
+%% 3 10 10 10
+%% 4 10 10 10
+%% 5 10 10 10
+%% 6 10 7 5
+%% 7 10 undef undef
+%%
+%% AMSTEX+AMSPPT.STY
+%% fam text script scriptscript
+%% 3 10 7 7
+%% 4 10 7 7
+%% 5 10 10 10
+%% 6 10 7 5
+%% 7 10 undef undef
+%%
+%% LAMSTEX (same as AMSTEX)
+%% fam text script scriptscript
+%% 4 10 10 10
+%% 5 10 10 10
+%% 6 10 7 5
+%% 7 10 undef undef
+%%
+%
+% family 0
+\def\Roman#1#2#3#4#5#6#7{
+ \font\tenrm=#1 at #2
+ \font\sevenrm=#1 at #5
+ \font\fiverm=#1 at #7
+ \textfont0=\tenrm \scriptfont0=\sevenrm
+ \scriptscriptfont0=\fiverm
+ \ifAMSPPTloaded
+% \font\ninerm=#1 at #3
+ \font\eightrm=#1 at #4
+ \font\sixrm=#1 at #6
+ \fi
+ \edef\RomanFont{#1 }%
+}
+%
+% family 4
+\def\Italic#1#2#3#4#5#6#7{
+ \font\tenit=#1 at #2
+ \textfont4=\tenit
+ \ifAMSPPTloaded
+ \font\sevenit=#1 at #5
+ \scriptfont4=\sevenit
+ \scriptscriptfont4=\sevenit
+% \font\nineit=#1 at #3
+ \font\eightit=#1 at #4
+ \else
+ \ifAMSTEXloaded
+ \scriptfont4=\tenit
+ \scriptscriptfont4=\tenit
+ \fi
+ \fi
+ \edef\ItalicFont{#1 }%
+}
+%
+% family 5
+\def\Slant#1#2#3#4#5#6#7{
+ \font\tensl=#1 at #2
+ \textfont5=\tensl
+ \ifAMSTEXloaded
+ \scriptfont5=\tensl
+ \scriptscriptfont5=\tensl
+ \fi
+ \ifAMSPPTloaded
+% \font\ninesl=#1 at #3
+ \font\eightsl=#1 at #4
+ \fi
+ \edef\SlantFont{#1 }%
+}
+%
+% family 6
+\def\Boldface#1#2#3#4#5#6#7{
+ \font\tenbf=#1 at #2
+ \font\sevenbf=#1 at #5
+ \font\fivebf=#1 at #7
+ \textfont6=\tenbf \scriptfont\bffam=\sevenbf
+ \scriptscriptfont\bffam=\fivebf
+ \ifAMSPPTloaded
+% \font\ninebf=#1 at #3
+ \font\eightbf=#1 at #4
+ \font\sixbf=#1 at #6
+ \fi
+ \edef\BoldfaceFont{#1 }%
+}
+%
+% family 7
+\def\Typewriter#1#2#3#4#5#6#7{
+ \font\tentt=#1 at #2
+ \textfont7=\tentt
+ \ifAMSPPTloaded
+% \font\ninett=#1 at #3
+ \font\eighttt=#1 at #4
+ \fi
+ \edef\TypewriterFont{#1 }%
+}
+%
+% (no family)
+\def\CapsAndSmallCaps#1#2#3#4#5#6#7{
+ \font\tensmc=#1 at #2
+%\font\ninesmc=#1 at #3
+ \font\eightsmc=#1 at #4
+% If NOT in amsppt.sty define \sc
+ \ifAMSPPTloaded\else \def\sc{\tensmc}\fi
+ \edef\CapsAndSmallCapsFont{#1 }%
+}
+%
+%%%%%%%%%%%%%%%%%%%%%%
+%% 3C. AMSfonts
+%% Example of use:
+%% \AMSFonts{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%%
+%% NOTE: Works with AmsTeX version 2.1 or later.
+%%
+%% I first define a generic AMSfont loading mechanism.
+%% \AMSFontFamily{msa}{msam}{\msafam}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%% #1 msa = \font name prefix
+%% #2 msam = file name prefix
+%% #3 \msafam = family number
+%% #4 10pt = textfont
+%% #5 9pt = (for later use)
+%% #6 8pt = \eightpoint textfont
+%% #7 7pt = scriptfont
+%% #8 6pt = \eightpoint textfont
+%% #9 5pt = scriptscriptfont
+%%
+%
+%% Those who use the Blue Sky PostScript AMS fonts take note.
+%% The msam and msbm fonts in the PS versions come in 10, 7 and 5
+%% point sizes. If AMSPPT.STY is used we also need 8 and 6 point
+%% sizes. If you have use the PS versions of the AMS fonts you should
+%% have the lines:
+%% \def\PSAMSFonts{TT}% Blue Sky PS AMS fonts: True
+%% %%\def\PSAMSFonts{TF}% Blue Sky PS AMS fonts: False
+%% in your AMSPPT.STY file. If you don't, do so NOW! Otherwise, the
+%% mathtime.tex macros will not work correctly.
+%
+\def\ef@#1{\expandafter\font\csname #1\endcsname}
+\def\DefineAMSFontFamily#1#2#3#4#5#6#7#8#9{%
+ \ef@{ten#1}=#210 at #4
+ \ef@{seven#1}=#27 at #7
+ \ef@{five#1}=#25 at #9
+ \textfont#3=\csname ten#1\endcsname
+ \scriptfont#3=\csname seven#1\endcsname
+ \scriptscriptfont#3=\csname five#1\endcsname
+ \ifAMSPPTloaded
+ \if\PSAMSFonts
+% \ef@{nine#1}=#210 at #5
+ \ef@{eight#1}=#27 at #6
+ \ef@{six#1}=#25 at #8
+ \else
+% \ef@{nine#1}=#29 at #5
+ \ef@{eight#1}=#28 at #6
+ \ef@{six#1}=#26 at #8
+ \fi
+ \fi
+}
+%
+\def\AMSFonts#1#2#3#4#5#6{
+ \ifAMSTEXloaded
+ \ifx\loadmsam\empty
+ \DefineAMSFontFamily{msa}{msam}{\msafam}{#1}{#2}{#3}{#4}{#5}{#6}
+ \fi
+ \ifx\loadmsbm\empty
+ \DefineAMSFontFamily{msb}{msbm}{\msbfam}{#1}{#2}{#3}{#4}{#5}{#6}
+ \fi
+ \ifx\loadeufm\empty
+ \DefineAMSFontFamily{eufm}{eufm}{\eufmfam}{#1}{#2}{#3}{#4}{#5}{#6}
+ \fi
+ \ifx\loadeufb\empty
+ \DefineAMSFontFamily{eufb}{eufb}{\eufbfam}{#1}{#2}{#3}{#4}{#5}{#6}
+ \fi
+ \ifx\loadeusm\empty
+ \DefineAMSFontFamily{eusm}{eusm}{\eusmfam}{#1}{#2}{#3}{#4}{#5}{#6}
+ \fi
+ \ifx\loadbold\empty
+ \DefineAMSFontFamily{cmmib}{cmmib}{\cmmibfam}{#1}{#2}{#3}{#4}{#5}{#6}
+ \fi
+ \else\relax
+ \fi
+ \ifAMSPPTloaded
+ \else
+ \def\loadextrasizes@##1##2##3##4##5##6##7{%
+ \ifx\undefined##1%
+ \else
+ \addto\tenpoint{\textfont##1##3\scriptfont##1##5%
+ \scriptscriptfont##1##7}%
+ \addto\eightpoint{\textfont##1##4\scriptfont##1##6%
+ \scriptscriptfont##1##7}%
+ \fi
+ }%
+ \fi
+}
+%%%%%%%%%%%%%%%%%%%%%%
+%% 3D. Other fonts (Calligraphic) [Uses a \newfam!]
+%% Example of use:
+%% \NewCalligraphic{cmsy10}{cmsy9}{cmsy8}{cmsy7}{cmsy6}{cmsy5}
+%%
+%% IMPORTANT: If you do NOT use \NewCalligraphic, then \cal (or
+%% \Cal in AMSTEX) will NOT work!
+%%
+%% NOTE: Different format than before. The skewchar of '60 is
+%% from cmsy. Change this if necessary. Note also that
+%% mtmacs.tex fixes \cal and \Cal, so we don't have to.
+%%
+%% Usually, the calligraphic characters come from font family 2
+%% (which are the math symbols). However, the MathTime fonts do
+%% not work this way. Instead, they assume you are using a
+%% different font which contains the script fonts.
+%% Since family 2 is already used up, the mtmacs.tex macros
+%% allocate a new family called \Calfam. Since there are only
+%% 16 font families available, use this with care.
+%%
+%
+\def\NewCalligraphic#1#2#3#4#5#6{
+ \Calligraphic{#1}{#4}{#6}% Allocates a new font family!!
+ \font\tencal=\fontname\textfont\Calfam
+ \font\sevencal=\fontname\scriptfont\Calfam
+ \font\fivecal=\fontname\scriptscriptfont\Calfam
+ \ifAMSPPTloaded
+% \font\ninecal=#2 \skewchar\ninecal='60
+ \font\eightcal=#3 \skewchar\eightcal='60
+ \font\sixcal=#5 \skewchar\sixcal='60
+ \addto\eightpoint{\textfont\Calfam=\eightcal
+ \scriptfont\Calfam=\sixcal\scriptscriptfont\Calfam=\fivecal}
+ \fi
+}
+%%%%%%%%%%%%%%%%%%%%%%
+%% 3E. Other fonts (Old Style Digits)
+%% Example of use:
+%% \OldNumeralsOldFamily{1}
+%% or
+%% \OldNumeralsNewFamily{ptmrc}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%% % This one uses a \newfam
+%%
+%% If you are using AMSTEX (or an extension of AMSTEX) you can use the
+%% following:
+%%
+%% \OldNumeralsTempFamily{ptmrc}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%%
+%% The \OldNumerals macro assumes that the digits are in the normal
+%% place where numbers are found in a standard TeX font. If this is
+%% not the case, some VF hacking will be necessary.
+%%
+%% Note that not every set of fonts will have oldstyle digits. If one
+%% of the above three macros is not called, then mathtime.tex cannot
+%% be responsible for what happens when \oldstyle is called.
+%%
+%% In PLAIN and AMSTEX the old style digits are accessed by calling
+%% the math-italic family. Of course, the math-italic family is no
+%% longer appropriate, so we must do something else. It seems silly to
+%% use up a whole font family for only 10 characters, so a way around
+%% it is called for. There are 3 options (in decreasing order of
+%% desirability):
+%%
+%% 1. [FIRST CHOICE] If the oldstyle numerals are contained in a
+%% font with a font family already assigned (for example, in
+%% Computer Modern the oldstyle numerals are in family 1), then
+%% use the command \OldNumeralsOldFamily{n} where "n" is the
+%% family number. For example, in the context of Computer
+%% Modern you should use the command \OldNumeralsFamily{1}.
+%%
+%% Example of use:
+%%
+%% \OldNumeralsOldFamily{1}.
+%%
+%% 2. [SECOND CHOICE; can only be used with
+%% AMSTEX/AMSTEX+AMSPPT.STY/LAMSTEX!]
+%% We "fake" a family, that is we temporarily use family 15
+%% for the oldnos. This is slow, but it avoids the use
+%% of a \newfam.
+%%
+%% Example of use:
+%%
+%% \OldNumeralsTempFamily{ptmrc}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%%
+%% 3. [THIRD CHOICE] You can use up a whole font family (the
+%% easiest and perhaps most efficient method). To do this, use
+%% the command \OldNumeralsNewFamily. This is the least
+%% desirable command as it uses up one of the precious 16 font
+%% families, but if you have plenty to spare you might as well
+%% use it.
+%%
+%% Example of use:
+%%
+%% \OldNumeralsNewFamily{ptmrc}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%%
+%% (or synonomously)
+%%
+%% \OldNumerals{ptmrc}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%%
+%% Note also that mtmacs.tex undefines \oldnos (although for some
+%% strange reason \oldstyle is not touched).
+%%
+%% PLAIN: ${\oldstyle 1234}$ (only in math mode)
+%% AMSTEX: \oldnos{1234} (text AND math mode)
+%%
+%
+%%%% FIRST CHOICE
+\def\DEFoldnos{%
+ \def\oldnos##1{\RIfM@{\mathcode`\,="013B \fam\oldnumfam##1}\else
+ \leavevmode\hbox{$\m@th\mathcode`\,="013B \fam\oldnumfam##1$}\fi}
+}% a hack to get around \if.. \fi silliness.
+%
+\def\OldNumeralsOldFamily#1{% Use an existing family.
+ \edef\oldnumfam{#1}
+ \ifAMSTEXloaded
+ \DEFoldnos\let\DEFoldnos\undefined
+ \else
+ \def\oldstyle{\fam\oldnumfam \tenoldnum}
+ \fi
+}
+%%%% SECOND CHOICE
+\def\DEFtempoldnos{%
+ \def\oldnos##1{\RIfM@{\mathcode`\,="013B \MToldnos@{##1}}\else
+ \leavevmode\hbox{$\m@th\mathcode`\,="013B \MToldnos@{##1}$}\fi}
+}
+%
+\def\tempoldnumfam@{15}% Use this family as the temporary family.
+\def\MToldnos@#1{% \MToldnos@ MUST be used in math mode.
+ \ifmmode
+ \bgroup
+ \textfont15=\tenoldnum \scriptfont15=\sevenoldnum
+ \scriptscriptfont15=\fiveoldnum
+ \text{\tempoldnumfam@ #1}%
+ \egroup
+ \else
+ \relax
+ \errmessage{MathTime error: Use \string\oldstyle\ in math mode only.}%
+ \fi
+}%
+%
+\newlinechar=`\^^J
+\def\OldNumeralsTempFamily#1#2#3#4#5#6#7{%
+ \ifAMSTEXloaded
+ \font\tenoldnum=#1 at #2
+ \font\sevenoldnum=#1 at #5
+ \font\fiveoldnum=#1 at #7
+ \def\textdef@@#1{\textdef@#1\rm\textdef@#1\bf\textdef@#1\sl\textdef@#1\it%
+ \textdef@#1\tempoldnum}
+ \DEFtempoldnos\let\DEFtempoldnos\undefined
+ \else
+ \message{Warning: cannot use \string\OldNumeralsTempFamily\space%
+ outside AMSTEX.^^J
+ I am using \string\OldNumeralsNewFamily\space instead.}%
+ \OldNumerals{#1}{#2}{#3}{#4}{#5}{#6}{#7}%
+ \fi
+}%
+%%%% THIRD CHOICE
+\edef\innernewfam{\expandafter\noexpand\csname newfam\endcsname}
+\def\OldNumerals#1#2#3#4#5#6#7{%
+ \ifx\oldnumfam\undefined
+ \innernewfam\oldnumfam % Define a \newfam only if \oldnumfam is
+ \fi % not yet defined.
+ \font\tenoldnum=#1 at #2
+ \font\sevenoldnum=#1 at #5
+ \font\fiveoldnum=#1 at #7
+ \textfont\oldnumfam=\tenoldnum \scriptfont\oldnumfam=\sevenoldnum
+ \scriptscriptfont\oldnumfam=\fiveoldnum
+ \ifAMSTEXloaded
+ \DEFoldnos\let\DEFoldnos\undefined
+ \else
+ \def\oldstyle{\fam\oldnumfam \tenoldnum}
+ \fi
+}
+\let\OldNumeralsNewFamily\OldNumerals
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 4. The logos (taken from texnames.sty v1.08 by Nelson Beebe)
+%%
+%% Normally, the logo for AMSTEX uses family 2 fonts in its definition,
+%% which of course will give garbage in the context of the MathTime
+%% fonts. In texnames.sty the AMSTEX logo uses \cal: in this case if
+%% \NewCalligraphic has been called with fonts other than the cmsy
+%% fonts, the logo will look odd. In other words, the only way to get
+%% the \AmSTeX logo to look the way it is supposed to look is to use
+%% \NewCalligraphic with the cmsy fonts.
+%%
+%% So I have decided that mathtime.tex will make `fake' logos which do
+%% not use family 2 or \cal. If you want the real logos, you must call
+%% the \MakeLogos macro. If \NewCalligraphic has been called the
+%% \MakeLogos macro will use as definition for the logos the
+%% definitions from texnames.sty. If \NewCalligraphic has _not_ been
+%% called, then the logo macros remain faked. In the former case, if
+%% fonts other than the cmsy fonts are used in \NewCalligraphic, the
+%% logos may look wrong.
+%%
+% Define "fake" logos:
+%
+\ifAMSTEXloaded\def\AmSTeX{AMS\TeX}\fi% Fake it
+%
+\ifx\laxread@\undefined
+\else
+ \ifx\LamSTeX\undefined% Normally defined in paper.st
+ \else
+ \def\LamSTeX{LAMS\TeX}% Fake it.
+ \fi
+\fi
+%
+\def\MakeLogos{% Definitions taken from texnames.sty, ver. 1.08
+ \ifx\Calfam\undefined
+ \else
+ \ifAMSTEXloaded
+ \def\AmSTeX{$\Cal A$\kern-.1667em\lower.5ex\hbox{$\Cal M$}%
+ \kern-.125em$\Cal S$-\TeX}% Will look funny if cmsy fonts
+ % not used in \NewCalligraphic.
+ \fi
+ \ifx\laxread@\undefined
+ \else
+ \ifx\LamSTeX\undefined
+ \else
+ \def\LamSTeX{L\raise.42ex\hbox{\kern-.3em\the\scriptfont\Calfam A}%
+ \kern-.2em\lower.376ex\hbox{\the\textfont\Calfam M}%
+ \kern-.125em {\the\textfont\Calfam S}-\TeX}%
+ \fi
+ \fi
+ \fi
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 5. Accents and other Postscript incompatibilities.
+\ifAMSTEXloaded
+ \def\D#1{{\accent"C7 #1}} % Change the dot accent for postscript
+ % fonts.
+ \makeacc@\dot{0C7} % AMSTEX math accent definition.
+\else
+ \def\dot{\mathaccent"70C7 }% PLAIN math accent definition.
+ \def\.#1{{\accent"C7 #1}}
+\fi
+\def\H#1{{\accent"CD #1}} % Fix Hungarian umlaut for PostScript
+ % fonts.
+%% In the context of Computer Modern fonts, to get a pounds sterling
+%% symbol (it looks like a script L with a horizontal line through it)
+%% one types {\it\$}. But this does not work with PostScript fonts as
+%% the pounds sterling symbol appears in all fonts in position "A3. So
+%% I define a macro \psterling to be character ^^a3. Of course, this
+%% is not strictly compatabible with PLAIN, but there really is no easy way
+%% around it. Note also that this requires TeX 3.0.
+%
+\def\psterling{^^a3} % Define the pounds sterling macro. Should
+ % work in all Postscript fonts.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 6. Finish up
+% Recover catcodes of @ and "
+\recoverquotecodezqrz\let\recoverquotecodezqrz=\undefined
+\recoveratcodezqrz\let\recoveratcodezqrz=\undefined
+%
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+CHANGE LOG
+
+Version 1.08a: (19 June 1993)
+
+---Put in extra comments.
+---Fixed TeXplorator's address.
+
+Version 1.09: (26 June 1993)
+
+---Made font defintions more compatible with ambient package.
+---Fixed eightpoint fonts in AMSPPT.STY.
+---Rewrote AMSFonts routines. Note change in \AMSFonts format.
+
+Version 1.09a: (29 June 1993)
+
+---Defined \newif's only once, even if mathtime.tex is loaded multiple
+ times.
+
+Version 1.10: (1 July 1993)
+
+---Defined the \MakeLogos macro and fake logos.
+
+Version 1.11: (4 July 1993)
+
+---Made slight change in \DefineAMSFontFamily.
+
+Version 1.20: (5 September 1993)
+
+---Simplified \newif stuff. (Why doesn't anyone tell me these things?)
+---Added \OldNumerals.
+---Changed (slightly) the way the fake logos look.
+
+Version 1.21: (8 September 1993)
+
+---Added \RomanFont, \ItalicFont et al.
+---Fixed TeXplorator's address (AGAIN).
+
+Version 1.22: (21 September 1993)
+
+---Made \DefineAMSFontFamily work with Blue Sky's PS AMS fonts.
+
+Version 1.23: (25 September 1993)
+
+---Defined \psterling for pounds sterling.
+
+Version 1.30: (7 April 1994)
+
+---Change \xdef's to \edef's in catcode saving macros.
+---Define new macros for OldNumerals to avoid using a \newfam.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Sample Implementation
+%%
+%% This style is intended as a drop-in replacement of the font
+%% definitions made by PLAIN.TEX. It is compatible with PLAIN, AMSTEX,
+%% AMSTEX+AMSPPT.STY and LAMSTEX. Thus, if you stick this file at the
+%% top of a PLAIN or AMSTEX or LAMSTEX file, and make the
+%% appropriate macro calls as illustrated below, you will get the
+%% MathTime fonts for math mode and whatever text fonts you
+%% specify. This package can be put in a group to restrict its
+%% effects.
+%%
+%% NOTA BENE: 1. If you use AMSPPT.STY, make sure to \input this file AFTER
+%% the \documentstyle{amsspt} statement, but BEFORE the \topmatter
+%% statement. 2. Use \psterling to get the pounds sterling symbol in
+%% ALL fonts.
+%%
+%% Here is an example where we define a PostScript Times-Roman style:
+%
+% \input mathtime
+% \loadonlyonce{mttim10.tex} %[optional]
+%
+%% The next line is the font-style file's name.
+%
+% \FONTStyle{PS Times Roman/MathTime [10 point]} %[optional]
+%
+%% Next decide on the point sizes for the math italic (MTMI), math
+%% symbols (MTSY), and the math extensions (MTEX).
+%
+% \mathitalic{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+% \mathsymbols{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+% \mathextension{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+%
+%% Now decide on the text faces. In the example below, I have decided
+%% to use ptmr at 10-9-8-7-6-5 point for
+%% text-ninepoint-eightpoint-script-sixpoint-scriptscript
+%% respectively. You also need a boldface, italic, slant and
+%% typewriter face.
+%% NOTE: If you are not using amsppt.sty, the eight-point and six-point
+%% sizes will be ignored, BUT PUT THEM IN ANYWAY!
+%
+% \Roman{ptmr}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+% \Boldface{ptmrb}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+% \Italic{ptmri}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+% \Slant{ptmro}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+% \Typewriter{pcrb}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+% \CapsAndSmallCaps{ptmrc}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt} %[optional]
+%
+%% In case you need to use this file with AMSTEX or LAMSTEX, make sure
+%% to define the AMS fonts.
+%
+% \AMSFonts{10pt}{9pt}{8pt}{7pt}{6pt}{5pt} %[optional]
+%
+%% If you want to use Calligraphic characters (usually those in cmsy),
+%% call the \NewCalligraphic command. Note the different format from
+%% \Roman, \Boldface, etc. Also note that if you do not define
+%% Calligraphic characters, the \cal and \Cal commands will misbehave
+%% badly.
+%%
+% \NewCalligraphic{cmsy10}{cmsy9}{cmsy8}{cmsy7}{cmsy6}{cmsy5}
+% %[optional]
+%
+%% Since I am using the cmsy fonts I should call the \MakeLogos macro.
+%% Of course, I could use \MakeLogos even if I didn't use the cmsy
+%% fonts, but the logos might look funny.
+%
+% \MakeLogos %[optional]
+%
+%% If you have old style digits (a.k.a. non-lining digits) available,
+%% you can define them using \OldNumerals. If we are AMSTEX we should
+%% use \OldNumeralsTempFamily (if we are not in AMSTEX, \OldNumerals
+%% will be chosen automagically).
+%
+% \OldNumeralsTempFamily{ptmrc}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+% %[optional]
+%
+%% The following are commands defined in mtmacs.tex to change which
+%% fonts numbers and math text use. For more information, see the
+%% mtmacs.tex documentation. They are all optional and do not work in
+%% eight-point mode in AMSPPT.STY (maybe I will change that someday).
+%%
+%% The \MathRoman command chooses the font and point sizes for numbers
+%% and punctuation in math mode.
+%
+% \MathRoman{ptmr}{10pt}{7pt}{5pt} %[optional]
+%
+%% The \MathBold command chooses which fonts to use as boldface in
+%% math mode. The analogous result happens with \MathBoldItalic.
+%
+% \MathBold{ptmb}{10pt}{7pt}{5pt} %[optional]
+% \MathBoldItalic{ptmbi}{10pt}{7pt}{5pt} %[optional]
+%
+%% At this point, insert other parameters that should be changed (for
+%% example, \baselineskip), plus other fonts. Here are a few examples:
+%%
+%%
+% \font\bigtext=\RomanFont at 12pt %[up to the user]
+% \font\ssf=phvr at 10pt %[up to the user]
+%%
+%% Finally, it is important to switch to this style with the \rm
+%% command.
+%
+% \rm
+% \endinput
+%%% End-of-TeX-file
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Start-of-TeX-file mttim10.tex
+% mttim10.tex - version 1.05 (Last changed 1 July 1993)
+%
+% I use mathtime.tex (version >1.09a) to make a ten-point PS Times-Roman
+% style. I look especially good at \magstephalf. If you use me
+% with amsppt.sty, put me between the \documentstyle statement and the
+% \topmatter statement. Use \psterling for pounds sterling.
+%
+\input mathtime
+
+\loadonlyonce{mttim10.tex}
+\FONTStyle{PS Times-Roman/MathTime}
+
+\mathitalic{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\mathsymbols{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\mathextension{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+
+\Roman{ptmr}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\Boldface{ptmb}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\Italic{ptmri}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\Slant{ptmro}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\Typewriter{pcrb}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\CapsAndSmallCaps{ptmrc}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+
+\AMSFonts{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+
+\NewCalligraphic{cmsy10}{cmsy9}{cmsy8}{cmsy7}{cmsy6}{cmsy5}%Uses a
+ %\newfam!!!
+
+\MakeLogos
+
+\rm
+
+\endinput
+\endinput
+%%% End-of-TeX-file
+
diff --git a/macros/plain/contrib/mathtime/mttim10.tex b/macros/plain/contrib/mathtime/mttim10.tex
new file mode 100644
index 0000000000..dfa3893645
--- /dev/null
+++ b/macros/plain/contrib/mathtime/mttim10.tex
@@ -0,0 +1,36 @@
+%%% Start-of-TeX-file mttim10.tex
+% mttim10.tex - version 1.05b (Last changed 1 July 1993)
+%
+% I use mathtime.tex (version >1.09a) to make a ten-point PS Times-Roman
+% style. I look especially good at \magstephalf. If you use me
+% with amsppt.sty, put me between the \documentstyle statement and the
+% \topmatter statement. Use \psterling for pounds sterling.
+%
+\input mathtime
+
+\loadonlyonce{mttim10.tex}
+\FONTStyle{PS Times-Roman/MathTime}
+
+\mathitalic{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\mathsymbols{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\mathextension{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+
+\Roman{ptmr}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\Boldface{ptmb}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\Italic{ptmri}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\Slant{ptmro}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\Typewriter{pcrb}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+\CapsAndSmallCaps{ptmrc}{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+
+\AMSFonts{10pt}{9pt}{8pt}{7pt}{6pt}{5pt}
+
+\NewCalligraphic{cmsy10}{cmsy9}{cmsy8}{cmsy7}{cmsy6}{cmsy5}%Uses a \newfam!!!
+
+\MakeLogos
+
+\rm
+
+\endinput
+\endinput
+%%% End-of-TeX-file
+
diff --git a/macros/plain/contrib/metatex/README b/macros/plain/contrib/metatex/README
new file mode 100644
index 0000000000..1e384d8e7e
--- /dev/null
+++ b/macros/plain/contrib/metatex/README
@@ -0,0 +1,92 @@
+
+\title METATeX
+
+\section What is METATeX?
+
+METATeX is a set of plain TeX and METAFONT macros that you can use to
+define both the text and the figures in a single source file. Because
+METATeX sets up two way communication, from TeX to METAFONT and back
+from METAFONT to TeX, drawing dimensions can be controlled by TeX and
+labels can be located by METAFONT. Only standard features of TeX and
+METAFONT are used, but two runs of TeX and one of METAFONT are needed.
+
+
+\section How to use METATeX?
+
+Please read the TUGboat paper on METATeX to get an explanation. The
+paper is provided here in pdf format (mtpaper.pdf). To recreate yourself
+the paper, you will need the plain TUGboat style files (tugboat.cmn and
+tugboat.sty), in addition to the sources located in the mtpaper subdir
+(mtpaper.tex, delay.mf, diagram.tex, frame.tex and shadow.tex),.
+
+The original TUGboat paper on METATeX is:
+
+"METATeX" by Ram\'on Casares.
+ TUGboat (ISSN 0896-3207)
+ Volume 23, Number 3/4, pp. 313-318, 2002.
+
+It is also available on-line:
+ http://www.tug.org/TUGboat/Articles/tb23-3-4/tb75casa.pdf
+
+
+\section Where to find METATeX?
+
+The home of METATeX is CTAN:
+
+ http://www.ctan.org/tex-archive/macros/plain/contrib/metatex/
+
+
+\section Bugs and comments
+
+Please address your comments and bug reports to (change # by @):
+
+ r.casares#computer.org
+
+I do not promise anything.
+
+
+\section Files
+
+METATeX comprises the following files:
+
+ metatex.tex
+ mtmp2pdf.tex
+ mtpaper.pdf
+ mtpaper/mtpaper.tex
+ mtpaper/delay.mf
+ mtpaper/diagram.tex
+ mtpaper/frame.tex
+ mtpaper/shadow.tex
+ README
+ gpl.txt
+
+
+\section License
+
+ METATeX.TeX communicates TeX and METAFONT
+ Copyright (C) 2003, 2004 Ram\'on Casares
+
+ 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.,
+ 59 Temple Place, Suite 330,
+ Boston, MA 02111-1307 USA
+
+
+\section Versions
+
+ 1.1 Date 2004.08.12. File mptopdf.tex renamed to mtmp2pdf.tex.
+ 1.0 Date 2003.10.15. The first public version.
+
+
+\bye
diff --git a/macros/plain/contrib/metatex/gpl.txt b/macros/plain/contrib/metatex/gpl.txt
new file mode 100644
index 0000000000..b9e48b32c0
--- /dev/null
+++ b/macros/plain/contrib/metatex/gpl.txt
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 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
+
+ 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) <year> <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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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) year 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/plain/contrib/metatex/metatex.tex b/macros/plain/contrib/metatex/metatex.tex
new file mode 100644
index 0000000000..5164807a75
--- /dev/null
+++ b/macros/plain/contrib/metatex/metatex.tex
@@ -0,0 +1,205 @@
+% METATeX.TeX (RMCG19940730)
+
+% METATeX.TeX communicates TeX and METAFONT
+% Copyright (C) 2003, 2004 Ram\'on Casares
+%
+% 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.,
+% 59 Temple Place, Suite 330,
+% Boston, MA 02111-1307 USA
+
+%\message{V1.0 by RMCG 20031002}
+\message{V1.1 by RMCG 20040812} % mptopdf -> mtmp2pdf
+
+\chardef\MToldatcatcode=\catcode`\@\catcode`\@=11
+
+\newif\ifMTf@le % true if auxiliar.mf is found (second pass)
+\newif\ifMTmf % true if second pass and MF (not MPost) has drawn the figures
+\newwrite\MToutf@le
+\newread\MTinf@le
+\newbox\MTbox
+\newbox\MTb@x
+\newcount\MTn@
+\newdimen\MTxpos@
+\newdimen\MTypos@
+
+\openin\MTinf@le=auxiliar.mf % First see if the mf file exists
+\ifeof\MTinf@le \MTf@lefalse \else \MTf@letrue \fi
+\closein\MTinf@le
+
+\def\MTendmark{}
+{\obeylines\gdef\MTign@re#1
+ {\def\next{#1}\ifx\next\MTendmark \let\next\endgroup \else %
+ \let\next\MTign@re\fi \next}}
+{\obeylines\gdef\MTc@py#1
+ {\def\next{#1}\ifx\next\MTendmark \let\next\endgroup \else %
+ \immediate\write\MToutf@le{\next}\let\next\MTc@py\fi \next}}
+
+{\obeylines\gdef\MTign@reline#1
+ {\endgroup}}
+{\obeylines\gdef\MTc@pyline#1
+ {\immediate\write\MToutf@le{#1}\endgroup}}
+
+\def\MTsetupc@py{\def\do##1{\catcode`##1=12 }\dospecials
+ \catcode`\\=0 \let\\=\MTbackslash \obeyspaces\obeylines}
+
+\def\MTmf@mp{\ifeof\MTinf@le
+ \errhelp={It seems to me that file auxiliar.mf has not been processed,
+ or that file auxiliar.log was deleted.}%
+ \errmessage{File auxiliar.log not found}%
+ \else
+ \read\MTinf@le to \next % reads METAXXXX banner
+ \def\MT@mf{METAFONT}%
+ \def\MT@##1 ##2 ##3,##4\MT@@{##3}% #1 = This, #2 = is, #3 = METAFONT ?
+ \edef\MTmeta{\expandafter\MT@\next\MT@@}%
+ \message{(Drawings made by \MTmeta)}%
+ \ifx\MTmeta\MT@mf \MTmftrue \else \MTmffalse \fi
+ \fi}
+
+\def\MTl@gl@b{\MTloglabel }
+\def\MTgetl@g{\ifeof\MTinf@le \let\next\relax
+ \errhelp={I was expecting to read a label location.}%
+ \errmessage{Unexpected end of auxiliar.log}%
+ \else \read\MTinf@le to \next
+ \ifx\next\MTl@gl@b \let\next\relax
+ {\catcode`\>=9
+ \global\read\MTinf@le to \MTxpos@text
+ \global\read\MTinf@le to \MTypos@text }%
+ \else \let\next\MTgetl@g \fi\fi \next}
+
+\escapechar=-1 \edef\MTbackslash{\string\\}\escapechar=`\\
+\def\MTslashing{\begingroup \escapechar=-1 \edef\\{\string\\}%
+ \edef\{{\string\{}\edef\}{\string\}}\edef\#{\string\#}%
+ \edef\${\string\$}\edef\^{\string\^}\edef\_{\string\_}%
+ \edef\&{\string\&}\edef\~{\string\~}\edef\%{\string\%}%
+ \escapechar=`\\}
+\let\MTendslashing=\endgroup
+
+\def\MTf@rst#1#2#3/{#1}\def\MTsec@nd#1#2#3/{#2}
+
+\ifMTf@le \message{Second TeX pass} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \openin\MTinf@le=auxiliar.log
+ \MTmf@mp
+ \ifMTmf % METAFONT has written auxiliar.log
+ \font\MTfont=auxiliar \def\MTchar{\MTfont\char\MTn@}%
+ \else % MetaPost has written auxiliar.log
+ \ifx\pdfliteral\undefined
+ \def\MTchar{\special{psfile=auxiliar.\number\MTn@}}%
+ \else
+ \input mtmp2pdf
+ \def\MTchar{\MPtoPDF{auxiliar.\number\MTn@}}%
+ %\input supp-pdf.tex % Context
+ %\let\oldfinMPgrap=\finishMPgraphic % to avoid centering
+ %\def\finishMPgraphic{\xdef\MPxoffset{0}\xdef\MPyoffset{0}\oldfinMPgrap}%
+ %\def\MTchar{\convertMPtoPDF{auxiliar.\number\MTn@}{1}{1}}%
+ \fi
+ \fi
+ \def\MTcode{\begingroup\MTsetupc@py\MTign@re{ }}
+ \def\MT:{\begingroup\MTsetupc@py\MTign@reline}
+ \def\MTline#1{}
+ \def\MTbeginchar(#1,#2,#3);{\setbox\MTb@x=\hbox{\MTchar}%
+ \wd\MTb@x=#1\ht\MTb@x=#2\dp\MTb@x=#3\setbox\MTbox=\vtop{\box\MTb@x}}
+ \def\MTlabel#1(#2)#3"#4";{\setbox\MTb@x\hbox{#4}\MTgetl@g
+ \MTxpos@=\MTxpos@text pt \MTypos@=\MTypos@text pt \dimen@=\dp\MTbox
+ \setbox\MTbox=\vtop{\unvbox\MTbox\nointerlineskip
+ \def\1{\MTf@rst#3cc/}\def\2{\MTsec@nd#3cc/}%
+ \vbox to 0pt{\advance\dimen@\MTypos@ \kern-\dimen@
+ \if b\1\kern-\ht\MTb@x \else \if c\1\kern-0.5\ht\MTb@x \fi\fi
+ \hbox to 0pt{\kern\MTxpos@
+ \if r\2\kern-\wd\MTb@x \else \if c\2\kern-0.5\wd\MTb@x \fi\fi
+ \box\MTb@x\hss}\vss}}}
+ \def\MTendchar;{\global\advance\MTn@1 }
+\else \message{First TeX pass} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \let\MTfont=\nullfont
+ \let\MTchar=\relax
+ \tracinglostchars=0
+ \immediate\openout\MToutf@le=auxiliar.mf
+ \def\MTcode{\begingroup\MTsetupc@py\MTc@py{ }}
+ \def\MT:{\begingroup\MTsetupc@py\MTc@pyline}
+ \def\MTline#1{\MTslashing\immediate\write\MToutf@le{#1}\MTendslashing}
+ \def\MTbeginchar(#1,#2,#3);{%
+ \MTline{beginchar(\number\MTn@,#1\#,#2\#,#3\#); \% line \the\inputlineno}%
+ \global\setbox\MTbox=\vtop{}\wd\MTbox=#1\ht\MTbox=#2\dp\MTbox=#3}
+ \def\MTlabel#1(#2)#3"#4";{{\setbox0=\hbox{#4}%
+ \def\1{\MTf@rst#3cc/}\def\2{\MTsec@nd#3cc/}%
+ \MTline{ MTlabel(#2)("\1","\2","#1",\the\wd0,\the\ht0,\the\dp0);}}}
+ \def\MTendchar;{\MTline{endchar;}\MTline{}\global\advance\MTn@1 }
+\fi
+
+\MT:% Generated by METATeX
+\MT:
+\MT: mag:=\number\mag/1000;
+\MT:
+\MT: truept = pt/mag; truept# = pt#/mag;
+\MT: truepc = pc/mag; truepc# = pc#/mag;
+\MT: truein = in/mag; truein# = in#/mag;
+\MT: truebp = bp/mag; truebp# = bp#/mag;
+\MT: truecm = cm/mag; truecm# = cm#/mag;
+\MT: truemm = mm/mag; truemm# = mm#/mag;
+\MT: truedd = dd/mag; truedd# = dd#/mag;
+\MT: truecc = cc/mag; truecc# = cc#/mag;
+\MT:
+\MT:if known prologues: % if mpost:
+\MT:
+\MT: mm#=2.84528; pt#=1; dd#=1.07001; bp#=1.00375;
+\MT: cm#=28.45276; pc#=12; cc#=12.84010; in#=72.27;
+\MT:
+\MT: string extra_setup, extra_beginchar, extra_endchar;
+\MT: extra_setup = extra_beginchar = extra_endchar = "";
+\MT:
+\MT: def mode_setup =
+\MT: proofing:=0; % no, we're not making proofs
+\MT: fontmaking:=0; % no, we're not making a font
+\MT: tracingtitles:=0; % no, don't show titles at all
+\MT: scantokens extra_setup;
+\MT: enddef;
+\MT:
+\MT: def beginchar(expr c,w_sharp,h_sharp,d_sharp) =
+\MT: begingroup
+\MT: charcode:=c;
+\MT: w:=w_sharp*pt; h:=h_sharp*pt; d:=d_sharp*pt;
+\MT: clearxy; clearit; clearpen;
+\MT: pickup defaultpen;
+\MT: drawoptions();
+\MT: scantokens extra_beginchar;
+\MT: enddef;
+\MT:
+\MT: def endchar =
+\MT: scantokens extra_endchar;
+\MT: shipit;
+\MT: endgroup
+\MT: enddef;
+\MT:
+\MT:else: % mf
+\MT: mode:=localfont;
+\MT:fi
+\MT:
+\MT:mode_setup;
+\MT:
+\MT:def MTlabel(suffix i)(expr v,h,add,wd,ht,dp) =
+\MT: x.i.l = x.i if h="c": - wd/2 elseif h="r": - wd fi;
+\MT: y.i.t = y.i if v="c": + ht/2 elseif v="b": + ht fi;
+\MT: x.i.r = x.i.l + wd; y.i.b = y.i.t - ht - dp;
+\MT: if not (add=""): erase fill (x.i.l,y.i.t) --
+\MT: (x.i.l,y.i.b) -- (x.i.r,y.i.b) -- (x.i.r,y.i.t) -- cycle; fi
+\MT: message"\\MTloglabel"; show x\\i/pt; show y\\i/pt; message"";
+\MT:enddef;
+\MT:
+
+\let\texbye=\bye
+\outer\def\bye{\ifMTf@le \closein\MTinf@le \else
+ \MTline{end.}\immediate\closeout\MToutf@le \fi
+ \par\vfill\supereject\end}
+
+\catcode`\@=\MToldatcatcode
diff --git a/macros/plain/contrib/metatex/mtmp2pdf.tex b/macros/plain/contrib/metatex/mtmp2pdf.tex
new file mode 100644
index 0000000000..91e2318eee
--- /dev/null
+++ b/macros/plain/contrib/metatex/mtmp2pdf.tex
@@ -0,0 +1,369 @@
+% MTMP2PDF.TeX (RMCG19970919)
+
+% MTMP2PDF.TeX converts from PostScript code (by METAPost) to PDF
+% Adapted by Ram\'on Casares from ConTeXt by PRAGMA
+% ConTeXt copyright={PRAGMA / Hans Hagen & Ton Otten}
+% Under the same terms as ConTeXt
+% http://www.pragma-ade.com/general/manuals/mreadme.pdf
+
+% \catcode`\@ should be 11
+
+\newcount\MPcounter
+\newdimen\MPdimen
+
+% POSTSCRIPT operators that METAPOST uses
+
+\def \PScurveto {curveto}
+\def \PSlineto {lineto}
+\def \PSmoveto {moveto}
+\def \PSshowpage {showpage}
+\def \PSnewpath {newpath}
+\def \PSfshow {fshow}
+\def \PSclosepath {closepath}
+\def \PSfill {fill}
+\def \PSstroke {stroke}
+\def \PSclip {clip}
+\def \PSrlineto {rlineto}
+\def \PSsetlinejoin {setlinejoin}
+\def \PSsetlinecap {setlinecap}
+\def \PSsetmiterlimit {setmiterlimit}
+\def \PSsetgray {setgray}
+\def \PSsetrgbcolor {setrgbcolor}
+\def \PSsetdash {setdash}
+\def \PSgsave {gsave}
+\def \PSgrestore {grestore}
+\def \PStranslate {translate}
+\def \PSscale {scale}
+\def \PSconcat {concat}
+\def \PSdtransform {dtransform}
+
+\def \PSBoundingBox {BoundingBox:}
+\def \PSHiResBoundingBox {HiResBoundingBox:}
+\def \PSExactBoundingBox {ExactBoundingBox:}
+\def \PSPage {Page:}
+
+% A stack
+
+\newcount\nofMPsegments
+\newcount\nofMParguments
+
+\def\@@MP{@@MP}
+
+\def\setMPargument#1{\advance\nofMParguments by 1
+ \expandafter\def
+ \csname\@@MP\the\nofMPsegments\the\nofMParguments\endcsname%
+ {\do#1}}
+
+\def\gMPa#1{\csname\@@MP0#1\endcsname}
+\def\gMPs#1{\csname\@@MP\the\nofMPsegments#1\endcsname}
+
+\def\setMPkeyword#1
+ {\expandafter\def\csname\@@MP\the\nofMPsegments0\endcsname{#1}%
+ \advance\nofMPsegments by 1 \nofMParguments=0\relax}
+
+\def\getMPkeyword#1{\csname\@@MP#10\endcsname}
+
+\def\resetMPstack{\catcode`\%=13 % active
+ \let\handleMPgraphic=\handleMPendgraphic
+ \def\resetMPstack{\nofMParguments=0\relax}%
+ \resetMPstack}
+
+% Ignore, most of times, ( and ), but with care
+% Take care, also of TeX specials
+
+\def\octalMPcharacter#1#2#3{\char'#1#2#3\relax}
+
+\bgroup
+\catcode`\|=14 \catcode`\%=13 \catcode`\[=13 \catcode`\]=13
+\catcode`\{=13 \catcode`\}=13 \catcode`B=1 \catcode`E=2
+\gdef\ignoreMPspecialsB\def%BE\def[BE\def]BE\def{BE\def}BEE
+\gdef\obeyMPspecialsB\def%B\char 37\relax E|
+ \def[B\char 91\relax E\def]B\char 93\relax E|
+ \def{B\char123\relax E\def}B\char125\relax EE
+\gdef\setMPspecialsB\catcode`\%=13
+ \catcode`\[=13 \catcode`\]=13 \catcode`\{=13 \catcode`\}=13
+ \catcode`\$=11 \catcode`\_=11 \catcode`\#=11 \catcode`\^=11
+ \catcode`\&=11 \catcode`\|=11 \catcode`\~=11
+ \def\(B\char40\relax E\def\)B\char41\relax E\def\\B\char92\relax E|
+ \def\0B\octalMPcharacter0E\def\1B\octalMPcharacter1E|
+ \def\2B\octalMPcharacter2E\def\3B\octalMPcharacter3E|
+ \def\4B\octalMPcharacter4E\def\5B\octalMPcharacter5E|
+ \def\6B\octalMPcharacter6E\def\7B\octalMPcharacter7E|
+ \def\8B\octalMPcharacter8E\def\9B\octalMPcharacter9EE
+\egroup
+
+% We use the comment symbol as a sort of trigger:
+
+\bgroup \catcode`\%=13
+\gdef\startMPscanning{\let%=\startMPconversion}
+\egroup
+
+\def\startMPconversion{\catcode`\%=9 \ignoreMPspecials \handleMPsequence}
+
+% The main loop.
+% Most arguments are numbers that can be recognized by their \lccode.
+
+\def\dohandleMPsequence#1#2 {\ifnum\lccode`#1=0 \setMPargument{#1#2}%
+ \else \edef\somestring{#1#2}\ifx\somestring\PSmoveto
+ \edef\lastMPmoveX{\gMPa1}\edef\lastMPmoveY{\gMPa2}%
+ \pdfliteral{\gMPa1 \gMPa2 m}\resetMPstack
+ \else\ifx\somestring\PSnewpath \let\handleMPsequence=\handleMPpath
+ \else\ifx\somestring\PSgsave \pdfliteral{q}\resetMPstack
+ \else\ifx\somestring\PSgrestore \pdfliteral{Q}\resetMPstack
+ \else\ifx\somestring\PSdtransform % == setlinewidth
+ \let\handleMPsequence=\handleMPdtransform
+ \else\ifx\somestring\PSconcat
+ \pdfliteral{\gMPa1 \gMPa2 \gMPa3 \gMPa4 \gMPa5 \gMPa6 cm}\resetMPstack
+ \else\ifx\somestring\PSsetrgbcolor
+ \pdfliteral{\gMPa1 \gMPa2 \gMPa3 rg \gMPa1 \gMPa2 \gMPa3 RG}%
+ \resetMPstack
+ \else\ifx\somestring\PSsetgray \pdfliteral{\gMPa1 g \gMPa1 G}\resetMPstack
+ \else\ifx\somestring\PStranslate
+ \pdfliteral{1 0 0 1 \gMPa1 \gMPa2 cm}\resetMPstack
+ \else\ifx\somestring\PSsetdash \handleMPsetdash \resetMPstack
+ \else\ifx\somestring\PSsetlinejoin \pdfliteral{\gMPa1 j}\resetMPstack
+ \else\ifx\somestring\PSsetmiterlimit \pdfliteral{\gMPa1 M}\resetMPstack
+ \else\ifx\somestring\PSfshow \handleMPfshow \resetMPstack
+ \else\ifx\somestring\PSsetlinecap \pdfliteral{\gMPa1 J}\resetMPstack
+ \else\ifx\somestring\PSrlineto
+ \pdfliteral{\lastMPmoveX\space \lastMPmoveY\space l S}\resetMPstack
+ \else\ifx\somestring\PSscale
+ \pdfliteral{\gMPa1 0 0 \gMPa2 0 0 cm}\resetMPstack
+ \else \handleMPgraphic{#1#2}%
+ \fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi \fi
+ \handleMPsequence}
+
+% Graphics
+
+\def\handleMPendgraphic#1{\ifx\somestring\PSshowpage
+ \let\handleMPsequence=\finishMPgraphic \else
+ \setMPargument{#1}\fi}
+
+\def\handleMPbegingraphic#1{\ifx\somestring\PSBoundingBox
+ \let\handleMPsequence=\handleMPboundingbox
+ \else\ifx\somestring\PSHiResBoundingBox
+ \let\handleMPsequence=\handleMPboundingbox
+ \else\ifx\somestring\PSExactBoundingBox
+ \let\handleMPsequence=\handleMPboundingbox
+ \else\ifx\somestring\PSPage
+ \let\handleMPsequence=\handleMPpage
+ \else \setMPargument{#1}\fi\fi\fi\fi}
+
+\let\handleMPgraphic=\handleMPbegingraphic
+
+% There are three kind of bounding boxes:
+% BoundingBox: llx lly ucx ucy
+% HiResBoundingBox: llx lly ucx ucy
+% ExactBoundingBox: llx lly ucx ucy
+% The dimensions are saved for later use.
+
+\def\handleMPboundingbox #1 #2 #3 #4 {\nofMParguments=0
+ \let\handleMPsequence=\dohandleMPsequence \handleMPsequence}
+
+% The page comment is a signal that stackbuilding can be started
+
+\def\handleMPpage #1 #2 {\nofMParguments=0
+ \let\handleMPsequence=\dohandleMPsequence \handleMPsequence}
+
+% METAPOST: 0 0 rlineto
+
+\def\lastMPmoveX{0}\def\lastMPmoveY{0}
+
+% Text
+
+{\catcode`\.=12 \catcode`\p=12 \catcode`\t=12
+ \gdef\WITHOUTPT#1pt{#1}}
+\def\withoutpt#1{\expandafter\WITHOUTPT#1}
+\def\ScaledPointsToBigPoints#1#2{\MPdimen=#1sp\relax
+ \MPdimen=.996264\MPdimen \edef#2{\withoutpt{\the\MPdimen}}}
+
+\def\handleMPfshow{\setbox0=\hbox{\obeyMPspecials
+ \edef\size{\gMPa{\the\nofMParguments} }%
+ \advance\nofMParguments by -1
+ \font\temp=\gMPa{\the\nofMParguments} at \size bp
+ \advance\nofMParguments by -1 \temp
+ \ifnum\nofMParguments=1 \def\do(##1){##1}\gMPa1%
+ \else \MPcounter=1
+ \def\do(##1{##1}\gMPa{\the\MPcounter}\space\def\do{}%
+ \loop \advance\MPcounter by 1
+ \ifnum\MPcounter<\nofMParguments \gMPa{\the\MPcounter}\space\repeat
+ \def\do##1){##1}\gMPa{\the\MPcounter}%
+ \fi
+ \unskip}%
+ \dimen0=\lastMPmoveY bp \advance\dimen0 by \ht0
+ \ScaledPointsToBigPoints{\number\dimen0}\lastMPmoveY
+ \pdfliteral{n q 1 0 0 1 \lastMPmoveX\space\lastMPmoveY\space cm}%
+ \dimen0=\ht0 \advance\dimen0 by \dp0 \box0 \vskip-\dimen0
+ \pdfliteral{Q}}
+
+
+% Take care of dashes
+
+\def\handleMPsetdash{\bgroup \def\somestring{[}\MPcounter=1
+ \loop \ifnum\MPcounter<\nofMParguments
+ \edef\somestring{\somestring\space\gMPa{\the\MPcounter}}%
+ \advance\MPcounter by 1 \repeat
+ \edef\somestring{\somestring]\gMPa{\the\MPcounter} d}%
+ \pdfliteral{\somestring}\egroup}
+
+% setlinewidth
+
+\def\handleMPdtransform{\ifdim\gMPa1pt>0pt
+ \pdfliteral{\gMPa1 w}%
+ \def\next##1 ##2 ##3 ##4 ##5 ##6 {\handleMPsequence}\else
+ \pdfliteral{\gMPa2 w}%
+ \def\next##1 ##2 ##3 ##4 {\handleMPsequence}\fi
+ \let\handleMPsequence=\dohandleMPsequence \resetMPstack
+ \next}
+
+% Paths, concat
+
+\def\handleMPpath{\chardef\finiMPpath=0
+ \let\closeMPpath=\relax \let\flushMPpath=\flushnormalMPpath
+ \resetMPstack \nofMPsegments=1
+ \let\handleMPsequence=\dohandleMPpath \dohandleMPpath}
+
+\def\flushnormalMPpath{\MPcounter=\nofMPsegments \nofMPsegments=1
+ \loop \expandafter\ifcase\getMPkeyword{\the\nofMPsegments}\relax
+ \pdfliteral{\gMPs1 \gMPs2 l}\or
+ \pdfliteral{\gMPs1 \gMPs2 \gMPs3 \gMPs4 \gMPs5 \gMPs6 c}\or
+ \pdfliteral{\lastMPmoveX\space \lastMPmoveY\space l S}\or
+ \edef\lastMPmoveX{\gMPs1}\edef\lastMPmoveY{\gMPs2}%
+ \pdfliteral{\lastMPmoveX\space \lastMPmoveY\space m}\fi
+ \advance\nofMPsegments by 1\relax
+ \ifnum\nofMPsegments<\MPcounter \repeat}
+
+\def\flushconcatMPpath{\MPcounter=\nofMPsegments \nofMPsegments=1
+ \loop \expandafter\ifcase\getMPkeyword{\the\nofMPsegments}\relax
+ \doMPconcat{\gMPs1}\a{\gMPs2}\b \pdfliteral{\a\space \b\space l}%
+ \or
+ \doMPconcat{\gMPs1}\a{\gMPs2}\b
+ \doMPconcat{\gMPs3}\c{\gMPs4}\d
+ \doMPconcat{\gMPs5}\e{\gMPs6}\f
+ \pdfliteral{\a\space \b\space \c\space \d\space \e\space \f\space c}%
+ \or
+ \bgroup \noMPtranslate \doMPconcat\lastMPmoveX\a\lastMPmoveY\b
+ \pdfliteral{\a\space \b\space l S}\egroup
+ \or
+ \edef\lastMPmoveX{\gMPs1}\edef\lastMPmoveY{\gMPs2}%
+ \doMPconcat\lastMPmoveX\a\lastMPmoveY\b
+ \pdfliteral{\a\space \b\space m}%
+ \fi
+ \advance\nofMPsegments by 1\relax
+ \ifnum\nofMPsegments<\MPcounter \repeat}
+
+% The transformation of the coordinates
+
+\def\MPconcatfactor{256}
+
+\def\doMPreducedimen#1 {\count0=\MPconcatfactor
+ \advance\dimen#1 \ifdim\dimen#1>0pt .5\else -.5\fi\count0
+ \divide\dimen#1 \count0\relax}
+
+\def\doMPexpanddimen#1 {\multiply\dimen#1 \MPconcatfactor\relax}
+
+\def\presetMPconcat%
+ {\dimen 0=\gMPs1 pt \doMPreducedimen 0 % r_x
+ \dimen 2=\gMPs2 pt \doMPreducedimen 2 % s_x
+ \dimen 4=\gMPs3 pt \doMPreducedimen 4 % s_y
+ \dimen 6=\gMPs4 pt \doMPreducedimen 6 % r_y
+ \dimen 8=\gMPs5 pt \doMPreducedimen 8 % t_x
+ \dimen10=\gMPs6 pt \doMPreducedimen10 } % t_y
+
+\def\presetMPscale%
+ {\dimen 0=\gMPs1 pt \doMPreducedimen 0
+ \dimen 2=0pt
+ \dimen 4=0pt
+ \dimen 6=\gMPs2 pt \doMPreducedimen 6
+ \dimen 8=0pt
+ \dimen10=0pt }
+
+\def\noMPtranslate% use this one grouped
+ {\dimen 8=0pt % t_x
+ \dimen10=0pt } % t_y
+
+\def\doMPconcat#1#2#3#4%
+ {\dimen12=#1 pt \doMPreducedimen12 % p_x
+ \dimen14=#3 pt \doMPreducedimen14 % p_y
+ %
+ \dimen16 \dimen 0
+ \multiply \dimen16 \dimen 6
+ \dimen20 \dimen 2
+ \multiply \dimen20 \dimen 4
+ \advance \dimen16 -\dimen20
+ %
+ \dimen18 \dimen12
+ \multiply \dimen18 \dimen 6
+ \dimen20 \dimen14
+ \multiply \dimen20 \dimen 4
+ \advance \dimen18 -\dimen20
+ \dimen20 \dimen 4
+ \multiply \dimen20 \dimen10
+ \advance \dimen18 \dimen20
+ \dimen20 \dimen 6
+ \multiply \dimen20 \dimen 8
+ \advance \dimen18 -\dimen20
+ %
+ \multiply \dimen12 -\dimen 2
+ \multiply \dimen14 \dimen 0
+ \advance \dimen12 \dimen14
+ \dimen20 \dimen 2
+ \multiply \dimen20 \dimen 8
+ \advance \dimen12 \dimen20
+ \dimen20 \dimen 0
+ \multiply \dimen20 \dimen10
+ \advance \dimen12 -\dimen20
+ %
+ \doMPreducedimen16
+ \divide \dimen18 \dimen16 \doMPexpanddimen18
+ \divide \dimen12 \dimen16 \doMPexpanddimen12
+ %
+ \edef#2{\withoutpt{\the\dimen18}}% % p_x^\prime
+ \edef#4{\withoutpt{\the\dimen12}}} % p_y^\prime
+
+\def\processMPpath{\flushMPpath \closeMPpath
+ \pdfliteral{\ifcase\finiMPpath W n\or S\or f\or B\fi}%
+ \let\handleMPsequence=\dohandleMPsequence
+ \resetMPstack \nofMPsegments=0 \handleMPsequence}
+
+\def\handleMPpathconcat{\presetMPconcat
+ \pdfliteral{\gMPs1 \gMPs2 \gMPs3 \gMPs4 \gMPs5 \gMPs6 cm}%
+ \resetMPstack}
+
+\def\handleMPpathscale{\presetMPscale
+ \pdfliteral{\gMPs1 0 0 \gMPs2 0 0 cm}\resetMPstack}
+
+\def\dohandleMPpath#1#2 {\ifnum\lccode`#1=0 \setMPargument{#1#2}%
+ \else \def\somestring{#1#2}\ifx\somestring\PSlineto \setMPkeyword0
+ \else\ifx\somestring\PScurveto \setMPkeyword1
+ \else\ifx\somestring\PSrlineto \setMPkeyword2
+ \else\ifx\somestring\PSmoveto \setMPkeyword3
+ \else\ifx\somestring\PSclip \let\handleMPsequence=\processMPpath
+ \else\ifx\somestring\PSgsave \chardef\finiMPpath=3
+ \else\ifx\somestring\PSgrestore
+ \else\ifx\somestring\PSfill
+ \ifnum\finiMPpath=0
+ \chardef\finiMPpath=2 \let\handleMPsequence=\processMPpath \fi
+ \else\ifx\somestring\PSstroke
+ \ifnum\finiMPpath=0 \chardef\finiMPpath=1 \fi
+ \let\handleMPsequence=\processMPpath
+ \else\ifx\somestring\PSclosepath \def\closeMPpath{\pdfliteral{h}}%
+ \else\ifx\somestring\PSconcat
+ \let\flushMPpath=\flushconcatMPpath \handleMPpathconcat
+ \else\ifx\somestring\PSscale
+ \let\flushMPpath\flushconcatMPpath \handleMPpathscale
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \handleMPsequence}
+
+% The main conversion command
+
+\def\MPtoPDF#1{\bgroup
+ \setMPspecials\startMPscanning\def\do{}%
+ \setbox0=\vbox\bgroup
+ \parskip=0pt \leftskip=0pt \parindent=0pt \everypar{}\offinterlineskip
+ \pdfliteral{q}\let\handleMPsequence=\dohandleMPsequence
+ \input #1 \relax}
+
+\def\finishMPgraphic{\pdfliteral{Q}\egroup\box0\egroup}
+
+\endinput
diff --git a/macros/plain/contrib/metatex/mtpaper.pdf b/macros/plain/contrib/metatex/mtpaper.pdf
new file mode 100644
index 0000000000..80953ce70b
--- /dev/null
+++ b/macros/plain/contrib/metatex/mtpaper.pdf
Binary files differ
diff --git a/macros/plain/contrib/metatex/mtpaper/delay.mf b/macros/plain/contrib/metatex/mtpaper/delay.mf
new file mode 100644
index 0000000000..35c12915cf
--- /dev/null
+++ b/macros/plain/contrib/metatex/mtpaper/delay.mf
@@ -0,0 +1,301 @@
+% DELAY.MF (RMCG19950405)
+
+% DELAY.MF delays the actual drawing till the endchar;
+% Copyright (C) 2003 Ram\'on Casares
+%
+% 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.,
+% 59 Temple Place, Suite 330,
+% Boston, MA 02111-1307 USA
+
+def clear_del =
+ save _dn, _del; _dn := 0; string _del[];
+enddef;
+
+def make_del =
+ for k := 1 upto _dn: scantokens _del[k]; endfor
+enddef;
+
+extra_beginchar := extra_beginchar & "clear_del;";
+extra_endchar := "make_del;" & extra_endchar;
+
+def MTlabel(suffix i)(expr v,h,add,wd,ht,dp) =
+ x.i.l = x.i if h="c": - wd/2 elseif h="r": - wd fi;
+ y.i.t = y.i if v="c": + ht/2 elseif v="b": + ht fi;
+ x.i.r = x.i.l + wd; y.i.b = y.i.t - ht - dp;
+ if not (add=""): _del[incr _dn] := "_delete(" & str i & ");"; fi
+ _del[incr _dn] := "_pos(" & str i & ");";
+enddef;
+
+def _delete(suffix i) = erase fill (x.i.l,y.i.t) --
+ (x.i.l,y.i.b) -- (x.i.r,y.i.b) -- (x.i.r,y.i.t) -- cycle;
+enddef;
+
+def _pos(suffix i) =
+ message"\MTloglabel"; show x\i/pt; show y\i/pt; message"";
+enddef;
+
+pickup pencircle scaled 0.4pt; thin_pen:=savepen;
+pickup pencircle scaled 0.8pt; med_pen:=savepen;
+pickup pencircle scaled 1.2pt; thick_pen:=savepen;
+
+def thinpen = pickup thin_pen;
+ _del[incr _dn] := "pickup thin_pen;";
+enddef;
+
+def medpen = pickup med_pen;
+ _del[incr _dn] := "pickup med_pen;";
+enddef;
+
+def thickpen = pickup thick_pen;
+ _del[incr _dn] := "pickup thick_pen;";
+enddef;
+
+def rectangle(suffix s)(expr width,height) =
+ x.s.l = x.s - width/2; x.s.r = x.s + width/2;
+ y.s.t = y.s + height/2; y.s.b = y.s - height/2;
+ _del[incr _dn] := "_rectangle(" & str s & ");";
+enddef;
+
+def _rectangle(suffix s) =
+ draw (x.s.l,y.s.b) -- (x.s.r,y.s.b) --
+ (x.s.r,y.s.t) -- (x.s.l,y.s.t) -- cycle;
+enddef;
+
+def square(suffix s)(expr side) =
+ x.s.l = x.s - side/2; x.s.r = x.s + side/2;
+ y.s.t = y.s + side/2; y.s.b = y.s - side/2;
+ _del[incr _dn] := "_square(" & str s & ");";
+enddef;
+
+def _square(suffix s) =
+ draw (x.s.l,y.s.b) -- (x.s.r,y.s.b) --
+ (x.s.r,y.s.t) -- (x.s.l,y.s.t) -- cycle;
+enddef;
+
+def ellipse(suffix s)(expr width,height) =
+ x.s.l = x.s - width/2; x.s.r = x.s + width/2;
+ y.s.t = y.s + height/2; y.s.b = y.s - height/2;
+ _del[incr _dn] := "_ellipse(" & str s & ");";
+enddef;
+
+def _ellipse(suffix s) =
+ draw (fullcircle xscaled (x.s.r - x.s.l) yscaled (y.s.t - y.s.b)
+ shifted z.s);
+enddef;
+
+def circle(suffix s)(expr diameter) =
+ x.s.l = x.s - diameter/2; x.s.r = x.s + diameter/2;
+ y.s.t = y.s + diameter/2; y.s.b = y.s - diameter/2;
+ _del[incr _dn] := "_circle(" & str s & ");";
+enddef;
+
+def _circle(suffix s) =
+ draw (fullcircle scaled (x.s.r - x.s.l) shifted z.s);
+enddef;
+
+def oval(suffix s)(expr width,height,superness) =
+ x.s.l = x.s - width/2; x.s.r = x.s + width/2;
+ y.s.t = y.s + height/2; y.s.b = y.s - height/2;
+ x.s.ness = superness;
+ _del[incr _dn] := "_oval(" & str s & ");";
+enddef;
+
+def _oval(suffix s) =
+ draw superellipse((x.s.r,y.s),(x.s,y.s.t),(x.s.l,y.s),(x.s,y.s.b),
+ x.s.ness);
+enddef;
+
+def triangle(suffix s)(expr width,height) =
+ x.s.l = x.s - width/2; x.s.r = x.s + width/2;
+ y.s.t = y.s + height/2; y.s.b = y.s - height/2;
+ _del[incr _dn] := "_triangle(" & str s & ");";
+enddef;
+
+def _triangle(suffix s) =
+ draw (x.s.l,y.s.b) -- (x.s.r,y.s.b) -- (x.s,y.s.t) -- cycle;
+enddef;
+
+def lozenge(suffix s)(expr width,height) =
+ x.s.l = x.s - width/2; x.s.r = x.s + width/2;
+ y.s.t = y.s + height/2; y.s.b = y.s - height/2;
+ _del[incr _dn] := "_lozenge(" & str s & ");";
+enddef;
+
+def _lozenge(suffix s) =
+ draw (x.s.l,y.s) -- (x.s,y.s.b) --
+ (x.s.r,y.s) -- (x.s,y.s.t) -- cycle;
+enddef;
+
+dot_diameter := 2.4pt;
+
+def dot(suffix s) =
+ x.s.dd = dot_diameter;
+ _del[incr _dn] := "_dot(" & str s & ");";
+enddef;
+
+def _dot(suffix s) =
+ fill fullcircle scaled x.s.dd shifted z.s;
+enddef;
+
+def line(suffix s) =
+ _del[incr _dn] := "_line(" & str s & ");";
+enddef;
+
+def _line(suffix s) =
+ draw z.s.o -- z.s.d;
+enddef;
+
+dash_length := 4pt;
+
+def dottedline(suffix s) =
+ x.s.dl = dash_length; x.s.dd = dot_diameter;
+ _del[incr _dn] := "_dottedline(" & str s & ");";
+enddef;
+
+def _dottedline(suffix s) =
+ begingroup save p, n;
+ path p; p = z.s.o -- z.s.d;
+ n := floor(length(z.s.d-z.s.o)/abs(x.s.dl));
+ for i := 0 upto n:
+ fill fullcircle scaled x.s.dd shifted (point i/n of p);
+ endfor endgroup
+enddef;
+
+def dashedline(suffix s) =
+ x.s.dl = dash_length;
+ _del[incr _dn] := "_dashedline(" & str s & ");";
+enddef;
+
+def _dashedline(suffix s) =
+ begingroup save p, n;
+ path p; p = z.s.o -- z.s.d;
+ n := floor(length(z.s.d-z.s.o)/abs(x.s.dl));
+ if not (odd n): n := n + 1; fi
+ for i := 0 upto (n-1): if not (odd i):
+ draw subpath(i/n,(i+1)/n) of p;
+ fi endfor endgroup
+enddef;
+
+arrow_head_length := 6pt;
+arrow_head_width := 2.4pt;
+
+def arrowhead(suffix s) =
+ x.s.ahl = arrow_head_length; x.s.ahw = arrow_head_width;
+ _del[incr _dn] := "_arrowhead(" & str s & ");";
+enddef;
+
+def _arrowhead(suffix s) =
+ z.s.dh = (x.s.ahl/length(z.s.d-z.s.o))[z.s.d,z.s.o];
+ z.s.dr = z.s.dh + x.s.ahw / 2 * dir(angle(z.s.d-z.s.o)+90);
+ z.s.dl = z.s.dh + x.s.ahw / 2 * dir(angle(z.s.d-z.s.o)-90);
+ fill z.s.d -- z.s.dr -- z.s.dl -- cycle;
+enddef;
+
+def arrow(suffix s) =
+ arrowhead(s);
+ _del[incr _dn] := "_arrow(" & str s & ");";
+enddef;
+
+def _arrow(suffix s) =
+ draw z.s.o .. z.s.dh;
+enddef;
+
+def cillinder(suffix s)(expr width,height) =
+ x.s.l = x.s - 1/2width; x.s.r = x.s + 1/2width;
+ y.s.b = y.s - 1/2height; y.s.t = y.s + 1/2height;
+ y.s.ar = 1/6height;
+ _del[incr _dn] := "_cillinder(" & str s & ");";
+enddef;
+
+def _cillinder(suffix s) =
+ draw (x.s.l,y.s.t-y.s.ar) -- (x.s.l,y.s.b+y.s.ar);
+ draw (x.s.r,y.s.t-y.s.ar) -- (x.s.r,y.s.b+y.s.ar);
+ draw (x.s.l,y.s.b+y.s.ar){down} .. (x.s,y.s.b){right}
+ .. (x.s.r,y.s.b+y.s.ar){up};
+ draw (x.s.l,y.s.t-y.s.ar){down} .. (x.s,y.s.t-2y.s.ar){right}
+ .. (x.s.r,y.s.t-y.s.ar){up} .. (x.s,y.s.t){left} .. cycle;
+enddef;
+
+join_radius := 5pt;
+
+def box(suffix s)(expr width,height) =
+ x.s.l = x.s - width/2; x.s.r = x.s + width/2;
+ y.s.t = y.s + height/2; y.s.b = y.s - height/2;
+ x.s.jr = join_radius;
+ _del[incr _dn] := "_box(" & str s & ");";
+enddef;
+
+def _box(suffix s) =
+ if min((x.s.r-x.s.l),(y.s.t-y.s.b)) > 2x.s.jr:
+ draw (((x.s,y.s.b) .. (x.s.r,y.s.b)) softjoin
+ ((x.s.r,y.s.b) .. (x.s.r,y.s.t)) softjoin
+ ((x.s.r,y.s.t) .. (x.s.l,y.s.t)) softjoin
+ ((x.s.l,y.s.t) .. (x.s.l,y.s.b)) softjoin
+ ((x.s.l,y.s.b) .. (x.s,y.s.b)));
+ else:
+ draw (fullcircle xscaled (x.s.r-x.s.l) yscaled (y.s.t-y.s.b)
+ shifted z.s);
+ fi
+enddef;
+
+def soft(suffix s) =
+ _del[incr _dn] := "_soft(" & str s & ");";
+enddef;
+
+def _soft(suffix s) =
+ draw (z.s.o -- z.s.m) softjoin (z.s.m -- z.s.d);
+enddef;
+
+def softt(suffix s) =
+ _del[incr _dn] := "_softt(" & str s & ");";
+enddef;
+
+def _softt(suffix s) =
+ draw ((z.s.o .. z.s.m1) softjoin
+ (z.s.m1 .. z.s.m2) softjoin (z.s.m2 .. z.s.d));
+enddef;
+
+def fork(suffix s) =
+ z.s.head.o = z.s.m; z.s.head.d = z.s.d;
+ arrowhead(s.head);
+ dot(s.o);
+ z.s.body.o = z.s.o; z.s.body.m = z.s.m;
+ z.s.body.d = z.s.head.dh;
+ soft(s.body);
+enddef;
+
+def darrow(suffix s) =
+ z.s.med = 1/2[z.s.o,z.s.d];
+ z.s.one.o = z.s.med; z.s.one.d = z.s.d;
+ arrow(s.one);
+ z.s.two.o = z.s.med; z.s.two.d = z.s.o;
+ arrow(s.two);
+enddef;
+
+def arroww(suffix s) =
+ z.s.head.o = z.s.m; z.s.head.d = z.s.d;
+ arrowhead(s.head);
+ z.s.body.o = z.s.o; z.s.body.m = z.s.m;
+ z.s.body.d = z.s.head.dh;
+ soft(s.body);
+enddef;
+
+def arrowww(suffix s) =
+ z.s.head.o = z.s.m2; z.s.head.d = z.s.d;
+ arrowhead(s.head);
+ z.s.body.o = z.s.o; z.s.body.m1 = z.s.m1;
+ z.s.body.m2 = z.s.m2; z.s.body.d = z.s.head.dh;
+ softt(s.body);
+enddef;
diff --git a/macros/plain/contrib/metatex/mtpaper/diagram.tex b/macros/plain/contrib/metatex/mtpaper/diagram.tex
new file mode 100644
index 0000000000..4e4a5944dd
--- /dev/null
+++ b/macros/plain/contrib/metatex/mtpaper/diagram.tex
@@ -0,0 +1,83 @@
+% DIAGRAM.TEX
+
+\dimen0=\hsize \divide\dimen0 by 10
+\dimen2=\dimen0 \divide\dimen2 by 3 \multiply\dimen2 by 4
+
+\MTbeginchar(\the\dimen0,\the\dimen2,0pt);
+\MT: thickpen;
+\MT: z1 = (0,0); z2 = (0,h); z3 = (w,h); z4 = (w,0);
+\MT: z5 = (1/3w,1/8h); z6 = (1/2w,0); z7 = (2/3w,-1/16h);
+\MT: draw z1 -- z2 -- z3 -- z4;
+\MT: draw z1 .. z5 ..z6 .. z7 .. z4;
+\MT: thinpen;
+\MT: for i = 11 upto 20: y[i] = 1/8h + 7/80h*(i-10); endfor
+\MT: for i = 12,13,15,16,17,19,20:
+\MT: draw (1/8w,y[i]) -- (7/8w,y[i]);
+\MT: endfor;
+\MT: for i = 11,14,18:
+\MT: draw (1/4w,y[i]) -- (7/8w,y[i]);
+\MT: endfor;
+\MTendchar;
+
+\setbox0=\box\MTbox
+
+\ifdim\hsize<10cm
+ \let\figfont=\smallsf \def\driver{drv}
+ \dimen0=\hsize \multiply\dimen0 by 2 \divide\dimen0 by 3
+\else
+ \let\figfont=\sf \def\driver{Driver}
+ \dimen0=\hsize \multiply\dimen0 by 2 \divide\dimen0 by 4
+\fi
+
+\MTbeginchar(\the\hsize,\the\dimen0,\the\ht0);
+\MT: save u, v; u = w/10; v = h/10;
+\MT: thickpen;
+%\MT: draw (0,-d)--(0,h)--(w,h)--(w,-d)--cycle; draw(0,0)--(w,0);
+\MT: x1l = x2l = x4l = x7l = 2u;
+\MT: y1t = h - v; z1lbl = z1;
+\MT: rectangle(1)(u,v);
+\MTlabel(1lbl)"\figfont\TeX";
+\MT: y2 = y3 = y1 - 2v; z2lbl = z2; z3lbl = z3; x3 = x2 + 2u;
+\MT: ellipse(2)(u,v); rectangle(3)(u,v);
+\MTlabel(2lbl)"\figfont\TeX"; \MTlabel(3lbl)"\figfont TFM";
+\MT: y4 = y5 = y6 = y2 - 2v; x5 = x3 + 2u; x6 = x5 + 2u;
+\MT: z4lbl = z4; z5lbl = z5; z6lbl = z6;
+\MT: rectangle(4)(u,v); ellipse(5)(u,v); rectangle(6)(u,v);
+\MTlabel(4lbl)"\figfont DVI"; \MTlabel(5lbl)"\figfont MF";
+\MTlabel(6lbl)"\figfont MF";
+\MT: y7 = y8 = y4 - 2v; x8 = x3; z7lbl = z7; z8lbl = z8;
+\MT: ellipse(7)(u,v); rectangle(8)(u,v);
+\MTlabel(7lbl)"\figfont\driver"; \MTlabel(8lbl)"\figfont GF";
+\MT: x9 = x7; y9t = y7t - 2v;
+\MTlabel(9)"\box0";
+\MT: x31r = x2l - u; y31 = y2; z31lbl = z31; rectangle(31)(u,v);
+\MTlabel(31lbl)"\figfont FMT";
+\MT: x32 = x5; y32b = y5t + v; z32lbl = z32; rectangle(32)(u,v);
+\MTlabel(32lbl)"\figfont BAS";
+\MT: x33 = x31; y33 = y4; z33lbl = z33; rectangle(33)(u,v);
+\MTlabel(33lbl)"\figfont log";
+\MT: x34 = x32; y34 = y7; z34lbl = z34; rectangle(34)(u,v);
+\MTlabel(34lbl)"\figfont log";
+\MT: thinpen; join_radius:=15pt;
+\MT: z11o = (x1,h); z11d = (x1,y1t); arrow(11);
+\MT: z12o = (x1,y1b); z12d = (x2,y2t); arrow(12);
+\MT: z13o = (x3l,y3); z13d = (x2r,y2); arrow(13);
+\MT: z14o = (x2,y2b); z14d = (x4,y4t); arrow(14);
+\MT: z15o = (w,y6); z15d = (x6r,y6); arrow(15);
+\MT: z16o = (x6l,y6); z16d = (x5r,y5); arrow(16);
+\MT: z17o = (x5l,y5); z17d = (x3,y3b); z17m = (x3,y5);
+\MT: arroww(17);
+\MT: z18o = (x5l,y5); z18d = (x8,y8t); z18m = (x8,y5);
+\MT: arroww(18);
+\MT: z19o = (x4,y4b); z19d = (x7,y7t); arrow(19);
+\MT: z20o = (x8l,y8); z20d = (x7r,y7); arrow(20);
+\MT: z21o = (x7,y7b); z21d = (x9,y9t); arrow(21);
+\MT: z41o = (x31r,y31); z41d = (x2l,y2); arrow(41);
+\MT: z42o = (x32,y32b); z42d = (x5,y5t); arrow(42);
+\MT: z43o = (x2,y2b); z43d = (x33r,y33t); arrow(43);
+\MT: z44o = (x5,y5b); z44d = (x34,y34t); arrow(44);
+\MT: x0 = w/2; y0 = y9; % y0b = -d;
+\MTlabel(0)"\rm \TeX\ formats";
+\MTendchar;
+
+\centerline{\box\MTbox}
diff --git a/macros/plain/contrib/metatex/mtpaper/frame.tex b/macros/plain/contrib/metatex/mtpaper/frame.tex
new file mode 100644
index 0000000000..1c6f5ea6c2
--- /dev/null
+++ b/macros/plain/contrib/metatex/mtpaper/frame.tex
@@ -0,0 +1,23 @@
+% FRAME.TEX (RMCG19950401)
+
+\catcode`\@=11
+
+\newbox\@uxbox
+
+\let\oldhrule=\hrule \let\oldvrule=\vrule
+\def\rulethickness{\afterassignment\rul@thickness\dimen0 }
+\def\rul@thickness{\edef\hrule{\oldhrule height\dimen0 }%
+ \edef\vrule{\oldvrule width\dimen0 }}
+
+\def\framebox{\afterassignment\fr@mebox\count@=}
+\def\fr@mebox{\ifvoid\count@\else \bgroup
+ \dimen0=\wd\count@ \dimen2=\ht\count@ \advance\dimen2\dp\count@
+ \global\setbox\@uxbox=\vtop{
+ \hbox to\dimen0{\vrule\hss\vbox to \dimen2{\hrule\vss
+ \hbox to\dimen0{}\vss\hrule}\hss\vrule}\kern0pt}\egroup
+ \wd\@uxbox=0pt \ht\@uxbox=0pt \dp\@uxbox=0pt
+ \ifhbox\count@
+ \setbox\count@=\hbox{\raise\ht\count@\box\@uxbox\box\count@}\else
+ \setbox\count@=\vbox{\box\@uxbox\nointerlineskip\box\count@}\fi\fi}
+
+\catcode`\@=12
diff --git a/macros/plain/contrib/metatex/mtpaper/mtpaper.tex b/macros/plain/contrib/metatex/mtpaper/mtpaper.tex
new file mode 100644
index 0000000000..8fbb26734c
--- /dev/null
+++ b/macros/plain/contrib/metatex/mtpaper/mtpaper.tex
@@ -0,0 +1,654 @@
+
+\input tugboat.sty
+
+%\input tugboat.dates
+%\input tb75pages
+%\pageno=\TBcasa
+
+% EXTRA CODE
+
+\ifx\plaindefaults\undefined \let\next=\relax
+\else \let\next=\plaindefaults \fi \next
+
+\input metatex
+\MTline{input delay.mf;}
+
+\def\MTeX{{\manual META}\-\TeX}
+\font\smallsf=cmssq8
+\font\sf=cmss10
+
+% END EXTRA CODE
+
+
+\title * {\MTeX} *
+\author * Ram\'on Casares *
+\address * Telef\'onica de Espa\~na *
+\netaddress * r.casares@computer.org *
+
+\article %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\head * Abstract *
+
+{\MTeX} is a set of {\plain} {\TeX} and {\MF} macros that you can use to
+define both the text and the figures in a single source file. Because
+{\MTeX} sets up two way communication, from {\TeX} to {\MF} and back
+from {\MF} to {\TeX}, drawing dimensions can be controlled by {\TeX} and
+labels can be located by {\MF}. Only standard features of {\TeX} and
+{\MF} are used, but two runs of {\TeX} and one of {\MF} are needed.
+
+
+\head * Overview *
+
+Together, {\TeX} and {\MF} define the page layout to the pixel. This
+means that nothing more is needed, not even a means of including figures
+in a {\TeX} document. To prove this is the aim of this paper.
+
+To split the typesetting process in two parts, one to define and draw
+the characters and the other to arrange the characters in paragraphs and
+pages, is surely the best way to reduce the complexity of the
+typesetting task, provided it needs simplification (see Figure~1). But
+this method makes it difficult, for example, to integrate labels with
+graphics in figures, because while {\TeX} is best suited to typeset the
+labels, {\MF} is the appropriate tool to draw the graphics. And, of
+course, labels should be located in accordance with the graphics.
+
+Therefore, the true successor of {\TeX} has to include in a single
+program both the capabilities of {\TeX} and {\MF}. Then the typesetting
+engine would include a powerful graphic tool, a grid in which to typeset if
+required, and it could take into account the shapes of the characters to
+determine, for example, kernings or italic corrections. The other way
+around is also possible. It could be seen as a graphic engine with a
+powerful typesetting tool. From this point of view, the page would be a
+graphic object that could contain paragraphs of different shapes
+requested from the typesetting tool.
+
+\MTeX, although it does not fulfill the requirements of such a
+successor, can be seen as an early sign of its possibilities. For the
+moment, {\MTeX} takes advantage of {\MF}'s equation solving capabilities
+to locate objects, including the labels, which are typeset by {\TeX}. The
+cost of this nice feature is that two {\TeX} passes are required.
+
+During the first {\TeX} pass a {\MF} file is written. As it is {\TeX}
+itself who writes the {\MF} file, any dimension controlled by {\TeX} can
+be used and incorporated in {\MF}'s calculations. For example, the label
+sizes, as they will be typeset by {\TeX}, are made known to {\MF}.
+
+After the first {\TeX} pass, {\MF} draws the graphic figures and
+writes the label locations in its log file. So it is {\MF}'s
+responsibility to locate the labels. Note that, depending on the style
+of {\MF} programming, this can be completely determined from {\TeX}. In
+other words, you can relate the label location to the location and size
+of other {\MF} objects, or not.
+
+When {\TeX} executes its second pass, it takes the graphics
+from the new font, reads the location of labels from the
+{\MF} log file, and then everything is complete.
+
+Because labels are just |\hbox|es typeset by \TeX, every macro currently
+defined for text automatically applies also to figures. For example, if
+a macro |\person| is defined to write its argument in a small caps font
+and save it to an index file, the same happens whenever it is used
+inside a figure label.
+
+
+\head * Methods *
+
+{\MTeX} allows the source file to include, in addition to the customary
+{\TeX} macros to control the text, other commands to generate
+figures with {\MF}.
+
+\subhead * Steps *
+
+In order to use {\MTeX} the following three steps are to be executed:
+
+\list[\numbered]
+
+\item The {\MTeX} file, suppose it is |filename.ext|, is first
+processed by |TEX|, with the {\plain} format, during which a {\MF} file
+named |auxiliar.mf| is created. This {\MF} file contains information
+provided by {\TeX} concerning the size of the labels, so the |MF|
+program can delete this area from the figure if requested. If the output
+file |filename.dvi| were typeset now, it would have blanks in place of
+the figures, but otherwise be the same as the final document.
+
+\item Then |MF|, with the {\plain} base, is run on |auxiliar.mf|.
+As a result, information specifying where to typeset the labels is
+written in the log file, |auxiliar.log|. In addition, the metric file,
+|auxiliar.tfm|, and the generic format bitmap font, |auxiliar.329gf|,
+are created. On my system I have to process this |gf| file to get a
+|pk| file that my drivers can read, so I execute the program |GFtoPK| on
+it, getting the packed bitmap font |auxiliar.329pk|. Please note three
+points. i)~The number |329|, referring to the resolution, varies
+according to the {\MF} mode. ii)~The |tfm| and |pk| files must be in or
+moved to directories where programs can find them. iii)~{\MTeX} sets the
+{\MF} mode to |localfont|, thus assuming that |localfont| is assigned
+the appropriate name.
+
+\item Lastly, |filename.ext| is again run through |TEX|. During this
+second run, both the font |auxiliar| containing the figures and the
+information explaining where to locate the labels are available, so the
+document is complete.
+
+\endlist
+
+The figures fill exactly the same area in both the first and second
+|TEX| program runs, so indices, tables of contents, and other references
+that also need two passes to be resolved can take advantage of the two
+runs needed by {\MTeX}.
+
+\subhead * Use *
+
+To use the {\MTeX} macros, they must be imported by writing in the
+source file: ||\input metatex||
+
+\noindent This has to be written after |\mag| has been given its final
+value. When |metatex.tex| is read, {\MTeX} checks whether the file
+|auxiliar.mf| exists. If it does not exist, then things are set up for
+the first pass; for example, |auxiliar.mf| is opened for writing. If it
+does exist, then things are set for the second pass; for example,
+|auxiliar.log| is opened for reading. This means that if
+|auxiliar.mf| is not deleted, then step~3, the second |TEX| program
+pass, is executed directly. This saves time when only the text in file
+|filename.ext|, but not the figures, were modified.
+
+\subhead * User macros *
+
+The {\MTeX} user macros are:
+
+\list
+
+\item |\MTbeginchar(wd,ht,dp);| states that a figure sized as given
+(width |wd|, height |ht|, depth |dp|) will be created. These values
+should be known both by {\TeX} and by {\MF}, so for example |12pt|,
+|6cm|, |\the\hsize| or |\the\dimen0|, always without |#|, are allowed.
+During the {\it first pass}, {\TeX} writes in |auxiliar.mf| the {\MF}
+macro |beginchar| assigning character codes sequentially, and box
+|\MTbox| is made empty but sized as specified by the arguments of this
+macro. During the {\it second pass}, {\TeX} puts the corresponding
+character of the font |auxiliar| in box |\MTbox|. The size of |\MTbox| is
+that specified and not affected by the character dimensions.
+
+\item |\MTendchar;| finishes the figure definition. During the
+{\it first pass}, {\TeX} writes the {\MF} macro |endchar;| in file
+|auxiliar.mf|. During the {\it second pass}, box |\MTbox| contains the
+complete figure, including labels. Something like |\box\MTbox| is
+used to typeset the figure.
+
+\item |\MTlabel*(s)cc"Text";| adds a label to the current figure.
+The parameter between quotes, |Text| in the example, is the label
+content; it will be put inside an |\hbox| and therefore could be
+anything that {\TeX} allows inside an |\hbox|. The optional asterisk
+after |\MTlabel| instructs {\MTeX} to erase the area of the figure
+already drawn that it is under the label.
+
+The label will be located at {\MF} point |z.s|, where |s| is the parameter
+between parentheses. The reference point is further specified by the
+optional parameter after the right parenthesis, |cc| in the example.
+This parameter is composed of exactly two letters: the first can be |t|
+meaning top, |c| meaning center or |b| meaning bottom; and the second
+letter can be |l| meaning left, |c| meaning center or |r| meaning right.
+So, for example, |tl| means that the label reference point is its top
+left corner. The default value for the reference point is |cc|, that is,
+its center.
+
+|\MTlabel| should only be used between |\MTbeginchar| and |\MTendchar|.
+During the {\it first pass}, it writes the following three elements in
+|auxiliar.mf|: i)~the {\MF} macros which in turn cause |MF| to write the
+label reference point location to its log file, |auxiliar.log|; ii)~the
+four label sides, which are by this means made available to the
+following {\MF} code for the figure, notated as |y.s.t| for the top side,
+|y.s.b| for the bottom side, |x.s.l| for the left side and |x.s.r| for the right
+side; and iii)~the code to delete, if requested, the figure area already
+drawn that is under the rectangle occupied by the label. During the {\it
+second pass}, it adds the label to the box |\MTbox| in the place that
+reads from file |auxiliar.log|, making no modification to the dimensions of
+|\MTbox|, even if the label is typeset outside the box.
+
+\endlist
+
+There are three more macros for passing information to \MF, that is, for
+writing general text in |auxiliar.mf|: |\MT:|, |\MTcode| and |\MTline|.
+This happens only during the first pass; during the second pass, these
+macros do nothing.
+
+\list
+
+\item |\MT:| writes in file |auxiliar.mf| everything till the end of
+line. It writes verbatim except for the character |\|, which keeps its
+normal {\TeX} |\catcode| of |0|. Spaces are {\it not\/} ignored after
+macros. The sequence |\\| writes a single |\| in file |auxiliar.mf|.
+
+\item |\MTcode| writes in file |auxiliar.mf| everything until it finds a
+line equal (including |\catcode|s) to the current value of |\MTendmark|.
+By default, this is a blank line, thus, |\def\MTendmark{}|. As with
+|\MT:|, it writes verbatim except for |\|, which still operates as an
+escape character. The control sequence |\\| writes a single |\| in file
+|auxiliar.mf|.
+
+\item |\MTline{text}| writes its parameter to |auxiliar.mf|,
+|text| in the example. It does not change the |\catcode|s in the
+argument, so it does not perform verbatim writing. But all {\plain}
+special characters can be written prefixing them by the escape character
+|\|. The {\plain} special characters are (not including the first colon
+nor the final period): |\{}$&#^_~%|. For example, |\#| results in
+|#|.
+
+\endlist
+
+When defining {\TeX} macros that write to |auxiliar.mf|, |\MTline|
+should generally be used in preference to |\MT:| or |\MTcode|, because
+the latter two use
+the end of line in a special way that is not usually available when
+{\TeX} is reading a macro.
+
+{\TeX} dimensions can be included using any of these three writing
+macros. For example, |\the\hsize| will be expanded to {\tt \the\hsize}
+(for the present article),
+and written as such to the {\MF} file |auxiliar.mf|. Note that the character
+|\| keeps its escape |\catcode| in all three writing macros. In the
+case of |\MTline|, braces |{}| also keep their |\catcode|s and therefore
+macros with parameters can be used normally.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\head * Examples *
+
+\subhead * Diagram *
+
+First a typical example of {\MTeX} usage, showing the file formats,
+programs, and their relationships. The figure width is exactly
+|\hsize|, but what is more important is that the same code will adapt
+itself to any value for the measure. Well, of course, not to {\it any\/}
+width but to any width between, let's say, $8\,$cm and $25\,$cm.
+
+\figure[\caption{Figure 1: One column diagram}]
+ \input diagram
+\endfigure
+
+%\twocolfigure[\caption{Figure 2: Two columns diagram}]
+% \input diagram
+%\endfigure
+
+Figure~1 is the one column version, and Figure~2 (above the appendix) is
+the two column version, generated by the same source.
+
+
+%%%%%%%%%%%%%%%%%%%
+
+\input shadow
+
+\def\beginshadowpar{\setbox0=\vbox\bgroup \kern3pt
+ \advance\parindent by -3pt \leftskip=3pt\rightskip=3pt }
+\def\endshadowpar{\par\kern3pt\egroup\framebox0\shadowbox0\box0 }
+
+% \subhead * Shadowing *
+\bigskip % \subhead skip
+
+\beginshadowpar\noindent
+{\bf Shadowing.} Both {\TeX} and {\MF} are ill suited to creating
+shadows. In {\TeX}, one straightforward technique is double use of
+|\leaders|, but in practice this results in huge |dvi| files. In {\MF},
+drawing lots of tiny points easily exceeds the capacity of the program.
+The solution is to coordinate the work of both programs.
+\endshadowpar
+
+To create a large rectangular shadow we divide it into an array of $n
+\times m$ smaller rectangles. The smaller rectangles are all identical,
+so it is enough for {\MF} to draw one shadow character and then for
+{\TeX} to typeset a solid area repeating it.
+
+To simplify the tasks of both {\TeX} and {\MF}, the size of the shadow
+character should be similar to that of normal characters, because neither
+program was designed to work well with extraordinarily large (or small)
+characters. So a
+good approach is to make the shadow character as big as possible but
+never wider nor higher than 16$\,$pt.
+
+For {\MTeX}, each figure is a character. This causes problems with {\MF}
+when the figure is big and the resolution is high, because it cannot
+draw areas bigger than $4095\times4095$ pixels. This is not usually a
+problem working at 300$\,$dpi. (It is never a problem with {\MP}, see
+the following section on {\PS}. Another advantage of using {\PS} is that
+you get a shadow simply by drawing a grey rule, and none of the above
+machinations are necessary.)
+
+%%%%%%%%%%%%%%%%%%%
+
+\subhead * Keys *
+
+After the following {\MTeX} macros:
+
+\verbatim[\numbered\outputtofile{keys.tex}]
+\MTcode
+def keybox =
+ pickup pencircle scaled 0.8pt;
+ x1 = x3 = 1pt;
+ x2 = x4 = w - 1pt;
+ x5 = 0; x6 = w;
+ y1 = y2 = -d;
+ y3 = y4 = h;
+ y5 = y6 = (h - d)/2;
+ draw z1 -- z2 .. z6{up} ..
+ z4 -- z3 .. z5{down} .. cycle;
+ z0 = (x1,0);
+enddef;
+
+\def\defkey#1#2{\setbox0=\hbox{\sf#2}%
+ \dimen0=\wd0\advance\dimen0 by 2pt
+ \dimen2=\ht0\advance\dimen2 by 1pt
+ \dimen4=\dp0\advance\dimen4 by 1pt
+ \MTbeginchar(\the\dimen0,%
+ \the\dimen2,%
+ \the\dimen4);%
+ \MTline{keybox;}%
+ \MTlabel(0)bl"\sf #2";%
+ \MTendchar;%
+ \expandafter\newbox
+ \csname\string#1box\endcsname
+ \expandafter\setbox
+ \csname\string#1box\endcsname
+ =\vtop{\unvbox\MTbox}%
+ \def#1{\expandafter\copy
+ \csname\string#1box\endcsname}}
+
+\def\makekey#1{\expandafter\defkey%
+ \csname#1\endcsname{#1}}
+\endverbatim
+
+\input keys
+
+Then, we can declare |\makekey{Alt}|\makekey{Alt} to
+typeset {\Alt} simply via |\Alt|. It is also possible to
+declare |\defkey\escape{\tt\char92}|\defkey\escape{\tt\char92} and then
+|\escape| results in \escape.
+
+%%%%%%%%%%%%%%%%%%%
+
+\subhead * Baroque tables *
+
+Baroque periods are the result of new technical achievements providing
+unexplored possibilities and hence the urgent need to experiment with them,
+frequently far away from what discretion might recommend. This explains
+the time of baroque software that we live in, and increases the value of
+\MTeX, because it provides the means to easily draw baroque tables. I am not
+a baroque man, so my baroque table example is not baroque but, and this
+is the point, it is at least not built with straight lines.
+
+\MTcode
+def tablebox =
+ pickup pencircle scaled 1.6pt;
+ x0 = 5pt; y0 = 5pt;
+ draw (0,h) ... (w/2,h+y0) ... (w,h) ... (w+x0,(h-d)/2) ... (w,-d) ...
+ (w/2,-d-y0) ... (0,-d) ... (-x0,(h-d)/2) ... cycle;
+enddef;
+
+\def\beginbaroquetable{\setbox0=\vbox\bgroup
+ \halign\bgroup##\hfil&&\quad##\hfil\cr}
+\def\endbaroquetable{\crcr\egroup\egroup
+ \MTbeginchar(\the\wd0,\the\ht0,\the\dp0);%
+ \MTline{ tablebox;}%
+ \MTendchar;%
+ $$\rlap{\box\MTbox}\box0$$}
+
+\beginbaroquetable
+ This is not a straight table\cr
+ but it's only an example\cr
+ and therefore not so ample\cr
+ of what's {\MTeX}-able!
+\endbaroquetable
+
+%%%%%%%%%%%%%%%%%%%
+
+\MTcode
+def leftbrace =
+ pickup penrazor scaled 2pt rotated 30;
+ x3 = 0; x0 = x6 = w; x1 = x5 = w/5; x2 = x4 = w-x1;
+ y0 = 0; y1 = h/8; y2 = h/3; y3 = h/2;
+ y4 + y2 = h; y1 + y5 = h; y6 = h;
+ draw z0 .. z1 .. z2 .. z3;
+ draw z6 .. z5 .. z4 .. z3;
+enddef;
+
+\def\beginbracedpar{\setbox0=\vbox\bgroup
+ \leftskip=20pt }
+\def\endbracedpar{\strut\par\egroup
+ \MTbeginchar(20pt,\the\ht0,0pt);%
+ \MTline{ leftbrace;}%
+ \MTendchar;%
+ \hbox to\hsize{\rlap{\box\MTbox}\box0\hss}}
+
+%\subhead * Ornate paragraphs *
+\bigskip % \subhead skip
+
+\beginbracedpar\noindent
+{\bf Ornate paragraphs.} Only if you are truly baroque can you get the
+most from {\MTeX}. If, for example, you like ornate paragraphs, you are
+in your element. Just put the material in a |\vbox| to get the height
+and the depth, and pass these dimensions to {\MF} to draw a right sized
+embellishment. Ah!, but be aware that Computer Modern is a neoclassical
+font, so it won't mix well with your elaborations.
+\endbracedpar
+
+%%%%%%%%%%%%%%%%%%%
+
+% To fill unused space!
+\MTcode
+ def tribar(expr alpha) =
+ pickup pencircle scaled 0.8pt;
+ % draw (0,0)--(w,0)--(w,h)--(0,h)--cycle;
+ save u, v; u = w/2; v = 12;
+ z1 = (w/2,h/2) + u*(right rotated alpha);
+ z2 = (w/2,h/2) + u*(right rotated (alpha+120));
+ z3 = (w/2,h/2) + u*(right rotated (alpha-120));
+ z1r = (w/2,h/2) + u*(right rotated (alpha+v));
+ z2r = (w/2,h/2) + u*(right rotated (alpha+120+v));
+ z3r = (w/2,h/2) + u*(right rotated (alpha-120+v));
+ draw z1 .. z1r; draw z2 .. z2r; draw z3 .. z3r;
+ draw z1 .. z3r; draw z2 .. z1r; draw z3 .. z2r;
+ z1m = whatever[z1,z2r]; z1m = whatever[z1r,z3];
+ z2m = whatever[z2,z3r]; z2m = whatever[z2r,z1];
+ z3m = whatever[z3,z1r]; z3m = whatever[z3r,z2];
+ draw z1 .. z2m; draw z2 .. z3m; draw z3 .. z1m;
+ z1ra = z1 reflectedabout (z1r,z1m);
+ z2ra = z2 reflectedabout (z2r,z2m);
+ z3ra = z3 reflectedabout (z3r,z3m);
+ draw z1m .. z1ra; draw z2m .. z2ra; draw z3m .. z3ra;
+ z3x - z1x = whatever*(z3-z1m);
+ z2x - z3x = whatever*(z2-z3m);
+ z1x - z2x = whatever*(z1-z2m);
+ z1ra - z1x = whatever*(z3-z1m);
+ z3ra - z3x = whatever*(z2-z3m);
+ z2ra - z2x = whatever*(z1-z2m);
+ z1y = whatever[z1m,z3]; z1y = whatever[z1x,z2x];
+ z2y = whatever[z2m,z1]; z2y = whatever[z2x,z3x];
+ z3y = whatever[z3m,z2]; z3y = whatever[z3x,z1x];
+ draw z1x .. z3y;
+ draw z2x .. z1y;
+ draw z3x .. z2y;
+ enddef;
+
+\def\tribar#1#2{% #1=ht, #2=angle
+ \MTbeginchar(#1,#1,0pt);\MTline{tribar(#2);}\MTendchar;\box\MTbox}
+
+\newcount\angle \angle=-36
+\newdimen\tribarht \tribarht=75pt
+
+%\subhead * Exercice *
+\bigskip % \subhead skip
+
+ \noindent
+ {\bf Exercise.}\footnote*{The real exercise is to fill the rest of the
+ page with tribars. A clue: let {\TeX} to calculate how many are needed,
+ so you can concentrate your efforts in drawing the figure.}
+ Take three equal bars and build as shown.
+ Ask Roger Penrose if you don't find the solution.
+ \vskip1pc
+
+ \loop
+ \vfil
+ \line{\tribar{\the\tribarht}{\the\angle}\hfil \global\advance\angle5
+ \tribar{\the\tribarht}{\the\angle}\hfil \global\advance\angle5
+ \tribar{\the\tribarht}{\the\angle}\global\advance\angle5 }
+ \dimen0=\pagegoal \advance\dimen0 by-\pagetotal
+ \ifdim\dimen0>\tribarht
+ \repeat
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\head * {\PS} *
+
+By taking advantage of {\MP}, we can make {\PS} versions of the
+{\MTeX} files. Simply execute |mpost &plain auxiliar.mf| instead of
+{\MF} and, after {\TeX}'s second pass, execute |dvips| ({\MTeX} uses
+|dvips| specials). This works because |auxiliar.mf| is valid code
+for both {\MF} and {\MP}, and because, in the second {\TeX} pass,
+{\MTeX} checks which one was used and adapts itself to the situation.
+
+And thanks to {\PDF\TeX} and the Con{\TeX}t files |supp-mis.tex| and
+|supp-pdf.tex|, it is also possible to get \acro{PDF} output. Just
+execute {\PDF\TeX} twice, instead of {\TeX}, and once {\MP}, instead of
+{\MF}. (In practice, {\MTeX} uses its own macro file |mtmp2pdf.tex| for
+this, instead of the Con{\TeX}t files. I extracted all that {\MTeX}
+needs from the Con{\TeX}t files into |mtmp2pdf.tex|.)
+
+This works because, if {\MTeX} determines that {\MP} was employed to
+draw the figures, it then checks which program, {\TeX} or {\PDF\TeX}, is
+executing. If {\TeX}, then it includes the files produced by {\MP} using
+the |dvips| specials. If {\PDF\TeX}, it translates from |ps| to |pdf|.
+
+Therefore, the same {\MTeX} source file generates at will any of the
+three output formats---|dvi|, |ps|, or |pdf|---just by running the
+appropriate programs. In the appendix, as an example, there is a
+\acro{DOS} batch file that shows how to get the |pdf| version of a file
+|filename.ext|.
+
+
+\head * Other graphical tools *
+
+There are other tools to include pictures in a {\TeX} document.
+{\LaTeX}'s |picture| environment, {\PiCTeX}, and |mfpic|, are three of
+them. {\MTeX} is similar to |mfpic|, in that both use {\MF} to draw.
+
+The aim of |mfpic| is to overcome the difficulties of {\LaTeX}'s
+|picture| environment and of {\PiCTeX}. {\LaTeX}'s |picture| environment
+uses four pre-cooked special fonts, and its drawings are just
+compositions of these characters (as well as {\TeX}'s builtin |\hrule|s and
+|\vrule|s). {\PiCTeX} only uses a tiny point to compose the pictures, so
+it is more general. But letting {\TeX} to draw the figures setting point
+after point is painful, as noted above. The |mfpic| solution uses a
+better tool for drawing: {\MF}.
+
+With these origins, for |mfpic|, {\MF} is a hidden back-end processor,
+and |mfpic| imposes only two requirements on its users: to know {\TeX},
+and to know |mfpic|. On the other hand, {\MTeX}'s approach is
+minimalist, at the cost of being more demanding with its users. A
+{\MTeX} user has to know {\TeX}, {\MF}, and {\MTeX}\Dash although this
+last requirement is small, because {\MTeX} only builds the necessary
+bridges to use {\TeX} and {\MF} in a cooperative way.
+
+A feature that shows the different strategies employed in designing
+|mfpic| and {\MTeX} is label positioning. {\MTeX} labels are located by
+{\MF}, so {\TeX} has to read the {\MF} log file to learn where to
+typeset them. For |mfpic|, {\TeX} itself locates the labels,
+but by doing so |mfpic| has to give up some nice {\MF} characteristics,
+such as its equation solving capabilities.
+
+% |mfpic| is to {\LaTeX} as {\MTeX} is to |plain| {\TeX}.
+In summary, |mfpic|'s aim is to draw pictures in {\TeX} documents in a
+better way than using {\LaTeX}'s |picture| environment or {\PiCTeX};
+while {\MTeX}'s intention is to coordinate the work of {\TeX} and
+{\MF}. In this way, {\MTeX} provides the full raw power of {\TeX} and
+{\MF}, and it is up to you to harness them.
+
+
+\head * Final remarks *
+
+I have been using {\MTeX} for some years. The first version was dated
+1994, but it has been used only for personal purposes. For this reason,
+it is not truly a straightforward end-user tool, as for example {\LaTeX} packages
+should be. It has to be used knowledgeably and with care. And though
+most tasks can be automated, by chaining {\TeX} and {\MF} errors are
+even more difficult to pinpoint than in {\TeX} or {\MF} alone.
+
+Nevertheless, {\MTeX} serves to validate the feasibility of a closer
+collaboration between {\TeX} and {\MF} and to appraise the interest of
+such a collaboration. And, of course, if you dare, you can get lots of
+fun, and at least an equal amount of frustration, using {\MTeX}. Try it!
+
+The {\MTeX} package is available from {\CTAN} in
+\acro{CTAN}|:/macros/plain/contrib/metatex|.
+
+Happy {\MTeX}ing!
+
+
+\makesignature
+
+
+\newpage
+
+
+\onecol % Annex in one column, can't switch to \twocol on the same page
+ % with current plain tugboat macros.
+
+\figure[\caption{Figure 2: Two-column diagram}]
+\input diagram
+\endfigure
+
+\head * Appendix: Pseudo-batch example *
+
+This is an example based on \acro{DOS} batch files that can be adapted for
+other operating systems. It processes the file |filename.ext|, generating
+|filename.pdf|. We will comment each line of pseudo-code.
+
+\list[\numbered]
+\item We go to the directory where our working files are.
+ ||cd c:\dir\subdir\mydir||
+\item We set environment variables (if necessary). In this case we are
+using a |web2c| system, so it is enough to set one. In |web2c|, by
+default, all programs look for files in the current dir, ``|.|'', and
+that is enough for us.
+ ||set TEXMFCNF=c:\tex\texmf.local\web2c;c:\tex\texmf\web2c;d:\texmf\web2c||
+\item We tell the operating system where to find the programs.
+ ||path=$path$;c:\tex\bin\dos||
+\item After the settings, we force the first {\TeX} pass.
+ ||if exist auxiliar.mf del auxiliar.mf||
+\item Then, we execute the first {\TeX} pass (in this case, it is {\PDF\TeX}).
+ ||pdftex &plain filename.ext||
+\item If {\MTeX} was not used, and no |auxiliar.mf| was written, then we
+are done.
+ ||if not exist auxiliar.mf goto end||
+\item Otherwise we run {\MP} with its |&plain| memory (format),
+also known as |&mpost|.
+ ||mpost &plain auxiliar.mf||
+\item Finally, we execute the second {\TeX} pass.
+ ||pdftex &plain filename.ext||
+\item We now have the complete |filename.pdf| file.
+ ||:end||
+
+\endlist
+
+\MTline{end.} % METATeX changes \bye
+\endarticle
+
+
+% To check labels (ink intensive example!)
+\MTbeginchar(5cm,5cm,0cm);
+\MT: fill (0,0)--(w,0)--(w,h)--(0,h)--cycle;
+\MT: z0 = (w/2,h/2);
+\MT: z1 = (w/2,3h/4); z11 = z1;
+\MT: z2 = (w/2,h/4);
+\MT: z3 = (0,h/2);
+\MT: z4 = (0,h/4);
+\MTlabel*(0)"Center";
+\MTlabel*(1)tl".";
+\MTlabel*(11)br".";
+\MTlabel*(2)":";
+\MTlabel(3)"Out";
+\MTlabel*(4)"Intruder";
+\MTendchar;
+$$\box\MTbox$$
diff --git a/macros/plain/contrib/metatex/mtpaper/shadow.tex b/macros/plain/contrib/metatex/mtpaper/shadow.tex
new file mode 100644
index 0000000000..6b81d679b0
--- /dev/null
+++ b/macros/plain/contrib/metatex/mtpaper/shadow.tex
@@ -0,0 +1,85 @@
+% SHADOW.TEX (RMCG19950401)
+
+\ifx\MT\undefined \input metatex \fi
+\ifx\framebox\undefined \input frame \fi
+
+\let\TMline=\MTline
+
+\catcode`\@=11
+
+\newdimen\shadowdim \shadowdim=0.3pt % for 600dpi; try 0.85 for 300dpi
+
+\TMline{\% Defined by SHADOW.TEX}
+\TMline{}
+\TMline{ if unknown prologues: font_size 12pt\#; fi}
+\TMline{}
+\TMline{ def shadowall(expr dist) =}
+\TMline{ begingroup}
+\TMline{ save u,v,distx,disty,zbase,zcur;}
+\TMline{ pair zbase,zcur;}
+\TMline{ u := floor(w/dist); if odd u: u := u + 1; fi distx = w/u;}
+\TMline{ v := floor(h/dist); if odd v: v := v + 1; fi disty = h/v;}
+\TMline{ zbase := (1/2distx,1/2disty);}
+\TMline{ for i := 0 upto (u-1):}
+\TMline{ zcur := zbase if odd i: + (0,disty) fi;}
+\TMline{ for j := 0 upto (v-1): if (not odd(i+j)):}
+\TMline{ addto currentpicture contour unitsquare shifted zcur;}
+\TMline{ zcur := zcur + (0,2disty);}
+\TMline{ fi endfor}
+\TMline{ zbase := zbase + (distx,0);}
+\TMline{ endfor}
+\TMline{ endgroup;}
+\TMline{ enddef;}
+\TMline{}
+
+\def\shadowbox{\afterassignment\sh@dowbox\count@=}
+\def\sh@dowbox{\ifvoid\count@ \let\next=\relax \else
+ \shadowchar
+ \ifMTmf \let\next=\MTsh@dow \else
+ \ifx\pdfliteral\undefined \let\next=\PSsh@dow \else
+ \let\next=\ACsh@dow \fi \fi \fi
+ \next}
+
+\def\shadowchar{\bgroup
+ \dimen0=\wd\count@ \dimen2=\ht\count@ \advance\dimen2\dp\count@
+ \dimen4=16pt \count2=\dimen4
+ \count0=\dimen0 \divide\count0 by \count2 \advance\count0 by 1
+ \dimen4=\dimen0 \divide\dimen4 by \count0
+ \count0=\dimen2 \divide\count0 by \count2 \advance\count0 by 1
+ \dimen6=\dimen2 \divide\dimen6 by \count0
+ \setbox0=\box\MTbox
+ \MTbeginchar(\the\dimen4,\the\dimen6,0pt);%
+ \MTline{ shadowall(\the\shadowdim);}%
+ \MTendchar;%
+ \global\setbox\@uxbox=\vtop to \dimen2{\cleaders
+ \hbox to \dimen0{\cleaders\box\MTbox\hfil}\vfil}%
+ \global\setbox\MTbox=\box0 \egroup}
+
+\def\MTsh@dow{\wd\@uxbox=0pt \ht\@uxbox=0pt \dp\@uxbox=0pt
+ \ifhbox\count@
+ \setbox\count@=\hbox{\raise\ht\count@\box\@uxbox\box\count@}\else
+ \setbox\count@=\vbox{\box\@uxbox\nointerlineskip\box\count@}\fi}
+
+\def\PSsh@dow{\ifhbox\count@
+ \setbox\count@=\hbox{\special{ps:gsave 0.8 setgray}%
+ \rlap{\vrule width \wd\count@ height \ht\count@ depth \dp\count@}%
+ \special{ps:0 setgray grestore}%
+ \unhbox\count@}\else
+ \setbox\count@=\vbox{\special{ps:gsave 0.8 setgray}
+ \vtop to 0pt{\vbox to 0pt{
+ \hrule width \wd\count@ height \ht\count@ depth \dp\count@
+ \vss}\vss}
+ \special{ps:0 setgray grestore}
+ \nointerlineskip
+ \unvbox\count@}\fi}
+
+\def\ACsh@dow{\ifhbox\count@
+ \setbox\count@=\hbox{\pdfliteral{q 0.8 g}%
+ \rlap{\vrule width \wd\count@ height \ht\count@ depth \dp\count@}%
+ \pdfliteral{0 g Q}\unhbox\count@}\else
+ \setbox\count@=\vbox{\pdfliteral{q 0.8 g}
+ \vtop to 0pt{\vbox to 0pt{
+ \hrule width \wd\count@ height \ht\count@ depth \dp\count@
+ \vss}\vss}\pdfliteral{0 g Q}\nointerlineskip\unvbox\count@}\fi}
+
+\catcode`\@=12
diff --git a/macros/plain/contrib/misc/2columns.mac b/macros/plain/contrib/misc/2columns.mac
new file mode 100644
index 0000000000..2f36486164
--- /dev/null
+++ b/macros/plain/contrib/misc/2columns.mac
@@ -0,0 +1,35 @@
+%
+% This is the two column output format from Chapter 23 of the TeXbook.
+%
+%
+\hoffset=-.5in
+\newdimen\fullhsize
+\fullhsize=7.5in \hsize=3.6in
+\def\fullline{\hbox to \fullhsize}
+%
+\def\makeheadline{%
+ \vbox to 0pt{\vskip-22.5pt
+ \fullline{\vbox to8.5pt{}\the\headline}\vss}
+ \nointerlineskip
+}
+%
+\def\makefootline{%
+ \baselineskip=2\normalbaselineskip
+ \fullline{\the\footline}
+}
+%
+\let\lr=L \newbox\leftcolumn
+\output={\if L\lr
+ \global\setbox\leftcolumn=\columnbox \global\let\lr=R
+ \else \doubleformat \global\let\lr=L\fi
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+\def\doubleformat{\shipout\vbox{\makeheadline
+ \fullline{\box\leftcolumn\hfil\vrule\hfil\columnbox}
+ \makefootline}
+ \advancepageno}
+\def\columnbox{\leftline{\pagebody}}
+%
+\def\endtwocol{%
+ \vfill\supereject
+ \if R\lr \null\vfill\eject\fi
+}
diff --git a/macros/plain/contrib/misc/2side.tex b/macros/plain/contrib/misc/2side.tex
new file mode 100644
index 0000000000..0b5e6d80ca
--- /dev/null
+++ b/macros/plain/contrib/misc/2side.tex
@@ -0,0 +1,43 @@
+%
+% This is a 2-side format for TeX. Simply
+%
+% \input 2side
+% \gutter{5pt}
+%
+% You want to have set your hsize, vsize, hoffset, and voffset
+% (and magnification) *before* inputting this file.
+%
+% You can also say `\top{...}' and the `...' will be placed at
+% the top of the page, and the columns will be reduced
+% proportionally. This is useful for the title of the document,
+% and any comments you might want to put later in the document.
+% Note that if you put this command after the first half of the
+% page has been `shipped', it will be postponed until the next
+% page.
+%
+\newdimen\fullsize\fullsize=\hsize
+\newdimen\realvsize\realvsize=\vsize
+\def\gutter#1{\global\advance\hsize by-#1 \global\divide\hsize by 2}%
+\def\makefootline{\baselineskip24pt\hbox to\fullsize{\the\footline}}%
+\let\lr=L \newbox\leftcolumn
+\let\ntop=\relax
+\output={\if L\lr
+ \global\setbox\leftcolumn=\columnbox \global\let\lr=R
+ \else\global\let\lr=L\doubleformat\global\fi
+ \ifnum\outputpenalty>-20000\else\dosupereject\fi
+ \global\let\ntop=\relax}%
+\def\doubleformat{\shipout\vbox{\hbox{\box\topbox}%
+ \hbox to\fullsize{\box\leftcolumn\hfil\columnbox}%
+ \makefootline}%
+ \global\vsize=\realvsize\ntop
+ \advancepageno}%
+\def\columnbox{\leftline{\pagebody}}%
+\newbox\topbox
+\def\top#1{\if L\lr\message{Setting...}
+ {\hsize=\fullsize\global\setbox\topbox=\vbox{#1}%
+ \global\vsize=\realvsize
+ \global\advance\vsize by-\ht\topbox
+ \global\advance\vsize by-\baselineskip}%
+ \else\global\def\ntop{\top{#1}}\message{Saving...}%
+ \fi}%
+\def\bye{\vfill\eject\if R\lr\null\vfill\eject\fi\end}%
diff --git a/macros/plain/contrib/misc/alexmisc.tex b/macros/plain/contrib/misc/alexmisc.tex
new file mode 100644
index 0000000000..eaecaec187
--- /dev/null
+++ b/macros/plain/contrib/misc/alexmisc.tex
@@ -0,0 +1,27 @@
+% some small miscellaneous macros
+
+%capital roman numerals
+\def\Romannumeral#1{\uppercase\expandafter{\romannumeral#1}}
+
+%half in textstyle (smaller --- sometimes looks better)
+\def\half{\textstyle{1\over2}}
+
+%a couple of useful abbreviations
+\def\ie{i.\thinspace e.}
+\def\eg{e.\thinspace g.}
+
+%slant fractions (slightly offset and smaller a/b)
+%usage \slfrac{numerator}/{denominator}
+\def\slfrac#1/#2{\leavevmode\kern.1em\raise.5ex\hbox{\the\scriptfont0 #1}
+\kern-.1em/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
+
+% makes real and complex number-set symbols with vertical bars
+\def\Reals{{\hbox{$\mathpalette{}{I\kern-.2em R}$}}}
+\def\Complexes{{\hbox{$\mathpalette{}{C\kern-.46em
+ \vrule depth 0ex height 1.4ex width .05em\kern.41em}$}}}
+
+%poor man's bold (The TeXbook, p. 386)
+\def\pmb#1{\leavevmode\setbox0=\hbox{#1}%
+ \kern-.025em\copy0\kern-\wd0
+ \kern.05em\copy0\kern-\wd0
+ \kern-.025em\raise.0433em\box0}
diff --git a/macros/plain/contrib/misc/appelt-chess.tex b/macros/plain/contrib/misc/appelt-chess.tex
new file mode 100644
index 0000000000..4efd561f56
--- /dev/null
+++ b/macros/plain/contrib/misc/appelt-chess.tex
@@ -0,0 +1,243 @@
+%--------------------- Cut here ----------------------------------
+
+%
+%---------------------- General ----------------------------------
+%
+\font\gray=gray
+\font\sym =cmsy10
+\font\bsym =cmsy10 scaled \magstep1
+\font\bbrm =cmr10 scaled \magstep2
+\font\bbss =cmss10 scaled \magstep2
+\font\ssbf =cmssbx10
+\font\bssbf =cmssbx10 scaled \magstep1
+\font\bbssbf =cmssbx10 scaled \magstep2
+\font\bbbf =cmbx10 scaled \magstep2
+\font\bbbbsym=cmsy10 scaled \magstep4
+\font\bsymbf =cmbsy10 scaled \magstep1
+\font\symbf =cmbsy10
+\font\ninesym=cmsy9
+\font\eightsym=cmsy8
+
+\newif\ifblackfield
+\newcount\movenumber
+\newcount\linecount
+\newcount\colcount
+
+\newbox\boxone \newdimen\dimenone
+\newbox\boxtwo \newdimen\dimentwo
+\newdimen\dimenthree
+\newskip\headskipamount \headskipamount=-8pt
+\newskip\footskipamount \footskipamount=-5pt
+
+% 1 dot = 15787.6224 sp bei 300 dots/inch
+\newdimen\lowerpiece \lowerpiece=47363sp
+\newdimen\fieldwidth \fieldwidth=1326160sp % 84 dots bei 300 dpi
+\newdimen\fieldheight \fieldheight=994620sp % 63 dots
+\newdimen\fielddepth \fielddepth=\fieldwidth % Rest
+ \advance\fielddepth by -\fieldheight
+\newdimen\framewidth \framewidth=252602sp % 16 dots
+
+\def\notation{%
+ \catcode`\8=11 \catcode`\2=11 \catcode`\3=11 \catcode`\4=11
+ \catcode`\5=11 \catcode`\6=11 \catcode`\7=11 \catcode`\1=11}
+\catcode`\@=11
+%
+%---------------------- Pieces -----------------------------------
+%
+\def\setpiece#1{\lower\lowerpiece\hbox to \fieldwidth{\hfill#1\hfill}}
+
+\def\together#1#2{%
+ \setbox\boxone=\hbox{#1}\setbox\boxtwo=\hbox{#2}%
+ \dimenone=\wd\boxone \dimentwo=\wd\boxtwo
+ \dimenthree=-\dimenone
+ \advance\dimenone by -\dimentwo \divide\dimenone by 2
+ \advance\dimenthree by \dimenone
+ \unhbox\boxone\kern\dimenthree\unhbox\boxtwo}
+
+\def\pmb#1{\setbox0=\hbox{#1}%
+ \kern-.025em\copy0\kern-\wd0
+ \kern .05em\copy0\kern-\wd0
+ \kern-0.025em\raise .0433em\box0 }
+\def\WB{\together{\kern 0pt\hbox{\bbbbsym\char14 }}%
+ {\kern -1pt\hbox{\vrule height 1.4pt depth 0pt width 8pt}}}
+\def\SB{\together{\kern 0pt\hbox{\bbbbsym\char15 }}%
+ {\kern -1pt\hbox{\vrule height 1.4pt depth 0pt width 8pt}}}
+\edef\WS{\setbox0=\hbox{\bsym\char120 }\raise\dp0\hbox{\unhbox0 }}
+\edef\SS{\setbox0=\hbox{\pmb{\bsymbf\char120 }}%
+ \together{\raise\dp0\hbox{\unhbox0 }}%
+ {\raise3pt\hbox{\pmb{\symbf\char15 }}}}
+\edef\WT{{\bbrm\char5 }}
+\edef\ST{\together{\kern-1pt\hbox{\bbbf\char5 }}%
+ {\vrule height 9.5pt width 6pt depth 0pt}}
+\edef\WK{\together{\symbf\char117 }%
+ {\together{\raise 4pt\hbox{\sym\char121 }}%
+ {\vrule width 5pt depth0pt height 0.4pt}}}
+\edef\SK{\together{\vrule width 6pt depth 0pt height 6pt}%
+ {\raise 5pt \hbox{\symbf\char121 }}}
+\edef\WL{{\bbss\char3 }}
+\edef\SL{\together{\bbssbf\char3 }%
+ {\together{\bssbf\char3 }{\together{\vrule height 5pt width 5pt
+ depth 0pt}{\ssbf\char3 }}}}
+\edef\SD{\together{\together{\pmb{\symbf\char52 }}%
+ {\together{\pmb{\ninesym\char52 }}%
+ {\together{\pmb{\eightsym\char52 }}{\symbf\char15 }}}}%
+ {\kern 1pt\hbox{\raise 6pt\hbox{\symbf\char15 }}}}
+\edef\WD{\together{\symbf\char52 }%
+ {\kern 0pt\hbox{\raise 6pt\hbox{\symbf\char14 }}}}
+%
+%---------------------- Board ------------------------------------
+%
+\def\fieldstrut{\vrule height \fieldheight depth \fielddepth width 0pt}
+\def\void{}
+
+\def\field#1.#2.{\def\next{#1}%
+ \ifx\next\empty\blackfieldfalse
+ \else\blackfieldtrue\fi
+ \ifblackfield\edef\next{#2}%
+ \ifx\next\empty\vrule\fieldstrut\hbox to \fieldwidth
+ {\hfill\emptyblackfield\hfill}%
+ \else\vrule\fieldstrut\blackborder\setpiece{#2}\fi
+ \else\vrule\fieldstrut\setpiece{#2}\fi}
+
+\def\nfield#1{\vrule height 0pt depth 0pt\fieldstrut\hbox to \fieldwidth
+ {\hfil\rm#1\hfil}}
+
+\def\linenumber#1{\hbox to 0pt{\rm \kern -10pt #1\hss}}
+
+\def\innerloop#1\innerrepeat{\def\innerbody{#1}\inneriterate}
+\def\inneriterate{\innerbody\let\next=\inneriterate
+ \else\let\next=\relax\fi\next}
+
+%
+% This is for a character width of 1.4454pt
+%
+\newcount\numberofchars
+\newcount\numberofborderchars
+\newcount\numberofgapchars
+\numberofchars=14 \numberofborderchars=4
+%
+% This is for a character width of 0.9636pt
+%
+%\numberofchars=21 \numberofborderchars=5
+
+\numberofgapchars=\numberofchars
+\advance\numberofgapchars by -\numberofborderchars
+\advance\numberofgapchars by -\numberofborderchars
+
+\def\emptyblackfield{\vbox to \fieldheight{\gray
+ \offinterlineskip\parindent=0pt
+ \setbox0=\hbox{\char1 }\hsize=\wd0 \multiply \hsize by \numberofchars\relax
+ \linecount=0
+ \loop\advance\linecount by 1 \colcount=0
+ \innerloop\advance\colcount by 1 \char1
+ \ifnum\colcount<\numberofchars\relax\innerrepeat
+ \ifnum\linecount<\numberofchars\relax\break\repeat
+ \vss}}
+
+\def\blackborder{\hbox to 0pt{\vbox to \fieldheight{\gray
+ \offinterlineskip\parindent=0pt
+ \setbox0=\hbox{\char1 }\hsize=\wd0 \multiply \hsize by \numberofchars\relax
+ \linecount=0
+ \count0=\numberofchars \advance\count0 by -\numberofborderchars
+ \loop\advance\linecount by 1 \colcount=0
+ \innerloop\advance\colcount by 1 \char1
+ \ifnum\colcount<\numberofchars\relax\innerrepeat
+ \ifnum\linecount<\numberofborderchars\relax\break\repeat
+ \break
+ \loop\advance\linecount by 1 \colcount=0
+ \innerloop\advance\colcount by 1 \char1
+ \ifnum\colcount<\numberofborderchars\relax\innerrepeat
+ \hfill\colcount=0
+ \innerloop\advance\colcount by 1 \char1
+ \ifnum\colcount<\numberofborderchars\relax\innerrepeat
+ \ifnum\linecount<\count0\relax\break\repeat
+ \break
+ \loop\advance\linecount by 1 \colcount=0
+ \innerloop\advance\colcount by 1 \char1
+ \ifnum\colcount<\numberofchars\relax\innerrepeat
+ \ifnum\linecount<\numberofchars\relax\break\repeat
+ \vss}\hss}}
+
+{\notation
+ \gdef\showboard{\par\centerline{Board after
+ \ifx\colour\whitecolour Black's \else White's \fi
+ \number\movenumber.\ move}\vskip \headskipamount
+ $$\vbox{\offinterlineskip
+ \halign{\linenumber{##}&\vrule\field##.&\field##.&\field##.&\field##.&
+ \field##.&\field##.&\field##.&\field##.\vrule\vrule\cr
+ \noalign{\hrule}\noalign{\hrule}
+ 8& .\@a8&*.\@b8& .\@c8&*.\@d8& .\@e8&*.\@f8& .\@g8&*.\@h8\cr
+ \noalign{\hrule}
+ 7&*.\@a7& .\@b7&*.\@c7& .\@d7&*.\@e7& .\@f7&*.\@g7& .\@h7\cr
+ \noalign{\hrule}
+ 6& .\@a6&*.\@b6& .\@c6&*.\@d6& .\@e6&*.\@f6& .\@g6&*.\@h6\cr
+ \noalign{\hrule}
+ 5&*.\@a5& .\@b5&*.\@c5& .\@d5&*.\@e5& .\@f5&*.\@g5& .\@h5\cr
+ \noalign{\hrule}
+ 4& .\@a4&*.\@b4& .\@c4&*.\@d4& .\@e4&*.\@f4& .\@g4&*.\@h4\cr
+ \noalign{\hrule}
+ 3&*.\@a3& .\@b3&*.\@c3& .\@d3&*.\@e3& .\@f3&*.\@g3& .\@h3\cr
+ \noalign{\hrule}
+ 2& .\@a2&*.\@b2& .\@c2&*.\@d2& .\@e2&*.\@f2& .\@g2&*.\@h2\cr
+ \noalign{\hrule}
+ 1&*.\@a1& .\@b1&*.\@c1& .\@d1&*.\@e1& .\@f1&*.\@g1& .\@h1\cr
+ \noalign{\hrule}\noalign{\hrule}
+ }\vskip \footskipamount
+ \halign{\linenumber{##}&\nfield{##}&\nfield{##}&\nfield{##}&\nfield{##}&
+ \nfield{##}&\nfield{##}&\nfield{##}&\nfield{##}\cr
+ &a&b&c&d&e&f&g&h\cr}
+ }$$\par}
+}
+
+{\notation
+ \gdef\setupboard{\def\colour{W}\movenumber=0
+ \gdef\@a8{\ST}\gdef\@b8{\SS}\gdef\@c8{\SL}\gdef\@d8{\SD}%
+ \gdef\@e8{\SK}\gdef\@f8{\SL}\gdef\@g8{\SS}\gdef\@h8{\ST}%
+ \gdef\@a7{\SB}\gdef\@b7{\SB}\gdef\@c7{\SB}\gdef\@d7{\SB}%
+ \gdef\@e7{\SB}\gdef\@f7{\SB}\gdef\@g7{\SB}\gdef\@h7{\SB}%
+ \gdef\@a6{\void}\gdef\@b6{\void}\gdef\@c6{\void}\gdef\@d6{\void}%
+ \gdef\@e6{\void}\gdef\@f6{\void}\gdef\@g6{\void}\gdef\@h6{\void}%
+ \gdef\@a5{\void}\gdef\@b5{\void}\gdef\@c5{\void}\gdef\@d5{\void}%
+ \gdef\@e5{\void}\gdef\@f5{\void}\gdef\@g5{\void}\gdef\@h5{\void}%
+ \gdef\@a4{\void}\gdef\@b4{\void}\gdef\@c4{\void}\gdef\@d4{\void}%
+ \gdef\@e4{\void}\gdef\@f4{\void}\gdef\@g4{\void}\gdef\@h4{\void}%
+ \gdef\@a3{\void}\gdef\@b3{\void}\gdef\@c3{\void}\gdef\@d3{\void}%
+ \gdef\@e3{\void}\gdef\@f3{\void}\gdef\@g3{\void}\gdef\@h3{\void}%
+ \gdef\@a2{\WB}\gdef\@b2{\WB}\gdef\@c2{\WB}\gdef\@d2{\WB}%
+ \gdef\@e2{\WB}\gdef\@f2{\WB}\gdef\@g2{\WB}\gdef\@h2{\WB}%
+ \gdef\@a1{\WT}\gdef\@b1{\WS}\gdef\@c1{\WL}\gdef\@d1{\WD}%
+ \gdef\@e1{\WK}\gdef\@f1{\WL}\gdef\@g1{\WS}\gdef\@h1{\WT}}
+}
+\setupboard
+%
+%---------------------- Moves ------------------------------------
+%
+\def\move#1#2#3#4#5#6 {% Syntax: [KDTLS ][a-h][1-8][-x][a-h][1-8]
+ % Man beachte, dass der erste Parameter fehlen kann, d.h., dies muss
+ % erst ermittelt werden mit hilfe des dritten.
+ \if#3-\@move B#1#2#3#4#5%
+ \else\if#3x\@move B#1#2#3#4#5%
+ \else\@move #1#2#3#4#5#6\fi\fi
+ \ifx\colour\whitecolour\def\colour{S}\advance\movenumber by 1
+ \else\def\colour{W}\fi
+ }
+
+\def\whitecolour{W}
+\def\colour{W}
+
+\def\@move#1#2#3#4#5#6{% Syntax: [KDTLSB][a-h][1-8][-x][a-h][1-8]
+ \expandafter\def\csname @#2#3\endcsname{\void}%
+ \ifx\colour\whitecolour
+ \expandafter\def\csname @#5#6\endcsname{\csname W#1\endcsname}%
+ \else\expandafter\def\csname @#5#6\endcsname{\csname S#1\endcsname}\fi}
+
+\catcode`\@=12
+%
+%---------------------- End of Macro Definitions -----------------
+%
+ \move e2-e4 \move c7-c6
+ \move d2-d4 \move d7-d5
+ \move Sb1-d2 \move d5xe4
+ \move Sd2xe4 \move Sb8-d7
+ \move Sg1-f3
+ \showboard
diff --git a/macros/plain/contrib/misc/automagic.tex b/macros/plain/contrib/misc/automagic.tex
new file mode 100644
index 0000000000..75d047cb53
--- /dev/null
+++ b/macros/plain/contrib/misc/automagic.tex
@@ -0,0 +1,105 @@
+% for automagic equation numbering
+
+\newcount\LastEqNum
+\LastEqNum=0
+\def\BuildEqBox#1{\hbox{{\rm\the\count1--\the#1}}}
+\def\nexteqnum{{\count9=\LastEqNum\advance\count9 by1
+ \BuildEqBox{\count9}}}
+\def\lasteqnum{\BuildEqBox{\LastEqNum}}
+\def\neweqnum{\global\advance\LastEqNum by1 \lasteqnum}
+\def\namelasteq#1{\xdef#1{\BuildEqBox{\LastEqNum}}}
+
+% for automagic section numbering
+
+\newcount\sectiondepth
+\newbox\sectnum
+\newif\iftoc
+\let\Z=\relax
+\def\SP{ }
+
+\def\sectA{\LastEqNum=0\goodbreak}
+\let\sectB=\goodbreak
+\let\sectC=\goodbreak
+\let\sectD=\goodbreak
+\let\sectE=\goodbreak
+\let\sectF=\goodbreak
+\let\sectG=\goodbreak
+\let\sectH=\goodbreak
+\let\sectI=\goodbreak
+
+% Start a new section. First argument is depth (1 to 9 please!), second
+% is caption. \esection is a section that has nothing above it and
+% shouldn't get a \goodbreak\bigskip.
+
+\outer\def\section{\bigskip\SECTION}
+\outer\def\esection{\nobreak\smallskip\SECTION}
+\def\SECTBAD{\errmessage{Section depths should be between 1 and 9}}
+\def\SECTION#1#2{%
+ \sectiondepth=#1
+ \ifcase\sectiondepth\SectBad\or\sectA\or\sectB\or\sectC\or
+ \sectD\or\sectE\or\sectF\or\sectG\or\sectH\or\sectI\else
+ \SECTBAD\fi
+ \advance\count\sectiondepth by1
+ \loop\advance\sectiondepth by1 % zero all lower levels
+ \ifnum\sectiondepth<10\count\sectiondepth=0\repeat
+ \sectiondepth=1
+ \setbox\sectnum=\hbox{\number\count1}%
+ \global\def\Sectnum{\number\count1}%
+ \loop\ifnum\sectiondepth<#1 % Glue together each level
+ \advance\sectiondepth by1
+ \ifnum0=\count\sectiondepth % force to 1
+ \set\count\sectiondepth=1
+ \fi
+ \setbox\sectnum=\hbox
+ {\unhbox\sectnum.\number\count\sectiondepth}%
+ \global\edef\Sectnum{\Sectnum.\number\count\sectiondepth}%
+ \repeat
+ \message{\Sectnum. #2}%
+ \setbox0=\hbox{\bf\copy\sectnum.\hskip1em#2}%
+ \def\text{\Sectnum.\SP!#2}%
+ \tocentry{#1}{\text}{\box0\hfil}
+ \ignorespaces
+}
+
+% unnumbered section
+\def\unsection#1{%
+ \message{#1}%
+ \setbox0=\hbox{\bf#1}%
+ \def\text{\SP!#1}%
+ \tocentry{0}{\text}{\box0\hfil}%
+ \ignorespaces
+}
+
+% print arg 3 as a line, put arg 2 into the table of contents with
+% a "level" of arg 1
+% takes care of putting box0 out as a line, and putting it into the
+% table of contents if required
+\def\tocentry#1#2#3{%
+ \line{#3}% stuff to appear in the text
+ \nobreak\smallskip\nobreak % now in vert mode
+ \iftoc{\let\the=0 % make it unexpandable
+ \xdef\ixout{\write\inx{\Z#1\SP!#2!\SP\the\pageno.}}\ixout
+ }\fi
+}
+
+\ifx\titlefont\undefinecontrolsequence
+ \font\titlefont=amssbx10 scaled\magstep2
+\fi
+\newcount\Siz
+\newwrite\inx
+\def\DoContents{\toctrue\immediate\openout\inx=\jobname.toc}
+\def\PrintTOC{\vfill\supereject\immediate\closeout\inx
+ \def\LeadFill{\leaders\hbox to .75em{\hss.\hss}\hfill}
+ \def\Z##1!##2!##3!##4.{
+ \Siz=##1\count1=\Siz
+ \advance\Siz by 1 \multiply\Siz by \count1
+ \divide\Siz by 2 \advance\Siz by -1
+ \dimen0=1em\multiply\dimen0 by \Siz
+ \Siz=##1\advance\Siz by 1
+ \dimen1=1em\multiply\dimen1 by \Siz
+ \line{\hskip\dimen0\hbox to\dimen1{##2\hfil}{##3}\LeadFill\hbox{##4}}
+ }
+ \centerline{\titlefont Table of Contents}\vskip .75in
+ \global\count0=-1
+ \input \jobname.toc
+}
diff --git a/macros/plain/contrib/misc/autotoc.tex b/macros/plain/contrib/misc/autotoc.tex
new file mode 100644
index 0000000000..3b2f8ce6e8
--- /dev/null
+++ b/macros/plain/contrib/misc/autotoc.tex
@@ -0,0 +1,53 @@
+%
+% Automatically generate a Table Of Contents (TOC) while the
+% document is being processed by PLAIN TeX
+%
+% Use \tocref{ texta }{ textb } to insert TOC entries. `texta'
+% will be typeset in the TOC and at the current location,
+% for example `\centerline{\tocref{Chapter 1}{}}' inserts
+% `Chapter 1' at the current location in your document
+% centered, and enters it in the TOC (not centered).
+% `textb' is a prefix text/TeX commands to precede `texta'
+% in the TOC only (it will not appear in the current loc-
+% ation of your document -- {{`textb'`texta'}.....\folio}).
+% Use \tocline to add info only intended for the TOC (no page number or
+% dotfill is used for tocline entries).
+% Use \tocgen to force the last TOC page to be printed (last command
+% before \end?)
+% To specialize, look at the below comments in the right
+%
+% Uses variable names
+% tocnew, tocopage, tocbox, tocsize, tocstrut, tocref,
+% tocbanner, tocsuffix, tocline, tocstart, tocont, tocgen
+%
+\newcount\tocnew\tocnew=1\newcount\tocopage
+\newbox\tocbox\newdimen\tocsize
+\def\tocstrut{{\vrule height8.5pt depth3.5pt width0pt}} % TOC baselineskip -1pt
+\def\tocref#1#2{\tocbanner#1 % Where `texta' is duplicated
+ \global\setbox\tocbox=\vbox{
+ \box\tocbox\vbox{
+ \line{\tocstrut{#2#1}~\dotfill~\folio} % Where the TOC line is made
+ }}\tocsuffix}
+\def\tocline#1{\tocbanner
+ \global\setbox\tocbox=\vbox{
+ \box\tocbox\vbox{
+ \line{\tocstrut{#1}}
+ }}\tocsuffix}
+\def\tocbanner{\ifnum\tocnew=1\tocstart\fi
+ \ifnum\tocnew=3\tocont\fi}
+\def\tocsuffix{\ifdim\tocsize<\ht\tocbox\tocgen
+ \global\tocnew=3\fi}
+% Do not change tocsize = 1.0 (TeX may go into an infinite loop)
+\def\tocstart{\global\tocsize=.95\vsize % TOC page >95% full, print it
+ \global\setbox\tocbox=\vbox{
+ \centerline{\tocstrut\bf Table Of Contents} % TOC page 1 banner line 1
+ \line{\tocstrut\hfil} % TOC page 1 banner line 2 blank line
+ }\global\tocnew=2}
+\def\tocont{\global\setbox\tocbox=\vbox{
+ \centerline{\tocstrut Table Of Contents (Continued)} % TOC page <> 1 banner
+ }\global\tocnew=2}
+\def\tocgen{\ifnum\tocnew=1
+ \message{No TOC entries found.}\else
+ \tocopage=\pageno\pageno=0\message{(TOC}
+ \shipout\box\tocbox\message{)}
+ \pageno=\tocopage\global\tocnew=1\fi}
diff --git a/macros/plain/contrib/misc/bellmac.tex b/macros/plain/contrib/misc/bellmac.tex
new file mode 100644
index 0000000000..ea5f26f38b
--- /dev/null
+++ b/macros/plain/contrib/misc/bellmac.tex
@@ -0,0 +1,235 @@
+% From: <BELL@UKANVAX.BITNET>
+% Ed Bell
+% BITnet: BELL@UKANVAX
+% SPAN: KUPHSX::BELL
+%
+% \title AutoLetter: A \TeX\ form letter procedure.
+% \\Edwin V. Bell, II\cr
+% Department of Physics and Astronomy
+% University of Kansas
+% \endx
+%
+% \pagexref{bell}
+%
+% The inquiry from John Lee (\TUB, October 1986) concerning form letters was
+% particularly interesting to me as I had recently completed such a procedure
+% at the request of our office staff. The procedure (called AutoLetter) is
+% a ``plain'' \TeX\ procedure which requires two files, one containing a
+% delimited listing of names and addresses, the other a generic form letter.
+%
+% Each entry in the address file is followed by a line containing a single
+% asterisk. The last entry must also be followed by this line, which in turn
+% {\it must} be followed by the end-of-file mark. Each individual entry consists
+% of six lines for the addressee's title, name, etc., followed by as many
+% address lines as desired. The lines for the addressee's name are:
+%
+% \item{(1)}Title (Prof., Mr., Ms., etc.)
+% \item{(2)}First name/initial
+% \item{(3)}Name to be used as a familiar form of address.
+% \item{(4)}Middle name(s)/initial(s)
+% \item{(5)}Last/family name
+% \item{(6)}Additional name information (Jr., II, Esq., etc.)
+%
+% \noindent
+% These lines are then used to reconstruct the persons name for various forms
+% of address(including for the address block) and to address the person formally
+% (Sir, Madam, Sir or Madam), familiarly (by item (3) above or, if (3) is
+% blank, by first name), or by title and last name. If any of these lines
+% are left blank, AutoLetter doesn't mind, but if the entry is irrelevant
+% or absent from the persons name, {\it it must still be left blank}. An example
+% of an address entry might be:
+% \begintt
+% Mr.
+% Edwin
+% Ed
+% V.
+% Bell
+% II
+% Department of Physics \& Astronomy
+% University of Kansas
+% Lawrence, KS\ \ \ 66045
+% *
+% \endtt
+%
+% The letter file is quite simple and used macros that are the same as or
+% slight variations of those listed in Appendix E of {\sl The \TeX book}.
+% AutoLetter takes care of the placement of the date and address block (and
+% could as well the letterhead, although I have not yet implemented that here
+% as yet), so the letter file might appear as:
+% \begintt
+% \letterbody
+% Dear \person--
+%
+% ...text...
+%
+% \closing
+% Sincerely,
+% ...
+%
+% \annotations...
+% \ps...
+%
+% \endletter
+% \endtt
+%
+% AutoLetter consists of two files, on the \TeX\ procedure itself, the other
+% containing the letter-formatting macros (and local macros, if desired).
+% The AutoLetter procedure looks like:
+% \begintt
+% \input letter_format
+%
+\message{+------------------------------------------+}
+\message{| AutoLetter Version 1.1 -- 9 October 1986 |}
+\message{+------------------------------------------+}
+
+\newread\addressfile
+
+\message{Enter name of file containing the addresses:}
+\read-1 to\addfile
+\openin\addressfile=\addfile
+
+\message{Enter name of file containing the body of the letter:}
+\read-1 to\letfile
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Now read in an entry containing the person to whom to send the letter
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\endlinechar=-1
+\read\addressfile to\text \let\title=\text
+
+\loop
+ \read\addressfile to\text \let\firstname=\text
+ \read\addressfile to\text \let\nickname=\text
+ \read\addressfile to\text \let\middlename=\text
+ \read\addressfile to\text \let\lastname=\text
+ \read\addressfile to\text
+ \ifx\text\blank\def\jr{}\else\def\jr{, \text}\fi
+ \endlinechar='015
+ \message{Now processing letter to \addressee.}
+ \getaddress
+ \doletter
+ \endlinechar=-1
+ \read\addressfile to\text \let\title=\text
+ \ifeof\addressfile\endfalse\else\endtrue\fi
+ \ifend
+\repeat
+
+\bye
+% \endtt
+%
+% \noindent
+% Our local letter-formatting macros are:
+% \begintt
+% \input whatever local macro package you wish here
+%
+% \twelvept % 12-point size is so much easier to read
+%
+% \hsize=6.5truein
+% \vsize=8.0truein
+% \hoffset=1.0truein
+% \voffset=1.5truein
+%
+% \raggedbottom
+% \interlinepenalty=1000
+% \parindent=0pt
+% \parskip=0pt
+%
+% \nopagenumbers
+%
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Define some stuff so that the headlines will come out the way
+% we want them to be.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+%
+% \newbox\headbox
+% \headline={\ifnum\pageno>1
+% {\twelverm
+% \global\setbox\headbox=\vbox\bgroup%
+% \leftline{\addressee}
+% \leftline{\today}
+% \leftline{Page \folio}\egroup}\copy\headbox
+% \else\hfil\fi}
+%
+% \def\makeheadline{\vbox to 0pt{\vskip-70.6pt
+% \line{\vbox to30.6pt{}\the\headline}\vss}
+% \nointerlineskip}
+%
+% \newif\ifend
+%
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Macros for reading in the address from the file.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+%
+% \def\blank{}
+%
+% \def\endletter{\endmode\vfill\eject\pageno=1}
+%
+% \newdimen\longindentation \longindentation=10truecm
+% \newbox\theaddress
+% \newif\ifast
+% \def\aster{* }
+% \def\getaddress{{\global\setbox\theaddress=\vbox\bgroup\raggedright%
+% \hsize=\longindentation
+% \everypar{\hangindent2em}
+% \line{\vbox to10.2pt{}\addressee\hss}\egroup%
+% {\loop{\read\addressfile to\text
+% \ifx\text\aster\astfalse\else\asttrue\fi
+% \ifast\global\setbox\theaddress=\vbox\bgroup\unvbox\theaddress
+% \line{\vbox to 10.2pt{}\text\hss}\egroup}\repeat}}}
+%
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Macros for formatting the letter.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+%
+% \def\letterbody{\beginparmode}
+% \def\closing{\beginlinemode\getclosing}
+% {\obeylines\gdef\getclosing #1
+% #2
+% {#1\nobreak\bigskip \leftskip=\longindentation #2
+% \nobreak\bigskip\bigskip\bigskip\bigskip % space for signature
+% \def
+% {\endgraf\nobreak}}}
+% \def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par}
+% \def\ps{\beginparmode\nobreak
+% \interlinepenalty5000\def\par{\endgraf\penalty5000}
+% P.cS.\ }
+%
+% \def\address{\beginlinemode \copy\theaddress \endgroup}
+% \def\doletter{{\leftskip=\longindentation%
+% \rm\today\bigskip\address\bigskip}
+% \input \letfile}
+%
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Macros for setting up forms of salutation.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+%
+% \def\mr{Mr.}
+% \def\ms{Ms.}
+% \def\mrs{Mrs.}
+% \def\miss{Miss}
+%
+% \def\addressee{\ifx\blank\title\else\title\space\fi%
+% \firstname\space\ifx\blank\middlename\else\middlename\space\fi%
+% \lastname\jr}
+% \def\person{\ifx\blank\title Sir or Madam\else\title\space\lastname\fi}
+% \def\familiar{\ifx\blank\nickname \firstname\else\nickname\fi}
+% \def\formal{\ifx\mr\title Sir\else{\ifx\ms\title Madam\else%
+% {\ifx\mrs\title Madam\else{\ifx\miss\title Madam\else{\person}\fi}%
+% \fi}\fi}\fi}
+% \endtt
+%
+% The AutoLetter procedure prompts the user for the names of the address and
+% letter files and then goes to work. A similar procedure (called {\smc Labels})
+% can also be used with the address file to produce 33 labels/page (3 columns
+% of 11 labels). This enables us to produce form letters with or without labels
+% or to maintain mailing lists without requiring letters (for abstract mailings,
+% for example).
+%
+%If anyone is interested in having these procedures, drop me a line. If response
+% is high, I would be more than willing to provide them to the \TeX\ community
+% at large. Mail may be sent to:
+%
+% \leftline{Bitnet: Bell@UKANVAX}
+% \leftline{SPAN: KUPHSX::Bell}
+%
diff --git a/macros/plain/contrib/misc/bfsymb.tex b/macros/plain/contrib/misc/bfsymb.tex
new file mode 100644
index 0000000000..2fbd828f81
--- /dev/null
+++ b/macros/plain/contrib/misc/bfsymb.tex
@@ -0,0 +1,32 @@
+%
+%% bfsymb.tex, written by Uwe M\"unch
+%% e-mail: muench@ph-cip.uni-koeln.de
+%
+% This macro package provides the command
+% \boldsymbol{...}
+% to typeset parts of a math formula (e.g. a greek sign (\alpha)) in the
+% bold cmmib10-font for the plain tex format. It's not for use under
+% any other format, because it will not work (I think).
+%
+% The 10pt-font cmmib10 is hard-coded, so that you get the design size
+% 10 pt. Magnification with \magnification=???? will work, but this macro
+% will not provide good results, if you want to use it with (e.g.) cmr17...
+%
+% For the latex format the command \boldsymbol is provided in the amstex
+% package (written by the AMS, not me), with similar functionality, but
+% much stronger font selection (NFSS2).
+%
+%%
+\font\bfsymbtext=cmmib10
+\font\bfsymbscript=cmmib10 at 7pt
+\font\bfsymbscriptscript=cmmib10 at 5 pt
+\def\boldsymbol#1{{\mathchoice%
+ {\hbox{$\displaystyle\textfont1=\bfsymbtext\scriptfont1=%
+ \bfsymbscript\scriptscriptfont1=\bfsymbscriptscript #1$}}%
+ {\hbox{$\textstyle\textfont1=\bfsymbtext\scriptfont1=%
+ \bfsymbscript\scriptscriptfont1=\bfsymbscriptscript #1$}}%
+ {\hbox{$\scriptstyle\scriptfont1=\bfsymbscript%
+ \scriptscriptfont1=\bfsymbscriptscript #1$}}%
+ {\hbox{$\scriptscriptstyle%
+ \scriptscriptfont1=\bfsymbscriptscript {#1}$}}}}
+\endinput
diff --git a/macros/plain/contrib/misc/bibplain.tex b/macros/plain/contrib/misc/bibplain.tex
new file mode 100644
index 0000000000..49f9284f66
--- /dev/null
+++ b/macros/plain/contrib/misc/bibplain.tex
@@ -0,0 +1,49 @@
+% Pseudo-BIB.TEX
+%
+% These commands are examples of how to use BibTeX with plain TeX.
+% Syntax is similar to LaTeX, but can be changed to suit the user.
+%
+% Example:
+% .... Blah, blah \citer(Keyword) blah, blah....
+% \bibliography{gunk} %<-- the *.BIB file
+% \bibliographystyle{plain} %<-- the *.BST file (style)
+%
+% \citer Puts nothing in the text, it only enters something in the *.AUX
+% file (which is now generated). This allows citing of entries in the
+% bibliography, but not the text.
+%
+% Anthony J. Ferro
+% Physics Dept. -- Astronomy Group
+% Arizona State University
+% Tempe, AZ 85287
+% FERRO@ASUCPS.BITNET
+\newcount\citeon
+\citeon=0
+
+\def\citer#1{\ifnum\citeon<1\citeon=1\openout1\jobname.aux
+ \write1{\string\relax}\fi %
+ \write1{\string\citation{#1}}} % Put your favorite method of citing here!
+
+\def\bibliography#1{\openin2\jobname.bbl
+ \ifeof2
+ \message{No \jobname.BBL file. }
+ \write1{\string\bibdata{#1}}
+ \closein2
+ \else
+ { %important, lets \end be redefined TEMPORARILY
+ \def\begin##1##2{\references}
+ \def\bibitem##1{}
+ \def\newblock{}
+ \def\end##1{\endreferences}
+ \input\jobname.bbl
+ }
+ \write1{\string\bibdata{#1}}
+ \closein2
+ \fi }
+
+\def\bibliographystyle#1{\write1{\string\bibstyle{#1}}}
+
+\def\references{\bf This is the beginning of MY REFERENCES}
+
+\def\endreferences{\bf This is the end of MY REFERENCES}
+%%%-------------------- Un-Rip here ---------------------------------
diff --git a/macros/plain/contrib/misc/border.tex b/macros/plain/contrib/misc/border.tex
new file mode 100644
index 0000000000..6821339ec5
--- /dev/null
+++ b/macros/plain/contrib/misc/border.tex
@@ -0,0 +1,96 @@
+% border.tex
+% Author: James A. Brister
+% Mon Jan 28 19:43:19 1991
+%
+% Macros to put black borders around a page in PLAIN TeX. The border is
+% laid over the top of the page as it would normally be. Changes to
+% \hoffset and \voffset do not affect where the border goes.
+%
+% To turn borders on use the command \borderson, to turn them off use
+% \bordersoff.
+%
+% Interesting dimensions are:
+%
+% \borderindent the distance from the outside edge of the border to
+% the paper edge. Default is 10 pts
+% \borderwidth the width of the border. Default is 5pt
+% \borderspace the (minimum) space between the inside edge of the
+% border and the outside edge of the box containing
+% all the page material. Default is 10pt. Not really
+% useful in this context though, because it implies the
+% internal box will be shifted, but the size
+% of the internal box is adjusted to allow for this
+% dimension. The macro that uses it (boxit) is
+% useful, and borderspace can really be set to
+% anything inside a group .e.g.
+% {\borderwidth=5pt
+% \borderspace=5pt
+% \boxit{\hbox{fubar}}}
+% won't (ok, shouldn't) affect the output routine.
+% \paperheight the height of the paper, default is 11 inches
+% \paperwidth the width of the paper, default is 8.5 inches
+%
+% NOTE: If you change these dimensions you can get
+% overfull box errors. To avoid this adjust \vsize, \hsize, \hoffset, and
+% \voffset accordingly.
+%
+%
+ \newdimen\borderspace \borderspace=10pt
+\newdimen\borderwidth \borderwidth=5pt
+\newdimen\borderindent \borderindent=10pt
+\newdimen\paperheight \paperheight=11in
+\newdimen\paperwidth \paperwidth=8.5in
+ \newdimen\bigboxheight % height of final box inside border
+\newdimen\bigboxwidth % width of same box
+\newdimen\leftsidekern % distance between inside of border and left of page box
+\newdimen\topsidekern % distance between inside of border and top of pagebox
+\newdimen\boxadjust % distance from paper edge to inside edge of border space.
+ %
+% put a border around a box. Taken from the TeX book. Border width is
+% defined by \borderwidth. Distance out from box is \borderspace.
+%
+% This macro can be called in a page like so:
+% {\borderwidth=5pt \borderspace=5pt \boxit{\hbox{fubar}}}
+%
+ \def\boxit#1{\vbox{\hrule height \borderwidth depth 0pt
+ \hbox{\vrule width \borderwidth\kern\borderspace
+\vbox{\kern\borderspace#1\kern\borderspace}\kern\borderspace \vrule width
+\borderwidth}\hrule height \borderwidth depth 0pt}}
+ %
+% Wrap up the page in a border and ship it out.
+%
+ \def\borderoutput{
+ \setbox255=\vbox{\makeheadline
+ \pagebody
+ \makefootline}%
+ \setbox255=\vbox{\makebigbox{\box255}}
+ \begingroup
+ \hoffset= -1in \advance\hoffset by \borderindent
+ \voffset= -1in \advance\voffset by \borderindent
+ \shipout\boxit{\box255}
+ \endgroup
+ \advancepageno
+ \ifnum\outputpenalty>-20000\else\dosupereject\fi}
+ %
+% make a big box to hold the page, that's big enough to wrap the border
+% around.
+%
+ \def\makebigbox#1{%
+ \boxadjust=\borderindent
+ \advance\boxadjust by \borderwidth
+ \advance\boxadjust by \borderspace
+ \bigboxheight=\paperheight
+ \bigboxwidth=\paperwidth
+ \advance\bigboxheight by -\boxadjust
+ \advance\bigboxheight by -\boxadjust
+ \advance\bigboxwidth by -\boxadjust
+ \advance\bigboxwidth by -\boxadjust
+ \leftsidekern=\hoffset \advance\leftsidekern by 1in
+ \advance\leftsidekern by -\boxadjust
+ \topsidekern=\voffset \advance\topsidekern by 1in
+ \advance\topsidekern by -\boxadjust
+ \hbox to \bigboxwidth{\kern\leftsidekern
+ \vbox to \bigboxheight{\kern\topsidekern#1\vfil}
+ \hfil}}
+ \def\borderson{\output={\borderoutput}}
+\def\bordersoff{\output={\plainoutput}} % reset to TeX's standard output
diff --git a/macros/plain/contrib/misc/boxit.tex b/macros/plain/contrib/misc/boxit.tex
new file mode 100644
index 0000000000..57956219c1
--- /dev/null
+++ b/macros/plain/contrib/misc/boxit.tex
@@ -0,0 +1,13 @@
+%
+% BOXIT
+%
+% Use \boxit{ text } to surround text / paragraphs / anything in a
+% box. For example, typing \boxit{the} would produce
+% +---+
+% |the|
+% +---+
+% (you may want to use \strut inside the argument if the
+% boxit is on a line by itself).
+%
+\def\boxit#1{\leavevmode\hbox{\vrule\vtop{\vbox{\kern.33333pt\hrule
+ \kern1pt\hbox{\kern1pt\vbox{#1}\kern1pt}}\kern1pt\hrule}\vrule}}
diff --git a/macros/plain/contrib/misc/btable.sty b/macros/plain/contrib/misc/btable.sty
new file mode 100644
index 0000000000..a11bdb7a05
--- /dev/null
+++ b/macros/plain/contrib/misc/btable.sty
@@ -0,0 +1,134 @@
+%From: mathas_a@maths.su.oz.au ( Andrew )
+%Newsgroups: comp.text.tex,aus.tex
+%Subject: large table macros for TeX - btable.sty
+%Message-ID: <1990Jul6.052546.5887@metro.ucc.su.OZ.AU>
+%Date: 6 Jul 90 05:25:46 GMT
+%Sender: news@metro.ucc.su.OZ.AU (news)
+%Organization: Mathematics, University of Sydney
+%Lines: 123
+%Xref: jarthur comp.text.tex:1959
+%Replies-To: comp.text.tex
+
+%Several people have expressed an interest in the table macros which
+%I purported to have. They appear below. They do *not* work in LaTeX;
+%however after looking at the supertab macros for LaTeX (which several
+%people told me about), I think that I could modifify them to work
+%with LaTeX. Any one who wishes to convert them feel free as I won't
+%have the time to do this until the end of August.
+
+%The basic macros were written primarily by Bob Howlett
+%(howlett_r@maths.su.oz.au), with me watching and making the odd
+%suggestion and modification. Consequently I have called the macros
+%the "btable.sty" macros. All credit should go to Bob.
+
+%The macros were written to typeset large character tables and
+%consequently everything is put into math mode. To take them out of
+%math mode the definitions of \tableline and \nextbit need to be
+%changed in the obvious way (ie. remove the "$"s).
+
+%The reason why I wanted these macros was that TeX and LaTeX both
+%spat the dummy and gave a memory overflow when I asked them to
+%do my tables by conventional methods. I also tried using the
+%tabular environment in LaTeX; butm for reasons which I can't
+%comprehend (or through ill-use?), there seems to be a limit of
+%approximately 15 columns in this evironment - I needed up to
+%31 columns. Given this limit, the supertab environment written for LaTeX
+%has the same restriction (it uses the tabular environment), and
+%so it would be worthwhile to convert these macros to LaTeX (they
+%don't work in LaTeX at the moment because \plainoutput is not
+%defined in LaTeX).
+
+%These macros do not appear to have any memory restrictions: I ran
+%what turned out to be 22 pages of 31 column tables through TeX in
+%one hit without any complaints. As such they meet my specifications -
+%I hope that they also met yours.
+
+%Andrew Mathas.
+
+% - smile at a stranger today and help make the world a better
+% place; while you're, at it, why not hug a friend!
+
+%______________________________________________________________________
+%% Written by Bob Howlett with modifications by Andrew Mathas 1990.
+%%% Table Format:
+%% All entries are formatted in math mode. A horizontal line
+%% is placed under the table header, and a vertical line
+%% separates the first and second columns. The first column
+%% is left justified and all other columns are right justified.
+%% Any row can have an arbitrary number of columns. The macros were
+%% designed for TeXing character tables.
+%%% Table Syntax:
+% - table begun with \starttable
+% - columns separated by &
+% - each row ended by &!
+% - last row of table ended by &* and followed by \endtable
+% - table header specified by \tableheader ...&!
+% - if a blank line is wanted in the table put !\gap at the
+% end of the row
+% - to force a page break put !\pagegap at end of row
+% - pages are broken naturally if \pagegap is not used, and the
+% table header is put at the top of the following page.
+%%% Column spacing
+% - nameskip: width of the title column
+% - colSkip: width of the columns
+% - colsep: separation between columns
+% - firstcol: extra space to the left of the first column (in my
+% character tables the the first column (as distinct from the
+% left-most column which "labels" each row), contains the
+% degrees of the characters which are often very large numbers
+% and so I needed more space: eg. psi | xxxxxxx xxxx xxxx ...).
+\def\nameskip{\kern30pt}
+\def\colskip{\kern20pt}
+\def\colsep{\kern3pt}
+\def\firstcol{\kern10pt}
+%%% Known bug
+% If the row ends with ...& &! then the next row may be
+% added to the end of this row. This can be avoided
+% by typing ...&\relax&! instead.
+%% Useful note:
+% set \hsize=\wd0 to make the page width equal the table width
+
+%_________________________btable.sty____________________________________
+%% Written by Bob Howlett with modifications by Andrew Mathas 1990.
+\let\gap\relax
+\newif\ifpagegap
+\let\pagegap\pagegaptrue
+\def\spacing{height8.5ptdepth4.5pt}%
+\def\normalspacing{height8.5pt depth3.5pt}
+\def\moreheight{height9.5pt depth4.5pt\let\spacing\normalspacing}
+\def\muchmoreheight{height15pt depth4.5pt\let\spacing\normalspacing}
+\def\tableheader#1!{\setbox0\hbox{\def\spacing{height8.5ptdepth4.5pt}
+ \tableline#1*}%
+ \global\def\TableHeader{\copy0\hrule width\wd0\let\spacing\moreheight}}
+\def\starttable{\begingroup\offinterlineskip
+ \parskip=0pt\parindent=0pt%
+ \output={\plainoutput\TableHeader}
+ \TableHeader\startnewline}
+\def\startnewline{\hfil\par\futurelet\next\continue}
+\def\continue{\ifx\gap\next\message{III}\let\spacing\muchmoreheight\fi%
+ \ifx\pagegaptrue\next\vfill\eject\tableline\message{XXX}\pagegapfalse
+ \else\message{CCC}\tableline\fi}
+\def\tableline#1&{\noindent%
+ \rlap{$#1$}\nameskip\colsep\vrule\spacing\firstcol\nextbit}
+\def\nextbit#1&{\colskip\llap{$#1$}\colsep\check}
+\def\check#1{\if!#1\expandafter\startnewline\else\if*#1\hfil
+ \else\nextbit#1\relax\fi\fi}
+\def\endtable{\endgroup\vskip20pt}
+%-------------------------------------------------------------------------------
+\endinput
+%A small example: larger examples available upon request
+%(mathas_a@maths.su.oz.au).
+\tableheader C_1&C_2&C_3&!
+\starttable
+\chi&1&0&0&-1&!
+\chi&1&0&0&-1&!
+\chi&1&0&0&-1&!
+\chi&&0&0&-1&!\gap
+\chi&1&0&&-1&!
+\chi&1&0&&-1&!
+\chi&1&0&0&-1&!
+\phi&5&8&-1&2&!\pagegap
+\psi&1&2&&&!
+\alpha&59&0&*
+\endtable
+\bye
diff --git a/macros/plain/contrib/misc/capparmode.tex b/macros/plain/contrib/misc/capparmode.tex
new file mode 100644
index 0000000000..7fb62043a7
--- /dev/null
+++ b/macros/plain/contrib/misc/capparmode.tex
@@ -0,0 +1,33 @@
+% Copyright (c) 1986 David J. Braunegg. All rights reserved.
+% Distribution of this file is unrestricted provided that this notice
+% is not removed.
+
+%%% CAPPARMODE
+
+%%% Macros to typeset paragraphs with the first letter of the paragraph in
+%%% a large font with the first few lines of the paragraph indented to
+%%% make room for this first large letter
+
+\font\big=cmr10 scaled\magstep5
+
+\newdimen\saveparindent
+
+%%% This macro gets you into capparmode mode. Get back out with \endcapparmode
+\def\capparmode{\saveparindent=\parindent
+ \parindent=0pt
+ \everypar={\futurelet\cap\bigcap}}
+
+\def\bigcap{\setbox0=\vbox to 1.5ex{\hbox{\big\cap}}%
+ \dimen0=\wd0%
+ \advance\dimen0 by 0.5em
+ \hangindent=\dimen0%
+ \hangafter=-2%
+ \hbox to0pt{\hskip-\hangindent\box0}%
+ \let\discard=}
+
+\def\endcapparmode{\parindent=\saveparindent
+ \everypar={}}
+
+%%% This macro causes the next paragraph only to be set in capparmode.
+\def\cappar{\noindent
+ \futurelet\cap\bigcap}
diff --git a/macros/plain/contrib/misc/cassette.tex b/macros/plain/contrib/misc/cassette.tex
new file mode 100644
index 0000000000..56ae700781
--- /dev/null
+++ b/macros/plain/contrib/misc/cassette.tex
@@ -0,0 +1,200 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% cassette.tex (C) Copyright 1991 by David Strip.
+% Permission is granted for non-commercial use.
+% Please send corrections, refinements, etc to drstrip@cs.sandia.gov
+% Flames to \dev\null
+%
+% These macros are designed to lay out a label for a standard
+% phillips audio cassette box. See the pictorial layout below.
+%
+% In general you will begin with a \artist command. This command
+% takes a single argument and prints it in large boldface on the
+% spine of the cassette. Within this argument the \\ command will
+% create spacing between words. The total blank space on the line
+% is divided equally between the left margin, the right margin, and
+% each occurance of \\. The most typical use of \\ is to separate the
+% names of different artists appearing on the tape. The \artist command
+% does not need to be repeated if several labels are being made with
+% the same artist.
+%
+% The next command is the \title command. This is very similar to the
+% \artist command. It takes a single argument, which is printed on the
+% cassette spine. The \\ command and spacing are the same as in the
+% title command.
+%
+% Commands \sideA and \sideB are nearly indentical. They layout the
+% left and right columns, repectively of the face of the cassette.
+% (These columns are twice the length of the cassette box face, and are
+% intended to be folded in half. These commands also take a single arguement
+% which is then formatted as a paragraph in the appropriate column. The
+% paragraph formatting has reverse indenting - the first line starts at the
+% margin, subsequent lines are indented. In these commands you can use \\ to
+% end lines (e.g., song titles).
+% For the daring, the arguments to the commands can contain any TeX code
+% (within reason). A few useful tricks for the uninitiated: You can call
+% \centerline{...} to center some text. You can use {\bf ...} to put text in
+% bold face. \blankline (defined in this file, will leave a blank line.
+% (See the example.)
+%
+% The \NR and \noNR switches turn on or off the dolby logo on the spine.
+%
+% The \CD command within a \sideA or \sideB command will center the
+% compact audio disk logo at the point that the command occurs.
+%
+% After you have filled in these fields, you actually cause the casette
+% label to be processed with the \cassette-label command, which takes
+% no arguements.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% _______________________________________________
+% | |
+% | |
+% |_______________________________________________|
+% | \artist |
+% | \title |
+% |_______________________________________________|
+% | | |
+% | \sideA | \sideB |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% | | |
+% |______________________|________________________|
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Example
+%
+% \artist{Dylan\\Kooper, Bloomfield, Stills}
+% \title{Highway 61 Revisited\\Super Session}
+% \sideA{
+% Like A Rolling Stone\\
+% Tombstone Blues\\
+% It Takes a Lot to Laugh, It Takes a Train to Cry\\
+% From a Buick 6\\
+% Queen Jane Approximately\\
+% Highway 61 Revisited\\
+% Just Like Tom Thumb's Blues\\
+% Desolation Row\\
+% \CD} %original was on CD
+% \sideB{
+% Ballad of a Thin Man\\
+% \blankline %leave a blank line
+% \centerline{\bf Bloomfield and Kooper} %center and bold for subhead
+% Albert's Shuffle\\
+% Stop\\
+% Man's Temptation\\
+% His Holy Modal Majesty\\
+% \blankline
+% \centerline{\bf Stills and Kooper}
+% It Takes a Lot to Laugh, It Takes a Train to Cry\\
+% Season of the Witch\\
+% \CD}
+% \cassette-label %Print the label
+%
+%\end
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%FONTS Substitute freely to get what you want. These are Nini Billawala's
+% pandora family, which lends a slightly informal touch.
+
+\font\ftnbf=pnb10 scaled \magstep2
+\font\rm=pnr10
+\font\bf=pnb10
+
+%These are two specialty fonts. I hope that you can find them.
+\font\dolby=dolby
+\font\cdlogo=cdlogo
+
+\tolerance=10000 %Allow very sloppy line breaking.
+\nopagenumbers
+
+%setup the indentation the way I want it.
+\parindent=0.pt
+\def\\{\par\hangindent 2em \hangafter 1}
+
+%Now grab a few boxes to build the stuff in
+\newbox\ART \newbox\TITLE \newbox\ASIDE \newbox\BSIDE \newbox\NRmark
+
+\def\sideA#1{\setbox\ASIDE=\vbox to 4.98in{\hsize 1.875in \raggedright
+\vskip \baselineskip \\ \rm #1\vfil}}
+
+\def\sideB#1{\setbox\BSIDE=\vbox to 4.98in{\hsize 1.875in \raggedright
+\vskip \baselineskip \\ \rm #1\vfil}}
+
+\def\artist#1{
+\setbox\ART=\vbox {\def\\{\hfil}\hsize 4.0in \ftnbf \hfil #1\hfil}}
+
+\def\title#1{\setbox\TITLE=\vbox {
+ \def\\{\hfil}
+ \hsize 4.0in \hfil \rm #1 \hfil}}
+
+
+%These next two may very likely need some munging with, since there obviously
+%no such thing as a standard font for the logos. In each case there is a
+%single letter right after the font change command that specifies the mapping
+%of the character in the font. Change that if you need.
+
+
+\def\NR{\setbox\NRmark=\vbox {\hbox to 4in {\hfil \dolby E\hskip 2pt} \vskip 2pt}}
+\def\noNR{\setbox\NRmark=\vbox to 10pt{}}
+
+\def\CD{\vfill\centerline{{\cdlogo C}}\vskip 1pc}
+
+\def\blankline{\vskip\baselineskip}
+
+%Noise reduction logo is enabled by default.
+\NR
+
+\def\cassette-label{%
+
+%My driver does not do landscape, so I can only do one label per page.
+%If you can do landscape, you might want to remove this centerline, and
+%adjust the page size parameters to do two-up. I just cut a sheet of
+%paper in half and print one at a time.
+
+\centerline{
+\hbox{
+ \vrule height6.0in width.01in
+ \vbox to 6.0in{\vfil %this seems to be necessary to pick
+ \hrule width4in height.01in % for round-off in the decimals.
+ \vskip .49in
+ \hrule width4.0in height.01in
+ \vbox to .49in {\vfil
+ \copy\ART %artist name
+ \vfil
+ \box\TITLE %album titles
+ \vfil
+ \vskip -\ht\NRmark
+ \box\NRmark
+ }
+ \hrule width4.0in height.01in
+ \hbox to 4.0in{
+ \hskip .06in
+ \box\ASIDE %side A
+ \hfil
+ \vrule height4.98in width.01in
+ \hfil
+ \box\BSIDE %side B
+ \hskip .06in
+ }
+ \hrule width4.0in height.01in
+ }\vrule height 6.0in width.01in
+ }
+}}
+
diff --git a/macros/plain/contrib/misc/comment.tex b/macros/plain/contrib/misc/comment.tex
new file mode 100644
index 0000000000..e8606bfad2
--- /dev/null
+++ b/macros/plain/contrib/misc/comment.tex
@@ -0,0 +1,42 @@
+% Comment.tex
+% Macro to allow block comments in TeX
+%
+% Usage: Text between \begincomment and \endcomment is ignored; i.e.
+%
+% text
+% \begincomment
+% this text is ignored
+% \endcomment
+% more text
+%
+% Notes: Do NOT nest.
+% The \endcomment MUST appear at the end of a line.
+% TeX processes each line of ignored text, so the macro
+% is not particularly fast. Use sparingly. The main use
+% is to cause TeX to pass over small blocks of text.
+%
+% J.C. Alexander, May, 1986
+%
+\edef\Saveatcatcode{\the\catcode`\@}
+\catcode`\@=11
+\def\newcodes@{\edef\S@veslashcatcode{\the\catcode`\\}
+ \edef\S@velbraccatcode{\the\catcode`\{}
+ \edef\S@verbraccatcode{\the\catcode`\}}
+ \edef\S@venumsgcatcode{\the\catcode`\#}
+ \edef\S@veperctcatcode{\the\catcode`\%}
+ \catcode`\\=12 \catcode`\{=12 \catcode`\}=12 \catcode`\#=12
+ \catcode`\%=12\relax}
+\def\oldcodes@{\catcode`\\=\S@veslashcatcode
+ \catcode`\{=\S@velbraccatcode
+ \catcode`\}=\S@verbraccatcode
+ \catcode`\#=\S@venumsgcatcode
+ \catcode`\%=\S@veperctcatcode
+ \relax}
+\def\begincomment{\newcodes@\endlinechar=10 \comment@}
+{\lccode`\!=`\\
+\lowercase{\gdef\comment@#1^^J{\comment@@#1!endcomment\comment@@@}%
+\gdef\comment@@#1!endcomment{\futurelet\next\comment@@@}%
+\gdef\comment@@@#1\comment@@@{\ifx\next\comment@@@\let
+\next=\comment@\else\def\next{\oldcodes@\endlinechar=`\^^M\relax}%
+ \fi\next}}}
+\catcode`\@=\Saveatcatcode
diff --git a/macros/plain/contrib/misc/cropmrks.tex b/macros/plain/contrib/misc/cropmrks.tex
new file mode 100644
index 0000000000..d3d065775b
--- /dev/null
+++ b/macros/plain/contrib/misc/cropmrks.tex
@@ -0,0 +1,352 @@
+%%% Usage:
+
+%%% \input cropmarks
+%%% \topcropmark = <dimen> [plus <dimen>] [minus <dimen>]
+%%% \bottomcropmark = <dimen> [plus <dimen>] [minus <dimen>]
+%%% \leftcropmark = <dimen> [plus <dimen>] [minus <dimen>]
+%%% \rightcropmark = <dimen> [plus <dimen>] [minus <dimen>]
+%%% \lrcropmarkstrue ;;; iff you want alternating left and right cropmarks only
+%%% \rvcropmarkstrue ;;; iff you want recto and verso specified independently
+%%% (in which case the first four variables are two-valued
+%%% as \recto<var> and \verso<var>).
+
+%%% Square brackets indicate optional items, and the <dimen>s are
+%%% respectively (and all measured w.r.t. the origin, which is the
+%%% top left corner of the notional, rather than physical page; the
+%%% exact origin will need to be determined by inspection)
+
+%%% The distance to the centre of the cross;
+%%% The distance which the cross extends beyond the page limits;
+%%% The distance which the cross extends within the page limits.
+
+%%% Any or all can be zero <unit>s. For conventional (exo-) cropmarks, the
+%%% `plus' component indicates the length of the mark, and the `minus' component
+%%% should be omitted or zero. For inverted (endo-) cropmarks, the `plus'
+%%% component should be omitted or zero, and the `minus' component indicates the
+%%% length of the mark. If `plus' or `minus' components are negative, this
+%%% has the effect of a `white cropmark' extending in the reverse direction
+%%% for the specified distance; this may be used to achieve non-touching marks.
+%%% The first and only mandatory component may be also negative, to cope with
+%%% pathological origins.
+
+%
+%%% A test which will allow us to be read regardless of the \catcode of `@'
+%
+
+\newif \ifatletter
+\ifcat @A\atlettertrue \else \catcode `\@ = 11 \atletterfalse \fi
+
+\ifx \c@tcodeminus \undefined
+\else \message {Warning: previous meaning of \string \c@tcodeminus \space lost}
+\fi
+\edef \c@tcodeminus {\the \catcode `\-}
+\catcode `\- = 12
+
+%
+\message {CROPMARKS.TEX V1.5 Copyright (C) 14-JUL-1994 14:52:34 Philip Taylor}
+%
+
+%
+%%% Miscellaneous variables
+%
+
+\newif \iflrcropmarks \lrcropmarksfalse
+\newif \ifrvcropmarks \rvcropmarksfalse
+\newdimen \cropmarkwidth \cropmarkwidth = 0.4 pt
+\newdimen \t@pshift
+\newdimen \b@ttomshift
+\newdimen \l@ftshift
+\newskip \topcropmark
+\newskip \leftcropmark
+\newskip \rightcropmark
+\newskip \bottomcropmark
+\newskip \rectotopcropmark
+\newskip \rectoleftcropmark
+\newskip \rectorightcropmark
+\newskip \rectobottomcropmark
+\newskip \versotopcropmark
+\newskip \versoleftcropmark
+\newskip \versorightcropmark
+\newskip \versobottomcropmark
+\newskip \m@rkskip
+\newskip \m@rkplus
+\newskip \m@rkminus
+\newbox \p@gebox
+\newbox \cr@pmarkbox
+\newbox \topcr@pmarkbox
+\newbox \bottomcr@pmarkbox
+%
+%%% Extraordinary arcanery, to parse <skip>s into <dimen>s; any better ways ?
+%
+\begingroup
+\catcode `\P = 12 \catcode `\L = 12 \catcode `\U = 12 \catcode `\S = 12
+\catcode `\M = 12 \catcode `\I = 12 \catcode `\N = 12 \catcode `\T = 12
+\globaldefs = 1
+\lowercase
+{%
+\def \p@rseskip #1%
+ {\expandafter \p@rs@skip \the #1 PLUS 0.0PT MINUS 0.0PT \@ndparse #1 }
+\def \p@rs@skip #1 PLUS #2 MINUS #3\@ndparse #4
+ {%
+ \m@rkskip = #1%
+ \m@rkplus = #2%
+ \m@rkminus = #3%
+ \ifdim \m@rkminus = 0.0 pt
+ \expandafter \p@rs@sk@p \the \m@rkskip MINUS 0.0PT \@ndparse
+ \fi
+ }%
+\def \p@rs@sk@p #1MINUS #2\@ndparse {\m@rkskip = #1 \m@rkminus = #2 }
+}
+\endgroup
+%
+%%% Take control of \shipout, to force it to add cropmarks
+%
+\let \ship@ut = \shipout
+\def \shipout {\futurelet \b@x \whichb@x}
+\def \whichb@x
+ {%
+ \ifx \b@x \vbox
+ \def \n@xt {\setbox \p@gebox = }%
+ \afterassignment \Shipout
+ \else \ifx \b@x \hbox
+ \def \n@xt {\setbox \p@gebox = }%
+ \afterassignment \Shipout
+ \else \ifx \b@x \box
+ \def \n@xt {\setbox \p@gebox = }%
+ \afterassignment \Ship@ut
+ \else \ifx \b@x \copy
+ \def \n@xt {\setbox \p@gebox = }%
+ \afterassignment \Ship@ut
+ \else
+ \def \n@xt {\ship@ut}%
+ \message {Sorry, can't understand
+ what follows \shipout}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \n@xt
+ }
+\def \Shipout {\aftergroup \Ship@ut}
+\def \Ship@ut
+ {%
+ \ifrvcropmarks
+ \ifodd \pageno
+ \topcropmark = \rectotopcropmark
+ \bottomcropmark = \rectobottomcropmark
+ \leftcropmark = \rectoleftcropmark
+ \rightcropmark = \rectorightcropmark
+ \else
+ \topcropmark = \versotopcropmark
+ \bottomcropmark = \versobottomcropmark
+ \leftcropmark = \versoleftcropmark
+ \rightcropmark = \versorightcropmark
+ \fi
+ \fi
+ \hoffset = \leftcropmark
+ \setbox \topcr@pmarkbox =
+ \hbox \bgroup
+ \p@rseskip \leftcropmark
+ \iflrcropmarks
+ \ifodd \count 0
+ \let \next = \phantom
+ \else
+ \let \next = \relax
+ \fi
+ \else
+ \let \next = \relax
+ \fi
+ \next {\ifdim \m@rkminus < 0 pt
+ \begingroup
+ \advance \m@rkplus by \m@rkminus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \kern -\m@rkminus
+ \endgroup
+ \else
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \fi
+ \begingroup
+ \p@rseskip \topcropmark
+ \vrule height \m@rkplus
+ depth \m@rkminus
+ width \cropmarkwidth
+ \endgroup
+ \ifdim \m@rkplus < 0 pt
+ \begingroup
+ \advance \m@rkminus by \m@rkplus
+ \rlap {\kern -\m@rkplus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus}%
+ \endgroup
+ \else
+ \rlap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus}%
+ \fi
+ }%
+ \hskip \m@rkskip
+ \p@rseskip \rightcropmark
+ \hskip \m@rkskip
+ \iflrcropmarks
+ \ifodd \count 0
+ \let \next = \relax
+ \else
+ \let \next = \phantom
+ \fi
+ \else
+ \let \next = \relax
+ \fi
+ \next {\ifdim \m@rkplus < 0 pt
+ \begingroup
+ \advance \m@rkminus by \m@rkplus
+ \llap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus
+ \kern -\m@rkplus
+ }%
+ \endgroup
+ \else
+ \llap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus
+ }%
+ \fi
+ \begingroup
+ \p@rseskip \topcropmark
+ \vrule height \m@rkplus
+ depth \m@rkminus
+ width \cropmarkwidth
+ \endgroup
+ \ifdim \m@rkminus < 0 pt
+ \begingroup
+ \advance \m@rkplus by \m@rkminus
+ \kern -\m@rkminus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \endgroup
+ \else
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \fi
+ }%%%%%%%% end of parameter to \next
+ \egroup%%%%%%%% end of \bgroup ... \egroup to \setbox ...
+ \ht \topcr@pmarkbox = 0 pt
+ \dp \topcr@pmarkbox = 0 pt
+ \wd \topcr@pmarkbox = \wd \p@gebox
+ \setbox \bottomcr@pmarkbox =
+ \hbox \bgroup
+ \p@rseskip \leftcropmark
+ \iflrcropmarks
+ \ifodd \count 0
+ \let \next = \phantom
+ \else
+ \let \next = \relax
+ \fi
+ \else
+ \let \next = \relax
+ \fi
+ \next {\ifdim \m@rkminus < 0 pt
+ \begingroup
+ \advance \m@rkplus by \m@rkminus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \kern -\m@rkminus
+ \endgroup
+ \else
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \fi
+ \begingroup
+ \p@rseskip \bottomcropmark
+ \vrule height \m@rkminus
+ depth \m@rkplus
+ width \cropmarkwidth
+ \endgroup
+ \ifdim \m@rkplus < 0 pt
+ \begingroup
+ \advance \m@rkminus by \m@rkplus
+ \rlap {\kern -\m@rkplus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus}%
+ \endgroup
+ \else
+ \rlap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus}%
+ \fi
+ }%
+ \hskip \m@rkskip
+ \p@rseskip \rightcropmark
+ \hskip \m@rkskip
+ \iflrcropmarks
+ \ifodd \count 0
+ \let \next = \relax
+ \else
+ \let \next = \phantom
+ \fi
+ \else
+ \let \next = \relax
+ \fi
+ \next {\ifdim \m@rkplus < 0 pt
+ \begingroup
+ \advance \m@rkminus by \m@rkplus
+ \llap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus
+ \kern -\m@rkplus
+ }%
+ \endgroup
+ \else
+ \llap {\vrule height \cropmarkwidth
+ depth 0 pt width \m@rkminus
+ }%
+ \fi
+ \begingroup
+ \p@rseskip \bottomcropmark
+ \vrule height \m@rkminus
+ depth \m@rkplus
+ width \cropmarkwidth
+ \endgroup
+ \ifdim \m@rkminus < 0 pt
+ \begingroup
+ \advance \m@rkplus by \m@rkminus
+ \kern -\m@rkminus
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \endgroup
+ \else
+ \vrule height \cropmarkwidth
+ depth 0 pt width \m@rkplus
+ \fi
+ }%%%%%%%% end of parameter to \next
+ \egroup%%%%%%%% end of \bgroup ... \egroup to \setbox ...
+ \ht \bottomcr@pmarkbox = 0 pt
+ \dp \bottomcr@pmarkbox = 0 pt
+ \wd \bottomcr@pmarkbox = \wd \p@gebox
+ \setbox \cr@pmarkbox = \vbox
+ \bgroup
+ \offinterlineskip
+ \p@rseskip \leftcropmark \l@ftshift = \m@rkskip
+ \advance \l@ftshift by \m@rkplus
+ \advance \l@ftshift by \cropmarkwidth
+ \p@rseskip \topcropmark \t@pshift = \m@rkskip
+ \p@rseskip \bottomcropmark \b@ttomshift = \m@rkskip
+ \vskip -\t@pshift
+ \moveleft \l@ftshift \box \topcr@pmarkbox
+ \vskip +\t@pshift
+ \vskip +\b@ttomshift
+ \moveleft \l@ftshift \box \bottomcr@pmarkbox
+ \vskip -\b@ttomshift
+ \egroup
+ \setbox \p@gebox = \vbox
+ {\offinterlineskip
+ \box \cr@pmarkbox
+ \box \p@gebox}%
+ \ship@ut \box \p@gebox
+ }
+%
+%%% Restore \catcode of `-' & `@'
+%
+
+\catcode `\- = \c@tcodeminus
+\let \c@tcodeminus = \undefined
+\ifatletter \else \catcode `\@ = 12 \fi
+
+%%% All done
diff --git a/macros/plain/contrib/misc/declare.tex b/macros/plain/contrib/misc/declare.tex
new file mode 100644
index 0000000000..b97e704bdf
--- /dev/null
+++ b/macros/plain/contrib/misc/declare.tex
@@ -0,0 +1,32 @@
+% File: TeX Inputs declare.tex
+% Author: J E Pittman
+% Date: September 29, 1988
+%
+% Revision 01-Jun-1990
+% Changed count19 to count20 to conform to TeX 3.0
+% - Neil Burleson (NABTEXM@TAMVENUS)
+%
+% These macros provide a method of locally allocating registers
+% without interference with previously allocated registers. The
+% method is the same as on pages 346--347 of the \TeX book, however,
+% the declare macros are intended for local use only. It is a logical
+% error to use a new macro between a declare macro and the end of the
+% appropriate enclosing group.
+%
+\def\declarecount {\allocate0\countdef}%
+\def\declaredimen {\allocate1\dimendef}%
+\def\declareskip {\allocate2\skipdef}%
+\def\declaremuskip{\allocate3\muskipdef}%
+\def\declarebox {\allocate4\chardef}%
+\def\declaretoks {\allocate5\toksdef}%
+%
+\def\allocate#1#2#3{\relax
+ \advance\count1#1 by 1
+ \ifnum\count1#1<\count20
+ \else
+ \errmessage{No room for \string#3!}%
+ \fi
+ #2#3=\count1#1
+ }%
+%
+\endinput
diff --git a/macros/plain/contrib/misc/defstring.tex b/macros/plain/contrib/misc/defstring.tex
new file mode 100644
index 0000000000..25feae9ead
--- /dev/null
+++ b/macros/plain/contrib/misc/defstring.tex
@@ -0,0 +1,34 @@
+% -*- Mode: TeX -*-
+
+\ifx\thisfileis\anUndefinedMacro\input maybeload \fi
+
+\thisfileis{<eb.tex.texlocal>defstring} % abort loading if we're already loaded
+
+\input redefine
+
+% This file defines the top-level construction
+%
+% \defstring\foo "this is a string with \$% special characters"
+%
+% which defines the control sequence \foo so that it expands into
+% a "{" begin-group symbol, a sequence of plain characters as given
+% by the string, and a "}" end-group symbol. \foo will then be
+% suitable for \expandafter\index\foo within a footnote, and similar
+% uses.
+
+% \defstring won't work right inside \footnote or any other
+% construction that reads its argument before \defstring gets
+% to expand, because it works by changing reader syntax.
+
+\makeatletter
+
+\newtoks\defstring@toks
+
+\def\defstring#1{\def\@defstringdef{\edef#1{\the\defstring@toks}}\begingroup
+ \let\do\@makeother \dospecials \defstring@read}
+
+\def\defstring@read#1{\def\@tempa##1#1{\global\defstring@toks{{##1}}\endgroup
+ \@defstringdef}\@tempa}
+
+\makeatother
+
diff --git a/macros/plain/contrib/misc/dmhgener.tex b/macros/plain/contrib/misc/dmhgener.tex
new file mode 100644
index 0000000000..3415713881
--- /dev/null
+++ b/macros/plain/contrib/misc/dmhgener.tex
@@ -0,0 +1,216 @@
+%
+% Automatic numberer: \EQ for regular equations, \EQQ for several
+% numbered equations in \eqalign sequence.
+% Format of the equation label is (c.e), right justified,
+% where 'c' is the chapter number \Chapno
+% and 'e' the equation number \Eqno. You should set \Chapno at the
+% beginning of the file.
+%
+\newcount\Eqno
+\Eqno=0
+\def \EQ {\global\advance\Eqno by 1\eqno{(\number\Chapno .\number\Eqno)}}
+\def \EQQ {\global\advance\Eqno by 1 &{ (\number\Chapno.\number\Eqno)}}
+%
+% Examples:
+%
+% $$ x = 3 + i \EQ$$
+% $$ \eqalign {x & = 30 \EQQ \cr
+% y & = 50 \EQQ \cr} $$
+%
+%
+% Retrieval of an equation number: save it in a box.
+% After display mode, say "\key `number' `space'". Then to retrieve
+% the words "Eq. c.e" do "\copy `number'" or "\box `number'" if you
+% only need to remember it once. The dummy `number' can be any number
+% from 0 to 150, it is not the same as \Eqno. YOU must remember how
+% you keyed a particular equation. The key remains the same, even if
+% you change the order of the equations.
+%
+\def \key #1 {\setbox#1=\hbox{Eq. \number\Chapno .\number\Eqno}}
+%
+% Example: $$ x = y + z \EQ$$ \key71
+% \par As seen above in \copy71, this is a very blah, ...
+%
+%
+% FIGURES
+%
+\newcount\Figno
+\newcount\FIGNO
+\newcount\Figpgno
+%
+% Make a numbered page that is blank except for "Figure c.f" at the bottom.
+%
+\def \figpage {\par \null \vfill \par \centerline {Figure \number \Chapno
+ \global \advance \Figpgno by1.\number\Figpgno}\eject}
+%
+% Refer to a new figure in the text for the first time.
+%
+\def \Fig {\global \advance \Figno by1 Figure~\number
+ \Chapno .\number\Figno}
+%
+% The figure caption always follows \FIG.
+%
+\def \FIG {\par \noindent \global \advance \FIGNO by1 {\bf FIG. \number
+ \Chapno .\number \FIGNO}: }
+%
+% Refer to more than one figure in the text for the first time.
+% ... as seen in Figures 5.3-6 ...
+% (I am not sure this works.)
+%
+\def \Figs #1{{\advance\Figno by1 Figures \number\Chapno
+ .\number\Figno}$-$ \global\advance\Figno by#1\number\Figno}
+%
+% TABLES
+%
+\newcount\Tablno
+\newcount\rno
+%
+% Start each single table out with \Table.
+%
+\def \Table {\global \advance \Tablno by1\par \noindent
+ {\bf Table \number\Chapno-\number\Tablno}: }
+%
+% Tables a, b, c: There is a separate macro for the first one,
+% \Tablea. For all subsequent tables use \Tableb. It uses the
+% same table number as the previous table.
+%
+\def \Tablea {\global \advance \Tablno by1\par \noindent
+ {\bf Table \number\Chapno-\number\Tablno a}: }
+\def \Tableb #1:{\par \noindent
+ {\bf Table \number\Chapno-\number\Tablno #1}: }
+%
+% Refer to a table for the first time in the text. \TABLE
+% ... Table c--n ...
+%
+\def \TABLE {\global \advance \Tablno by1Table~\number \Chapno --\number
+ \Tablno}
+%
+% Use \skiptable to skip over a sideways table, but keep numbering correct.
+% It also leaves a single blank, numbered page.
+%
+\def \skiptable {\global \advance \Tablno by1\null \eject}
+%
+% Make two lines across, slightly separated.
+%
+\def \linet {\smallskip \hrule \nobreak \smallskip \hrule \smallskip}
+%
+% CHAPTERS
+%
+\newcount\Chapno
+\Chapno=0
+%
+% To start a new chapter: \Chapno should be set at zero for the first
+% chapter, one for chapter 2, etc. because \Chap increments \Chapno.
+% It also initializes the figure, table, and reference counters.
+%
+\def \Chap #1{\global \Eqno=0\global \rno=0
+ \global \Figno=0
+ \global \FIGNO=0
+ \global \Figpgno=0
+ \global \Tablno=0
+ \global \advance \Chapno by1\null \vskip 1in
+ \global \Tablno=0\global \Figno=0\global \rno=0
+ \line {\bf CHAPTER \number \Chapno \hfil}
+ \bigskip
+ \line {\bf #1\hfil} \vskip2pc}
+%
+% SECTIONS
+%
+% Follow \sect with the section label and title. These macros are NOT
+% automatic numberers.
+%
+\def \sect #1{\vskip20pt \par\noindent{\bf #1}\vskip10pt\nobreak\par\nobreak}
+\def \subsect #1{\vskip10pt \par\noindent{\bf #1}\vskip10pt\nobreak\par\nobreak}
+%
+% REFERENCES
+%
+% \genref
+% General references - for cases that don't fit into the special macros
+% defined below, there is always this one.
+%
+% Note the format of the argument list. This is very important. The argument
+% comes after a left parenthesis, and before a right parenthesis that is
+% immediately followed by a blank space. A right parenthesis followed by
+% a carriage return will not do.
+%
+\def \genref (#1) {{\global\advance\rno by1{}$^{\number\rno}$
+ \advance\rno by 150\global \setbox\number\rno =\vtop
+ {\advance\rno by -150\item{\number\rno. }{\rm #1}.}}}
+%
+% \ref
+% Regular references. (Multiple authors; one journal; volume; page; year)
+%
+\def \ref (#1;#2;#3;#4;#5) {\genref ({{\rm #1}, {\sl #2}, {\bf #3},
+{\rm #4 (#5)}}) }
+%
+% book references - underlines the title
+% \refb (author; title; publisher; city(optionally, state); year; misc)
+%
+% The title is in math mode so one has to put the spaces between words
+% in with "\ " or smaller ones with "\,"
+\def \refb (#1;#2;#3;#4;#5;#6) {{\global\advance\rno by1{}$^{\number\rno}$
+ \advance\rno by 150\global \setbox\number\rno =\vtop
+ {\advance\rno by -150\item{\number\rno. }{\rm #1},
+ $\underline{\rm #2}$, (#3, #4, #5) \rm #6.}}}
+%
+% In a book references - underlined
+% This is for when the person quoted only wrote a part of a book.
+%
+\def \refi (#1;#2;#3;#4;#5;#6;#7;#8) {{\global\advance\rno by1{}$^{\number\rno}$
+ \advance\rno by 150\global \setbox\number\rno =\vtop
+ {\advance\rno by -150\item{\number\rno. }{\rm #1, in:}
+ $\underline{\rm #2}$, Vol. #3, ed. #4 (#5, #6, #7), #8.}}}
+%
+% in a book references - italicized. It is easier to italicize than underline,
+% especially when the title is very long.
+%
+\def \refit(#1;#2;#3;#4;#5;#6;#7;#8){{\global\advance\rno by1{}$^{\number\rno}$
+ \advance\rno by 150\global \setbox\number\rno =\vtop
+ {\advance\rno by -150\item{\number\rno. }{\rm #1, in:}
+ {\it #2}, Vol. #3, ed. #4 (#5, #6, #7), #8.}}}
+%
+% comma references - When two papers are referenced at the same time, this
+% will put a comma before the second number in the superscript.
+%
+\def \refc (#1;#2;#3;#4;#5) {{\global\advance\rno by1$\! \!^{,\number\rno}$
+ \advance\rno by 150\global \setbox\number\rno =\vtop
+ {\advance\rno by -150\item{\number\rno. }{\rm #1}, {\sl
+ #2}, {\bf #3}, {\rm #4 (#5)}.}}}
+%
+% Several references, a, b, c. Use with \genref.
+% Example (using _ to point out the required space bars):
+% "\genref (\refabc (a)(author1;journal1;vol1;page1;year1)_;_
+% \refabc (b)(author2;journal2;vol2;page2;year2)_)_"
+%
+% It is good to put the semicolon in between reference (a) and (b).
+% This can't be part of the macro because then the reference would
+% end with a semicolon.
+%
+\def \refabc (#1)(#2;#3;#4;#5;#6) {{\rm #1) #2}, {\sl #3}, {\bf #4},
+ {\rm #5 (#6)}}
+%
+% 2 part Multi-referencer
+%
+% Refer to a group of papers in the text, with a hyphen in between,
+% as in 18-22. \multiref does not store the references at the end.
+% One needs to use \genrefnoi, in general, or \refbox, for simple
+% cases, for that.
+%
+\def\multiref #1{{\advance \rno by1{}$^{\number \rno
+ -{\advance \rno by#1\number\rno}}$}}
+%
+% \refbox
+% This will put a reference in the list at the end without having
+% to refer to it in the text. This is useful if you have references in
+% tables.
+%
+\def \refbox (#1;#2;#3;#4;#5) {\genrefnoi ({{\rm #1}, {\sl #2}, {\bf #3},
+ {\rm #4 (#5)}}) }
+%
+% \genrefnoi does not put a superscript in the text. This is useful if
+% you need references in the list, but you refer to them in some outside
+% part, such as a table.
+%
+\def\genrefnoi (#1) {{\global \advance \rno by 1 \advance \rno by
+ 150\global \setbox \number \rno=\vtop {\advance
+ \rno by -150\item {\number \rno. }{\rm #1}.}}}
diff --git a/macros/plain/contrib/misc/doublecol.tex b/macros/plain/contrib/misc/doublecol.tex
new file mode 100644
index 0000000000..ef05057bda
--- /dev/null
+++ b/macros/plain/contrib/misc/doublecol.tex
@@ -0,0 +1,57 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Generic double column output.
+%
+% Modified from a routine written by Donald Knuth (The TeXBook, App. E)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The user may modify the following to his tastes:
+%
+% \pagewidth vertical length of page.
+% \pageheight horizontal width of page.
+% \colwidth column width
+% \separator macro to generate column separator. Default is nothing.
+% \rulesep sets it to \vrule. \norulesep doesn't.
+% \makepage default is what is contained in plain.
+\catcode`@=11 % from plain.tex
+% Create and initialize new dimensions.
+\newdimen\pagewidth \newdimen\pageheight \newdimen\colwidth
+\pagewidth=\hsize \pageheight=\vsize \colwidth=3.2truein
+
+% This routine is used by \output ; this is different from
+% the one found in App. E.
+\def\onepageout#1{\shipout\vbox{\offinterlineskip
+ \vbox to \pageheight {\makepage{#1}%
+ \boxmaxdepth=\maxdepth}}
+ \advancepageno}
+\def\makepage#1{\makeheadline
+ #1 % Page contents
+ \makefootline}
+
+\output{\onepageout{\unvbox255}}
+\newbox\partialpage
+\def\begindoublecolumns{\begingroup
+ \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}\eject
+ \output={\doublecolumnout} \hsize=\colwidth \vsize=2\pageheight}
+\def\enddoublecolumns{\output={\balancecolumns}\eject
+ \endgroup \pagegoal=\vsize}
+\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255 \penalty\outputpenalty}
+\def\pagesofar{\unvbox\partialpage
+ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\separator\hfil\box2}}
+\def\norulesep{\let\separator=\relax}
+\def\rulesep{\let\separator=\vrule}
+\let\separator=\relax
+\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}
+ \setbox0=\vbox to\dimen@{\unvbox1}
+ \setbox2=\vbox to\dimen@{\dimen2=\dp3 \unvbox3\kern-\dimen2 \vfil}
+ \pagesofar}
diff --git a/macros/plain/contrib/misc/epsf.tex b/macros/plain/contrib/misc/epsf.tex
new file mode 120000
index 0000000000..e3f1076b64
--- /dev/null
+++ b/macros/plain/contrib/misc/epsf.tex
@@ -0,0 +1 @@
+../../../generic/epsf/epsf.tex \ No newline at end of file
diff --git a/macros/plain/contrib/misc/figplace.tex b/macros/plain/contrib/misc/figplace.tex
new file mode 100644
index 0000000000..f7036fc181
--- /dev/null
+++ b/macros/plain/contrib/misc/figplace.tex
@@ -0,0 +1,197 @@
+%
+%Date: Tue, 25 Oct 88 14:11:06 +0100
+%From: Joost Zalmstra <mcvax!nat.vu.nl!jjaz@uunet.UU.NET>
+%Subject: Re:Page Make-up Challenge
+%
+%Maybe the following set of macros can contribute to the solution of
+%the problem posed by David Rogers in TeXhax #86. It implements a floating
+%insertion with the following properties:
+% - Every insertion must be put in a \vbox. Customised macros can then
+% be used to place the white space for the figure and the figure caption
+% in this box.
+% - The order in which these \vbox-es are inserted is maintained.
+% - No more than two boxes are placed on one page: the first on the top
+% and the second on the bottom of the page.
+%
+%The proposed macro \figplace should create a \vbox with the correct layout
+%of the figure and then call \addfigure to put it in the insertionlist:
+%
+%\def\figplace#1#2#3#4{setbox0=\vbox{%
+%% here call macros to place figure and caption
+%}
+%\addfigure0}
+%
+%Note that the space separating the figure from the text should not
+%be included in the \vbox. The skipregister \figureskip is used for this
+%purpose.
+%
+%The macros are written in plain TeX, in fact the output routine given
+%here is an extension of the plain output routine (TeX-book page 364).
+%
+%The basic idea is that figures that won't fit on the current page
+%are kept on a list (the \box \figlist). This list is checked after
+%a \shipout and if not empty a maximum of two \vboxes is inserted
+%(using plains \topins) for the next page. As the insertions are \vboxes
+%it is easy to split the insertion and put one at the top and one at
+%the bottom of the page.
+%
+%Two further refinements should be mentioned here.
+%1) If the figures on a page take so much room that less than a specified
+%amount of space (given in dimen register \minpagesize) is left for
+%the text, this text is shifted through to the next page.
+%2) By inserting a \vbox with height \vsize (created by \vbox to \vsize..)
+%a page insert is created. No extra \figureskip will be include in this case.
+%
+%I have tested these macros with real input (16 pages with on the first
+%page the insertion of several figures) and it seems to work on the moment.
+%However, I'm not a TeX guru and I would expect that these macros can be
+%improved. One of the problems left is te fact that \addfigures must
+%be called in horizontal mode ( \vadjust won't work). I would therefore
+%apreciate comments, both on the macros as they stand and on how this
+%contributes to the Challenge.
+%
+%Joost Zalmstra.
+%
+%jjaz%nat.vu.nl@hearn.bitnet
+\newbox\figlist
+\newcount\figuresonpage \figuresonpage=0
+\newcount\figuresonlist \figuresonlist=0
+\newskip\figureskip \figureskip=1.2 pc plus 1 pc
+\newdimen\pagesize
+\newdimen\minpagesize \minpagesize=5 pc
+\newdimen\figuresizeonpage
+
+\def\addfigure#1{% add figure in box #1 to the document
+ \ifnum\figuresonpage>1 % allready two figures on this page
+ \addtolist{#1}% % so save for later
+ \else
+ \ifnum\figuresonlist>0 % figlist is not empty
+ \addtolist{#1} % so save for later
+ \else % no figures left over, so try to fit this one
+ \dimen0=\ht#1
+ \ifdim\dimen0<\vsize% not a pagesize figure
+ \advance\dimen0 by \dp#1 % size of the box
+ \advance\dimen0 by \figureskip % extra space below or above
+ \fi
+ \advance\dimen0 by \pagetotal
+ \ifdim\dimen0>\pagegoal % no space on this page
+ \addtolist{#1} % so save for later
+ \else
+ \advance\dimen0 by \figuresizeonpage
+ \ifdim\dimen0>\dimen\topins % exceding maximum insertion size
+ \addtolist{#1} % so save for later
+ \else
+ \figureinsert{#1} % insert the figure
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\def\addtolist#1{% add box #1 to figlist
+ \global\setbox\figlist=\vbox{%
+ \nointerlineskip
+ \box#1
+ \unvbox\figlist}
+ \global\advance\figuresonlist by 1
+}
+
+\def\figureinsert#1{% insert figure on this page
+ \ifdim\ht#1<\vsize
+ \insert\topins{\vbox{%
+ \ifnum\figuresonpage=0
+ \unvbox#1\vskip\figureskip % skip below the figure
+ \else
+ \vskip\figureskip\unvbox#1 % skip above the figure
+ \fi
+ }}
+ \else
+ \pageinsert
+ \unvbox#1
+ \endinsert
+ \fi
+ \global\advance\figuresonpage by 1
+ \global\advance\figuresizeonpage by \ht#1
+ \global\advance\figuresizeonpage by \dp#1
+ \global\advance\figuresizeonpage by \figureskip
+}
+\def\checkfiglist{% see if there is a figure in the list that will
+ % fit on the next page
+ \ifnum\figuresonlist>0
+ \global\setbox\figlist=\vbox{%
+ \unvbox\figlist
+ \setbox0=\lastbox
+ \global\advance\dimen0\ht0
+ \ifdim\ht0<\vsize
+ \global\advance\dimen0 by \dp0
+ \global\advance\dimen0 by \figureskip
+ \fi
+ \ifdim\dimen0>\vsize
+ \vbox{\box0} % no room ; replace the figure
+ \else
+ \ifdim\dimen0>\dimen\topins
+ \vbox{\box0}
+ \else
+ \global\advance\figuresonlist by -1
+ \fi
+ \fi
+ \global\setbox0=\box0
+ }
+ \else
+ {\setbox1=\box0 % make box0 void
+ \global\setbox0=\box0}
+ \fi
+}
+% Borrowing the macros from plain TeX
+
+\catcode`@=11
+\output{\myoutput}
+\def\myoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%
+ \advancepageno
+ \global\figuresonpage=0
+ \dimen0=0pt
+ \global\figuresizeonpage = 0pt
+ \checkfiglist % check if there is figure waiting and return it in box 0
+ \ifvoid0 % nothing left
+ \else
+ \figureinsert0% insert this figure
+ \checkfiglist % check for a second figure
+ \ifvoid0\else
+ \figureinsert0
+ \fi
+ \fi
+ \ifvoid255\else\unvbox255\penalty\outputpenalty\fi % unused page back on list
+ \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
+
+\def\pagecontents{%
+ \ifnum\figuresonpage>0 % check for insertion of figures
+ \unvbox\topins % place the figure(s) on top
+ \ifnum\figuresonpage=2
+ \setbox0=\lastbox % remove the second figure
+ \fi
+ \setbox1=\lastbox
+ \unvbox1
+ \fi
+% Check box 255
+ \pagesize=\ht255
+ \advance\pagesize by \dp255 % determine size of box 255
+ \ifdim\pagesize>\minpagesize
+ \dimen@=\dp255 \unvbox255 % the real page contents
+ \else
+ \message{tekstsize = \the\ht255, \the\dp255}
+ \ifdim\ht255=0pt % box is empty
+ \else
+ \vfil % to small so leave for next page
+ \fi
+ \fi
+%
+ \ifnum\figuresonpage=2
+ \box0 % the second figure
+ \fi
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins\fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+
+\catcode`@=12 % at signs no longer letters
diff --git a/macros/plain/contrib/misc/fixpdfmag.tex b/macros/plain/contrib/misc/fixpdfmag.tex
new file mode 100644
index 0000000000..04e25b7a9c
--- /dev/null
+++ b/macros/plain/contrib/misc/fixpdfmag.tex
@@ -0,0 +1,36 @@
+% fixpdfmag.tex
+% Author: Javier Bezos, 2007
+%
+% This is Public Domain. You are free to use, copy, modify,
+% distribute or whatever you want without restrictions. It is
+% unsupported, so please, do not contact the author, just
+% modify the file.
+%
+% Unfortunately, pdftex has changed recently its behaviour and
+% now the page size is affected by \magnification, usually not a
+% wanted effect. It has been proposed to modify Plain TeX when
+% used with pdftex, by making a few changes in the pdftex.ini
+% file, but many people do not know or simply do not want to
+% modify Plain TeX or a custom made format. This file provides
+% an alternative which requires to modify the documents, as
+% the following example illustrates:
+%
+% \magnification3000
+% \input fixpdfmag % <- after \magnification
+%
+% Hello
+% \bye
+%
+% If you are using a custom page size, it is preserved,
+% as it just converts pt units to truept ones.
+
+\ifx\pdfpageheight\undefined\else
+ \begingroup
+ \catcode`\@=11
+ \global\pdfpageheight\expandafter\getf@ctor\the\pdfpageheight truept
+ \global\pdfpagewidth\expandafter\getf@ctor\the\pdfpagewidth truept
+ \global\pdfhorigin\expandafter\getf@ctor\the\pdfhorigin truept
+ \global\pdfvorigin\expandafter\getf@ctor\the\pdfvorigin truept
+ \endgroup
+\fi
+\endinput \ No newline at end of file
diff --git a/macros/plain/contrib/misc/fnote.tex b/macros/plain/contrib/misc/fnote.tex
new file mode 100644
index 0000000000..6591cfc1e9
--- /dev/null
+++ b/macros/plain/contrib/misc/fnote.tex
@@ -0,0 +1,20 @@
+%%% fnote.tex ----------------cut here------------------------------------------
+\catcode`\@=11
+\def\vfootnote#1{\insert\footins\bgroup
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \baselineskip=\normalbaselineskip % necessary for single space
+ % footnotes with double space
+ % text
+ \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+ \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
+ \textindent{#1}\footstrut\futurelet\next\fo@t}% Change \textindent for
+ % different footnote styles
+\newcount\footnum
+ \footnum=0
+\def\fnote{\advancefootnum
+ \footnote\fn@m}
+\def\advancefootnum{\advance\footnum by 1}
+\def\fn@m{{$^{\number\footnum}$}}
+\catcode`\@=12
+%%%---------------------Cut here------------------------------------------------
diff --git a/macros/plain/contrib/misc/fnpara.tex b/macros/plain/contrib/misc/fnpara.tex
new file mode 100644
index 0000000000..735671e4d4
--- /dev/null
+++ b/macros/plain/contrib/misc/fnpara.tex
@@ -0,0 +1,116 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% FNPARA.TEX based on D. E. Knuth's "Dirty Tricks" macros from pages
+% 398--400 of The TeXbook.
+% Dominik Wujastyk, September 15, 1988.
+%
+% Set the footnote text font here:
+%
+\font\footnotesize=cmr8
+%
+% Set the font for the footnote numbers at the bottom of the page here
+%
+\font\footnumberfont=cmbx8
+%
+% Set any text to follow each footnote here:
+%
+\def\endnotetext,$\parallel$\hskip.5em-
+%
+% Switch off above endnote text, for comparison:
+%
+\let\endnotetext=\relax
+%
+% Normal @-character macro lock:
+%
+\catcode`\@=11
+%
+% Initialize counters:
+%
+\newcount\footno
+\footno=0
+%
+% Clever code for \getfactor (The TeXbook, p.375):
+%
+,\catcode`p=12 \catcode`t=12 \gdef\\#1pt,#1--
+\let\getfactor=\\
+%
+% Set space to follow footnote text:
+%
+\newskip\footglue \footglue=1em plus.3em minus.3em
+%
+% Set leading of footnotes:
+%
+\newdimen\footnotebaselineskip \footnotebaselineskip=10pt
+%
+% Calculate \fudgefactor (ratio of \baselineskip to \hsize):
+%
+\dimen0=\footnotebaselineskip \multiply\dimen0 by 1024
+\divide \dimen0 by \hsize \multiply\dimen0 by 64
+\xdef\fudgefactor,\expandafter\getfactor\the\dimen0 -
+%
+% Redefine footnotes to be automatically numbered:
+%
+\def\footnote,\global\advance\footno by 1
+ \let\@sf=\empty%
+ \ifhmode\edef\@sf,\spacefactor=\the\spacefactor-\/\fi%
+$N,\the\footno-$\@sf\vfootnote-
+\def\vfootnote#1,\insert\footins,\floatingpenalty=20000
+ \footnotesize \setbox0=\hbox,%
+ ,\footnumberfont \the\footno\penalty10000\hskip.5em-#1%
+\penalty-10\hskip\footglue\endnotetext-
+ \dp0=0pt \ht0=\fudgefactor\wd0 \box0--
+%
+% Assume \plainoutput routine, but change \pagecontents:
+%
+\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
+ \global\setbox1=\vbox,\makefootnoteparagraph-\unvbox1\fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi-
+\def\footnoterule,\kern-3\p@
+ \hrule width 2truein \kern 2.6\p@- % the \hrule is .4pt high
+%
+% Box manipulation code from The TeXbook, p.399:
+%
+\def\makefootnoteparagraph,\unvbox\footins \makehboxofhboxes
+ \setbox0=\hbox,\unhbox0 \removehboxes-
+ \baselineskip=\footnotebaselineskip\noindent\unhbox0\par -
+\def\makehboxofhboxes,\setbox0=\hbox,-
+ \loop\setbox2=\lastbox
+ \ifhbox2 \setbox0=\hbox,\box2\unhbox0-\repeat-
+\def\removehboxes,\setbox0=\lastbox
+ \ifhbox0,\removehboxes-\unhbox0 \fi-
+%
+% Reimpose @-lock.
+%
+\catcode`\@=12
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%Sample text:
+%
+\vsize 6in
+\voffset 2in
+\hsize 4in
+\hoffset 1in
+
+The entire set of footnotes could be combined into a single paragraph, with
+generous spacing between the individual items. For example, the ten footnotes
+we have been considering might appear as follows:\footnote,First footnote.-
+And some more.\footnote,Second footnote. (Every once in a~while a long
+ footnote might occur, just to make things difficult.)-
+And some more.
+And some more.\footnote,Third footnote.-$N,$\footnote,Fourth footnote.-
+And some more.
+And some more.\footnote,Fifth footnote.
+ (This is incredibly boring, but it's just an
+example.)-$N,$\footnote,Another.-
+And some more.
+And some more.
+And some more.\footnote,And another.-$N,$\footnote,Ho
+hum.-$N,$\footnote,Umpteenth
+footnote.-$N,$\footnote,Oodles of them.-
+
+\bye
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/plain/contrib/misc/fontbl.tex b/macros/plain/contrib/misc/fontbl.tex
new file mode 100644
index 0000000000..8582a6b0e8
--- /dev/null
+++ b/macros/plain/contrib/misc/fontbl.tex
@@ -0,0 +1,173 @@
+
+% The essential parts of this macro appeared in {\it TUGboat, Volume 3, No. 1}
+% in the note: "DISPLAY OF A FONT IN TABLE FORM." by Roger L. Beeman.
+% This version was rewritten by Pierre A. MacKay to take advantage of
+% the new features of \TeX82. It is now interactive, and prompts the
+% user for a font name. If the font is a text font, a sample paragraph
+% is set, which is justified to three times the lower-case alphabet length
+% if that will fit in the overall \hsize. (If the font is a fixed-width
+% font such as "amtt", the sample is set with a ragged right margin.)
+% The sample is leaded 20% over the stated point-size, so that a
+% 10-point font is set 10 on 12. The length of both upper and lower
+% case alphabets is given, along with the height and depth of the
+% lower case alphabet and the height of the upper case alphabet. These
+% last dimensions can be very useful for calculating the size of
+% close-fitting boxes and struts.
+%
+% Non-text fonts are displayed in table form only.
+%
+% If you have \TeX\ running with "plain.tex" loaded,
+% you can start this macro by typing "tex fontbl" and you will be prompted
+% for the rest
+%
+\baselineskip 0pt \lineskip 0pt
+\vsize 8.5truein
+\let\sl=\tensl
+\newcount\bighand\newcount\littlehand
+\bighand=\time\divide\bighand by 60
+\littlehand=\bighand\multiply\littlehand by -60
+\advance\littlehand by\time
+\def\makedateline{\line{{\sl \fontname scaled \\magstep\step\hfil
+ \the\bighand:\ifnum\littlehand<10{0}\fi
+ \the\littlehand\ - \the\month/\the\day/\the\year}}}
+
+\output{\shipout\vbox{\hrule width1em\vskip 1ex
+\makedateline\vskip1em\box255\vskip1em
+\hrule width1em}\global\advance\count0 by 1}
+
+\newdimen\maxwide
+\dimendef\vu=\maxwide
+\setbox 9\hbox{\sl 0}
+
+\def\spike{\hbox to 0pt{\vbox to 1\ht9{}}}
+\def\cell#1{\hbox to \vu{\hfill\char'#1\hfill}\vrule}
+\def\label#1{\vbox to 1\ht8{\vfill
+ \hbox to 35pt{\hfill\sl '#10\hskip1em}\vfill}\vrule}
+
+\def\seprow{\def\m{\hskip \vu{}\vrule height 2pt}\hbox{\m\m\m\m\m\m\m\m}}
+\def\cellrow#1{\setbox 8\vbox{\seprow\hbox{\spike\ignorespaces
+ \cell{#10}\cell{#11}\cell{#12}\cell{#13}\ignorespaces
+ \cell{#14}\cell{#15}\cell{#16}\cell{#17}\ignorespaces
+ \hfill}\seprow\hrule}\hbox{\label{#1}\box8}}
+
+\def\lcol#1{\hbox to \vu{\hfill{\sl #1}\hfill}\hskip .4pt}
+\def\chw#1{\hbox{\char'#1}}
+
+\def\colw#1{\vbox{\chw{#10}
+ \chw{#11}
+ \chw{#12}
+ \chw{#13}
+ \chw{#14}
+ \chw{#15}
+ \chw{#16}
+ \chw{#17}}}
+
+\def\setw#1{\vbox{\colw{#10}
+ \colw{#11}
+ \colw{#12}
+ \colw{#13}
+ \colw{#14}
+ \colw{#15}
+ \colw{#16}
+ \colw{#17}}}
+\def\getw{\setbox 0\vbox{\setw0\setw1\hbox to 1\wd9{}
+ \hbox to 1em{}}\vu=1.625\wd0}
+
+\def\table#1{\font\tablefont=#1 scaled \scale
+\tablefont\getw\null\vfil
+\hbox to 6in{\hfil\ignorespaces
+\vbox{\ifdim\fontdimen2\tablefont>0pt \hbox{\hskip35pt \fontname \hfil} \fi
+ \vskip10pt
+ \hbox{\hskip35pt\lcol0\lcol1\lcol2\lcol3\lcol4\lcol5\lcol6\lcol7}
+ \vskip 4 pt
+ \hbox{\hskip35pt\vbox{\hrule width 8\vu}\vbox{\hrule width 3.6pt}}
+ \cellrow{00}\cellrow{01}\cellrow{02}\cellrow{03}
+ \cellrow{04}\cellrow{05}\cellrow{06}\cellrow{07}
+ \cellrow{10}\cellrow{11}\cellrow{12}\cellrow{13}
+ \cellrow{14}\cellrow{15}\cellrow{16}\cellrow{17}}\ignorespaces
+\hss}}
+\def\tblraggedright{\rightskip0pt plus5em}
+
+\global\def\test{}
+\global\def\fin{END }
+\global\def\lcfin{end }
+\global\def\halfstep{half }
+\def\\{$\backslash$}
+\def\doit{
+\baselineskip 0pt \lineskip 0pt
+\message{Type a valid font name, or type END to quit :}
+\read16 to\fontname
+\ifx\fontname\lcfin\let\test=\fin\else\global\let\test=\fontname\fi
+\ifx \fin\test \relax
+\else \message{Scaled to what magstep? (half, or 0..5):}
+\read16 to\step
+\ifx \halfstep\step \global\def\scale{1095 } \else
+ \global\def\scale{\ifcase\step 1000\or
+ 1200\or 1440\or 1728\or 2074\or 2488\fi\relax}
+ \fi
+\message{Graphing font \fontname}
+ \table{\fontname}
+\rightskip 0pt % So that one ragged right font doesn't affect all
+% following fonts
+\vskip 1em
+\ifdim\fontdimen2\tablefont>0pt
+ \setbox8=\hbox{abcdefghijklmnopqrstuvwxyz}
+ \setbox7=\hbox{ABCDEFGHIJKLMNOPQRSTUVWXYZ}
+ \global\dimen8=1\wd8\global\dimen7=.5\hsize
+ \global\dimen5=1\ht8\global\dimen4=1\dp8\global\dimen3=1\ht7
+ \edef\length{\the\dimen8}
+ \global\dimen6=\dimen8\global\multiply\dimen6 by 3
+ \ifdim\dimen6>\hsize \global\dimen6=\hsize \fi
+ \ifdim\fontdimen3\tablefont=0pt \tblraggedright
+ \global\advance\dimen6 by -40pt \fi
+ \vskip 1em
+ \noindent
+ \ifdim\dimen8<\dimen6
+ \line{\unhbox8\hfil }
+ \vskip 1ex \fi
+ \centerline{{\rm Alphabet length \length. Quad is \the\fontdimen6\tablefont}}
+ \vskip .25em
+ \centerline{{\rm Lower case height is \the\dimen5 ; depth is \the\dimen4}}
+ \vskip 1em
+ \global\dimen8=1\wd7 \edef\length{\the\dimen8}
+ \noindent
+ \ifdim\dimen8<\dimen6
+ \line{\unhbox7 \hfil}
+ \vskip 1ex \fi
+ \centerline{{\rm Alphabet length \length ; height \the\dimen3}}
+ \vskip 1em \vfil
+ \vbox{\hsize \dimen6
+ \baselineskip 1.2em
+ \parskip .15em
+ \lineskip .2em
+
+The design of low-resolution typefaces is complicated by the need
+to achieve two different and rather incompatible ends. A font which is
+exclusively intended for Office Automation equipment should be designed
+to make the very best use of that environment. Its proportions, balance,
+shading and letter-spacing can and indeed must be fitted to exact
+pixel-bound\-aries, whe\-ther or not the refinements of anti-aliasing are
+used.
+
+A low-resolution font which was created primarily as the proof-copy
+imitation of an associated high-resolu\-tion font will never be quite
+so precisely matched to its environment. Its contours will necessarily be
+determined by exact pixel-boundaries, but often not in the way we might
+prefer. It need not be sloppy, but it can never be so well tuned as
+a font of the first variety. It is a poor Platonic reflection of an
+idea that cannot be fully known except in the dazzling light
+of high-resolution typesetting. The vast majority of fonts produced
+with METAFONT belong to this second variety. A low-resolution
+METAFONT character should be judged for what it is, and not for what
+it has never claimed to be.
+}
+\fi
+
+\vfill\penalty-10000
+
+\doit
+\fi
+}
+
+\doit
+\bye
diff --git a/macros/plain/contrib/misc/fontchart.tex b/macros/plain/contrib/misc/fontchart.tex
new file mode 100644
index 0000000000..d598631118
--- /dev/null
+++ b/macros/plain/contrib/misc/fontchart.tex
@@ -0,0 +1,108 @@
+% fontchart.tex
+%
+% make a (fairly large) font chart
+%
+%
+% 1990-01-06 ???
+%
+% First version?
+%
+% 2001-07-18 Werner Lemberg <wl@gnu.org>
+%
+% Suppress boundary ligatures.
+
+\newlinechar=`@
+\message{@Name of the font to chart = }
+\read-1 to \fontname
+
+\font\f=\fontname at .75in
+\f
+
+% Here's the best way I know to discover character height and depth
+% when they are possibly negative.
+\fontdimen5\f=-10000pt % a new (rather small) xheight
+\textfont0=\f
+\newdimen\h \newdimen\d % will be set to the character's height, depth
+\def\htdp#1{\setbox0=\hbox{\noboundary\char#1\noboundary}\h=-\ht0
+ \setbox0=\hbox{\noboundary\accent#1\char#1\noboundary}\advance\h\ht0 \advance\h-10000pt
+ \setbox0=\null \wd0=-10000pt % in case the character has a charlist!
+ \setbox0=\hbox{$\mathaccent#1{\box0}$}%
+ \d=\ht0 \advance\d-10000pt \advance\d-\h}
+
+% (By the way, my previous best was this:
+% \textfont15=\f % use family "F
+% \fontdimen8\tenex=0pt % set defaultrulethickness zero
+% \setbox1=\null \ht1=-10000pt \setbox2=\null \dp3=-10000pt
+% \newdimen\d \newdimen\h \newcount\n
+% \n=#1 \advance\n"F00
+% \setbox0=\hbox{$\radical\n{\copy1}$}
+% \d=\dp0 \advance\d-5000pt \advance\d\d %\showthe\d
+% \setbox0=\hbox{$\radical\n{\copy2}$}
+% \h=\ht0 \advance\h-5000pt \advance\h-.5\d
+% \ifdim\h>0pt \h=.5\h \fi
+% ....very tricky! But it works only when height+depth is positive.)
+
+\tracinglostchars=0
+\nopagenumbers
+
+\def\testrow#1#2{\setbox0=\hbox{\penalty1\def\\{\char'#1#2}%
+ \hbox{\noboundary\\0\noboundary}%
+ \hbox{\noboundary\\1\noboundary}%
+ \hbox{\noboundary\\2\noboundary}%
+ \hbox{\noboundary\\3\noboundary}%
+ \hbox{\noboundary\\4\noboundary}%
+ \hbox{\noboundary\\5\noboundary}%
+ \hbox{\noboundary\\6\noboundary}%
+ \hbox{\noboundary\\7\noboundary}%
+ \global\chardef\p=\lastpenalty}} % p=1 if none there
+
+\raggedbottom
+\baselineskip=1in
+\topskip=.75in
+\newdimen\w \w=.75in
+\headline={\vtop{\hbox{\tt\fontname\unskip, page \folio\hfil}
+ \kern-.75in\unitsdigits}\hss}
+\footline={\unitsdigits\hss}
+\def\unitsdigits{\hbox{\kern.3in \tt
+ \hbox to\w{\ \ 0\hss}%
+ \hbox to\w{\ \ 1\hss}%
+ \hbox to\w{\ \ 2\hss}%
+ \hbox to\w{\ \ 3\hss}%
+ \hbox to\w{\ \ 4\hss}%
+ \hbox to\w{\ \ 5\hss}%
+ \hbox to\w{\ \ 6\hss}%
+ \hbox to\w{\ \ 7\hss}}}
+
+\def\row#1#2{\testrow#1#2%
+\ifnum\p=0\hbox{\hbox to.3in{\tt#1#2\hfil}%
+ \mod#1#20\mod#1#21\mod#1#22\mod#1#23\mod#1#24\mod#1#25\mod#1#26\mod#1#27%
+ \hbox to.3in{\tt\hfil#1#2}}\fi}
+
+\newdimen\pixel \pixel=.00333333in
+\def\mod#1#2#3{\chardef\c='#1#2#3 \htdp\c
+ \setbox0=\hbox{\penalty1\noboundary\c\noboundary\global\chardef\p=\lastpenalty}%
+ \ifnum\p=1 \hbox to\w{}\else
+ \setbox2=\hbox{\noboundary\c\noboundary\/}%
+ \hbox to\w{\kern-\pixel \vrule width\pixel height\h depth\d
+ \copy\leftbox\copy0\copy\rightbox
+ \vrule width\pixel height\h depth\d \kern-\pixel \kern-\wd0
+ \raise\h\vbox{\hrule height\pixel width\wd0}\kern-\wd0
+ \lower\d\vbox{\hrule height0pt depth\pixel width\wd0}\kern-\wd0
+ \ifdim\wd2>\wd0 \kern\wd2\raise\h\copy\icbox \fi
+ \hss}\fi}
+
+\newbox\leftbox % marking the baseline at the left
+\setbox\leftbox=\hbox{\kern-\pixel\vrule width\pixel height4pt
+ \vrule height0pt depth\pixel width4pt \kern-4pt}
+\newbox\rightbox % marking the baseline at the right
+\setbox\rightbox=\hbox{\kern-4pt\vrule height0pt depth\pixel width4pt
+ \vrule width\pixel height4pt \kern-\pixel}
+\newbox\icbox % the mark of an italic correction
+\setbox\icbox=\hbox{\kern-4pt\vrule height\pixel width4pt depth0pt
+ \vrule width\pixel depth4pt}
+
+\row00 \row01 \row02 \row03 \row04 \row05 \row06 \row07
+\row10 \row11 \row12 \row13 \row14 \row15 \row16 \row17
+\row20 \row21 \row22 \row23 \row24 \row25 \row26 \row27
+\row30 \row31 \row32 \row33 \row34 \row35 \row36 \row37
+\bye
diff --git a/macros/plain/contrib/misc/fortran.tex b/macros/plain/contrib/misc/fortran.tex
new file mode 100644
index 0000000000..93aa198de9
--- /dev/null
+++ b/macros/plain/contrib/misc/fortran.tex
@@ -0,0 +1,42 @@
+%%%---Cut Here--------------------------------------------------------
+%%% File: Fortran.TeX
+% This is a file of commands for printing out programs using TeX
+% -- see DIRTY TRICKS in TeXbook
+%
+% This version is designed to print source code at 9 point
+% fitting an 80 column line into a 6 true inch width with
+% 8 point line numbers before each line.
+% It handles TAB (^I) characters almost the same as DEC
+%
+% usage:
+% \input fortran % put this early in the file
+% \listing{file.ext} % use dev:[dir] if you wish
+%
+% B.H. Toby 8/86
+%
+\newcount\lineno
+\font\Alisttt=cmtt9 at 9 truept
+\font\Alistrm=cmr8 at 8 truept
+\def\uncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials}
+\def\listing#1{\par\begingroup\setupverbatim\input#1 \endgroup}
+\def\setupverbatim{
+ \Alisttt\baselineskip= 8.5truept\lineskip=1truept
+ \lineskiplimit=1truept\topskip=0pt
+ \lineno=0
+ \def\par{\leavevmode\egroup\box0\endgraf}
+ \obeylines \uncatcodespecials \obeyspaces
+ \catcode`\`=\active \catcode`\^^I=\active
+ \everypar{\advance\lineno by1
+ \llap{\Alistrm\the\lineno\ \ }\startbox}}
+\newdimen\w \setbox0=\hbox{\Alisttt\space} \w=8\wd0
+\def\startbox{\setbox0=\hbox\bgroup}
+{\catcode`\^^I=\active
+ \gdef^^I{\leavevmode\egroup
+ \dimen0=\wd0
+ \divide\dimen0 by\w
+ \multiply\dimen0 by\w
+ \advance\dimen0 by\w
+ \wd0=\dimen0 \box0 \startbox}}
+{\obeyspaces\global\let =\ }
+{\catcode`\`=\active \gdef`{\relax\lq}}
+%%%---Cut Here--------------------------------------------------------
diff --git a/macros/plain/contrib/misc/gkpmac.tex b/macros/plain/contrib/misc/gkpmac.tex
new file mode 100644
index 0000000000..cdcd7b9c08
--- /dev/null
+++ b/macros/plain/contrib/misc/gkpmac.tex
@@ -0,0 +1,859 @@
+\tracingpages=1 % TEMPORARY!
+% Macros for `Concrete Mathematics'
+\ifx\gkpmac\fmtversion\endinput\else\let\gkpmac=\fmtversion\fi
+
+% Fonts for regular text
+
+\font\textrm=ccr10 % roman
+\font\textit=ccti10 % italic (emphasis)
+\font\textsl=ccsl10 % slanted (titles)
+\font\textbf=cmbx10 % bold
+\font\textcsc=cccsc10 % caps and small caps
+\font\oldsty=ccmi10 % equation numbers
+
+% Fonts for regular math
+% I'm setting \fontdimen2 to zero because AMS forgot to do it;
+% they may have fixed the problem in the meantime, but no harm is done
+
+\font\mathtext=ccr10
+ \font\mathsubtext=ccr7
+ \font\mathsubsubtext=ccr5
+\font\mathlet=eurm10 \fontdimen2\mathlet=0pt
+ \font\mathsublet=eurm7 \fontdimen2\mathsublet=0pt
+ \font\mathsubsublet=eurm5 \fontdimen2\mathsubsublet=0pt
+ \skewchar\mathlet='177 \skewchar\mathsublet='177 \skewchar\mathsubsublet='177
+\font\mathsym=cmsy10
+ \font\mathsubsym=cmsy7
+ \font\mathsubsubsym=cmsy5
+ \skewchar\mathsym='60 \skewchar\mathsubsym='60 \skewchar\mathsubsubsym='60
+\font\mathext=cmex10
+ \font\mathsubext=cmex10
+ \font\mathsubsubext=cmex10
+\font\mathscr=euxm10\fontdimen2\mathscr=0pt
+ \font\mathsubscr=euxm7 \fontdimen2\mathsubscr=0pt
+ \font\mathsubsubscr=euxm5 \fontdimen2\mathsubsubscr=0pt
+ \skewchar\mathscr='60 \skewchar\mathsubscr='60 \skewchar\mathsubsubscr='60
+\font\mathfr=eufm10\fontdimen2\mathfr=0pt
+ \font\mathsubfr=eufm7 \fontdimen2\mathsubfr=0pt
+ \font\mathsubsubfr=eufm5 \fontdimen2\mathsubsubfr=0pt
+\font\matheuex=euex10\fontdimen2\matheuex=0pt
+
+\font\eulerbf=eurb10 \fontdimen2\eulerbf=0pt % not hooked in to these macros
+
+% Fonts for graffiti
+
+\font\gtext=ccslc9
+\font\goldstyle=ccmic9
+ \fontdimen3\gtext=0pt \fontdimen4\gtext=0pt % no stretch or shrink
+\font\gmathtext=ccr9
+ \font\gmathsubtext=ccr6
+ \font\gmathsubsubtext=ccr5
+\font\gmathlet=eurm10 scaled 900 \fontdimen2\gmathlet=0pt
+ \font\gmathsublet=eurm7 scaled 857 \fontdimen2\gmathsublet=0pt
+ \font\gmathsubsublet=eurm5 \fontdimen2\gmathsubsublet=0pt
+ \skewchar\gmathlet='177 \skewchar\gmathsublet='177
+ \skewchar\gmathsubsublet='177
+\font\gmathsym=cmsy9
+ \font\gmathsubsym=cmsy6
+ \font\gmathsubsubsym=cmsy5
+ \skewchar\gmathsym='60 \skewchar\gmathsubsym='60 \skewchar\gmathsubsubsym='60
+\font\gmathext=cmex9
+ \font\gmathsubext=cmex9
+ \font\gmathsubsubext=cmex9
+\font\gmathscr=euxm10 scaled 900 \fontdimen2\gmathscr=0pt
+ \font\gmathsubscr=euxm7 scaled 857 \fontdimen2\gmathsubscr=0pt
+ \font\gmathsubsubscr=euxm5 \fontdimen2\gmathsubsubscr=0pt
+ \skewchar\gmathscr='60 \skewchar\gmathsubscr='60 \skewchar\gmathsubsubscr='60
+\font\gmathfr=eufm10 scaled 900 \fontdimen2\gmathfr=0pt
+ \font\gmathsubfr=eufm7 scaled 857 \fontdimen2\gmathsubfr=0pt
+ \font\gmathsubsubfr=eufm5 \fontdimen2\gmathsubsubfr=0pt
+\font\gmatheuex=euex9 \fontdimen2\gmatheuex=0pt
+
+% Fonts for headings, etc.
+
+\font\chapfont=cmbxcd10 scaled 8000
+\font\title=cmbx10 scaled \magstep5
+\font\subtitle=cmbx10 scaled 1315 % that's magstep 1.5
+\font\subsubtitle=cmbxsl10
+\font\runhead=cmbx9
+\font\foliofont=cmr9
+\font\gtfont=cmmi9 % for the \t accent
+\font\ninesl=ccsl9 % used in the index only
+
+% Normal text conventions
+
+\catcode`@=11 % borrow the private macros of PLAIN (with care)
+\def\wlog#1{} % don't put allocation info into the log
+
+\hsize=28pc
+\vsize=45.25pc
+\parindent=20pt
+\baselineskip=13pt
+
+\let\sc=\textcsc
+\let\bf=\textbf
+\def\textindent#1{\noindent\hbox to\parindent{\bf#1\hfil}\ignorespaces}
+\def\exitem{\hangindent2\parindent \textindent}
+
+\textfont0=\mathtext
+ \scriptfont0=\mathsubtext
+ \scriptscriptfont0=\mathsubsubtext
+\textfont1=\mathlet \let\tfont=\teni
+ \scriptfont1=\mathsublet
+ \scriptscriptfont1=\mathsubsublet
+\textfont2=\mathsym
+ \scriptfont2=\mathsubsym
+ \scriptscriptfont2=\mathsubsubsym
+\textfont3=\mathext
+ \scriptfont3=\mathsubext
+ \scriptscriptfont3=\mathsubsubext
+\def\rm{\fam\z@\textrm}
+\def\it{\fam\itfam\textit} % \it is family 4, defined in PLAIN
+\def\sl{\textsl}
+\textfont\itfam=\textit
+\newfam\scrfam \ifnum\scrfam=8\relax\else\error\fi % family 8, script
+\textfont\scrfam=\mathscr
+ \scriptfont\scrfam=\mathsubscr
+ \scriptscriptfont\scrfam=\mathsubsubscr
+\def\scr{\fam8 }
+\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
+\newfam\frfam % family 9, fraktur
+\textfont\frfam=\mathfr
+ \scriptfont\frfam=\mathsubfr
+ \scriptscriptfont\frfam=\mathsubsubfr
+\def\frak{\fam9 }
+\newfam\euexfam % family 10, substitions for euler symbols
+\newfam\eqfam % family 11, cmr equal signs for Relbar (!)
+\font\teneq=cmr10 \textfont\eqfam=\teneq
+\font\nineeq=cmr9
+% I'm not using Relbar except in 9&10pt, so this family is very incomplete...
+
+\mathchardef\intop="1A52
+\mathchardef\ointop="1A48
+\mathchardef\coprod="1A60
+\mathchardef\prod="1A51
+\mathchardef\sum="1A50
+\mathchardef\braceld="A7A \mathchardef\bracerd="A7B
+\mathchardef\bracelu="A7C \mathchardef\braceru="A7D
+\mathchardef\infty="0A31
+
+\mathchardef\nearrow="3A25
+\mathchardef\searrow="3A26
+\mathchardef\nwarrow="3A2D
+\mathchardef\swarrow="3A2E
+\mathchardef\Leftrightarrow="3A2C
+\mathchardef\Leftarrow="3A28
+\mathchardef\Rightarrow="3A29
+\mathchardef\leftrightarrow="3A24 \mathcode`\^^W="3A24
+\mathchardef\leftarrow="3A20 \let\gets=\leftarrow \mathcode`\^^X="3A20
+\mathchardef\rightarrow="3A21 \let\to=\rightarrow \mathcode`\^^Y="3A21
+\def\uparrow{\delimiter"3A22378 } \mathcode`\^^K="3A22
+\def\downarrow{\delimiter"3A23379 } \mathcode`\^^A="3A23
+\def\updownarrow{\delimiter"3A6C33F }
+\def\Uparrow{\delimiter"3A2A37E }
+\def\Downarrow{\delimiter"3A2B37F }
+\def\Updownarrow{\delimiter"3A6D377 }
+\mathchardef\leftharpoonup="3A18
+\mathchardef\leftharpoondown="3A19
+\mathchardef\rightharpoonup="3A1A
+\mathchardef\rightharpoondown="3A1B
+
+\textfont\euexfam=\matheuex
+\scriptfont\euexfam=\mathsubsym % this is OK since I don't use all characters
+% of euex in subscripts/superscripts; otherwise I'd have to make euex7 and euex6
+\scriptscriptfont\euexfam=\mathsubsym % only for \mathchoice, not really chosen
+\mathcode`+="292B
+\mathcode`-="292D
+\mathcode`!="0921
+\mathcode`(="4928 \delcode`(="928300
+\mathcode`)="5929 \delcode`)="929301
+\mathcode`[="495B \delcode`[="95B302
+\mathcode`]="595D \delcode`]="95D303
+\mathcode`=="393D
+\mathchardef\Relbar="3B3D % we need the old = to match \Arrows
+\mathchardef\Gamma="7100
+\mathchardef\Delta="7101
+\mathchardef\Theta="7102
+\mathchardef\Lambda="7103
+\mathchardef\Xi="7104
+\mathchardef\Pi="7105
+\mathchardef\Sigma="7106
+\mathchardef\Upsilon="7107
+\mathchardef\Phi="7108
+\mathchardef\Psi="7109
+\mathchardef\Omega="710A
+\let\varsigma=\sigma \let\varrho=\rho % Euler doesn't have these
+\mathchardef\aleph="0840
+\def\rbrace{\delimiter"5867A09 } \let\}=\rbrace
+\def\lbrace{\delimiter"4866A08 } \let\{=\lbrace
+%\mathchardef\equiv="3811 \let\cong=\equiv % lowres bars weren't spaced right
+\mathchardef\leq="3814 \let\le=\leq
+\mathchardef\geq="3815 \let\ge=\geq
+\mathchardef\Re="083C
+\mathchardef\Im="083D
+\def\vert{\delimiter"86A30C }
+\def\backslash{\delimiter"86E30F }
+
+\setbox\strutbox=\hbox{\vrule height9pt depth4pt width\z@}%
+\newbox\bigstrutbox \newbox\biggstrutbox
+\setbox\bigstrutbox=\hbox{\vrule height11pt depth4pt width\z@}%
+\def\bigstrut{\relax\ifmmode\copy\bigstrutbox\else\unhcopy\bigstrutbox\fi}
+\setbox\biggstrutbox=\hbox{\vrule height17pt depth10pt width\z@}%
+\def\biggstrut{\relax\ifmmode\copy\biggstrutbox\else\unhcopy\biggstrutbox\fi}
+\rm
+
+\newmuskip\normalthick \normalthick=5mu plus 5mu
+\newmuskip\normalmedmu \normalmedmu=\medmuskip
+\newmuskip\displaythick \displaythick=10mu minus 3mu
+\everymath{\thickmuskip=\normalthick}
+
+\abovedisplayskip=8pt plus 3pt minus 2pt % there's 2pt more (opened up)
+\belowdisplayskip=10pt plus 3pt minus 2pt
+
+% displays not centered; all have capability of \eqalign
+\outer\def\begindisplay{\obeylines\startdisplay}
+{\obeylines\gdef\startdisplay#1
+ {\catcode`\^^M=5$$%
+ \advance\displayindent\parindent\advance\displaywidth-\parindent%
+ \openup2pt #1\halign\bgroup\span\preamble\cr}}
+\outer\def\enddisplay{\crcr\egroup$$}
+\jot=\z@ % we do our own opening up
+
+\def\displaymath{$\thickmuskip=\displaythick\displaystyle}
+\def\preamble{\hfil\displaymath{##}$&&\displaymath{{}##}$\hfil}
+\def\tablepreamble{\bigstrut\hfil$##$\hfil\ &\vrule##&&\quad\hfil$##$\hfil}
+\def\xbox{\qquad\hbox} % for third column of explanation
+
+\newcount\eqcount
+\def\equ(#1.#2){{\rm({\oldsty#1}.{\oldsty#2})}}
+\def\eq(#1){\equ(\chapno.#1)}
+\def\thiseq{\xdef\next{(\chapno.\number\eqcount)}\expandafter\equ\next}
+\def\eqno{\global\advance\eqcount 1 \global\everycr{\makeeqno\thiseq}}
+\newdimen\backup
+\def\makeeqno#1{\noalign{\global\everycr{}%
+ \advance\displaywidth\displayindent
+ \setbox0=\hbox to\displaywidth{\hfil#1}%
+ \backup=\prevdepth \advance\backup\ht0
+ \setbox0=\vbox{\kern-\backup\box0}\ht0=\z@ \dp0=\z@
+ \setbox0=\vbox{\box0}\unvbox0}} % that puts equation number on prev line!
+
+\newif\iftitle
+\newskip\chaptopspace \chaptopspace=1in minus 5pt
+\def\beginchapter#1 #2 \par{ % we should be at top of a page
+ \titletrue \eqcount=0
+ \ifodd\pageno
+ \rightline{\chapfont#1\kern-.05em}
+ \vskip\chaptopspace
+ \rightline{\title#2}
+ \moveleft7pc % this applies to the \vbox after the \fi
+ \else % left-hand page
+ \leftline{\kern-.05em\chapfont#1}
+ \vskip\chaptopspace
+ \leftline{\title#2} \fi
+ \vbox{\hrule width 35pc}
+ \def\chapno{#1} \edef\chaptitle{#2}
+ \mark{#1\enspace #2}
+ \smallskip\noindent}
+
+\def\beginsection#1 #2 \par{ % should not be first in the chapter
+ \backup=\lastskip % but should come on first or second page of chapter
+ \mark{#1\enspace #2} % because the mark gives running head on right page
+ \nobreak\vskip-\backup\penalty-200
+ {\subtitle\baselineskip=34pt
+ \noindent\hbox to2\parindent{#1\hfil}\uppercase{\kern-.05em#2}\par}
+ \nobreak\vskip5pt\noindent\hbox to2\parindent{}}
+
+\newcount\excount
+\def\beginexercises{\backup=\lastskip \excount=0
+ \mark{\chapno\enspace Exercises}
+ \nobreak\vskip-\backup\penalty-200
+ {\subtitle\baselineskip=34pt\noindent Exercises\par}\nobreak}
+
+{\catcode`\|=\active
+\gdef\table#1\tabref|#2|{\hrule height1pt width\hsize \kern2pt
+ \noindent\strut{\bf Table |#2|\enspace}#1\par
+ \hrule height.5pt width\hsize\tabref|#2|}}
+
+\def\medbr{\ifnum\lastpenalty>9999 \medskip \else\medbreak\fi}
+\def\subhead#1\par{\medbr
+ {\subsubtitle\noindent#1\par}\nobreak}
+\def\ex:{\par{\advance\medskipamount-1pt\medbr}%
+ \advance\excount 1 \item{\number\excount}}
+
+\def\dash---{\thinspace---\hskip.16667em\relax}
+\def\qback{\kern-.15em} % between , or . and ''
+\def\undertext#1{$\underline{\smash{\hbox{#1}}}$}
+\def\newline{\hfil\break}
+\def\Hint:{{\it Hint:\/}}
+\let\macron=\= % we will use \= for congruence relation
+\def\t#1{{\edef\next{\the\font}\tfont\accent"7F\next#1}}
+
+% Here's a definition that was corrected in plain.tex version 3.14159;
+% I'm keeping the old version here, because I had already been compensating
+% for its deficiencies in script and scriptscript styles; without this
+% buggy version, it would be hard for me to match the old pages precisely
+\def\bmod{\mskip-\medmuskip\mkern5mu
+ \mathbin{\rm mod}\penalty900\mkern5mu\mskip-\medmuskip}
+
+% Graffiti macros
+\chardef\other=12
+\newread\grfi \openin\grfi=\jobname.grf
+%\newwrite\grfo \immediate\openout\grfo=\jobname.grf % let's hope no conflict
+%% Hmmm...; that doesn't work on Unix.
+%% Here's my first solution, a kludge where I alternated between .grf and .gr
+%\newif\ifgrf \newwrite\grfo \newwrite\grfempty
+%\ifeof\grfi \grffalse
+%\else\read\grfi to\grfitest \ifeof\grfi \grffalse \else \grftrue \fi\fi
+%\ifgrf\else \openin\grfi=\jobname.gr
+% \ifeof\grfi\else\read\grfi to\grfitest \fi\fi
+%\immediate\openout\grfo=\jobname.gr\ifgrf\else f\fi
+%\immediate\write\grfo{} % an empty line will start a nonempty file (Unix only)
+%% and then at the end I said
+% \immediate\openout\grfempty=\jobname.gr\ifgrf f\fi % clear the input file
+%% That solution worked with the following original macros
+%\def\testnextgrf{{\def\do##1{\catcode`##1=\other}\dospecials
+% \global\read\grfi to\next}\expandafter\testgrf\meaning\next\testgrf}
+%\expandafter\def\expandafter\testgrf\meaning\empty#1 #2\testgrf{%
+% \setup#2!!!!!$\ifx\thisone\thatone\if#1R\Rtrue\else\Rfalse\fi\else\Rguess\fi}
+%% Anyway, here's my second approach to Unix: (order n^2 algorithm)
+\def\\{{\def\do##1{\catcode`##1=\other}\dospecials \endlinechar=-1 \let\eol=0
+ \gdef\grfmem{}
+ \expandafter\def\expandafter\gbbl\meaning\empty{}
+ \def\appgrf{\read\grfi to\g
+ \ifx\g\empty\else\xdef\grfmem{\grfmem\expandafter\gbbl\meaning\g\eol}\fi}
+ \def\next{\ifeof\grfi\let\next\relax\else\appgrf\fi\next}\next}}
+\\ % now \grfmem is "L aaaaa\eol R bbbbb\eol ... R zzzzz\eol".
+\def\testnextgrf#1 #2\eol#3\\{\gdef\grfmem{#3}\setup#2!!!!!$%
+ \ifx\thisone\thatone\if#1R\Rtrue\else\Rfalse\fi\else\Rguess\fi}
+\newwrite\grfo \immediate\openout\grfo=\jobname.grf % no conflict now
+
+\def\graffiti{% set up graffiti style
+ \hsize=6pc
+ \baselineskip=10pt \lineskip=0pt \lineskiplimit=0pt
+ \parindent=0pt
+ \mathsurround=1pt
+ \textfont0=\gmathtext
+ \scriptfont0=\gmathsubtext
+ \scriptscriptfont0=\gmathsubsubtext
+ \textfont1=\gmathlet \let\tfont=\gtfont
+ \scriptfont1=\gmathsublet
+ \scriptscriptfont1=\gmathsubsublet
+ \textfont2=\gmathsym
+ \scriptfont2=\gmathsubsym
+ \scriptscriptfont2=\gmathsubsubsym
+ \textfont3=\gmathext
+ \scriptfont3=\gmathsubext
+ \scriptscriptfont3=\gmathsubsubext
+\textfont\scrfam=\gmathscr
+ \scriptfont\scrfam=\gmathsubscr
+ \scriptscriptfont\scrfam=\gmathsubsubscr
+\textfont\frfam=\gmathfr
+ \scriptfont\frfam=\gmathsubfr
+ \scriptscriptfont\frfam=\gmathsubsubfr
+\textfont\euexfam=\gmatheuex
+\scriptfont\euexfam=\gmathsubsym % OK since I don't use all chars in this size
+\textfont\eqfam=\nineeq
+ \def\rm{\fam\z@\gtext}%
+ \let\oldsty=\goldstyle
+ \let\big=\ninebig
+ \setbox\strutbox=\hbox{\vrule height7.25pt depth2.75pt width\z@}%
+ \gtext
+ \rightskip=\z@ plus2em % ragged right
+ \tolerance=2000
+ \hyphenpenalty=300
+ \exhyphenpenalty=300
+ \doublehyphendemerits=100000
+ \finalhyphendemerits=\doublehyphendemerits
+ }
+\def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy
+ \left#1\vbox to7.25pt{}\right.\n@space$}}}
+\def\grafctr{\hbox to4.5pc{\hfil##\hfil}}
+
+\newif\ifR % does this entry go on a right-hand page?
+\def\Rguess{\def\ifR{\ifodd\pageno}}
+\long\def\g#1\g{\def\next{#1!!!!!}\expandafter\writegrf\meaning\next$%
+ \ifx\grfmem\empty\Rguess\else\expandafter\testnextgrf\grfmem\\\fi
+% pre-Unix, that line was \ifeof\grfi\Rguess\else\testnextgrf\fi
+ \setbox0=\vtop{\graffiti#1%
+ \write\m@ne\ifR{\Rcheck}\else{\Lcheck}\fi}% log file records successes
+ \ifvmode\kern-\prevdepth\kern-\ht0\dp0=\z@\nointerlineskip\bgroup
+ \else\dp0=\dp\strutbox\strut\vadjust{\kern-\dp\strutbox\kern-\ht0\fi
+ \ifR\moveleft7\else\moveright29\fi pc\box0}}
+\expandafter\def\expandafter\writegrf\meaning\empty#1#2#3#4#5#6${%
+ \write\grfo{\LorR #1#2#3#4#5}\def\thisone{#1#2#3#4#5}}
+\def\setup#1#2#3#4#5#6${\def\thatone{#1#2#3#4#5}}
+\def\LorR{\ifodd\pageno R \else L \fi}
+\def\Lcheck{\ifodd\pageno Bad guess!\fi}
+\def\Rcheck{\ifodd\pageno\else Bad guess!\fi}
+
+% Page layout
+\newif\ifpreprint \preprinttrue % should be false when making the final copy
+\newdimen\pageheight \pageheight=\vsize
+\newdimen\totheight \totheight=49.5pc
+\newdimen\folioht \setbox0=\hbox{\foliofont0} \folioht=\ht0
+\def\leftheadline{\hbox to35pc{\vbox to 10pt{}% strut to position the baseline
+ \llap{\kern-2pc\iftitle\leftcorner\else\foliofont\folio\fi\hfil}%
+ \iftitle\hfil\copyrite\else\runhead\uppercase\expandafter{\chaptitle}\hfil\fi}}
+\def\rightheadline{\hbox to35pc{\iftitle\copyrite\fi\hfil
+ \vbox to 10pt{}% strut to position the baseline
+ \runhead\uppercase\expandafter{\topmark}%
+ \rlap{\hfil\iftitle\rightcorner\else\foliofont\folio\fi\kern-2pc}}}
+\def\leftcorner{\vrule\vbox to\folioht{\hrule width9pt\vfil}}
+\def\rightcorner{\vbox to\folioht{\hrule width9pt\vfil}\vrule}
+\def\copyrite{\ifpreprint{\textfont2=\sevensy\sevenrm\copyright\ 1988
+ Addison-Wesley Publishing Company; all rights reserved}\fi}
+
+\def\onepageout#1{\escapechar=-1 % for writing \tabrefs
+ \shipout\vbox to\totheight{ % here we define one page of output
+ \offinterlineskip % butt the boxes together
+ \vbox to 2pc{ % this part goes on top of the regular pages
+ \ifodd\pageno \rightheadline\else\leftheadline\fi
+ \vfill} % this completes the \vbox to 2pc
+ \ifodd\pageno\moveright7pc\fi #1
+ \vfill
+ \iftitle \global\titlefalse % reset the titlepage switch
+ \ifodd\pageno \hbox to35pc{\hfil\foliofont\folio}
+ \else\hbox{\foliofont\folio}\fi\fi
+ \ifpreprint\ifinxmode\makeinxfooter\fi\fi
+ }
+ \advancepageno}
+
+\output{\onepageout{\pagebody}}
+
+\newbox\inxfootbanner
+\def\hours{\count0=\time \divide\count0 by60 % find the o'clock
+ \multiply\count0 by40 \advance\count0\time % convert to hhmm
+ \advance\count0 10000 \expandafter\gobbleone\number\count0\relax}
+\def\gobbleone1{}
+\setbox\inxfootbanner=\rlap{\hbox to 6.5in{\hrulefill\sevenrm\quad
+ Author's page proof produced by \TeX\ at
+ \hours\space on \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}}
+\def\makeinxfooter{\vbox to0pt{\kern10pt\copy\inxfootbanner\kern4pt
+ \rlap{\vbadness=\maxdimen \inxcolumns}\vss}}
+\def\inxcolumns{\ifvoid\inxbox\let\next\relax\else\let\next\contribcol\fi\next}
+\def\contribcol{\setbox0=\vsplit\inxbox to54pt
+ \vtop{\unvbox0}\kern20pt \inxcolumns}
+\def\inxstyle{\vrule height6pt depth2pt width\z@ \sevenrm}
+\splittopskip=6pt
+
+% Cross references
+
+% \ref{value}|name| gives value to |name|
+% \eqref|name| gives \eqcount to |name|
+% \exref|name| gives \excount to |name|
+% \tabref|name| gives appropriate page number to |name|
+% \refin foo inputs references from job foo (other than this job)
+% \showmissestrue if you want to see missing references
+
+\newif\ifshowmisses
+\def\vertical{|}
+\def\inref#1 #{\expandafter\def\csname\vertical#1\endcsname}
+
+\catcode`\|=\active
+\expandafter\def\expandafter\dospecials\expandafter{\dospecials\do\|}
+\newcount\defcount % number of old definitions not yet repeated
+\newcount\changecount % number of new definitions that are changed
+\newcount\miscount % number of unknown references
+
+\newread\tempin
+\def\refin#1 {\openin\tempin=#1.ref
+ \ifeof\tempin\closein\tempin
+ \else\closein\tempin \let|\inref \input#1.ref \let|\crossref \fi}
+
+{\let\|=\jobname
+ \def\def{\global\advance\defcount1 \gdef}\expandafter\refin\| }
+\newwrite\refo \immediate\openout\refo=\jobname.ref
+
+\def\ref#1|#2|{\xdef\temp{#1}\expandafter\dordef\csname\vertical#2\endcsname}
+\def\dordef#1{\ifx#1\temp \global\advance\defcount-1
+ \else\global\advance\changecount1 \global\let#1\temp\fi
+ {\escapechar=-1\immediate\write\refo{\noexpand#1{\temp}}}}
+\def\eqref{\ref{\number\eqcount}}
+\def\exref{\ref{\number\excount}}
+\def\tabref|#1|{\expandafter\pageref\csname\vertical#1\endcsname}
+\def\pageref#1{\ifx#1\relax\else\global\advance\defcount-1 \fi
+ \write\refo{\noexpand#1{\number\pageno}}%
+ \write\m@ne{\ifx#1\relax New Pageref!\else
+ \ifnum#1=\pageno\else Changed Pageref!\fi\fi}}
+\def\crossref#1|{\expandafter\usedef\csname\vertical#1\endcsname}
+\def\usedef#1{\ifx#1\relax
+ \ifshowmisses\showmiss#1\fi\global\advance\miscount1 ??\else #1\fi}
+\let|=\crossref
+\def\showmiss#1{{\escapechar=-1%
+ \message{***** WARNING: Undefined reference #1\string|! *****}}}
+
+\def\cite#1.{\ifinxmode\write\bnx{[#1] \number\pageno.}\fi#1}
+{\catcode`\@=\active
+\gdef\newcite#1.{\ifinxmode\write\bnx{[#1'] \number\pageno.}\fi#1$'@$}}
+
+\outer\def\bye{
+ \ifnum\miscount>0
+ \message{(\the\miscount\space undefined references were present)}\fi
+ \ifnum\changecount>0
+ \message{(\the\changecount\space new references written on \jobname.ref)}\fi
+ \ifnum\defcount>0
+ \message{(\the\defcount\space old references dropped from \jobname.ref)}\fi
+ \par\vfill\supereject
+ \end}
+
+% Exercises
+
+\newwrite\ans
+\immediate\openout\ans=\jobname.ans
+
+\outer\def\answer{\par
+ \immediate\write\ans{}
+ \immediate\write\ans{\string\ansno\chapno.\the\excount:}
+ \copytoblankline}
+\def\copytoblankline{\begingroup\setupcopy\copyans}
+\def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials \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\ansno#1:{\par\medbreak\def\thisansno{\source#1}%
+ \noindent\hbox to\parindent{\bf #1\hfil}\ignorespaces}
+
+% Pictures (a subset of \LaTeX's conventions)
+\newskip\hsssglue \hsssglue=0pt plus 1fill minus 1fill \def\hsss{\hskip\hsssglue}
+
+\newdimen\unitlength \newdimen\linethickness
+\newdimen\@picheight \newdimen\@xdim \newdimen\@ydim \newdimen\@len \newdimen\@save
+\newcount\@multicount \newcount\@xarg \newcount\@yarg
+\newbox\@picbox \newbox\@mpbox
+
+\font\tenln=line10 \font\tenlnw=linew10
+\font\tencirc=lcircle10 \font\tencircw=lcirclew10
+\font\smallln=linew10 scaled 483 % that's magstep-4
+
+\def\thinlines{\let\linefont=\tenln \let\circlefont=\tencirc
+ \linethickness=\fontdimen8\linefont}
+\def\thicklines{\let\linefont=\tenlnw \let\circlefont=\tencircw
+ \linethickness=\fontdimen8\linefont}
+\thinlines
+
+\def\beginpicture(#1,#2)(#3,#4){\@picheight=#2\unitlength \let\line=\@line
+ \setbox\@picbox=\hbox to#1\unitlength\bgroup
+ \kern-#3\unitlength \lower#4\unitlength\hbox\bgroup\ignorespaces}
+\def\endpicture{\egroup\hss\egroup
+ \ht\@picbox=\@picheight \dp\@picbox=\z@
+ \leavevmode\box\@picbox}
+
+\def\put(#1,#2)#3{\raise#2\unitlength\rlap{\kern#1\unitlength #3}\ignorespaces}
+
+\def\multiput(#1,#2)(#3,#4)#5#6{\@multicount=#5
+ \@xdim=#1\unitlength \@ydim=#2\unitlength \setbox\@mpbox=\hbox{#6}%
+ \loop\ifnum\@multicount>0
+ \raise\@ydim\rlap{\kern\@xdim \unhcopy\@mpbox}%
+ \advance\@xdim#3\unitlength \advance\@ydim#4\unitlength
+ \advance\@multicount\m@ne \repeat\ignorespaces}
+
+\def\makebox(#1,#2)#3{\setbox\@picbox=\hbox to#1\unitlength{\hss#3\hss}%
+ \@ydim=\ht\@picbox \advance\@ydim-\dp\@picbox
+ \ht\@picbox=#2\unitlength \dp\@picbox=\z@
+ \leavevmode\lower.5\@ydim\box\@picbox}
+
+\newif\ifneg
+\def\@line(#1,#2)#3{\@xarg=#1 \@yarg=#2 \@len=#3\unitlength \leavevmode
+ \ifnum\@xarg<0 \reverseline \else \negfalse \@ydim=\z@\fi
+ \ifnum\@xarg=0 \@vline
+ \else\ifnum\@yarg=0 \@hline \else\@sline\fi\fi
+ \ifneg\kern-\@len\else\@save=\@ydim\fi}
+\def\reverseline{\negtrue \kern-\@len \@xarg=-\@xarg
+ \@ydim=\@len \multiply\@ydim\@yarg \divide\@ydim\@xarg \@yarg=-\@yarg}
+
+\def\@hline{\vrule height.5\linethickness depth.5\linethickness width\@len}
+\def\@vline{\kern-.5\linethickness\vrule width\linethickness
+ \ifnum\@yarg<0 height\z@ depth\else depth\z@ height\fi\@len
+ \kern-.5\linethickness}
+
+\def\@sline{\setbox\@picbox=\hbox{\linefont \count@=\@xarg \multiply\count@ 8
+ \ifnum\@yarg>0 \advance\count@\@yarg \advance\count@-9
+ \else \advance\count@-\@yarg \advance\count@ 55 \fi \char\count@}%
+ \ifnum\@yarg<0 \@picheight=-\ht\@picbox \advance\@ydim\@picheight
+ \else \@picheight=\ht\@picbox \fi
+ \@xdim=\wd\@picbox \@save=\@ydim
+ \loop\ifdim\@xdim<\@len \raise\@ydim\copy\@picbox
+ \advance\@xdim\wd\@picbox \advance\@ydim\@picheight \repeat
+ \advance\@xdim-\@len \kern-\@xdim
+ \multiply\@xdim\@yarg \divide\@xdim\@xarg \advance\@ydim-\@xdim
+ \raise\@ydim\box\@picbox}
+
+\def\vector(#1,#2)#3{\@line(#1,#2){#3}%
+ \ifnum\@xarg=0 \@vvector \else\ifnum\@yarg=0 \@hvector \else\@svector\fi\fi}
+\def\@hvector{\ifneg\rlap{\linefont\char27}\else
+ \smash{\llap{\linefont\char45}}\fi} % we have to smash because of font bug
+\def\@vvector{\ifnum\@yarg<0 \raise-\@len\rlap{\linefont\char63}%
+ \else\setbox\@picbox=\rlap{\linefont\char54}\advance\@len-\ht\@picbox
+ \raise\@len\box\@picbox\fi}
+
+\def\@svector{\setbox\@picbox=\hbox to\z@{\linefont
+ \ifnum\@yarg<0 \count@=55 \@yarg=-\@yarg \else\count@=-9 \fi
+ \ifneg\multiply\@xarg16 \multiply\@yarg2
+ \else\hss % \llap
+ \ifnum\@xarg>2 \multiply\@xarg9 \multiply\@yarg2 \advance\count@29
+ \else\ifnum\@yarg>2 \multiply\@xarg16 \multiply\@yarg9 \advance\count@-20
+ \else\multiply\@xarg24 \multiply\@yarg3 \fi\fi\fi
+ \advance\count@\@xarg \advance\count@\@yarg \char\count@
+ \ifneg\hss\fi}% \rlap
+ \raise\@save\box\@picbox}
+
+\def\disk#1{\@len=#1\unitlength \count@='160 \@diskcirc}
+\def\circle#1{\@len=#1\unitlength \count@='140 \@diskcirc}
+\def\@diskcirc{\setbox\@picbox=\hbox{\circlefont\char\count@}\@xdim=\wd\@picbox
+ \leavevmode \ifdim\@len>15.499\@xdim \@bigdc \else \@smalldc\fi}
+\def\@bigdc{\ifnum\count@<'160 \@bigcirc
+ \else \@len=15\@xdim \@diskcirc\fi}
+\def\@smalldc{{\advance\@len-.5\@xdim
+ \loop\ifdim\@xdim<\@len \advance\count@\@ne \advance\@xdim\wd\@picbox\repeat
+ \hbox{\circlefont\char\count@}}}
+\def\@bigcirc{{\circlefont\count@=15
+ \setbox\@picbox=\hbox{\char\count@}\@xdim=\wd\@picbox
+ \ifdim\@len>2.5\@xdim \@len=2.5\@xdim\fi
+ \advance\@len-.125\wd\@picbox
+ \loop\ifdim\@xdim<\@len \advance\count@ 4 \advance\@xdim.25\wd\@picbox\repeat
+ \@ydim=.5\@xdim \advance\@ydim.5\linethickness
+ \setbox\@picbox=\vbox{\hbox{\char\count@\advance\count@-3\char\count@}%
+ \nointerlineskip
+ \hbox{\advance\count@\m@ne\char\count@\advance\count@\m@ne\char\count@}}%
+ \kern-\@ydim\lower\@ydim\box\@picbox}}
+
+\newif\ifovaltl \newif\ifovaltr \newif\ifovalbl \newif\ifovalbr
+\ovaltltrue \ovaltrtrue \ovalbltrue \ovalbrtrue
+\def\oval(#1,#2){\@xdim=#1\unitlength \@ydim=#2\unitlength
+ {\circlefont \setbox\@picbox=\hbox{\char0}
+ \ifdim\@xdim<\wd\@picbox \@xdim=\wd\@picbox\fi
+ \ifdim\@ydim<\wd\@picbox \@ydim=\wd\@picbox\fi
+ \@save=\@xdim \ifdim\@ydim<\@save \@save=\@ydim \fi
+ \count@=39
+ \loop \setbox\@picbox=\hbox{\char\count@}\ifdim\@save<\wd\@picbox
+ \advance\count@-4 \repeat
+ \setbox\strutbox=\hbox{\vrule height\ht\@picbox depth\dp\@picbox width\z@
+ \kern\wd\@picbox}%
+ \@save=.5\wd\@picbox \advance\@save-.5\linethickness
+ \setbox0=\hbox to\@xdim{\ifovaltl\char\count@\else\strut\fi
+ \kern-\@save\leaders\hrule height\ifovaltl\linethickness\else\z@\fi\hfil
+ \leaders\hrule height\ifovaltr\linethickness\else\z@\fi\hfil\kern\@save
+ \ifovaltr\advance\count@-3\char\count@\else\strut\fi\kern-\wd\@picbox}%
+ \advance\count@\m@ne
+ \setbox2=\hbox to\@xdim{\ifovalbl\char\count@\else\strut\fi
+ \kern-\@save\leaders\hrule height\ifovalbl\linethickness\else\z@\fi\hfil
+ \leaders\hrule height\ifovalbr\linethickness\else\z@\fi\hfil\kern\@save
+ \ifovalbr\advance\count@\m@ne\char\count@\else\strut\fi\kern-\wd\@picbox}%
+ \@save=\@ydim \advance\@save-\wd\@picbox \divide\@save 2
+ \setbox\@picbox=\vbox{\box0\nointerlineskip
+ \hbox to\@xdim{\vrule height\@save width\ifovaltl\linethickness\else\z@\fi
+ \hfil\ifovaltr\vrule width\linethickness\kern-\linethickness\fi}%
+ \nointerlineskip
+ \hbox to\@xdim{\vrule height\@save width\ifovalbl\linethickness\else\z@\fi
+ \hfil\ifovalbr\vrule width\linethickness\kern-\linethickness\fi}%
+ \nointerlineskip\box2}%
+ \@save=.5\@ydim \advance\@save.5\linethickness \leavevmode
+ \kern-.5\@xdim \kern-.5\linethickness \lower\@save\box\@picbox}}
+
+\def\cpic#1\endcpic{\vcenter{\hbox{\beginpicture#1\endpicture}}}
+
+% Squines (quadratic splines)
+% example of use: to plot f(x) between x0 and x1, you can say
+% \put(0,0){\squine(x0,xm,x1,y0,ym,y1)}, where y0=f(x0), y1=f(x1)
+% xm=(y0-y1+s1x1-s0x0)/(s1-s0), ym=(s0(s1x1-y1)-s1(s0x0-y0))/(s1-s0),
+% s0=f'(x0), and s1=f'(x1).
+
+\newdimen\@xi \newdimen\@xii \newdimen\@xiii \newdimen\@xiv
+\newdimen\@xpt \newdimen\@xoldpt
+\newdimen\@yi \newdimen\@yii \newdimen\@yiii \newdimen\@yiv
+\newdimen\@ypt \newdimen\@yoldpt
+\def\squine(#1,#2,#3,#4,#5,#6){\setbox\@picbox\hbox{\tencirc q}%
+ \global\@xoldpt=#1\unitlength \global\@yoldpt=#4\unitlength \kern\@xoldpt
+ \@xi=\@xoldpt \@xii=#2\unitlength \@xiii=#3\unitlength
+ \@yi=\@yoldpt \@yii=#5\unitlength \@yiii=#6\unitlength
+ \squinerec
+ \@xpt=#3\unitlength \@ypt=#6\unitlength \@addpoint
+ \raise\@ypt\copy\@picbox}
+\newif\iffar
+\def\squinerec{\farfalse \testnear\@xi\@xiii \testnear\@yi\@yiii
+ \iffar \decast \fi}
+\def\testnear#1#2{\@save=#1\advance\@save-#2%
+ \ifdim\@save<\z@ \@save=-\@save\fi \ifdim\@save>\p@ \fartrue \fi}
+\def\decast{\@xpt=\@xi \advance\@xpt\@xii \divide\@xpt2
+ \advance\@xii\@xiii \divide\@xii2
+ \@xiv=\@xpt \advance\@xiv\@xii \divide\@xiv2
+ \@ypt=\@yi \advance\@ypt\@yii \divide\@ypt2
+ \advance\@yii\@yiii \divide\@yii2
+ \@yiv=\@ypt \advance\@yiv\@yii \divide\@yiv2
+ \begingroup\@xii=\@xpt \@xiii=\@xiv
+ \@yii=\@ypt \@yiii=\@yiv \squinerec\endgroup
+ \@xpt=\@xiv \@ypt=\@yiv \@addpoint
+ \@xi=\@xiv \@yi=\@yiv \squinerec}
+\def\@addpoint{%\message{(\the\@xpt,\the\@ypt)}%
+ \global\advance\@xoldpt-\@xpt \wd\@picbox=-\@xoldpt
+ \raise\@yoldpt\copy\@picbox \global\@xoldpt=\@xpt \global\@yoldpt=\@ypt}
+
+% Math operators
+\def\2{\mskip-.5mu2\mskip.5mu}
+\newmuskip\lessfortimes \lessfortimes=-2mu minus -2mu
+\def\cdt{\mskip\lessfortimes\cdot\mskip\lessfortimes}
+\def\nullnum{\phantom{0}}
+\def\twonullnum{\phantom{00}}
+\def\bex{\mskip-2mu}
+\def\twoconditions#1#2{_{\scriptstyle#1\atop\scriptstyle#2}}
+\def\tworestrictions#1#2{\vcenter{\offinterlineskip
+ \halign{\strut\hfil##\hfil\cr#1\cr#2\cr}}}
+\def\dts{\mathinner{\ldotp\ldotp}}
+\def\[#1]{[\hbox{$\mskip1mu\thickmuskip=\thinmuskip#1\mskip1mu$}]}
+\def\bigi[#1\bigr]{\bigl[\hbox{$\thickmuskip=\thinmuskip#1$}\bigr]}
+\def\Bigi[#1\Bigr]{\Bigl[\hbox{$\thickmuskip=\thinmuskip#1$}\Bigr]}
+\def\prp(#1){(\hbox{$\thickmuskip=\thinmuskip#1$})}
+\def\pbigi(#1\bigr){\bigl(\hbox{$\thickmuskip=\thinmuskip#1$}\bigr)}
+\def\_#1{\def\next{#1}%
+ \ifx\next\risingsign\expandafter\rising\else^{\underline{#1}}\fi}
+\def\risingsign{^}
+\def\rising#1{^{\overline{#1}}}
+\def\dotminus{\mathbin{\buildrel{\hbox{\runhead.}}\over{\smash{-}\vphantom{_2}}}}
+\let\divides=\backslash
+\def\edivides{\divides\mskip-4mu\divides}
+\def\ndivides{\mathpalette\notdiv\relax}
+\def\notdiv#1#2{\setbox0=\hbox{$#1\divides$}%
+ \vcenter{\hbox to\wd0{$\hss\scriptscriptstyle/\hss$}}\kern-\wd0
+ \vcenter{\hbox to\wd0{$\hss\kern.5pt\scriptscriptstyle/\hss$}}\kern-\wd0
+ \box0\relax}
+\def\spec{\mathop{\rm Spec}}
+\def\half{{1\over2}}
+\def\rp{\mathchar"323F } % relatively prime
+\def\lcm{\mathop{\rm lcm}}
+\def\And{\quad{\rm and}\quad}
+\let\==\equiv
+\def\tmod#1{(mod~$#1$)}
+\let\implies=\Longrightarrow
+\def\?{\hbox{!`}} % subfactorial
+\def\hyp{\mathop{F{}}\nolimits\hyper}
+\def\tightplus{\medmuskip=1.5mu\relax}
+\def\hyper#1#2#3{\mathchoice{\tightplus
+ \hbox{$\displaystyle\biggl({#1\atop#2}\Big\vert\,{#3}\!\biggr)$}}%
+ {\bigl({#1\atop#2}\vert\mskip2mu#3\bigr)}%
+ {}{}} % used only in D and T styles
+%\def\hypk_#1{\mathop{F{}}_{#1}\nolimits\hyper} % confl with mFn convention
+\def\hypk_#1#2#3#4{\mathop{F{}}\mathchoice{\tightplus
+ \hbox{$\displaystyle\biggl({#2\atop#3}\Big\vert\,{#4}\!\biggr)$}%
+ \lower\fontdimen11\mathsym\hbox{$\scriptstyle\!#1$}}%
+ {\bigl({#2\atop#3}\vert\mskip2mu#4\bigr)\lower\fontdimen12\mathsym
+ \hbox{$\scriptstyle\!#1$}}%
+ {}{}} % used only in D and T styles
+\def\double(#1\choose#2){\mathchoice{\biggl(\!\!{#1\choose#2}\!\!\biggr)}
+ {\bigl(\!{#1\choose#2}\!\bigr)}{}{}} % only D and T styles
+\def\hypstrut{\vphantom{_1\_^k}} % if there's another denominator with \_^k
+\def\deg{\mathop{\rm deg}}
+\def\Bscr{{\scr B}}
+\def\Escr{{\scr E}}
+\def\Fscr{{\scr F}}
+\def\Pscr{{\scr P}}
+\def\Sscr{{\scr S}}
+\def\adj{\relbar\joinrel\relbar} % adjacent in a graph
+\let\<=\langle \let \>=\rangle
+\def\Pr{\mathop{\rm Pr}\nolimits}
+\def\Mean{\mathop{\rm Mean}\nolimits}
+\def\Var{\mathop{\rm Var}\nolimits}
+\def\between{\big\vert\hbox{\vphantom)}} % \between_a^b
+{\catcode`\'=\active \gdef'{^\bgroup\mskip2mu\prim@s}} % more space before '
+\def\array#1[#2]{\hbox{\tt#1[$#2$]}}
+\def\given{\mskip1mu\vert\mskip1mu}
+\def\euler{\atopwithdelims<>}
+\def\Euler#1#2{\mathchoice{\biggl<\mskip-7mu{#1\euler#2}\mskip-7mu\biggr>}%
+ {\bigl<\!{#1\euler#2}\!\bigr>}{}{}}
+
+\newbox\phihatbox \newbox\scrphihatbox
+\setbox\phihatbox=\hbox{$\phi$} \ht\phihatbox=1ex
+\setbox\scrphihatbox=\hbox{$\scriptstyle\phi$}
+ \ht\scrphihatbox=\fontdimen5\mathsublet
+\setbox\phihatbox=\hbox{$\widehat{\box\phihatbox}$}
+\setbox\scrphihatbox=\hbox{$\hat{\box\scrphihatbox}$}
+\def\phihat{\mathchoice{\copy\phihatbox}{\copy\phihatbox}%
+ {\copy\scrphihatbox}{{\hat\phi}}}
+
+\newbox\mathsizebox
+\def\setmathsize#1{\global\setbox\mathsizebox=\hbox{\displaymath#1$}}
+\def\mathsize#1{\hbox to\wd\mathsizebox{\displaymath#1$\hss}}
+
+\newbox\sqrtstrutbox
+\setbox\sqrtstrutbox=\hbox{\vrule height10.5pt width\z@}
+\def\strutsqrt#1{\copy\sqrtstrutbox\sqrt{{}^{\mathstrut}#1}}
+
+\newbox\Sqbox % for sum of squares
+\setbox\Sqbox=\vbox{\tenrm\hrule height.6pt\kern-.6pt
+ \hbox to1.5ex{\vrule height1.5ex width.6pt\hss\vrule width.6pt}\kern-.6pt
+ \hrule height.3pt depth.3pt}
+\def\Sq{\mskip1.5mu\copy\Sqbox\mskip1.5mu}
+
+% primitive index macros
+% "stuff for index" will go into a file for sorting and into normal text
+% "!stuff for index" will go into the file only
+\expandafter\def\expandafter\dospecials\expandafter{\dospecials\do\"}
+\def\hexcode{"} \catcode`\"=\active
+
+\newif\ifinxmode
+\newwrite\inx \newwrite\bnx
+\newbox\inxbox
+
+\newif\ifsilent
+\def\beginxref{\futurelet\next\beginxrefswitch}
+\def\beginxrefswitch{\ifx\next!\let\next=\silentxref
+ \else\silentfalse\let\next=\xref\fi \next}
+\def\silentxref!{\silenttrue\xref}
+\let"=\beginxref
+
+\def\xref#1"{\ifinxmode\edef\text{#1}\makexref\fi
+ \ifsilent\ignorespaces\else#1\fi}
+\def\makexref{\global\setbox\inxbox=%
+ \vbox{\unvbox\inxbox\allowbreak\hbox{\inxstyle\text}}%
+ \xdef\writeit{\write\inx{\text\space!\space
+ \noexpand\number\pageno.}}\writeit}
+
+% Final considerations
+\catcode`\@=\active \def@{\mskip1mu\relax}
+\expandafter\def\expandafter\dospecials\expandafter{\dospecials\do\@}
+
+\hyphenation{logical Mac-Mahon hyper-geo-metric hyper-geo-met-rics Ber-noulli}
+
+\preprintfalse % WE ARE MAKING THE REAL BOOK!
+\inxmodetrue % WE ARE PREPARING A ROUGH INDEX
+\showmissestrue % THE REFERENCES SHOULD ALL BE READY NOW
+
+\ifinxmode\immediate\openout\inx=\jobname.inx \fi % file for index reminders
+\ifinxmode\immediate\openout\bnx=\jobname.bnx \fi % file for bib reminders
+
+% To make the book:
+% First TeX BIB, to get BIB.REF correct. (Must have \cite entries.)
+% Then TeX CHAP1..CHAP9, PREF, ANS, CRED, FRONT, CONT.
+% Then make BNX file from individual *.BNX files including BIB.BNX.
+% Then reTeX BIB.
+% *.INX files are raw data only. Index and Contents are prepared by hand.
+
+% To produce only a subset of pages, put the page numbers on separate
+% lines in a file called pages.tex, ended by 999
+% WARNING: This will screw up the .grf file! Save it, then restore it.
+% WARNING: This may screw up the .ref file (if there are \tabrefs). Ditto.
+\let\Shipout=\shipout
+\newread\pages \newcount\nxtpg \openin\pages=pages
+\def\getnxtpg{\ifeof\pages\else
+ {\endlinechar=-1\read\pages to\next
+ \ifx\next\empty % in this case we should have eof now
+ \else\global\nxtpg=\next\fi}\fi}
+\ifeof\pages\else\message{OK, I'll ship only the requested pages!}
+ \getnxtpg\fi
+\def\shipout{\ifeof\pages\let\next=\Shipout
+ \else\ifnum\pageno=\nxtpg\getnxtpg\let\next=\Shipout
+ \else\let\next=\Tosspage\fi\fi \next}
+\newbox\garbage \def\Tosspage{\deadcycles=0\setbox\garbage=}
diff --git a/macros/plain/contrib/misc/headlinerule.tex b/macros/plain/contrib/misc/headlinerule.tex
new file mode 100644
index 0000000000..6e2fc1d029
--- /dev/null
+++ b/macros/plain/contrib/misc/headlinerule.tex
@@ -0,0 +1,8 @@
+%%%---Cut Here-------------------------------------------------------------
+\def\makeheadline{\vbox to0pt{\vskip-22.6pt
+ \line{\vbox to8.5pt{}\vphantom{pqj}\the\headline}
+ \vskip1pt
+ \hrule
+ \vss}
+ \nointerlineskip}
+%%%---Cut Here-------------------------------------------------------------
diff --git a/macros/plain/contrib/misc/label.tex b/macros/plain/contrib/misc/label.tex
new file mode 100644
index 0000000000..7e21962e0a
--- /dev/null
+++ b/macros/plain/contrib/misc/label.tex
@@ -0,0 +1,137 @@
+%
+% Either:
+% \address 3
+%
+% then enter three addresses, blank lines between them, or
+%
+% \faddress foo.tex
+%
+% where foo.tex contains a bunch of labels, with blank lines between them.
+%
+% Make sure to use \done to exit, rather than \bye.
+%
+\hsize=8.25truein\hoffset=-0.875truein
+\vsize=11truein\voffset=-1.0truein
+\nopagenumbers\raggedbottom\offinterlineskip
+%
+\newdimen\vlsize\newdimen\hlsize
+\vlsize=1.56truein
+\hlsize=2.75truein
+%
+\font\huge=cmbx12 scaled\magstep 4
+\font\notsohuge=cmbx10 scaled\magstep3
+\font\bigtt=cmtt10 scaled 1200
+\font\lbls=cmbx10 scaled\magstephalf
+\font\hugelogo=logobf10 scaled\magstep 5
+\def\hugeMF{{\hugelogo METAFONT}}
+%
+\def\prompt{\immediate\write0{\noexpand\address\noexpand\faddress\noexpand\done}
+ \immediate\write0{<\number\labcount> Total Labels}}
+%
+\newcount\n
+\def\dotimes #1 #2{\n=#1
+ \loop
+ #2
+ \advance\n by -1
+ \ifnum\n>0\repeat}
+%
+\let\LMR=L
+\newbox\leftbox
+\newbox\midbox
+\newcount\labcount
+\labcount=0
+\def\ship#1{\if L\LMR
+ \global\setbox\leftbox=#1 \global\let\LMR=M
+ \else\if M\LMR
+ \global\setbox\midbox=#1 \global\let\LMR=R
+ \else
+ \line{\box\leftbox\hss\box\midbox\hss #1} \global\let\LMR=L
+ \fi\fi
+ \global\advance\labcount by1}
+%
+\def\emptybox{\vbox to \vlsize{\hsize=\hlsize\vfill\centerline{\strut}}}
+\def\done{\if M\LMR \ship\emptybox\ship\emptybox
+ \else\if R\LMR \ship\emptybox
+ \fi\fi\vfill\eject\end}
+%
+\def\oninterlineskip{\baselineskip=12pt\lineskip=1pt\lineskiplimit=0pt}
+%
+\newif\ifok
+\def\blankline{\par}
+\newif\ifcont
+%
+\newdimen\maxadsize
+\maxadsize=2.6truein
+\newbox\addbox
+\def\makeadd{\vbox{\oninterlineskip
+ \loop
+ \read0 to\add
+ \ifx\add\blankline
+ \global\contfalse
+ \else
+ \global\conttrue
+ \fi
+ \ifcont
+ \setbox\addbox=\hbox{\add}
+ \ifdim\maxadsize<\wd\addbox
+ \message{Line too wide!}
+ \else
+ \box\addbox
+ \fi
+ \repeat}}
+%
+\def\address #1 {\dotimes #1
+ {\ship{\vbox to \vlsize{\hsize=\hlsize
+ \oninterlineskip
+ \lbls
+ \vss\hbox to\hlsize{\hss
+ \makeadd
+ \hss}\vss}}}
+ \prompt}
+%
+\newread\filein
+\def\fakeadd{\vbox{\oninterlineskip
+ \loop
+ \read\filein to\add
+ \ifx\add\blankline
+ \global\contfalse
+ \else
+ \global\conttrue
+ \fi
+ \ifcont
+ \setbox\addbox=\hbox{\add}
+ \ifdim\maxadsize<\wd\addbox
+ \message{\add: }
+ \message{Line too wide!}
+ \else
+ \box\addbox
+ \fi
+ \repeat}}
+%
+\newif\ifstillokay
+\def\dofadds{
+ \loop
+ \ship{\vbox to \vlsize{\hsize=\hlsize
+ \oninterlineskip
+ \lbls
+ \vss\hbox to\hlsize{\hss\fakeadd\hss}
+ \vss}}
+ \ifeof\filein
+ \stillokayfalse
+ \else
+ \stillokaytrue
+ \fi
+ \ifstillokay
+ \repeat
+ \closein\filein}
+%
+\def\faddress #1 {
+ \openin\filein=#1
+ \ifeof\filein
+ \message{#1: File not found}
+ \else
+ \dofadds
+ \fi
+ \prompt}
+%
+\prompt
diff --git a/macros/plain/contrib/misc/labeldefs.tex b/macros/plain/contrib/misc/labeldefs.tex
new file mode 120000
index 0000000000..53776e5522
--- /dev/null
+++ b/macros/plain/contrib/misc/labeldefs.tex
@@ -0,0 +1 @@
+threecol.tex \ No newline at end of file
diff --git a/macros/plain/contrib/misc/labelmac3.tex b/macros/plain/contrib/misc/labelmac3.tex
new file mode 100644
index 0000000000..17c68a7a42
--- /dev/null
+++ b/macros/plain/contrib/misc/labelmac3.tex
@@ -0,0 +1,59 @@
+%% Save file as: LABELMAC3.TEX Source: FILESERV@SHSU.BITNET
+%% Posted by bharat@herodotus.cs.uiuc.edu (R. Bharat Rao)
+%% to comp.text.tex on 11 Oct 91 03:16:48 GMT
+%% THIS IS A PLAIN TeX FILE
+%% To use ...
+%%
+%% \input labelmac3
+%% \address{
+%% address 1
+%%
+%% }
+%% .... (repeat 29 more times)
+
+% This is set up to use Avery 5160 labels for laser printers.
+% The label size is 1 inch by 2 and five eights inches.
+\newif\ifcentyorn
+\centyorntrue
+\newdimen\fullhsize
+\fullhsize=8.20in \hsize=2.625in
+\vsize=11.0in
+\def\fullline{\hbox to\fullhsize}
+\hoffset=-.68in
+\voffset=-.365in
+\let\lr=L \newbox\leftcolumn \newbox\midcolumn
+\output{\if L\lr
+ \global\setbox\leftcolumn=\columnbox \global\let\lr=M
+ \else\if M\lr
+ \global\setbox\midcolumn=\columnbox \global\let\lr=R
+ \else \tripleformat \global\let\lr=L\fi\fi
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+\def\tripleformat{\shipout\vbox{\makeheadline
+ \fullline{\box\leftcolumn\hfil\box\midcolumn\hfil\columnbox}
+ \makefootline}
+ \advancepageno}
+\def\columnbox{\leftline{\pagebody}}
+\def\makeheadline{\vbox to 0pt{\vskip-22.5pt
+ \fullline{\vbox to8.5pt{}\the\headline}\vss}\nointerlineskip}
+\def\makefootline{\baselineskip=24pt \fullline{\the\footline}}
+
+\def\endoflabels{\supereject
+ \if L\lr \else\null\vfill\eject\fi
+ \if L\lr \else\null\vfill\eject\fi
+ \end}
+\obeylines\gdef\address#1{\setbox0\vbox{#1}
+ \vbox to 71.90pt{\ifcentyorn\vss\fi \box0 \vss}}
+
+%\obeylines\gdef\address#1{\setbox0\vbox{#1} \vbox to 71.90pt{ \box0 \vss}}
+
+%\font\labelfont=cmbx7
+%\font\labelfont=cmtt8
+\font\labelfont=cmss9
+\parindent=0pt
+\raggedright
+\raggedbottom
+%\nopagenumbers
+\interlinepenalty=1000
+\labelfont
+%
+
diff --git a/macros/plain/contrib/misc/letter.tex b/macros/plain/contrib/misc/letter.tex
new file mode 100644
index 0000000000..531a8b520d
--- /dev/null
+++ b/macros/plain/contrib/misc/letter.tex
@@ -0,0 +1,119 @@
+% This macro file is for business letters
+
+\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\narrower{\advance\leftskip by 20pt \advance\rightskip by 20pt }
+
+\raggedbottom
+\interlinepenalty=1000
+\hsize=6.25truein \voffset=24pt \advance\vsize by-\voffset
+\parindent=0pt \parskip=0pt
+\nopagenumbers
+\headline={\ifnum\pageno>1
+ \tenrm To \addressee\hfil\today\hfil Page \folio
+ \else\hfil\fi}
+
+\def\beginlinemode{\endmode
+ \begingroup\obeylines\def\endmode{\par\endgroup}}
+\def\beginparmode{\endmode
+ \begingroup\parskip=\medskipamount \def\endmode{\par\endgroup}}
+\let\endmode=\par
+\def\endletter{\endmode\vfill\supereject \pageno=1 }
+
+\newdimen\longindentation \longindentation=4truein
+\newbox\theaddress
+\def\address{\beginlinemode\getaddress}
+{\obeylines\gdef\getaddress#1
+ #2
+ {\gdef\addressee{#2\unskip}%
+ \global\setbox\theaddress=\vbox\bgroup\raggedright%
+ \hsize=\longindentation \everypar{\hangindent2em}#2
+ \def\endmode{\egroup\endgroup \copy\theaddress \bigskip}}}
+
+\def\body{\beginparmode}
+\def\closing{\beginlinemode\getclosing}
+{\obeylines\gdef\getclosing #1
+ #2
+ {\nobreak\bigskip \leftskip=\longindentation #2
+ \nobreak\bigskip\bigskip\bigskip % space for signature
+ \def
+ {\endgraf\nobreak}}}
+\def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par}
+\def\ps{\beginparmode\nobreak
+ \interlinepenalty5000\def\par{\endgraf\penalty5000}}
+\def\cc{\beginparmode\nobreak
+ \interlinepenalty5000\def\par{\endgraf\penalty5000}}
+
+\def\up#1{\leavevmode \raise.16ex\hbox{#1}}
+\font\smallheadfont=cmr8 at 8truept
+\font\largeheadfont=cmbx10 at 14.4truept
+\font\logofont=stan70 at 70truept
+\def\stanfordseal{\vbox{\kern-3truept\hbox{\logofont A}\kern-3truept}}
+
+\def\csdreturn{Computer Science Department\par \stanfordreturn}
+\def\stanfordreturn{Stanford University\par
+ Stanford, CA 94305\kern.5pt-21\kern-.5pt40 USA\par}
+\def\letterhead{\pageno=1 \univletterhead
+ {\leftskip=\longindentation
+ {\baselineskip9truept\smallheadfont\sendingaddress}
+ \bigskip\bigskip\rm\today\bigskip}}
+\def\specrule#1{\nointerlineskip
+ \line{\hbox to 60truept{\hrulefill
+ \hphantom{\stanfordseal\kern-#1truept}%
+ \hrulefill}\hrulefill}\nointerlineskip}
+\def\univletterhead{\vglue-34pt
+ \specrule{11}\vskip8truept
+ \hbox{\hbox to\longindentation{\smash{\hbox to60truept{\hfil\kern2.5truept
+ \lower10truept\stanfordseal\hfil}}%
+ \largeheadfont STANFORD UNIVERSITY\hfil}%
+ \smallheadfont STANFORD, CALIFORNIA 94305\kern.5pt-21\kern-.5pt40}
+ \vskip6truept\specrule{17}\vskip13truept }
+
+\def\deklet{
+ \def\sendingaddress{DONALD E. KNUTH\par
+ Professor Emeritus of The Art of\par
+ \qquad Computer Programming\par
+ Department of Computer Science\par
+ Telephone \up[415\up]\thinspace 723-4367\par}
+ \def\returnaddress{Prof.~D. E. Knuth\par \csdreturn}
+ \letterhead}
+
+\def\memoto{\beginlinemode\parindent=60truept
+ \everypar{\hangindent70truept}\startmemo}
+\def\bigmemoto{\beginlinemode\parindent=60pt % use this for magstep>1!
+ \everypar{\hangindent70pt}\startmemo}
+\def\textin#1{\noindent\hbox to\parindent{#1\hss}\ignorespaces}
+{\obeylines\gdef\startmemo #1
+ {\gdef\addressee{#1}%
+ \global\pageno=1 \vglue-34pt\specrule{11}\vskip8truept
+ \leftline{\smash{\hbox to60truept{\hfil\kern2.5truept
+ \lower10truept\stanfordseal\hfil}}%
+ \largeheadfont Stanford Computer Science Department %
+ \rm\today}%
+ \vskip6truept\specrule{20}\bigskip\bigskip\bigskip%
+ \textin{Memo to:}#1
+ \def\endmode{\par\endgroup\bigskip}}
+ \gdef\from #1
+ {\smallskip\textin{From:}#1
+ }
+ \gdef\subject #1
+ {\smallskip\textin{Subject:}#1
+ }
+}
+
+\def\makelabel{\endletter\hbox{\vrule
+ \vbox{\hrule \kern6truept
+ \hbox{\kern6truept\stanfordseal\kern3pt
+ \vbox{\smallheadfont\baselineskip9truept\hsize=2truein\returnaddress}
+ \kern6truept}\kern6truept\hrule}\vrule}
+ \kern.1truein
+ \hbox{\vrule
+ \vbox{\hrule \kern12truept
+ \hbox{\kern12truept\copy\theaddress
+ \kern12truept}\kern12truept\hrule}\vrule}
+ \pageno=0\vfill\eject}
+
+\def\frac#1/#2{\leavemode\kern.1em\raise.5ex\hbox{\the\scriptfont0
+ #1}\kern-.1em/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
diff --git a/macros/plain/contrib/misc/lettermac.tex b/macros/plain/contrib/misc/lettermac.tex
new file mode 100644
index 0000000000..5f7be9fe91
--- /dev/null
+++ b/macros/plain/contrib/misc/lettermac.tex
@@ -0,0 +1,111 @@
+% lettermac.tex
+%
+% J. Daniel Smith
+% 8 November 1989
+%
+% Simple macros for writing letters
+%
+% Last Updated:
+% JDS 23 May 90
+%
+% don't indent paragraphs
+\newdimen\oldparindent \oldparindent=\parindent
+\parindent=0pt
+%
+% don't do so much complaining
+\tolerance=10000 \hbadness=9999 \vbadness=9999
+%
+% make \narrower work correctly with \parindent
+\def\narrower{\advance\leftskip by\oldparindent
+ \advance\rightskip by\oldparindent}
+%
+% leave a blank line between paragraphs
+\parskip=10pt plus 1pt minus 0.5pt
+%
+% page breaks between paragraphs when possible
+\interlinepenalty=1000
+%
+% skip over a bit on the page
+\def\info#1{\hskip.6\hsize#1\par\par}
+%
+% of course, we don't want page numbers
+\nopagenumbers
+%
+% turn off hyphenation
+\pretolerance=10000\hyphenpenalty=10000
+%
+% get the name of the address file from the user
+\def\getaddress#1{\begingroup
+ \newlinechar=`@ \def\\{@}
+ \message{@#1}
+ \message{@Enter the name of the address file: }
+ \endlinechar=-1
+ \read-1 to\AddressFileName
+ \global\edef\InputAddressFileName{\AddressFileName.adr}
+ \endgroup
+ \obeyspaces % keep spaces in address
+ % Make it easier to type '#' and '&' in addresses
+ \catcode`\#=12\catcode`\&=12
+ \input\InputAddressFileName
+ \catcode`\#=6\catcode`\&=4
+ \let\getaddress\relax}
+%
+% address at top of letter
+\def\setaddress#1{\gdef\Xaddress{#1}}
+ \setaddress{\hbox{\bf * ADDRESS *}}
+\def\address{\par{\vskip\parskip\parskip=0pt\def\\{\par}
+ \frenchspacing\Xaddress}
+ \par\let\address\relax}
+%
+% Various items that might be used throughout the letter. Defaults
+% are set to something obnoxious so that if they are used without
+% being set it will be obvious
+\def\settitle#1{\gdef\Xtitle{#1}}
+ \settitle{\hbox{\bf * TITLE *}}
+\def\title{\Xtitle}
+%
+\def\setfirstname#1{\gdef\Xfirstname{#1}}
+ \setfirstname{\hbox{\bf * FIRSTNAME *}}
+\def\firstname{\Xfirstname}
+%
+\def\setlastname#1{\gdef\Xlastname{#1}}
+ \setlastname{\hbox{\bf * LASTNAME *}}
+\def\lastname{\Xlastname}
+%
+\def\setcompany#1{\global\def\Xcompany{#1}}
+ \setcompany{\hbox{\bf * COMPANY *}}
+\def\company{\Xcompany}
+%
+% addressee
+\def\addressee{Dear \Xtitle\ \Xlastname,\par}
+%
+% attn for envelopes
+\def\attn#1{\gdef\Xattn{Attn: #1}}
+% \gdef\attn{\par\vfill\line\bgroup\hbox{Attn: \Xattn}\hfil}}
+\let\Xattn=\relax % don't do anything unless its \attn is used
+%
+% ZIP code. For compatability with envelope macros.
+\let\zipbar=\relax
+% closings
+\def\signature#1#2{\vskip\parskip{\vbox{\info{#1,}\vskip.35true in\info{#2}}
+ \let\signature\relax}}
+\def\sincerely#1{\signature{Sincerely}{#1}\let\sincerely\relax}
+\def\love#1{\signature{Love}{#1}\let\love\relax}
+%
+% cc:
+\def\cc#1{\par{\vskip\parskip\parskip=0pt\def\\{\par}
+ {\rm cc: }\everypar={\phantom{\rm cc: }}#1}
+ \let\cc\relax}
+% RE:
+\def\re#1{\par{\vskip\parskip\parskip=0pt\def\\{\par}
+ {\rm RE: }\everypar={\phantom{\rm RE: }}#1}
+ \let\re\relax}
+%
+% The date at the top of the letter
+% If a date is not set, then the current date is used.
+\def\Xtoday{\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}
+\def\today#1{\gdef\Xtoday{#1}}
+\def\date{\info{\Xtoday}\let\date\relax}
diff --git a/macros/plain/contrib/misc/list.tex b/macros/plain/contrib/misc/list.tex
new file mode 100644
index 0000000000..1daeba2bbe
--- /dev/null
+++ b/macros/plain/contrib/misc/list.tex
@@ -0,0 +1,47 @@
+% Makes a listing of one or more files
+% Typical usage:
+% tex list *.c \\end
+
+\def\grabfile#1 {\setbox0=\lastbox\endgraf\doit{#1}}
+\everypar{\grabfile}
+
+\font\filenamefont= cmtt8 scaled\magstep3
+\font\headlinefont= cmr8
+\font\listingfont= cmtex10
+\font\eoffont= cmti8
+
+\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}
+\newcount\m \newcount\n
+\n=\time \divide\n 60 \m=-\n \multiply\m 60 \advance\m \time
+\def\hours{\twodigits\n\twodigits\m}
+\def\twodigits#1{\ifnum #1<10 0\fi \number#1}
+
+\newlinechar=`@
+\message{@\today\space at \hours}
+
+\raggedbottom
+\nopagenumbers
+
+\chardef\other=12
+\def\doit#1{\message{@Listing #1@}
+ \begingroup \everypar{} \frenchspacing
+ \headline{\filenamefont#1\quad\headlinefont \today\ at \hours
+ \hfill Page \folio}
+ \def\do##1{\catcode`##1=\other}\dospecials
+ \catcode127=\other \catcode9=\other \catcode12=\other
+ \parindent 0pt \parfillskip=0pt plus 1fil minus 1in
+ \everypar{\hangindent 1in} \rightskip=0pt plus 2in
+ \def\par{\ifvmode\penalty-500\medskip\else\endgraf\fi}
+ \listingfont \obeylines \obeyspaces \global\pageno=1
+ \input #1 {\eoffont(end of\/ file)}\endgraf\vfill\eject\endgroup}
+{\obeyspaces\global\let =\ }
+\catcode`\_=\other % allow _ in file names
+
+% A tab (^^I) prints as lowercase gamma.
+% Character ^^M could be made visible, with a bit of work;
+% at present, it's indistinguishable from newline (^^J).
+
+% You can get up to 103 characters on a line without an overfull box.
diff --git a/macros/plain/contrib/misc/listing.mac b/macros/plain/contrib/misc/listing.mac
new file mode 100644
index 0000000000..6be5e4ab04
--- /dev/null
+++ b/macros/plain/contrib/misc/listing.mac
@@ -0,0 +1,63 @@
+\input 17Point.TeX
+\input 14Point.TeX
+\input 12Point.TeX
+\tenpoint
+% This is a file of commands for printing out programs using TeX
+% -- see DIRTY TRICKS in TeXbook
+%
+% This version is designed to print source code at 9 point
+% fitting an 80 column line into a 6 true inch width with
+% 8 point line numbers before each line.
+% It handles TAB (^I) characters almost the same as DEC
+%
+% usage:
+% \input fortran % put this early in the file
+% \listing{file.ext} % use dev:[dir] if you wish
+%
+% B.H. Toby 8/86
+%
+\newcount\lineno
+\font\Alisttt=cmtt9 at 9 truept
+\font\Alistrm=cmr8 at 8 truept
+\font\fourteentt=cmtt10 at 14.4 truept
+\font\titlefont=cmbx12 scaled 1440
+\newcount\partpageno
+\def\uncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials}
+\def\listing#1{\mark{\currentsection \noexpand\else #1}
+ \penalty-200\vskip18pt plus4pt minus6pt
+ \leftline{\fourteentt #1}
+ \mark{#1\noexpand\else #1} \def\currentsection{#1}
+ \nobreak\smallskip
+ \par\begingroup\setupverbatim\input#1 \endgroup}
+\def\setupverbatim{
+ \Alisttt\baselineskip= 8.5truept\lineskip=1truept
+ \lineskiplimit=1truept\topskip=0pt
+ \lineno=0
+ \def\par{\leavevmode\egroup\box0\endgraf}
+ \obeylines \uncatcodespecials \obeyspaces
+ \catcode`\`=\active \catcode`\^^I=\active
+ \everypar{\startbox}}
+\newdimen\w \setbox0=\hbox{\Alisttt\space} \w=8\wd0
+\def\startbox{\setbox0=\hbox\bgroup}
+{\catcode`\^^I=\active
+ \gdef^^I{\leavevmode\egroup
+ \dimen0=\wd0
+ \divide\dimen0 by\w
+ \multiply\dimen0 by\w
+ \advance\dimen0 by\w
+ \wd0=\dimen0 \box0 \startbox}}
+{\obeyspaces\global\let =\ }
+{\catcode`\`=\active \gdef`{\relax\lq}}
+
+\def\header#1{\vfill\eject\null\medskip\centerline{\fourteenpoint\bf #1}\bigskip
+ \message{\noexpand#1}\def\part{#1}\partpageno=\count0}
+
+\def\title#1{\pageno=0\null\vfill\centerline{\seventeenpoint\bf#1}}
+
+\def\currentsection{}
+
+\headline{\ifnum\pageno=\partpageno\hfill\else
+ \ifodd\pageno{\bf\part}\hss{\tt\iftrue\botmark\fi}
+ \else{\tt\expandafter\iffalse\topmark\fi}\hss{\bf\part}\fi\fi}
+\footline{\ifnum\pageno=0\hfil\else\hfil\tenbf\folio\hfil\fi}
+
diff --git a/macros/plain/contrib/misc/listmac.tex b/macros/plain/contrib/misc/listmac.tex
new file mode 100644
index 0000000000..43a1c31674
--- /dev/null
+++ b/macros/plain/contrib/misc/listmac.tex
@@ -0,0 +1,157 @@
+% -*- Mode: TeX; Syntax: Common-lisp; Package: LISTEX; -*-
+%% macros for the LISTEX system by DCB
+
+% setup
+\catcode`\@=11
+
+ % fonts
+\def\LTnormalfont {\rm}
+\def\LTcommentfont {\it}
+\def\LTpuncfont {\tt}
+\def\LTcodefont {\rm}
+\def\LTcodepuncfont {\tt}
+\def\LTslantedcode {%
+ \font\sltt=cmsltt10
+ \def\LTcodefont{\sl}%
+ \def\LTcodepuncfont{\sltt}}
+\def\slantedcode{\LTslantedcode}
+\def\LTboldcode {%
+ \def\LTcodefont{\bf}%
+ \def\LTcodepuncfont{\tt}}
+\def\boldcode{\LTboldcode}
+\def\LTtypewritercode {%
+ \def\LTcodefont{\tt}}
+\def\typewritercode{\LTtypewritercode}
+
+ % delimiters
+\newdimen\LTparenkern \LTparenkern=.1pt
+\newdimen\LTcommentkern \LTcommentkern=1pt
+\newdimen\LTspacewidth \LTspacewidth=.45em
+\def\LTop/{{\rm(\kern\LTparenkern}}
+\def\LTcp/{\/{\rm\kern\LTparenkern)}}
+\def\LTobrace/{{$\{$\kern\LTparenkern}}
+\def\LTcbrace/{\/{\kern\LTparenkern$\}$}}
+\def\LTquot/{\raise.3ex\hbox{\LTpuncfont\char`\"}}
+\def\LTstar/{\lower.05ex\hbox{\LTpuncfont\char`\*}}
+\def\LTchr {\LTpuncfont\char}
+\def\LTsetpwidth {\setbox\z@=\hbox{\LTop/}\LTpwidth=\wd\z@}
+\newdimen\LTpwidth \LTsetpwidth
+
+ % indentations
+\def\LTpi/{\kern\LTpwidth} % increment for plus1
+\def\LTpii/{\kern 2\LTspacewidth} % increment for plus2
+\def\LTpiv/{\kern 4\LTspacewidth} % increment for plus4
+\def\LTks #1{\kern #1\LTspacewidth} % kern a number of space widths
+
+ % boxes
+\newbox\LTbox
+\newdimen\LTboxw
+\def\LTsb {\setbox\LTbox=\hbox} % start a box
+\def\LTdb/{\box\LTbox} % dump out a box
+\def\LTbb {\LTboxw=\wd\LTbox % output a box and backspace over it
+ \box\LTbox
+ \kern-\LTboxw}
+
+ % markers
+\def\LTsm #1{\xdef#1{\the\wd\LTbox}% % set a mark register
+ \box\LTbox}
+\def\LTkr #1{\kern #1\relax} % kern a register
+\def\LTkm {\LTbb\LTkr} % kern to a marked position
+
+ % modules
+
+% output modules in boxes?
+\newif\ifLTboxmodules
+
+% keep track of position in file: top, after module, before module
+\newif\iffirstmodule \firstmoduletrue
+\newif\ifmodule
+
+% incrementally number modules
+\newcount\modulecount
+
+% normal modules
+\def\LTbeginmodule/{%
+ \iffirstmodule \firstmodulefalse
+ \else \LTfilbreak \bigskip \fi
+ \advance\modulecount\@ne
+ \LTmarkmodule
+ \ifLTboxmodules \vbox\bgroup \else \begingroup \fi
+ \LTmoduledefs
+ \noindent {\bf \number\modulecount.}\enspace \ignorespaces}
+
+\def\LTendmodule/{%
+ \endgraf
+ \ifLTboxmodules \egroup \else \endgroup \fi
+ \moduletrue}
+
+\def\LTmarkmodule {}
+
+\def\LTmoduledefs {%
+ \LTmodulehook
+ \LTsetpwidth}
+
+\def\LTmodulehook {}
+
+% star modules
+\def\LTbeginstarmodule #1{%
+ \iffirstmodule \firstmodulefalse
+ \else \vfil \eject \fi
+ \advance\modulecount\@ne
+ \LTmarkstarmodule{#1}%
+ \ifLTboxmodules \vbox\bgroup \else \begingroup \fi
+ \LTmoduledefs
+ \noindent {\bf \number\modulecount. \ignorespaces #1\par}
+ \nobreak \smallskip \noindent \ignorespaces}
+
+\def\LTmarkstarmodule {\message{*\number\modulecount}\mark}
+
+% spacing and layout
+\def\LTfilbreak {\vfil\penalty-200\vfilneg}
+\def\LTfilnobreak {\vfil\penalty9999\vfilneg}
+\parindent=2em
+\interlinepenalty=10000 % forbid breaks in paragraphs
+
+% code in module text
+\def\LTbcode/{\begingroup \let\LTpuncfont=\LTcodepuncfont
+ \LTcodedefs \LTcodefont \LTsetpwidth}
+\def\LTecode/{\/\endgroup}
+
+ % code
+\def\LTbeginlisp/{%
+ \iffirstmodule \beginmodule \endmodule \fi
+ \ifmodule \modulefalse \LTfilnobreak \bigskip
+ \else \LTfilnobreak \medskip \fi
+ \vbox\bgroup \LTcodedefs \LTnormalfont \LTsetpwidth}
+
+\def\LTendlisp/{%
+ \egroup}
+
+\def\LTcodedefs {%
+ \spaceskip=\LTspacewidth
+ \xspaceskip=\LTspacewidth
+ \LTcodehook}
+
+\def\LTcodehook {}
+
+% module text in code
+\def\LTcommentdefs {\spaceskip=\z@ \xspaceskip=\z@ \LTcommentfont \LTsetpwidth}
+\def\LTbcom/{\begingroup \LTcommentdefs {\rm;\kern\LTcommentkern}}
+\def\LTecom/{\endgroup}
+
+ % miscellany
+\ifx\lisp\undefined
+ \def\lisp {Lisp}
+ \let\LISP=\lisp
+ \let\Lisp=\lisp
+\fi
+\def\listex {Lis\kern-.1667em\TeX}
+\let\LISTEX=\listex
+\let\Listex=\listex
+
+\hsize=30pc
+\vsize=50pc
+\LTboxmodulesfalse
+
+ % cleanup
+\catcode`\@=12
diff --git a/macros/plain/contrib/misc/llist.tex b/macros/plain/contrib/misc/llist.tex
new file mode 100644
index 0000000000..f107169e24
--- /dev/null
+++ b/macros/plain/contrib/misc/llist.tex
@@ -0,0 +1,67 @@
+% Makes a landscape listing of one or more files
+% Typical usage:
+% tex llist *.c \\end
+
+\def\grabfile#1 {\setbox0=\lastbox\endgraf\doit{#1}}
+\everypar{\grabfile}
+
+\font\filenamefont= cmtt8 scaled\magstep3
+\font\headlinefont= cmr8
+\font\listingfont= cmtex8
+\font\eoffont= cmti8
+
+\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}
+\newcount\m \newcount\n
+\n=\time \divide\n 60 \m=-\n \multiply\m 60 \advance\m \time
+\def\hours{\twodigits\n\twodigits\m}
+\def\twodigits#1{\ifnum #1<10 0\fi \number#1}
+
+\newlinechar=`@
+\message{@\today\space at \hours}
+
+\baselineskip=9pt
+\medskipamount=4pt minus 1pt
+\raggedbottom
+\nopagenumbers
+
+\chardef\other=12
+\def\doit#1{\message{@Listing #1@}
+ \begingroup \everypar{} \frenchspacing
+ \headline{\ifright \headlinefont \hfill Page \folio
+ \else\filenamefont#1\quad\headlinefont \today\ at \hours\hfill \fi}
+ \def\do##1{\catcode`##1=\other}\dospecials
+ \catcode127=\other \catcode9=\other \catcode12=\other
+ \parindent 0pt \parfillskip=0pt plus 1fil minus .8in
+ \everypar{\hangindent 1in} \rightskip=0pt plus 2in
+ \def\par{\ifvmode\penalty-50\medskip\else\endgraf\fi}
+ \listingfont \obeylines \obeyspaces \global\pageno=1
+ \input #1 {\eoffont(end of\/ file)}\endgraf\vfill\eject
+ \ifright\null\vfill\eject\fi\endgroup}
+{\obeyspaces\global\let =\ }
+\catcode`\_=\other % allow _ in file names
+
+\hsize=4.6truein
+\vsize=7truein
+\hoffset=-.5truein
+\voffset=-.2truein
+\newif\ifright
+\newbox\lefthalf
+\output{\ifright
+ \shipout\hbox{\hbox to5.5in{\box\lefthalf\hss}%
+ \vbox{\makeheadline\pagebody\makefootline}}
+ \advancepageno\global\rightfalse
+ \else\global\setbox\lefthalf\vbox{\makeheadline\pagebody\makefootline}
+ \global\righttrue\fi}
+
+\special{landscape}
+
+% A tab (^^I) prints as lowercase gamma.
+% Character ^^M could be made visible, with a bit of work;
+% at present, it's indistinguishable from newline (^^J).
+
+% You can get up to 91 characters on a line without an overfull box.
+% (But lines with more than 84 characters will be clipped, if they
+% appear on a righthand halfpage.)
diff --git a/macros/plain/contrib/misc/longtocline.tex b/macros/plain/contrib/misc/longtocline.tex
new file mode 100644
index 0000000000..22766763e3
--- /dev/null
+++ b/macros/plain/contrib/misc/longtocline.tex
@@ -0,0 +1,26 @@
+%%%------------- tear neatly -------------------------------------%%%%
+\def\leaderfill{\kern0.5em\leaders\hbox to 0.5em{\hss.\hss}\hfill\kern
+0.5em}% right out of the 'bible'
+\newcount\nmbroflines \newbox\scratch \newbox\rule \newdimen\myindent
+%caution! \myindent needs to be set first, say e.g.
+\myindent=1.5true cm
+\def\hugeheader#1#2#3{\bgroup\parskip=0pt
+\setbox\scratch=\vbox{{\advance\hsize by-\myindent
+\advance\hsize by-3true cm\noindent#2\par}% to prevent blanks
+\global\nmbroflines=\prevgraf}% 'you never know'
+\unvbox\scratch \setbox\rule=\lastbox
+\loop\ifnum\nmbroflines>1
+\unskip\unpenalty\setbox\scratch=\lastbox
+\advance\nmbroflines by-1\repeat
+\setbox\scratch=\hbox{\unhbox\rule\unskip\unskip\unpenalty}%
+{\par\advance\hsize by-3true cm\hangindent\myindent
+\noindent\hbox to\myindent{#1\hss}#2\par}%
+\vskip-\baselineskip
+\line{\kern\myindent\kern\wd\scratch\leaderfill#3}\egroup}
+\endinput
+% usage:
+\line{\hbox to\myindent{1.0\hfil}Normal Heading\leaderfill 66}
+\hugeheader{1.1}{Abnormal heading of a chapter about giant holes all
+over Australia caused by elephants interbreeded with local kangaroos}%
+{77}
+%%%------------- cut along this line ----------------------------%%%%%
diff --git a/macros/plain/contrib/misc/lwebmac.tex b/macros/plain/contrib/misc/lwebmac.tex
new file mode 100644
index 0000000000..23cf864ff8
--- /dev/null
+++ b/macros/plain/contrib/misc/lwebmac.tex
@@ -0,0 +1,135 @@
+% macros for the LWEB system by DCB -*- Mode: TeX; Syntax: Common-lisp; Package: LWEB -*-
+
+% setup
+\catcode`\@=11
+
+ % fonts
+\def\LWnormalfont {\rm}
+\def\LWcommentfont {\it}
+\def\LWpuncfont {\tt}
+\def\LWcodefont {\rm}
+\def\LWcodepuncfont {\tt}
+\def\slantedcode {%
+ \font\sltt=amsltt10
+ \def\LWcodefont{\sl}%
+ \def\LWcodepuncfont{\sltt}}
+\def\boldcode {%
+ \def\LWcodefont{\bf}%
+ \def\LWcodepuncfont{\tt}}
+
+ % delimiters
+\newdimen\LWparenkern \LWparenkern=.1pt
+\newdimen\LWcommentkern \LWcommentkern=1pt
+\newdimen\LWspacewidth \LWspacewidth=.45em
+\def\LWop/{{\rm(\kern\LWparenkern}}
+\def\LWcp/{\/{\rm\kern\LWparenkern)}}
+\def\LWobrace/{{$\{$\kern\LWparenkern}}
+\def\LWcbrace/{\/{\kern\LWparenkern$\}$}}
+\def\LWquot/{\raise.3ex\hbox{\LWpuncfont\char`\"}}
+\def\LWstar/{\lower.05ex\hbox{\LWpuncfont\char`\*}}
+\def\LWchr {\LWpuncfont\char}
+\def\LWsetpwidth {\setbox\z@=\hbox{\LWop/}\LWpwidth=\wd\z@}
+\newdimen\LWpwidth \LWsetpwidth
+
+ % indentations
+\def\LWpi/{\kern\LWpwidth} % increment for plus1
+\def\LWpii/{\kern 2\LWspacewidth} % increment for plus2
+\def\LWpiv/{\kern 4\LWspacewidth} % increment for plus4
+\def\LWks #1{\kern #1\LWspacewidth} % kern a number of space widths
+
+
+ % boxes
+\newbox\LWbox
+\newdimen\LWboxw
+\def\LWsb {\setbox\LWbox=\hbox} % start a box
+\def\LWdb/{\box\LWbox} % dump out a box
+\def\LWbb {\LWboxw=\wd\LWbox % output a box and backspace over it
+ \box\LWbox
+ \kern-\LWboxw}
+
+ % markers
+\def\LWsm #1{\xdef#1{\the\wd\LWbox}% % set a mark register
+ \box\LWbox}
+\def\LWkr #1{\kern #1\relax} % kern a register
+\def\LWkm {\LWbb\LWkr} % kern to a marked position
+
+ % modules
+
+% keep track of position in file: top, after module, before module
+\newif\iffirstmodule \firstmoduletrue
+\newif\ifmodule
+
+% incrementally number modules
+\newcount\modulecount
+
+% normal modules
+\def\LWbeginmodule/{%
+ \iffirstmodule \firstmodulefalse
+ \else \LWfilbreak \bigskip \fi
+ \advance\modulecount\@ne
+ \LWmarkmodule
+ \begingroup \LWmoduledefs
+ \noindent {\bf \number\modulecount.}\enspace \ignorespaces}
+
+\def\LWendmodule/{%
+ \endgraf
+ \endgroup
+ \moduletrue}
+
+\def\LWmarkmodule {}
+
+\def\LWmoduledefs {\def\par{\endgraf\nobreak}\LWsetpwidth}
+
+% star modules
+\def\LWbeginstarmodule #1{%
+ \iffirstmodule \firstmodulefalse
+ \else \vfil \eject \fi
+ \advance\modulecount\@ne
+ \LWmarkstarmodule{#1}%
+ \begingroup \LWmoduledefs
+ \noindent {\bf \number\modulecount. \ignorespaces #1\par}
+ \nobreak \smallskip \noindent \ignorespaces}
+
+\def\LWmarkstarmodule {\message{*\number\modulecount}\mark}
+
+% spacing and layout
+\def\LWfilbreak {\vfil\penalty-200\vfilneg}
+\def\LWfilnobreak {\vfil\penalty9999\vfilneg}
+\parindent=2em
+\interlinepenalty=10000 % forbid page breaks in modules
+
+% code in module text
+\def\LWbcode/{\begingroup \LWcodefont \LWcodedefs \let\LWpuncfont=\LWcodepuncfont}
+\def\LWecode/{\/\endgroup}
+
+ % code
+\def\LWbeginlisp/{%
+ \iffirstmodule \beginmodule \endmodule \fi
+ \ifmodule \modulefalse \LWfilnobreak \bigskip
+ \else \LWfilnobreak \medskip \fi
+ \vbox\bgroup \LWnormalfont \LWcodedefs}
+
+\def\LWendlisp/{%
+ \egroup}
+
+\def\LWcodedefs {%
+ \spaceskip=\LWspacewidth
+ \xspaceskip=\LWspacewidth
+ \LWsetpwidth}
+
+% module text in code
+\def\LWcommentdefs {\spaceskip=\z@ \xspaceskip=\z@ \LWcommentfont \LWsetpwidth}
+\def\LWbcom/{\begingroup \LWcommentdefs {\rm;\kern\LWcommentkern}}
+\def\LWecom/{\endgroup}
+
+ % miscellany
+\ifx\lisp\undefined
+ \def\lisp {Lisp}
+ \let\LISP=\lisp
+ \let\Lisp=\lisp
+\fi
+\def\lweb {LWEB}
+\let\LWEB=\lweb
+
+ % cleanup
+\catcode`\@=12
diff --git a/macros/plain/contrib/misc/maybeload.tex b/macros/plain/contrib/misc/maybeload.tex
new file mode 100644
index 0000000000..0c8a088de5
--- /dev/null
+++ b/macros/plain/contrib/misc/maybeload.tex
@@ -0,0 +1,13 @@
+% A small macro for Tex82 or Latex. You can prevent a file of
+% macros from being loaded twice by putting
+% \input maybeload
+% \thisfileis{<dirname>filename}
+% in the macro file. -- eb@oz 6/27/86
+\global\def\thisfileis#1{\if T\csname #1=loaded\endcsname \endinput
+ \else \global\expandafter\def\csname #1=loaded\endcsname{T}\fi}
+%
+% If you like, you can conditionalize the \input maybeload with the
+% incantation
+% \ifx\thisfileis\anUndefinedMacro\input maybeload \fi
+% instead of just \input maybeload.
+%
diff --git a/macros/plain/contrib/misc/memo.tex b/macros/plain/contrib/misc/memo.tex
new file mode 100644
index 0000000000..dcdcc622f3
--- /dev/null
+++ b/macros/plain/contrib/misc/memo.tex
@@ -0,0 +1,40 @@
+%
+% Memo -- Generate a memo banner
+%
+% Use \memodept{ text } to define the department text.
+% Use \memocirc{ text } to define the to field.
+% Use \memodate{ text } to define the date the memo will be sent (default is
+% the current date that TeX processes the file).
+% Use \memofrom{ text } to define the from field.
+% Use \memophone{ text } to define the phone number of the sender.
+% Use \memomail{ text } to define the mail code of the sender.
+% Use \memosubj{ text } to define the subject of the memo.
+%
+% Use \memohdr to print the memo banner once the fields above have been defined
+%
+\nopagenumbers
+\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\memotwobx#1#2{\line{{To}\hskip 10pt #1\hfill{Date}\hskip 10pt #2}}
+\def\memothrbx#1#2#3{\line{{From}\hskip 10pt #1\hfill\hfill\hfill
+ {Extension}\hskip 10pt #2\hfill{Mail Code}\hskip 10pt #3}}
+\def\memoltbx#1{\line{{Subject}\hskip 10pt #1\hfill}}
+\def\memoya{Chemistry} \def\memoyb{You}
+\def\memoyc{\today} \def\memoyd{Me}
+\def\memoye{6532} \def\memoyf{Misc.}
+\def\memoyg{127-72}
+\def\memodept#1{\def\memoya{#1}}\def\memocirc#1{\def\memoyb{#1}}
+\def\memodate#1{\def\memoyc{#1}}\def\memofrom#1{\def\memoyd{#1}}
+\def\memophone#1{\def\memoye{#1}}\def\memosubj#1{\def\memoyf{#1}}
+\def\memomail#1{\def\memoyg{#1}}
+\font\fiverm=ambx5 % Change to CMBX5 if you use new TeX 2.0
+\def\memohdr{\centerline{\fiverm interoffice memorandum}\par
+ \null\par
+ \centerline{\bf CALIFORNIA INSTITUTE OF TECHNOLOGY} % Change this line
+ \centerline{\bf {\memoya}}
+ \null\par
+ \memotwobx{\memoyb}{\memoyc}
+ \memothrbx{\memoyd}{\memoye}{\memoyg}
+ \memoltbx{\memoyf}
+ \vskip 10pt}
diff --git a/macros/plain/contrib/misc/mhack.tex b/macros/plain/contrib/misc/mhack.tex
new file mode 100644
index 0000000000..6f0546a19d
--- /dev/null
+++ b/macros/plain/contrib/misc/mhack.tex
@@ -0,0 +1,102 @@
+%% Save file as: MHACK.TEX Source: FILESERV@SHSU.BITNET
+%% Original author: Norman Walsh <walsh@cs.umass.edu>
+%% Original source: Posted to INFO-TeX@SHSU.edu by
+%% RAY BROHINSKY <RAYBRO%HOLON@utrcgw.utc.com> on Fri, 27 Sep 1991 16:29 EDT
+%%
+%Here are two solutions for marginal hacks. \ihack is based upon
+%the marginal hacks notes in the book and requires the section that
+%redefines \pagecontents. It has the defect that marginal hacks
+%start at the top of the page rather than where you put them in the
+%text.
+
+%\vhack doesn't use inserts and has the advantage that you don't
+%need to redefine part of the output routine (\pagecontents) but if
+%you put several hacks very close to each other, they may overlap.%
+
+%Let me know what you think. If you have try to integrate them into
+%your notes and you have trouble, just let me know.
+
+% mhack.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\font\marginhackfont=cmr7
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newinsert\margin
+\dimen\margin=\maxdimen
+\count\margin=0 \skip\margin=0pt
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\marginhackwidth
+\newdimen\marginhackshift
+\newdimen\marginhacknudge
+\marginhackwidth=.8in
+\marginhackshift=\hsize
+\advance\marginhackshift by .1in
+\marginhacknudge=.1in
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ihack#1{\marginhacknudge=0pt\insert\margin{\hbox{\marginhackpara{#1}}}}
+\def\vhack#1{\vadjust{\vbox to 0pt{%
+ \marginhacknudge=.1in%
+ \vskip-8.5pt% move it back up the page
+ \hskip6.2in\rlap{%
+ \marginhackpara{#1}}\vss}}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% this is a modified version of \para that I got
+% from ... somewhere
+%
+\long\def\marginhackpara#1{% %
+ \hskip\marginhacknudge %
+ \vtop{\leftskip=0pt\rightskip=0pt % Make width ok
+ \hsize=\marginhackwidth %
+ \marginhackfont % select font
+ \parindent=0pt %
+ \baselineskip=6pt %
+ \everypar={} %
+ \lineskip=1pt %
+ \lineskiplimit=1pt %
+ \raggedright %
+ \hbadness=10000 % I don't care about underfull boxes
+ \tolerance=10000 % I don't care about overfull ones
+ \noindent % don't indent
+ \vrule width0pt height8.5pt % line up top of hack and text
+ #1\relax % add the text
+ \vrule width 0pt depth 7pt}% % pad bottom of box
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Include the marginal hacks in the plain output routine
+% (only needed for \ihack)
+\catcode`@=11
+\def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi
+ \ifvoid\margin\else %
+ \rlap{\kern\marginhackshift\vbox to 0pt{\box\margin\vss}}\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}
+\catcode`@=12 % at signs are no longer letters
+
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Here is some text followed by more text and more text and more text and
+more text and more text and more text and more text and more text and
+more text and more text and more text and more text and more text and
+more text and more text and more text and more text and more text and
+more text and more text and more text and more text and more text and
+more text and more text and more text and more text and more text and
+more text and more text and more text and more text and more text and
+more text and more text and more text and more text and more text and
+more text and more text and more text and more text and more text and
+more text and more text and VHACK\vhack{this is a vhack, it starts
+here and goes on for several lines} more text and more text and
+more text and more text and more text and more text and more text and
+more VHACK\vhack{this is another vhack, which collides}
+and more text and more text and more text and more text and
+more text and more IHACK\ihack{this is an ihack, it starts at the top}
+and more text and more text and more
+IHACK\ihack{this is a second ihack, but it doesn't collide}
+and more text and more text and more text and more text and more text and
+more text and more text and more text and more text and more text and
+more text and more text and more text and more text and more text and
+more text and more text and more text and more text and more text and
+more text and more text and more text and more text and more text.
+\bye
+% end of mhack.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/plain/contrib/misc/model.tex b/macros/plain/contrib/misc/model.tex
new file mode 100644
index 0000000000..d983917210
--- /dev/null
+++ b/macros/plain/contrib/misc/model.tex
@@ -0,0 +1,98 @@
+%%%%%% example of use:
+% \input model
+% \totalpages=5 % if you want the total number of pages to appear in the heading
+% \centerline{title}
+% \centerline{authors names}
+% \endoftitle
+% rest of paper
+% \endofpaper\end
+
+
+\newdimen\fullhsize \fullhsize=42truepc
+\newdimen\fullvsize \fullvsize=52truepc
+\newdimen\colhsize \colhsize=20truepc
+\newdimen\topvsize \topvsize=10truepc % this number can be changed
+\newdimen\shortvsize
+\newif\iftitlepage \titlepagetrue
+\newbox\leftcolumn \newbox\rightcolumn \newbox\topcolumn
+\newcount\totalpages \totalpages=0 % specify this if you want page numbers
+\output{
+\iftitlepage
+ \if T\column
+ \global\shortvsize=\fullvsize
+ \global\advance\shortvsize by -\topvsize
+ \global\hsize\colhsize \global\vsize\shortvsize
+ \global\setbox\topcolumn=\columnbox
+ \global\let\column=L
+ \else \if L\column
+ \global\setbox\leftcolumn=\columnbox
+ \global\let\column=R
+ \else \shipout\vbox to \fullvsize{\pagenumberbox
+ \box\topcolumn
+ \vss
+ \hbox to \fullhsize{\box\leftcolumn
+ \hfill\columnbox}}
+ \advancepageno
+ \global\let\column=L
+ \global\titlepagefalse
+ \global\vsize=\fullvsize
+ \fi
+ \fi
+\else \if L\column
+ \global\setbox\leftcolumn=\columnbox
+ \global\let\column=R
+ \else \shipout\vbox to \fullvsize{\pagenumberbox
+ \hbox to\fullhsize{\box\leftcolumn
+ \hfill\columnbox}}
+ \advancepageno
+ \global\let\column=L
+ \fi
+\fi}
+
+\def\columnbox{\leftline{\pagebody}}
+
+\def\pagenumberbox{\baselineskip0pt\lineskip0pt
+ \vbox to 0pt{\vss\hbox to \fullhsize{\hfil\tenrm
+ Page \folio\ifnum\totalpages>0\ of \number\totalpages.\fi\hfil}
+ \vskip1pc}}
+
+\let\column=T
+\vsize=\topvsize \hsize=\fullhsize
+
+\def\endoftitle{\par\vfill\eject}
+
+\def\endofpaper{\par\vfill\supereject\if R\column \null\vfill\eject\fi}
+
+% 8 point footnotes
+\catcode`@=11 % allow at signs in following entry
+\def\vfootnote#1{\insert\footins\bgroup
+ \eightpoint
+ \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}
+\catcode`@=12 % at signs are no longer letters
+
+\def\eightpoint{\let\rm=\eightrm
+\setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
+\rm\baselineskip=9pt}
+\font\eightrm=cmr8
+
+\def\eatone#1{}
+
+% \unnumberedfootnote{...text...} gives an unnumbered footnote
+% \footnote{symbol/number}{...text...} gives a labelled footnote
+\def\unnumberedfootnote{\footnote{\eatone}}
+
+
+% \acmpermission puts the ACM permission text in a unnumbered footnote
+\def\acmpermission{\unnumberedfootnote{Permission to copy without fee all or
+ part of this material is granted provided that the copies are not made
+ or distributed for direct commercial advantage, the ACM copyright notice
+ and the title of the publication and its date appear, and notice is
+ given that copying is by permission of the Association of Computing
+ Machinery.
+To copy otherwise, or to republish, requires a fee and/or
+ specific permission.}}
+
diff --git a/macros/plain/contrib/misc/mrecog.tex b/macros/plain/contrib/misc/mrecog.tex
new file mode 100644
index 0000000000..15fca10eb2
--- /dev/null
+++ b/macros/plain/contrib/misc/mrecog.tex
@@ -0,0 +1,365 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% mrecog.tex %%%%% mrecog.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Mathmode control-sequence recognition for TeX/LaTeX
+%
+% Version 0.1 (Beta test version)
+% Last revised: June 26, 1990
+%
+% Author: Robert H. Wentworth (rhw@hoh-1.att.com)
+%
+% (C) Copyright 1990 Robert H. Wentworth
+%
+% Description:
+% When this file is included in a TeX or LaTeX file,
+% (via \input or as a *.sty file) "command sequence recognition"
+% is activated for all text appearing in math mode.
+% What this means is that any consecutive sequence of two or more
+% letters delimited by nonletters will be checked to see if it is
+% the name of a currently-defined control sequence, and if it is
+% then the sequence of letters will be replaced by the corresponding
+% control sequence. The intent is to render equations more
+% readable by eliminating the need for explicit escape characters
+% (usually backslashes).
+%
+% Examples:
+% The following samples expand as if backslashes were inserted
+% in appropriate spots:
+%
+% It is obvious that
+% $$ f(x) = (a times b)
+% int_0^{infty} g(x) cos(pi log phi)\,d phi $$
+%
+% Note that ``theta'' is not recognized but $theta$ is.
+%
+% \def\cis(#1){cos(#1) + i{}sin(#1)}
+% $$e^{i theta} = cis(theta) qquad \hbox{for $theta$ real}$$
+%
+% Details:
+% Command sequences with explicit escapes (backslashes) will
+% continue to be recognized in the normal way.
+%
+% Single letters are not recognized as command sequences; to type
+% a command sequence whose name is a single letter an explicit
+% escape (backslash) should be used (e.g., $\j$ yields a j without
+% a dot, but $j$ does not).
+%
+% Whitespace (spaces, tabs, returns) may delimit letter-sequences.
+% Thus if a sequence of letters which should be interpreted literally
+% is in danger of being recognized as a control sequence, this can
+% be avoided by inserting a space (or {}) into the sequence
+% (e.g., $div$ yields a division sign, but $d i v$ or $di{}v$ does not).
+%
+% If the count variable \tracingrecognition is set to a positive number
+% then information regarding what command sequences have been
+% recognized will be printed to the terminal and the log file.
+% This is useful for debugging.
+%
+% There should be no effect outside mathmode (unless a symbolic
+% name is used which conflicts with names used in this file;
+% an attempt has been made to minimize the likelihood of this.)
+% Active letters cannot be used without conflicting with the
+% workings of this file, and whitespace must be defined in the
+% usual way within mathmode.
+%
+% Recognition can be turned off/on by either of two mechanisms:
+%
+% \dorecognition=0 \dorecognition=1
+% This turns recognition off/on very quickly,
+% but some processing overhead continues to
+% be present even when recognition is off;
+% some complicated mathmode macros which object to
+% the use of active letters might be interfered
+% with even when recognition is off.
+% This mechanisim affects only the current
+% group unless a \global assignment is used.
+%
+% \deactivatemathletters \activatemathletters
+% These require somewhat more processing to
+% turn recognition off or on, but when
+% recognition is off mathmode is more
+% nearly in its native state, so that even
+% most complicated mathmode macros should
+% function properly. This mechanism has
+% global effects.
+%
+% Recognition is initially on.
+%
+% Recognition is recursive. Thus text generated by macros inside
+% mathmode will itself be scanned for recognizable control sequence
+% names.
+%
+% The use of the recognition feature will slow down the processing
+% of equations somewhat, but the additional computations done are
+% linear in the amount of mathmode letter-text scanned, and the
+% memory used is more-or-less constant, so pathological slowdowns
+% or memory overflows are not expected.
+%
+% Known limitations:
+%
+% Command sequences whose names are followed by spaces which
+% precede arguments or syntactically significant tokens will
+% not work properly unless explicitly escaped. Typically
+% these macros are not part of the natural flow of the
+% equation anyway, so the use of explicit escapes (backslashes)
+% is not particularly objectionable.
+% (This was a design tradeoff. These could have been made to
+% work, but with the unpleasant side-effect that the sequence
+% \def\cat{dog}\def\dogflea{mouse} $cat flea$ would expand
+% to $mouse$; i.e., the space would only act as a delimiter
+% during the first evaluation.)
+% Examples: use $\hbox to 1in{...}$ rather than $hbox to 1in{...}$;
+% or use $hskip1in etc.$ or $\hskip 1in etc.$ rather than
+% $hskip 1in etc.$.
+%
+% The recursive nature of the recognition can cause problems
+% unless one is careful to prevent them. For example,
+% \def\dog{{\it dog}} $dog$ causes an infinite recursion.
+% Special macros are defined in this file that can be used
+% to prevent such recursion in simple macros:
+%
+% \norecogwithin{\dog} will turn off recognition within future
+% expansions of \dog; note that \dog expands in a group, and
+% hence some side-effects will only be local; macro should only
+% be used for macros without arguments.
+%
+% \norecogafter{\it} will turn off recognition prior to any
+% subsequent expansion of \it; note that recognition will
+% continue to stay off until local group containing \it
+% ends or \dorecognition=1 occurs. Recognition is turned
+% off only when \it occurs in mathmode.
+%
+% To prevent infinite recursion in common command sequences like
+% \sin, \cos, etc., this file declares \norecogafter{\rm}.
+% This redefines \rm (in a relatively minor way). The original
+% definition of \rm can be restored using \let\rm=\originalrm.
+%
+% In general recursive recognition is awkward to make practical
+% use of. (Recursive evaluation is a side-effect of the implementation
+% and isn't a priori desirable.) There are various hazards having to do
+% with differences between the state of letters and spaces under various
+% circumstances. In a typical problem, the sequence
+% \def\dog#1{sin #1} $dog{theta}$
+% expands to $sintheta$ rather than $\sin\theta$ because the space in
+% the definition of \dog is an ordinary space which does not serve as
+% a recognition-delimiter. Moving the definition inside mathmode
+% doesn't work either, because the letters of space gets scanned as
+% an ordinary space. (Spaces are modified only when they are first
+% scanned as a token following a letter-sequence which is a
+% candidate for recognition.) The example works for \dog defined by
+% \def\dog#1{sin{}#1} or \def\dog{\sin#1}.
+%
+% Improvements/comments:
+% The author would appreciate hearing about any positive or negative
+% experiences people may experience in using this feature, and also
+% about any improvements others may make.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% allow private names using @ in such a way that prior state can be restored.
+% this should permit file to be used either as a *.sty file or as a simple
+% \input file.
+\newif\ifatsignwasaletter
+\ifcat @a
+ \atsignwasalettertrue
+\else
+ \atsignwasaletterfalse
+ \catcode`\@=11
+\fi
+
+% change mathcodes to activate letters in mathmode
+\def\activatemathletters{%
+\begingroup
+\def\doallletters{\do{a}\do{b}\do{c}\do{d}\do{e}\do{f}\do{g}\do{h}\do{i}\do{j}
+\do{k}\do{l}\do{m}\do{n}\do{o}\do{p}\do{q}\do{r}\do{s}\do{t}\do{u}\do{v}
+\do{w}\do{x}\do{y}\do{z}\do{A}\do{B}\do{C}\do{D}\do{E}\do{F}\do{G}\do{H}
+\do{I}\do{J}\do{K}\do{L}\do{M}\do{N}\do{O}\do{P}\do{Q}\do{R}\do{S}\do{T}
+\do{U}\do{V}\do{W}\do{X}\do{Y}\do{Z}\relax}
+\def\do##1{\global\mathcode`##1="8000}
+\doallletters
+\endgroup}
+\activatemathletters
+
+% set up command to permit deactivation
+\def\deactivatemathletters{%
+\global\mathcode`A="7141\global\mathcode`B="7142\global\mathcode`C="7143
+\global\mathcode`D="7144\global\mathcode`E="7145\global\mathcode`F="7146
+\global\mathcode`G="7147\global\mathcode`H="7148\global\mathcode`I="7149
+\global\mathcode`J="714A\global\mathcode`K="714B\global\mathcode`L="714C
+\global\mathcode`M="714D\global\mathcode`N="714E\global\mathcode`O="714F
+\global\mathcode`P="7150\global\mathcode`Q="7151\global\mathcode`R="7152
+\global\mathcode`S="7153\global\mathcode`T="7154\global\mathcode`U="7155
+\global\mathcode`V="7156\global\mathcode`W="7157\global\mathcode`X="7158
+\global\mathcode`Y="7159\global\mathcode`Z="715A\global\mathcode`a="7161
+\global\mathcode`b="7162\global\mathcode`c="7163\global\mathcode`d="7164
+\global\mathcode`e="7165\global\mathcode`f="7166\global\mathcode`g="7167
+\global\mathcode`h="7168\global\mathcode`i="7169\global\mathcode`j="716A
+\global\mathcode`k="716B\global\mathcode`l="716C\global\mathcode`m="716D
+\global\mathcode`n="716E\global\mathcode`o="716F\global\mathcode`p="7170
+\global\mathcode`q="7171\global\mathcode`r="7172\global\mathcode`s="7173
+\global\mathcode`t="7174\global\mathcode`u="7175\global\mathcode`v="7176
+\global\mathcode`w="7177\global\mathcode`x="7178\global\mathcode`y="7179
+\global\mathcode`z="717A\relax}
+
+% set up definitions for active uppercase characters
+{\def\\{A}\catcode`A=\active\xdefA{\noexpand\dolett@r{\\}{\mathchar"7141}}}
+{\def\\{B}\catcode`B=\active\xdefB{\noexpand\dolett@r{\\}{\mathchar"7142}}}
+{\def\\{C}\catcode`C=\active\xdefC{\noexpand\dolett@r{\\}{\mathchar"7143}}}
+{\def\\{D}\catcode`D=\active\xdefD{\noexpand\dolett@r{\\}{\mathchar"7144}}}
+{\def\\{E}\catcode`E=\active\xdefE{\noexpand\dolett@r{\\}{\mathchar"7145}}}
+{\def\\{F}\catcode`F=\active\xdefF{\noexpand\dolett@r{\\}{\mathchar"7146}}}
+{\def\\{G}\catcode`G=\active\xdefG{\noexpand\dolett@r{\\}{\mathchar"7147}}}
+{\def\\{H}\catcode`H=\active\xdefH{\noexpand\dolett@r{\\}{\mathchar"7148}}}
+{\def\\{I}\catcode`I=\active\xdefI{\noexpand\dolett@r{\\}{\mathchar"7149}}}
+{\def\\{J}\catcode`J=\active\xdefJ{\noexpand\dolett@r{\\}{\mathchar"714A}}}
+{\def\\{K}\catcode`K=\active\xdefK{\noexpand\dolett@r{\\}{\mathchar"714B}}}
+{\def\\{L}\catcode`L=\active\xdefL{\noexpand\dolett@r{\\}{\mathchar"714C}}}
+{\def\\{M}\catcode`M=\active\xdefM{\noexpand\dolett@r{\\}{\mathchar"714D}}}
+{\def\\{N}\catcode`N=\active\xdefN{\noexpand\dolett@r{\\}{\mathchar"714E}}}
+{\def\\{O}\catcode`O=\active\xdefO{\noexpand\dolett@r{\\}{\mathchar"714F}}}
+{\def\\{P}\catcode`P=\active\xdefP{\noexpand\dolett@r{\\}{\mathchar"7150}}}
+{\def\\{Q}\catcode`Q=\active\xdefQ{\noexpand\dolett@r{\\}{\mathchar"7151}}}
+{\def\\{R}\catcode`R=\active\xdefR{\noexpand\dolett@r{\\}{\mathchar"7152}}}
+{\def\\{S}\catcode`S=\active\xdefS{\noexpand\dolett@r{\\}{\mathchar"7153}}}
+{\def\\{T}\catcode`T=\active\xdefT{\noexpand\dolett@r{\\}{\mathchar"7154}}}
+{\def\\{U}\catcode`U=\active\xdefU{\noexpand\dolett@r{\\}{\mathchar"7155}}}
+{\def\\{V}\catcode`V=\active\xdefV{\noexpand\dolett@r{\\}{\mathchar"7156}}}
+{\def\\{W}\catcode`W=\active\xdefW{\noexpand\dolett@r{\\}{\mathchar"7157}}}
+{\def\\{X}\catcode`X=\active\xdefX{\noexpand\dolett@r{\\}{\mathchar"7158}}}
+{\def\\{Y}\catcode`Y=\active\xdefY{\noexpand\dolett@r{\\}{\mathchar"7159}}}
+{\def\\{Z}\catcode`Z=\active\xdefZ{\noexpand\dolett@r{\\}{\mathchar"715A}}}
+
+% set up definitions for active uppercase characters
+\begingroup
+\let\CATCODE=\catcode \let\GDEF=\gdef \def\DOLETT@R{\noexpand\dolett@r}
+\def\MATHCHAR{\mathchar} \let\ACTIVE=\active
+\let\XDEF=\xdef \let\DEF=\def
+{\DEF\\{a}\CATCODE`a=\ACTIVE\XDEFa{\DOLETT@R{\\}{\MATHCHAR"7161}}}
+{\DEF\\{b}\CATCODE`b=\ACTIVE\XDEFb{\DOLETT@R{\\}{\MATHCHAR"7162}}}
+{\DEF\\{c}\CATCODE`c=\ACTIVE\XDEFc{\DOLETT@R{\\}{\MATHCHAR"7163}}}
+{\DEF\\{d}\CATCODE`d=\ACTIVE\XDEFd{\DOLETT@R{\\}{\MATHCHAR"7164}}}
+{\DEF\\{e}\CATCODE`e=\ACTIVE\XDEFe{\DOLETT@R{\\}{\MATHCHAR"7165}}}
+{\DEF\\{f}\CATCODE`f=\ACTIVE\XDEFf{\DOLETT@R{\\}{\MATHCHAR"7166}}}
+{\DEF\\{g}\CATCODE`g=\ACTIVE\XDEFg{\DOLETT@R{\\}{\MATHCHAR"7167}}}
+{\DEF\\{h}\CATCODE`h=\ACTIVE\XDEFh{\DOLETT@R{\\}{\MATHCHAR"7168}}}
+{\DEF\\{i}\CATCODE`i=\ACTIVE\XDEFi{\DOLETT@R{\\}{\MATHCHAR"7169}}}
+{\DEF\\{j}\CATCODE`j=\ACTIVE\XDEFj{\DOLETT@R{\\}{\MATHCHAR"716A}}}
+{\DEF\\{k}\CATCODE`k=\ACTIVE\XDEFk{\DOLETT@R{\\}{\MATHCHAR"716B}}}
+{\DEF\\{l}\CATCODE`l=\ACTIVE\XDEFl{\DOLETT@R{\\}{\MATHCHAR"716C}}}
+{\DEF\\{m}\CATCODE`m=\ACTIVE\XDEFm{\DOLETT@R{\\}{\MATHCHAR"716D}}}
+{\DEF\\{n}\CATCODE`n=\ACTIVE\XDEFn{\DOLETT@R{\\}{\MATHCHAR"716E}}}
+{\DEF\\{o}\CATCODE`o=\ACTIVE\XDEFo{\DOLETT@R{\\}{\MATHCHAR"716F}}}
+{\DEF\\{p}\CATCODE`p=\ACTIVE\XDEFp{\DOLETT@R{\\}{\MATHCHAR"7170}}}
+{\DEF\\{q}\CATCODE`q=\ACTIVE\XDEFq{\DOLETT@R{\\}{\MATHCHAR"7171}}}
+{\DEF\\{r}\CATCODE`r=\ACTIVE\XDEFr{\DOLETT@R{\\}{\MATHCHAR"7172}}}
+{\DEF\\{s}\CATCODE`s=\ACTIVE\XDEFs{\DOLETT@R{\\}{\MATHCHAR"7173}}}
+{\DEF\\{t}\CATCODE`t=\ACTIVE\XDEFt{\DOLETT@R{\\}{\MATHCHAR"7174}}}
+{\DEF\\{u}\CATCODE`u=\ACTIVE\XDEFu{\DOLETT@R{\\}{\MATHCHAR"7175}}}
+{\DEF\\{v}\CATCODE`v=\ACTIVE\XDEFv{\DOLETT@R{\\}{\MATHCHAR"7176}}}
+{\DEF\\{w}\CATCODE`w=\ACTIVE\XDEFw{\DOLETT@R{\\}{\MATHCHAR"7177}}}
+{\DEF\\{x}\CATCODE`x=\ACTIVE\XDEFx{\DOLETT@R{\\}{\MATHCHAR"7178}}}
+{\DEF\\{y}\CATCODE`y=\ACTIVE\XDEFy{\DOLETT@R{\\}{\MATHCHAR"7179}}}
+{\DEF\\{z}\CATCODE`z=\ACTIVE\XDEFz{\DOLETT@R{\\}{\MATHCHAR"717A}}}
+\endgroup
+
+% allocate registers and initialize
+\newtoks\cod@toks
+\newtoks\lett@rtoks
+\newcount\tracingrecognition
+\newcount\dorecognition
+\newcount\readyneww@rd
+\newcount\charsinw@rd
+\tracingrecognition=0
+\dorecognition=1
+\readyneww@rd=1
+
+% set up spaces so that if \mak@spacesordin@ry is declared the next whitespace
+% character (space, tab, return) will be an ordinary nonletter character.
+% effect is undone by \restor@regularspaces
+
+\def\mak@spacesordin@ry{%
+\catcode`\ =12\catcode`\^^I=12\catcode`\^^M=12\relax}
+
+\def\restor@regularspaces{\catcode`\ =10\catcode`\^^I=10\catcode`\^^M=5\relax}
+
+% macro to process a letter in mathmode: save forms of letter on
+% appropriate token lists, and take appropriate action if letter
+% is the first or last in a word
+\def\dolett@r#1#2{\ifodd\dorecognition
+ \ifodd\readyneww@rd\beginmathw@rd\fi
+ \edef\worddef##1{##1={\the\cod@toks#2}}\worddef\cod@toks
+ \edef\worddef##1{##1={\the\lett@rtoks\noexpand#1}}\worddef\lett@rtoks
+ \advance\charsinw@rd by 1
+ \let\enddolett@r=\rec@gnitionenddolett@r
+ \else
+ \def\enddolett@r{#2}\fi
+ \enddolett@r}
+\def\rec@gnitionenddolett@r{\futurelet\n@xttok@n\ch@ckn@xttok@n}
+
+% macro to decide whether or not next token is special case:
+% if open-brace or close-brace follows, simply terminate word;
+% otherwise do more extensive processing which involves
+% slightly more "destructive" processing on the next token (in that it
+% becomes a macro argument).
+\def\ch@ckn@xttok@n{\def\trailing@cs{}\ifx\n@xttok@n\bgroup
+ \simpl@endw@rd\else
+ \ifx\n@xttok@n\egroup
+ \simpl@endw@rd\else
+ \def\fin@l@cs{\ch@ckn@xtargum@nt}\fi
+ \fi
+ \fin@l@cs}
+
+% macro to terminate word without messing with subsequent tokens
+\def\simpl@endw@rd{\def\fin@l@cs{\endmathw@rd\trailing@cs}}
+
+% macro to see if next token is a letter; if not, terminates word
+\def\ch@ckn@xtargum@nt#1{\ifcat\noexpand#1a\else
+ \endmathw@rd\fi
+ \trailing@cs#1}
+
+% macro to do initialization needed at the beggining of a new word
+\def\beginmathw@rd{\readyneww@rd=0
+ \charsinw@rd=0
+ \cod@toks={}\lett@rtoks={}\mak@spacesordin@ry}
+
+% macro to do appropriate processing at the end of a word
+\def\endmathw@rd{\restor@regularspaces
+ \readyneww@rd=1
+ % ready to start new word (new word could be generated by control sequence)
+ \ifnum\charsinw@rd=1
+ \the\cod@toks % don't recognize single letters as control sequences
+ \else
+ \expandafter\ifx\csname\the\lett@rtoks\endcsname\relax
+ \the\cod@toks
+ \else \expandafter\def\expandafter\trailing@cs\expandafter
+ {\csname\the\lett@rtoks\endcsname}\ifnum
+ \tracingrecognition>0
+ \immediate\write16{{Recognized math sequence: \expandafter
+ \string\csname\the\lett@rtoks\endcsname}}\fi
+ \fi
+ \fi}
+
+% macros to block excessive recognition
+
+% redefine macro to turn off recognition, then expand
+\def\norecogafter#1{{\let\t@mp@@@=#1%
+\xdef#1{\noexpand\ifmmode\dorecognition=0\noexpand\fi\t@mp@@@}}}
+
+% redefine argumentless macro to turn off recognition only while it expands
+% expansion is done within a group (so side-effects are only local unless
+% explicitly global)
+\def\norecogwithin#1{{\let\t@mp@@@=#1%
+\xdef#1{\begingroup\dorecognition=0\t@mp@@@\endgroup}}}
+
+% set up \rm so that it disables subsequent recognition
+\let\originalrm=\rm
+\norecogafter{\rm}
+
+% attempt to restore prior catcode for @
+\ifatsignwasaletter
+\else
+ % hide private names
+ \catcode`@=12
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/plain/contrib/misc/mssymb.tex b/macros/plain/contrib/misc/mssymb.tex
new file mode 100644
index 0000000000..79bd496853
--- /dev/null
+++ b/macros/plain/contrib/misc/mssymb.tex
@@ -0,0 +1,279 @@
+% ***** MSSYMB.TeX ***** 31 Mar 88
+%
+% This file contains the definitions for the symbols in the two
+% "extra symbols" fonts created at the American Math. Society.
+
+\catcode`\@=11
+
+\font\tenmsx=msxm10
+\font\sevenmsx=msxm7
+\font\fivemsx=msxm5
+\font\tenmsy=msym10
+\font\sevenmsy=msym7
+\font\fivemsy=msym5
+\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{\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 }
+
+\def\relaxnext@{\let\next\relax}
+\def\noaccents@{\def\accentfam@{0}}
+
+% The following 13 lines establish the use of the Euler Fraktur font.
+% To use this font, remove % from beginning of these lines.
+%\font\teneuf=eufm10
+%\font\seveneuf=eufm7
+%\font\fiveeuf=eufm5
+%\newfam\euffam
+%\textfont\euffam=\teneuf
+%\scriptfont\euffam=\seveneuf
+%\scriptscriptfont\euffam=\fiveeuf
+%\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.
+
+\edef\msx@{\hexnumber@\msxfam}
+\edef\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\centerdot="2\msx@05
+\mathchardef\lozenge="0\msx@06
+\mathchardef\blacklozenge="0\msx@07
+\mathchardef\circlearrowright="3\msx@08
+\mathchardef\circlearrowleft="3\msx@09
+\mathchardef\rightleftharpoons="3\msx@0A
+\mathchardef\leftrightharpoons="3\msx@0B
+\mathchardef\boxminus="2\msx@0C
+\mathchardef\Vdash="3\msx@0D
+\mathchardef\Vvdash="3\msx@0E
+\mathchardef\vDash="3\msx@0F
+\mathchardef\twoheadrightarrow="3\msx@10
+\mathchardef\twoheadleftarrow="3\msx@11
+\mathchardef\leftleftarrows="3\msx@12
+\mathchardef\rightrightarrows="3\msx@13
+\mathchardef\upuparrows="3\msx@14
+\mathchardef\downdownarrows="3\msx@15
+\mathchardef\upharpoonright="3\msx@16
+\let\restriction=\upharpoonright
+\mathchardef\downharpoonright="3\msx@17
+\mathchardef\upharpoonleft="3\msx@18
+\mathchardef\downharpoonleft="3\msx@19
+\mathchardef\rightarrowtail="3\msx@1A
+\mathchardef\leftarrowtail="3\msx@1B
+\mathchardef\leftrightarrows="3\msx@1C
+\mathchardef\rightleftarrows="3\msx@1D
+\mathchardef\Lsh="3\msx@1E
+\mathchardef\Rsh="3\msx@1F
+\mathchardef\rightsquigarrow="3\msx@20
+\mathchardef\leftrightsquigarrow="3\msx@21
+\mathchardef\looparrowleft="3\msx@22
+\mathchardef\looparrowright="3\msx@23
+\mathchardef\circeq="3\msx@24
+\mathchardef\succsim="3\msx@25
+\mathchardef\gtrsim="3\msx@26
+\mathchardef\gtrapprox="3\msx@27
+\mathchardef\multimap="3\msx@28
+\mathchardef\therefore="3\msx@29
+\mathchardef\because="3\msx@2A
+\mathchardef\doteqdot="3\msx@2B
+\let\Doteq=\doteqdot
+\mathchardef\triangleq="3\msx@2C
+\mathchardef\precsim="3\msx@2D
+\mathchardef\lesssim="3\msx@2E
+\mathchardef\lessapprox="3\msx@2F
+\mathchardef\eqslantless="3\msx@30
+\mathchardef\eqslantgtr="3\msx@31
+\mathchardef\curlyeqprec="3\msx@32
+\mathchardef\curlyeqsucc="3\msx@33
+\mathchardef\preccurlyeq="3\msx@34
+\mathchardef\leqq="3\msx@35
+\mathchardef\leqslant="3\msx@36
+\mathchardef\lessgtr="3\msx@37
+\mathchardef\backprime="0\msx@38
+\mathchardef\risingdotseq="3\msx@3A
+\mathchardef\fallingdotseq="3\msx@3B
+\mathchardef\succcurlyeq="3\msx@3C
+\mathchardef\geqq="3\msx@3D
+\mathchardef\geqslant="3\msx@3E
+\mathchardef\gtrless="3\msx@3F
+\mathchardef\sqsubset="3\msx@40
+\mathchardef\sqsupset="3\msx@41
+\mathchardef\vartriangleright="3\msx@42
+\mathchardef\vartriangleleft="3\msx@43
+\mathchardef\trianglerighteq="3\msx@44
+\mathchardef\trianglelefteq="3\msx@45
+\mathchardef\bigstar="0\msx@46
+\mathchardef\between="3\msx@47
+\mathchardef\blacktriangledown="0\msx@48
+\mathchardef\blacktriangleright="3\msx@49
+\mathchardef\blacktriangleleft="3\msx@4A
+\mathchardef\vartriangle="0\msx@4D
+\mathchardef\blacktriangle="0\msx@4E
+\mathchardef\triangledown="0\msx@4F
+\mathchardef\eqcirc="3\msx@50
+\mathchardef\lesseqgtr="3\msx@51
+\mathchardef\gtreqless="3\msx@52
+\mathchardef\lesseqqgtr="3\msx@53
+\mathchardef\gtreqqless="3\msx@54
+\mathchardef\Rrightarrow="3\msx@56
+\mathchardef\Lleftarrow="3\msx@57
+\mathchardef\veebar="2\msx@59
+\mathchardef\barwedge="2\msx@5A
+\mathchardef\doublebarwedge="2\msx@5B
+\mathchardef\angle="0\msx@5C
+\mathchardef\measuredangle="0\msx@5D
+\mathchardef\sphericalangle="0\msx@5E
+\mathchardef\varpropto="3\msx@5F
+\mathchardef\smallsmile="3\msx@60
+\mathchardef\smallfrown="3\msx@61
+\mathchardef\Subset="3\msx@62
+\mathchardef\Supset="3\msx@63
+\mathchardef\Cup="2\msx@64
+\let\doublecup=\Cup
+\mathchardef\Cap="2\msx@65
+\let\doublecap=\Cap
+\mathchardef\curlywedge="2\msx@66
+\mathchardef\curlyvee="2\msx@67
+\mathchardef\leftthreetimes="2\msx@68
+\mathchardef\rightthreetimes="2\msx@69
+\mathchardef\subseteqq="3\msx@6A
+\mathchardef\supseteqq="3\msx@6B
+\mathchardef\bumpeq="3\msx@6C
+\mathchardef\Bumpeq="3\msx@6D
+\mathchardef\lll="3\msx@6E
+\let\llless=\lll
+\mathchardef\ggg="3\msx@6F
+\let\gggtr=\ggg
+\mathchardef\circledS="0\msx@73
+\mathchardef\pitchfork="3\msx@74
+\mathchardef\dotplus="2\msx@75
+\mathchardef\backsim="3\msx@76
+\mathchardef\backsimeq="3\msx@77
+\mathchardef\complement="0\msx@7B
+\mathchardef\intercal="2\msx@7C
+\mathchardef\circledcirc="2\msx@7D
+\mathchardef\circledast="2\msx@7E
+\mathchardef\circleddash="2\msx@7F
+\def\ulcorner{\delimiter"4\msx@70\msx@70 }
+\def\urcorner{\delimiter"5\msx@71\msx@71 }
+\def\llcorner{\delimiter"4\msx@78\msx@78 }
+\def\lrcorner{\delimiter"5\msx@79\msx@79 }
+\def\yen{\mathhexbox\msx@55 }
+\def\checkmark{\mathhexbox\msx@58 }
+\def\circledR{\mathhexbox\msx@72 }
+\def\maltese{\mathhexbox\msx@7A }
+\mathchardef\lvertneqq="3\msy@00
+\mathchardef\gvertneqq="3\msy@01
+\mathchardef\nleq="3\msy@02
+\mathchardef\ngeq="3\msy@03
+\mathchardef\nless="3\msy@04
+\mathchardef\ngtr="3\msy@05
+\mathchardef\nprec="3\msy@06
+\mathchardef\nsucc="3\msy@07
+\mathchardef\lneqq="3\msy@08
+\mathchardef\gneqq="3\msy@09
+\mathchardef\nleqslant="3\msy@0A
+\mathchardef\ngeqslant="3\msy@0B
+\mathchardef\lneq="3\msy@0C
+\mathchardef\gneq="3\msy@0D
+\mathchardef\npreceq="3\msy@0E
+\mathchardef\nsucceq="3\msy@0F
+\mathchardef\precnsim="3\msy@10
+\mathchardef\succnsim="3\msy@11
+\mathchardef\lnsim="3\msy@12
+\mathchardef\gnsim="3\msy@13
+\mathchardef\nleqq="3\msy@14
+\mathchardef\ngeqq="3\msy@15
+\mathchardef\precneqq="3\msy@16
+\mathchardef\succneqq="3\msy@17
+\mathchardef\precnapprox="3\msy@18
+\mathchardef\succnapprox="3\msy@19
+\mathchardef\lnapprox="3\msy@1A
+\mathchardef\gnapprox="3\msy@1B
+\mathchardef\nsim="3\msy@1C
+%\mathchardef\napprox="3\msy@1D
+\mathchardef\ncong="3\msy@1D
+\def\napprox{\not\approx}
+\mathchardef\varsubsetneq="3\msy@20
+\mathchardef\varsupsetneq="3\msy@21
+\mathchardef\nsubseteqq="3\msy@22
+\mathchardef\nsupseteqq="3\msy@23
+\mathchardef\subsetneqq="3\msy@24
+\mathchardef\supsetneqq="3\msy@25
+\mathchardef\varsubsetneqq="3\msy@26
+\mathchardef\varsupsetneqq="3\msy@27
+\mathchardef\subsetneq="3\msy@28
+\mathchardef\supsetneq="3\msy@29
+\mathchardef\nsubseteq="3\msy@2A
+\mathchardef\nsupseteq="3\msy@2B
+\mathchardef\nparallel="3\msy@2C
+\mathchardef\nmid="3\msy@2D
+\mathchardef\nshortmid="3\msy@2E
+\mathchardef\nshortparallel="3\msy@2F
+\mathchardef\nvdash="3\msy@30
+\mathchardef\nVdash="3\msy@31
+\mathchardef\nvDash="3\msy@32
+\mathchardef\nVDash="3\msy@33
+\mathchardef\ntrianglerighteq="3\msy@34
+\mathchardef\ntrianglelefteq="3\msy@35
+\mathchardef\ntriangleleft="3\msy@36
+\mathchardef\ntriangleright="3\msy@37
+\mathchardef\nleftarrow="3\msy@38
+\mathchardef\nrightarrow="3\msy@39
+\mathchardef\nLeftarrow="3\msy@3A
+\mathchardef\nRightarrow="3\msy@3B
+\mathchardef\nLeftrightarrow="3\msy@3C
+\mathchardef\nleftrightarrow="3\msy@3D
+\mathchardef\divideontimes="2\msy@3E
+\mathchardef\varnothing="0\msy@3F
+\mathchardef\nexists="0\msy@40
+\mathchardef\mho="0\msy@66
+\mathchardef\eth="0\msy@67
+\mathchardef\eqsim="3\msy@68
+\mathchardef\beth="0\msy@69
+\mathchardef\gimel="0\msy@6A
+\mathchardef\daleth="0\msy@6B
+\mathchardef\lessdot="3\msy@6C
+\mathchardef\gtrdot="3\msy@6D
+\mathchardef\ltimes="2\msy@6E
+\mathchardef\rtimes="2\msy@6F
+\mathchardef\shortmid="3\msy@70
+\mathchardef\shortparallel="3\msy@71
+\mathchardef\smallsetminus="2\msy@72
+\mathchardef\thicksim="3\msy@73
+\mathchardef\thickapprox="3\msy@74
+\mathchardef\approxeq="3\msy@75
+\mathchardef\succapprox="3\msy@76
+\mathchardef\precapprox="3\msy@77
+\mathchardef\curvearrowleft="3\msy@78
+\mathchardef\curvearrowright="3\msy@79
+\mathchardef\digamma="0\msy@7A
+\mathchardef\varkappa="0\msy@7B
+\mathchardef\hslash="0\msy@7D
+\mathchardef\hbar="0\msy@7E
+\mathchardef\backepsilon="3\msy@7F
+% Use the next 4 lines with AMS-TeX:
+%\def\Bbb{\relaxnext@\ifmmode\let\next\Bbb@\else
+% \def\next{\Err@{Use \string\Bbb\space only in math mode}}\fi\next}
+%\def\Bbb@#1{{\Bbb@@{#1}}}
+%\def\Bbb@@#1{\noaccents@\fam\msyfam#1}
+% Use the next 4 lines if NOT using AMS-TeX:
+\def\Bbb{\ifmmode\let\next\Bbb@\else
+ \def\next{\errmessage{Use \string\Bbb\space only in math mode}}\fi\next}
+\def\Bbb@#1{{\Bbb@@{#1}}}
+\def\Bbb@@#1{\fam\msyfam#1}
+
+\catcode`\@=12
diff --git a/macros/plain/contrib/misc/multihead.tex b/macros/plain/contrib/misc/multihead.tex
new file mode 100644
index 0000000000..93697be5b8
--- /dev/null
+++ b/macros/plain/contrib/misc/multihead.tex
@@ -0,0 +1,11 @@
+%%%--------------Cut along perforation--------------------------------
+% Macro for multiple line header.
+% By Don Hosek <DHOSEK@HMCVAX.BITNET>
+% To use:
+% \multihead{...}
+% If the header has more than one line, separate the lines with \\
+\newtoks\multihead
+\headline{\vtop{\let\\=\cr\halign{\line{#}\cr
+ \the\multihead\crcr}}}
+\multihead{\hss}
+%%%--------------Tear neatly------------------------------------------
diff --git a/macros/plain/contrib/misc/newinsert.tex b/macros/plain/contrib/misc/newinsert.tex
new file mode 100644
index 0000000000..bb37c41c76
--- /dev/null
+++ b/macros/plain/contrib/misc/newinsert.tex
@@ -0,0 +1,140 @@
+
+
+%%% ====================================================================
+%%% @TeX-file{
+%%% author = "Walter D. Neumann",
+%%% version = "1.2",
+%%% date = "22 July 1992",
+%%% time = "15:57:20 EDT",
+%%% filename = "newinsert.tex",
+%%% address = "Department of Mathematics
+%%% Ohio State University
+%%% Columbus, OH 43201
+%%% USA",
+%%% email = "neumann@mps.ohio-state.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "plain TeX, AMS-TeX, inserts, figures",
+%%% supported = "yes",
+%%% abstract = "Bug fixes to plain TeX macros \midinsert and
+%%% \topinsert",
+%%% }
+%%% ====================================================================
+
+% Include with "\input newinsert.tex" to fix following problems
+% with plain TeX's handling of \midinsert and \topinsert:
+%
+% 1. An insert that falls at the top of the page is too high: its
+% top is at top-of-page rather than top-of-ink.
+% 2. Plain uses \bigskip for space around inserts and assumes \bigskip
+% is 12pt plus stretch, so \midinsert misbehaves if \bigskipamount
+% is changed. This space should be an independent quantity.
+% 3. Consecutive midinserts that did not float are spaced twice
+% as far apart as consecutive topinserts or floated midinserts.
+% 4. Midinserts can get out of order (see Exercise 15.5 of TeXbook).
+% 5. A midinsert can incorrectly convert to a topinsert if TeX is
+% reading ahead (see top of page 116 of TeXbook).
+% 6. \removelastskip fails after a floated insert. This is relevant for
+% an insertion before any construction (such as a proclamation in
+% plain TeX) that does an explicit or implicit \removelastskip.
+% 7. The routine to split an insertion in the program TeX fails if
+% the insertion would fit on the current page after subtracting
+% shrink. To avoid this, INSERTIONS SHOULD NOT CONTAIN SHRINK.
+%
+% Remaining problem: With the default values of 10pt and 12pt for
+% \topskip and \baselineskip, TeX puts 2pt less space between a
+% topinsert or floated midinsert and following text than between a
+% middle insertion and following text. To avoid this without rewriting
+% the plain output routine use:
+%
+% \topskip=\baselineskip
+%
+% PARAMETERS:
+% Plain.tex puts \bigskipamount of space before and after inserts. As
+% described above, this should be an independent parameter with no shrink.
+% We provide \insertskipamount for this purpose (default 6pt plus 2pt;
+% this makes \insertskip behave like an unshrinkable \medskip).
+% In addition, \inserthardskipamount of glue is added at the top of EVERY
+% insert; it remains even at top of page (default 6pt; it should be at
+% least \topskipamount-(text height)).
+% These defaults give good balance for figure insertions of the form:
+% \midinsert
+% [Commands to include a graphics file]
+% \insertskip \centerline{Figure Title}
+% \endinsert.
+% Note use of \insertskip instead of \medskip to avoid shrink.
+%
+\chardef\newinsCatAt\the\catcode `\@
+\catcode `\@=11
+%
+%%%%%%%%%%%% Corrected insert macros for plain.tex %%%%%%%%%%%%%%%%%
+%
+% New skipamounts:
+%
+\newskip\insertskipamount\newskip\inserthardskipamount
+\insertskipamount 6pt plus2pt % Redefine as desired, but with no
+\inserthardskipamount 6pt % shrink (see above).
+\def\insertskip{\vskip\insertskipamount}
+%
+% Save and restore \lastskip:
+%
+\newskip\LastSkip
+\def\SaveLastSkip{\LastSkip\lastskip}
+\def\RestoreLastSkip{\nobreak\vskip-\LastSkip\vskip\LastSkip}
+%
+% Larry Siebenmann's test for split topinserts:
+%
+\newcount\SplitTest% will be set to -1 if a topinsert has split
+\def\SetSplitTest{\SplitTest\insertpenalties
+ \insert\topins{\floatingpenalty1}%
+ \advance\SplitTest-\insertpenalties}
+%
+% From here on we modify definitions in plain.tex.
+%
+% Redefine \midinsert to convert to \topinsert if a topinsert has been
+% split, to prevent midinserts getting out of order (cf. TeXbook Exercise
+% 15.5). As in plain.tex, a \midinsert still converts to a \topinsert
+% (which then splits) if the insert is too big for current page.
+% Was: \def\midinsert{\@midtrue\@ins}
+\def\midinsert{\par
+ \SaveLastSkip\penalty-150\SetSplitTest\RestoreLastSkip
+ \ifnum\SplitTest=-1
+ \@midfalse\else\@midtrue\fi\@ins}
+% Redefine \@ins to add \inserthardskipamount of glue above.
+% Was: \def\@ins{\par\begingroup\setbox\z@\vbox\bgroup}
+\def\@ins{\par\begingroup\setbox\z@\vbox\bgroup%
+ \vglue\inserthardskipamount}
+% Changes to \endinsert of plain.tex 3.0:
+% - Use \insertskipamount instead of \bigskipamount throughout.
+% - Use larger of previous skip and insertskip before middle insert.
+% - Add \nointerlineskip to avoid unwanted extra 1pt skip.
+% - Save and restore lastskip when an insert floats.
+\def\endinsert{\egroup % finish the \vbox
+ \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@
+ \advance\dimen@\insertskipamount% was 12pt (wn)
+ \advance\dimen@\pagetotal\advance\dimen@-\pageshrink
+ \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
+% Next 3 lines replace: \if@mid \bigskip\box\z@\bigbreak (wn)
+ \if@mid%
+ \ifdim\lastskip<\insertskipamount\removelastskip\insertskip\fi
+ \nointerlineskip\box\z@\penalty-200\insertskip
+ \else%
+ \SaveLastSkip% added (wn)
+ \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\insertskip\fi}% was \bigskip\fi (wn)
+ \RestoreLastSkip% added (wn)
+ \fi\endgroup}
+%%%%%%%%%%%%%%%%%% Done correcting insert macros %%%%%%%%%%%%%%%%%%%
+%
+\catcode `\@=\newinsCatAt
+\endinput
+%% end newinsert.tex
+%% Revision history:
+%% Version 1.2, 21 July 1992: midinserts still occasionally converted
+%% wrongly to topinsert if Tex is scanning ahead. Added \penalty-150
+%% to fix this.
+% Changed \medskipamount to 6pt plus2pt to avoid shrink in inserts.
+%% Version 1.1, 02 April 1990: used L.Siebenmann's split test
diff --git a/macros/plain/contrib/misc/nofill.tex b/macros/plain/contrib/misc/nofill.tex
new file mode 100644
index 0000000000..38ec3b0d0a
--- /dev/null
+++ b/macros/plain/contrib/misc/nofill.tex
@@ -0,0 +1,53 @@
+% macros for no-fill, built on Plain
+
+\catcode`\@=11\relax % allow @ in macro names
+
+% a simple no-fill, used as
+%
+% \nofill
+% Here is some no-fill text.
+% This line starts with three spaces.
+% This is the last line. It has embedded spaces which will appear.
+% \endnofill
+%
+% You might want to switch to a fixed-width font when you use
+% these macros.
+
+\def\nofill {%
+ \begingroup
+ % spaces made active so they can be tested for at start of lines
+ % and so multiple spaces aren't collapsed to one.
+ \obeyspaces
+ % nofill via every line a par; if spaces start next line
+ % we do a \noindent to make sure a par gets started.
+ \parskip=\z@
+ \parindent=\z@
+ \let\p@r=\par
+ \def\par{\p@r \ifspacenext{\noindent}{}}%
+ \obeylines}
+
+\def\endnofill {%
+ \p@r % in case user forgot last carriage return
+ \endgroup}
+
+% \ifspacenext is used as:
+% \ifspacenext {<true tokens>}{<false tokens>}
+% It executes the true tokens if
+% the next character is an active space, the false tokens
+% otherwise. The same technique can be used to check for any
+% character, not just active space.
+
+% You can NOT nest uses of \ifspacenext!
+
+% get a token which is \ifx-equal to active space, so we can test
+% for it
+{\obeyspaces\global\let\sp@ce= \relax}
+
+\def\ifspacenext #1#2{%
+ \def\truet@ks{#1}%
+ \def\falset@ks{#2}%
+ \futurelet\next\ifsp@cenext}
+\def\ifsp@cenext {%
+ \ifx\next\sp@ce \truet@ks \else \falset@ks \fi}
+
+\catcode`\@=12\relax % make @ inaccessible again
diff --git a/macros/plain/contrib/misc/oubraces.sty b/macros/plain/contrib/misc/oubraces.sty
new file mode 120000
index 0000000000..25aa2015ce
--- /dev/null
+++ b/macros/plain/contrib/misc/oubraces.sty
@@ -0,0 +1 @@
+../../../latex/contrib/oubraces/oubraces.sty \ No newline at end of file
diff --git a/macros/plain/contrib/misc/outline.sty b/macros/plain/contrib/misc/outline.sty
new file mode 100644
index 0000000000..77c82f0779
--- /dev/null
+++ b/macros/plain/contrib/misc/outline.sty
@@ -0,0 +1,79 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% outline.sty -- Outline Style
+% Hal R. Varian
+% September, 1987
+%
+% Reads structured files generated by PC-OUTLINE and formats them
+% in TeX. Before using you must use a global search and replace command
+% to change all strings of ".HEAD" to "\HEAD". Then load outline.sty
+% and TeX the outline file.
+%
+% Notes
+% 1. To generate the outline, choose "Send to structured file" from the
+% device menu in the print routine of PC-OUTLINE.
+% 2. The title must be indicated manually using \title. It is usually
+% indicated by a .HEAD 1
+% 3. Sometimes the structured file ends with a spurious .HEAD 1 which should
+% be removed.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%for title
+\def\title#1{\centerline{\bf #1}\medskip}
+
+%use \count11 thru \count18 for counters for levels 1 thru 8
+
+\count11=0
+\count12=0
+\count13=0
+\count14=0
+\count15=0
+\count16=0
+\count17=0
+\count18=0
+
+%create registers for levels, etc.
+
+\newcount\CurrentLevel\CurrentLevel=0
+\newcount\LastLevel\LastLevel=0
+\newcount\CurrentCounter\CurrentCounter=1
+\newcount\CharCode\CharCode=96
+
+%\Indentation measures the amount of indentation
+\newdimen\Indentation\Indentation=3ex
+
+%skip between level 1 headings
+\def\AdjustSpace{\vskip -.5pc}
+
+\parindent=0pt
+\parskip=0pt
+
+\def\HEAD #1 {%
+\par
+\CurrentLevel=#1
+\CurrentCounter=#1
+\advance\CurrentCounter by 10 %level 1 is assigned to register 11, etc.
+\ifnum\CurrentLevel>\LastLevel %if sublevel,
+ \count\CurrentCounter=1 %reset \CurrentCounter,
+ \else\advance\count\CurrentCounter by 1\fi %otherwise, increment
+\LastLevel=\CurrentLevel
+\filbreak %helps prevent entries from being split between pages
+\hskip\CurrentLevel\Indentation
+\CharCode=\number\count\CurrentCounter %for lettered levels
+\let\NumCode=\CharCode %for numbered levels
+\ifcase#1%
+\relax\or %there is no level zero
+ \AdjustSpace\advance\CharCode by 64
+\Item\char\CharCode.\space\or %level 1: A.
+\Item\llap{\number\NumCode.\space}\or %level 2: 1.
+ \advance\CharCode by 96
+\Item\llap{\char\CharCode)\space}\or %level 3: a)
+\Item\llap{\number\NumCode)\space}\or %level 4: 1)
+ \advance\CharCode by 96
+\Item\llap{\char\CharCode$>$\space}\or %level 5: a>
+\Item\llap{\number\NumCode$>$\space}\or %level 6: 1>
+ \advance\CharCode by 96
+\Item\llap{\char\CharCode:\space}\or %level 7: a:
+\Item\llap{\number\NumCode:\space}\fi} %level 8: 1:
+
+\def\Item{\hangindent\CurrentLevel\Indentation}
+%%%-Incise----------------------------------------------------------
diff --git a/macros/plain/contrib/misc/paragraphs.tex b/macros/plain/contrib/misc/paragraphs.tex
new file mode 100644
index 0000000000..c618c54cfb
--- /dev/null
+++ b/macros/plain/contrib/misc/paragraphs.tex
@@ -0,0 +1,91 @@
+%
+% some of the old Tbase paragraphing macros (built on Plain TeX)
+%
+% These macros demonstrate common uses for the
+% \hangindent, \hangafter, \indent, \noindent, \everypar,
+% \lastbox, and \the commands.
+%
+
+\catcode`\@=11\relax % make @ a letter for use in macro names
+
+%
+% N.B. These macros do not set a ``paragraphing mode,'' as
+% they used to in Tbase; they apply only to the immediately
+% following paragraph.
+%
+% The right way to use one of the macros is, e.g.,
+%
+% \ivp This is an inverted paragraph...
+% and so on, and so on...
+%
+\def\ivp {% inverted paragraph, all but 1st line indented
+ \hangindent \parindent
+ \hangafter \@ne
+ \noindent}
+
+\def\ip {% indented paragraph, all lines indented
+ \hangindent \parindent
+ \hangafter \@ne
+ \indent}
+
+\def\ftp #1{% flush-tagged paragraph, like \ip but with tag on left margin
+ \hangindent \parindent
+ \hangafter \@ne
+ \noindent \hbox to\parindent{#1\hfil}\ignorespaces}
+
+\def\atp #1{% adjoint-tagged par, like \ftp but tag is next to first line
+ \hangindent \parindent
+ \hangafter \@ne
+ \indent \llap{#1\enspace}\ignorespaces}
+
+\def\bpar {% bullet-tagged paragraph
+ \ftp{$\bullet$}}
+
+
+%
+% vest paragraphs:
+% After an interruption in the running text (such as a section
+% title or in-line illustration), it is customary not to indent
+% the first line of the next paragraph. The macro \vp arranges
+% for this to be the case by making sure that \unindent gets
+% called as soon as the paragraph starts. \unindent simply
+% removes the \indent box that TeX automatically puts at the
+% start of every paragraph (except those which start with
+% \noindent).
+%
+\def\unindent {%
+ \setbox0=\lastbox} % get the indent box and discard it
+
+\def\vp {%
+ \everypar{\unindent\everypar{}}}
+
+
+%
+% the \heading macro puts out a bold-faced unindented heading,
+% and then calls \vp to insure that the next paragraph does not
+% start with an indentation.
+% No break is allowed between the heading and the paragraph.
+%
+\def\heading #1{%
+ \vskip 1ex
+ {\bf\noindent #1\par}
+ \nobreak
+ \vskip.5ex
+ \vp}
+
+
+%
+% These next two macros are a convenient way of turning
+% indentation off and then on again. The macro \fp
+% sets \parindent to 0, but not before defining the macro \pp so
+% that it restores \parindent to what it was. The \edef command
+% in conjunction with the \the command actually put the
+% value of \parindent into the text of the \pp command.
+% Do \fp\show\pp to see what this means.
+%
+\def\fp {\edef\pp{\parindent=\the\parindent}\parindent=\z@}
+\let\pp=\relax
+
+
+% make @ back into a non-letter
+\catcode`\@=12\relax
diff --git a/macros/plain/contrib/misc/phoncard.tex b/macros/plain/contrib/misc/phoncard.tex
new file mode 100644
index 0000000000..2d9b2fa365
--- /dev/null
+++ b/macros/plain/contrib/misc/phoncard.tex
@@ -0,0 +1,342 @@
+%
+% Copyright 1990, Daniel R. Greening. Copying is permitted for any
+% non-commercial purpose as long as this copyright and the
+% documentation are retained on copies and derivative works. No
+% warrantee is expressed or implied, and the author makes no claims
+% about the usefulness, applicability, or correctness of the program.
+%
+% Greening Phonelist TeX Format.
+%
+% This thing is pretty cool, if I do say so myself. I've used it for
+% several years. It formats phone numbers into a 9x9 block that looks
+% like the picture that follows. The picture is simplified. There is
+% enough room for decent sized names, long phone numbers (with area
+% or country-codes and extensions), and addresses with 9-digit
+% zipcodes. Print out the phone list example included and you'll
+% see.
+%
+% ------------------+------------------+------------------
+% | sally W 784-7861 | dan W 784-7861 | zeke W 784-7861 |
+% | H 271-2629 | H 271-2629 | H 271-2629 |
+% | 12 Foster Ct | 12 Foster Ct | 12 Foster Ct |
+% | New York,NY 10 | New York,NY 10 | Topeka,KS 1054 |
+% | georgeW 444-adff | | clem W 444-adff |
+% | schoolW 277-2222 | KANSAS | jethroW 277-2222 |
+% | abe W 331-3333 | | abigaiH 331-3333 |
+% | ron W 231-2341 | jeb W 231-2341 | emmy W 231-2341 |
+% | | | |
+% ------------------+------------------+------------------
+% | MICHIGAN | dan W 784-7861 | |
+% | dan H 463-5788 | H 271-2629 | WASHINGTON |
+% | 5582 Golfridge | 12 Foster Ct | |
+% | Alma, MI,48801 | Lansing,MI 432 | nancy W 234-2223 |
+% | W 623-3330 | georgeW 444-adff | georgeW 444-adff |
+% | schoolW 277-2222 | schoolW 277-2222 | schoolW 277-2222 |
+% | abe W 331-3333 | abe W 331-3333 | abe W 331-3333 |
+% | ron W 231-2341 | ron W 231-2341 | ron W 231-2341 |
+% | | | |
+% ------------------+------------------+------------------
+% | jeff W 784-7861 | W 784-7861 | jack W 784-7861 |
+% | H 271-2629 | H 271-2629 | H 271-2629 |
+% | 12 Foster Ct | 12 Foster Ct | 12 Foster Ct |
+% | New York,NY 10 | New York,NY 10 | New York,NY 10 |
+% | georgeW 444-adff | georgeW 444-adff | georgeW 444-adff |
+% | schoolW 277-2222 | schoolW 277-2222 | schoolW 277-2222 |
+% | abe W 331-3333 | abe W 331-3333 | abe W 331-3333 |
+% | ron W 231-2341 | ron W 231-2341 | ron W 231-2341 |
+% | | | |
+% ------------------+------------------+------------------
+%
+% I typically take the output and cut it along the horizontal dividing
+% lines, then staple the thing together on the left. If you fold it
+% in half, it fits in a pocket or a largish wallet. If you want to
+% stick it in a smaller wallet (and you are patient), you can tape the
+% horizontal strips end-to-end and fan-fold it. It then occupies the
+% space of a credit-card.
+%
+% HOW TO USE:
+%
+% Precede lines that contain a country, state or province header with
+% ``$''. This is an example header for the sovereign state of California:
+%
+% $ CALIFORNIA
+%
+% Lines which contain a phone number work like this:
+%
+% person-name ; cat ; phone-number
+%
+% The ``cat'' is typically a one or two letter abbreviation, as in
+% ``W'' for work, ``H'' for home, ``FX'' for FAX, ``P'' for parents,
+% etc. The phone-number field defined in this macro package is large
+% enough to accommodate the number ``999-999-9999x9999''. Here is an
+% example:
+%
+% Alan Turing ; W ; 213-825-2266
+% ; H ; 914-784-7861
+%
+% Finally, you indicate an address with the prefix ``>''. This simply
+% indents the text which follows by one \quad. Here's a bigger
+% example:
+%
+% $ CALIFORNIA
+%
+% Alan Turing ; W ; 213-825-2266
+% > UCLA Computer Science Dept.
+% > Los Angeles, CA 90024-1647
+%
+% ; H ; 914-784-7861
+% > 1243 Blenheim Lane
+% > Los Angeles, CA 90025
+%
+% Blank lines essentially mean nothing when the occur between these
+% three constructs.
+%
+% If you want to include formatted paragraphs, you can do so, but you
+% must terminate them with ``\par'' or with a blank line.
+%
+% Enjoy. If you make any interesting modifications, let me know.
+%
+% Dan Greening / dgreen@cs.ucla.edu
+%
+\font\rm=cmr5
+\font\bf=cmbx5
+% The following produces 3 column, 3 row output.
+\hsize=2.0in
+\vsize=3.0in
+\voffset=-0.75in
+\hoffset=-0.5in
+\newdimen\fullhsize\global\fullhsize=7.5in
+\newdimen\fullvsize\global\fullvsize=10.5in
+\newdimen\hboxsize\global\hboxsize=\hsize\advance\hboxsize by 0.5in
+\newdimen\vboxsize\global\vboxsize=\vsize\advance\vboxsize by 0.5in
+\def\fullhbox{\hbox to\fullhsize}
+\def\fullvbox{\vbox to\fullvsize}
+\newcount\colcount \global\colcount=11
+\newcount\rowcount \global\rowcount=5
+\baselineskip=6 pt plus 1pt
+\parindent 0pt
+\newcount\boxnum
+%
+% Define argument to accept ^^M as a terminator for a macro (such as
+% ;, $, and >.
+%
+\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\initcolbox#1 {\global\setbox#1=\vbox to\vboxsize{\hrule\vss\hbox %
+to\hboxsize{\vrule height\vboxsize\hfil\vrule height\vboxsize}\vss\hrule}}
+\def\initcolboxes{ \initcolbox11 \initcolbox12 \initcolbox13 \initcolbox14
+ \initcolbox15 \initcolbox16 \initcolbox17
+ \initcolbox18 \initcolbox19 }
+\def\outputpage{\shipout\fullhbox{\fullvbox{\box11\vss\box14\vss\box17}\hss
+ \fullvbox{\box12\vss\box15\vss\box18}\hss
+ \fullvbox{\box13\vss\box16\vss\box19}}}
+\initcolboxes
+\output={
+ \global\setbox\colcount=\vbox to \vboxsize
+ {\hrule width\hboxsize\vss\hbox to \hboxsize
+ {\vrule height\vboxsize\hss\columnbox\hss\vrule height\vboxsize}
+ \vss\hrule width\hboxsize}
+% Current column is now saved.
+ \message{(\the\colcount)}
+ \ifnum\colcount=19
+ \global\colcount=11
+ \outputpage
+ \advancepageno
+ \initcolboxes
+ \else
+ \global\advance\colcount by 1
+ \fi
+% For the very end.
+ \ifnum\outputpenalty>-100000 \else
+ \supereject\outputpage\fi
+}
+\def\columnbox{\vbox to\vboxsize{\vfill\hbox{\vbox to\vsize{\unvbox255\vfill}}\vfill}}
+%
+% Here we define ``$'' ``>'' and ``;'' as active macro
+% characters. They serve as separators for fields in our phone list.
+%
+\rm
+ \newdimen\widthb
+ \global\setbox0=\hbox{WE}
+ \widthb=\wd0
+ \newdimen\widthc
+ \global\setbox0=\hbox{999-999-9999x9999}
+ \widthc=\wd0
+%
+\catcode`\;=\active
+{
+ \catcode`\;=11
+ \gdef\phonelineyyy #1;#2;#3\finish{
+ \catcode`\;=\active\hfill
+ \hbox to\widthb{\hfil\ignorespaces #1\hfil}
+ \hbox to 0.05in{\hfil}
+ \hbox to\widthc{\ignorespaces #2\hfil}
+ \par}
+ \gdef\phoneline #1{\catcode`\;=11\phonelineyyy #1;;;\finish}
+}
+\outer\def;{\catcode`\;=11\parsearg\phoneline}
+%
+\catcode`\>=\active
+\def\addressline#1{\hbox to\hsize{\quad\ignorespaces #1\hfil}\par}
+\def>{\parsearg\addressline}
+%
+\catcode`\$=\active
+\def\arealine#1{\vbox to 1pt{\vfil}\hbox to\hsize{\hfil{\bf\ignorespaces #1}\hfil}\vbox to 1pt{\vfil}}
+\def${\parsearg\arealine}
+
+$ SOUTHERN CALIFORNIA
+
+Daniel R. Greening ; W ; 213-825-2266
+ ; H ; 213-829-7726
+> 3436 Boelter Hall
+> Los Angeles, CA 90024-1596
+ISI ; W ; 213-822-1511
+
+$ NORTHERN CALIFORNIA
+
+Avalon Ventures ; W ; 415-960-1879
+Sierra Club ; W ; 415-776-2211
+UC Student Assn ; W ; 916-447-8272
+
+$ WASHINGTON, DC
+
+Rep. Barney Frank ; W ; 202-225-5931
+NGLTF ; W ; 202-332-6483
+House of Reps ; W ; 202-225-3121
+National Park Service ; W ; 202-343-4747
+US Student Assn ; W ; 202-775-8943
+
+$ GEORGIA
+
+Georgia Inst. Tech. ; W ; 404-894-2300
+
+$ LOUISIANA
+
+Bruce D. Shriver ; W ; 318-231-5811
+> Editor-in-Chief, IEEE Computer
+> U. of Southwestern Louisiana
+> Drawer 42730
+> Lafayette, LA 70504-2730
+> shriver@usl.edu
+
+$ MARYLAND
+
+Ober Travel ; W ; 301-496-6676
+
+$ MASSACHUSETTS
+
+Appalachian Mt.Club ; ; 617-523-0636
+ATHENA ; W ; 617-253-1300
+Kluwer Acad. Pub.; W ; 617-871-6600
+MIT LCS ; W ; 617-253-5851
+REI ; W ; 617-944-5103
+> 279 SalemSt.
+> Boston,MA
+> (exit 40 off Rt128)
+
+$ NEW HAMPSHIRE
+
+AMC Hut Reservations ; ; 603-466-2727
+Warren Rudman ; W ; 603-666-7591
+
+$ NEW MEXICO
+
+LANL ; W ; 505-667-5061
+LANL Library ; W ; 505-667-4175
+> 8am-4.30pm m-f
+LANL CNLS ; W ; 505-667-1444
+Santa Fe Institute ; W ; 505-984-8800
+> 1120 Canyon Road
+> Santa Fe, NM 87501
+
+$ NEW YORK
+
+AAA ; W ; 212-586-1166
+AAA autoTripMaps ; W ; 914-997-7744
+ACM ; W ; 212-869-7440
+B\&H Photo ; W ; 212-807-7474
+Bee Line ; W ; 682-2020
+> 14 N
+Bee Line/lost+found ; W ; 376-6361
+Carey Bus ; W ; 212-286-9766
+> lost/found 718-632-0529
+Conran's Habitat ; W ; 914-683-5858
+> I 287 E to exit 5. take 2nd left
+Cornell University ; W ; 607-255-2000
+Daniel R. Greening ; W ; 914-784-7861
+ ; H ; 914-271-2629
+> IBM T.J. Watson Research Center
+> P.O.Box 704
+> Yorktown Heights, NY 10598-0704
+IBM Hawthorne ; W ; 914-784-7000
+ ; FX; 914-784-7455
+> 30 Saw Mill River Road
+> Hawthorne, NY 10532
+> mail:
+> P.O.Box 704
+> Yorktown Heights, NY 10598
+Kayson Jeep ; W ; 914-271-5105
+ ; FX; 914-271-5581
+NYNEX ; W ; 914-964-6500
+Oliva Car Service ; W ; 914-769-8881
+Ossining Pub Lib ; W ; 914-941-2416
+> 9a n to 133 millwood.
+> bear right. thru underpass
+> 53 Croton Avenue.
+> m-th9.30-9
+> f,sa9.30-5.30,su1-5
+REI ; W ; 914-632-9222
+> 500 Main St.
+> New Rochelle, NY
+French Consulate ; W ; 212-606-3600
+Hertz ; W ; x23789
+ ; W ; 914-948-3024
+MetroNorth Commuter ; ; 800-522-5624
+New York Tax Board ; W ; 800-462-8100
+ ; W ; 518-438-1073
+New York Times ; W ; 800-631-2500
+NYU Info ; W ; 212-998-4636
+NYU Bookstore ; W ; 212-998-4656
+NYU Book orders ; W ; 212-998-4678
+>
+Oscar Wilde Books ; W ; 212-255-8097
+Sailing Info ; W ; 914-271-6868
+Courtsports ; W ; 914-592-3005
+
+$ NORTH CAROLINA
+
+MCNC ; W ; 919-248-1800
+> 3021 Cornwallis Road
+> P.O. Box 12889
+> Research Triangle Park, NC 27709-2889
+
+$ OHIO
+
+> The Ohio Supercomputer Center
+> 1224 Kinnear Road
+> Columbus, OH 43212-1154
+$ TEXAS
+
+SEMATECH ; W ; 512-356-3500
+> SEMATECH
+> 2706 MontopolisDr.
+> Austin,TX 78741
+
+$ WASHINGTON
+
+Lake Chelan Nat.Rec. ; W ; 509-682-4711
+
+\end
+% Local Variables
+% tab-width:25
+% End
diff --git a/macros/plain/contrib/misc/pi.tex b/macros/plain/contrib/misc/pi.tex
new file mode 100644
index 0000000000..ac7f060134
--- /dev/null
+++ b/macros/plain/contrib/misc/pi.tex
@@ -0,0 +1,385 @@
+% file pi.tex version 0.993
+%
+% **** Compute Pi in TeX! ****
+%
+%
+% Author: D. Roegel (roegel@loria.fr)
+%
+% Version 0.96: 22 July 1996
+% First release
+%
+% Version 0.97: 22 July 1996
+% Modified by J. Gelinas (jacquesg@clic.net.ca)
+% Added one term to get correct last digits
+% Added a second optional argument:
+% 100 prints decimals 0..100
+% -2 100 prints only decimals 100..101
+% Print exact number of decimals
+%
+% Version 0.98: 23 July 1996
+% Modified by D. Roegel, so that the input -3 1 gives 141
+% and not 3.141. Also, some unnecessary braces inside \loop...\repeat
+% were removed. \ShowResult shortened by introduction of \NextDigit.
+%
+% Version 0.99: 23 July 1996
+% Modified by D. Roegel.
+% Improvements following suggestions by J. Gelinas (jacquesg@clic.net.ca).
+% Bug corrected, which made some digits false (\fontdimen\firstpos\xb=0pt
+% added in \updatefirstpos).
+% \N replaced by \count2 in \ShowResult, this enabling calls
+% such as \ShowResult{1/\the\N...}{...}.
+%
+% Version 0.991: 23 July 1996
+% Modified by D. Roegel.
+% Two \UpdateFirstPos were removed.
+%
+% Version 0.992: 24 July 1996
+% Modified by D. Roegel, following several simplifications suggested
+% by J. Gelinas (jacquesg@clic.net.ca).
+% \Multiply removed, \Add and \Sub merged.
+% \ComputeArcTan shortened.
+%
+% Version 0.993: 24 July 1996
+% Modified by D. Roegel, following several simplifications suggested
+% by J. Gelinas (jacquesg@clic.net.ca).
+% \ComputeArcTan1/n computes now completely arctan(1/n).
+%
+%------------------------------------------------------------------------
+% This programs uses the formula by John Machin:
+%
+% Pi=16*arctan(1/5)-4*arctan(1/239)
+%
+% For arctan(x), we use the development
+%
+% arctan(x)=\sum_{i=0}^\infty [{x^{2i+1}\over 2i+1} - {x^{2i+3}\over 2i+3}]
+%
+% One array (\xc) is used to store the partial sum up to {x^{2i+1}\over 2i+1}.
+% A second array (\xa) us used to store the value of x^{2i+1}.
+% A third array (\xb) is used to store {x^{2i+1}\over 2i+1}.
+%
+% The result is put in the array \xr.
+%
+% The implementation of arrays uses a trick shown by Tom Rokicki
+% in his game of life program (life.tex).
+%
+% The number of digits you can compute depends on your implementation
+% of TeX. I had no trouble computing 5000 digits.
+%
+% The last digit can be wrong. And if it is a 0 or a 9, this decimal
+% and previous ones can be wrong too. However, the absolute error is
+% no greater than one unit of the last digit.
+%
+% If you want to know more about Pi, check the file sci.math.faq.
+% See also http://www.primus.com/staff/paulp/useless/pi.html
+% and http://www.tu-chemnitz.de/~arndt/joerg.html.
+%
+%------------------------------------------------------------------------
+%
+\newlinechar=`\^^J
+\message{^^J***** Computation of Pi with John Machin's formula *****}
+\message{^^J** i.e.: pi=16*arctan(1/5)-4*arctan(1/239)}
+\message{^^JHow many decimals of pi do you want ? }
+
+\read16to\nbdigits
+\newcount\n
+\n\nbdigits
+\ifnum\n<0
+ \multiply\n-1
+ \message{^^JFirst decimal to output ? }
+ \read16to\firstdigit
+\else
+ \advance\n1
+ \def\firstdigit{0}
+\fi
+\newcount\lastdigit
+\lastdigit\firstdigit
+\advance\lastdigit\n
+\advance\lastdigit-1
+
+\newcount\index
+\index\lastdigit
+\advance\index11
+\divide\index4
+\def\base{10000}
+\def\basesp{10000sp}
+
+\newcount\lastplusone
+\lastplusone\index
+\advance\lastplusone1
+
+% \index is now the index for the last slot in the arrays
+
+% slot 1 -> integer digits
+% slot 2 -> digits 1 to 4
+% slot 3 -> digits 5 to 8
+% ...
+% slot \index -> digits (\index-2) * 4 +1 to (\index-1) * 4
+%
+
+\font\xa=cmr10 at 11truept % array for current values of (1/5)^{2n+1}
+ % and (1/239)^{2n+1}
+\fontdimen\lastplusone\xa=0sp % this creates room
+\font\xb=cmr10 at 13truept % array for current values of (1/5)^{2n+1}/(2n+1)
+ % and (1/239)^{2n+1}/(2n+1)
+\fontdimen\lastplusone\xb=0sp % this creates room
+\font\xc=cmr10 at 15truept % array for current sums of arctan(1/5)
+ % and arctan(1/239)
+\fontdimen\lastplusone\xc=0sp % this creates room
+\font\xr=cmr10 at 17truept % array for the result
+\fontdimen\lastplusone\xr=0sp % this creates room
+
+% (we have each time allocated one more slot than strictly necessary;
+% this avoids a test on \lastplusone in \updatefirstpos)
+
+% \xa, \xb, \xc and \xr are now equal to 0
+
+% Some variables (some of them are not strictly necessary, and might be
+% replaced by \count's):
+
+\newcount\dv % will hold dividers
+\newcount\firstpos % first non empty slot
+\newcount\I % scratch register for loops
+\newdimen\carry % for carry (in additions) and borrows (in subtractions)
+\newdimen\x % a scratch variable
+\newcount\N % counts the terms
+\newif\ifcont % flag used to find when an operation on bignums is not done
+\newcount\Sdv % value of one digit (used in \ShowResult)
+\newcount\dir % toggle for alternating sums
+
+% Initialization of working arrays
+
+\def\InitializeArrays{
+ {
+ \I=1
+ \loop
+ \fontdimen\I\xa=0sp
+ \fontdimen\I\xb=0sp
+ \fontdimen\I\xc=0sp
+ \advance\I1
+ \ifnum\I<\lastplusone
+ \repeat
+ }
+ }
+
+% Initialization of the result
+
+\newcount\I
+\I=1
+\loop
+ \fontdimen\I\xr=0sp
+ \advance\I1
+ \ifnum\I<\lastplusone
+\repeat
+
+
+% divide array #1 by #2 beginning at slot \firstpos and up to \index;
+% result is in array #3
+% Maximum carry is 9999, so we need to be able to store 99999999.
+% \dimen's can hold up to +/- 2,147,483,647 sp and
+% \count's up to +/- 2,147,483,647, so it fits.
+
+\def\Divide#1#2into#3{%
+ \carry0sp
+ \I\firstpos
+ {
+ \loop
+ \x=\fontdimen\I#1
+ \multiply\carry\base
+ \advance\x\carry
+ \carry\x
+ \divide\x#2
+ \fontdimen\I#3=\x
+ \multiply\x#2
+ \advance\carry-\x
+ \advance\I1
+ \ifnum\I<\lastplusone
+ \repeat
+ }
+ }
+
+% Add or Subtract #2 to #3, depending on #1. array #2 is not modified.
+
+\def\Add#1#2to#3{%
+ \carry0sp
+ \I\index
+ {
+ \loop
+ \x=\fontdimen\I#3
+ \advance\x by #1\fontdimen\I#2
+ \advance\x by #1\carry
+ \fontdimen\I#3=\x
+ \carry\x
+ \divide\carry\base
+ \multiply\carry\base
+ \advance\x-\carry
+ \divide\carry\base
+ \ifdim\x<0sp
+ \advance\x\basesp
+ \advance\carry1sp
+ \fi
+ \fontdimen\I#3=\x
+ \advance\I-1
+ \ifnum\I<\firstpos \ifnum\carry=0 \contfalse
+ \else \conttrue \fi
+ \else \conttrue
+ \fi
+ \ifcont
+ \repeat
+ }
+ }
+
+
+% Multiply array #1 by #2. Result is in #1.
+% This macro is not used in this program, and only remains
+% here for didactic and historical reasons.
+
+\def\Multiply#1#2{%
+ \carry0sp
+ \I\index
+ \loop
+ \x=\fontdimen\I#1
+ \multiply\x by #2
+ \advance\x by \carry
+ \fontdimen\I#1=\x
+ \carry\x
+ \divide\carry\base
+ \multiply\carry\base
+ \advance\x-\carry
+ \fontdimen\I#1=\x
+ \divide\carry\base
+ \advance\I-1
+ \ifnum\I<\firstpos \ifnum\carry=0 \contfalse
+ \else \conttrue \fi
+ \else \conttrue
+ \fi
+ \ifcont
+ \repeat
+ }
+
+% update value of \firstpos; in the worst case, \firstpos
+% gets increased by 2.
+
+\def\updatefirstpos{
+ \ifdim\fontdimen\firstpos\xa=0sp
+ \ifnum\firstpos<\lastplusone
+ \fontdimen\firstpos\xb=0sp
+ \advance\firstpos1
+ \fi
+ \fi
+ }
+
+\def\UpdateFirstPos{\updatefirstpos\updatefirstpos}
+
+% Compute arctan(1/#1). Arrays \xa and \xb are used. Result is in \xc.
+
+\def\ComputeArcTan1/#1{%
+ \firstpos1
+ \InitializeArrays
+ % initialize \xa with 1:
+ \fontdimen1\xa=1sp
+ \Divide\xa{#1}into\xa
+ % now, \xa contains 1/#1
+ \Add1\xa to\xb
+ % \xb contains 1/#1
+ \firstpos=2
+ \dv=#1
+ \multiply\dv\dv
+ \N1
+ \dir-1
+ \message{^^JI am now computing the following sum: arctan(1/#1)=1/#1}
+ \Add1\xb to\xc % first term
+ \loop
+ \Divide\xa\dv into\xa
+ \UpdateFirstPos
+ \ifnum\firstpos<\lastplusone
+ \advance\N2
+ \Divide\xa\N into\xb
+ \ifnum\dir>0
+ \message{+1/\the\N*1/#1^\the\N}
+ \else
+ \message{-1/\the\N*1/#1^\the\N}
+ \fi
+ \Add\dir\xb to\xc
+ \multiply\dir-1
+ \repeat
+ }
+
+% Extract the next digit from \count1
+
+\def\NextDigit#1{
+ \ifnum\count2<\lastdigit
+ \Sdv\count1
+ \divide\Sdv#1
+ \advance\count2 1
+ \ifnum\count2>\firstdigit
+ \edef\res{\res\number\Sdv}
+ \fi
+ \multiply\Sdv#1
+ \advance\count1-\Sdv
+ \fi
+ }
+
+% Display the result; the digits are scanned one at a time,
+% and those between \firstdigit and \lastdigit are extracted
+% and saved in \res.
+
+\def\ShowResult#1#2{{
+ \count0=2
+ \count2=1
+ \advance\lastdigit1
+ \def\res{}
+ \loop
+ \count1=\fontdimen\count0#2
+ \NextDigit{1000}
+ \NextDigit{100}
+ \NextDigit{10}
+ \NextDigit{1}
+ \advance\count0by 1
+ \ifnum\count2<\lastdigit
+ \repeat
+ \advance\lastdigit-1 % for correct display in next line
+ \message{^^J#1\res}
+ }
+}
+
+\ComputeArcTan1/5
+
+%\ShowResult{arctan(1/5)=0.}\xc
+
+\message{^^JI multiply it by 4...}
+\firstpos2
+\Add1\xc to\xc % alternative method is to write \Multiply\xc4
+ % or to change \ComputeArcTan so that the initial value is 4
+\Add1\xc to\xc
+\message{done}
+
+% add 4*arctan(1/5) to \xr
+\Add1\xc to\xr
+
+%\ShowResult{4*arctan(1/5)=0.}\xr
+
+\ComputeArcTan1/{239}
+
+%\ShowResult{arctan(1/239)=0.}\xc
+
+
+%\ShowResult{4*arctan(1/239)=0.}\xc
+
+\message{^^JI subtract arctan(1/239) to 4*arctan(1/5)...}
+
+\firstpos2
+\Add{-1}\xc to\xr
+\message{done}
+
+\message{^^JAnd finally, I multiply it by 4 giving:}
+\Add1\xr to\xr
+\Add1\xr to\xr
+
+\ifnum\firstdigit=0
+ \ShowResult{pi[0 .. \number\lastdigit]=3.}\xr
+\else
+ \ShowResult{pi[\firstdigit.. \number\lastdigit]=}\xr
+\fi
+
+\bye
+
diff --git a/macros/plain/contrib/misc/placeins.tex b/macros/plain/contrib/misc/placeins.tex
new file mode 100644
index 0000000000..11ed486e7b
--- /dev/null
+++ b/macros/plain/contrib/misc/placeins.tex
@@ -0,0 +1,137 @@
+% P L A C E I N S . T E X ver 2.0 Mar 3, 1995
+%
+% Insertions that keep their place.
+%
+% Copyright 1995 Donald Arseneau <asnd@triumf.ca>
+% These macros may be freely used, transmitted, reproduced, or modified
+% provided that this notice is left intact.
+%
+% This TeX file provides various mechanisms (for plain TeX and close
+% relatives) to let insertions (footnotes, topins, pageins, etc.) float
+% within their appropriate section, but to prevent them from intruding
+% into the following section, even when sections do not normally begin
+% a new page. (If your sections normally begin a new page, just use
+% \supereject to flush out insertions.)
+%
+% Different combinations of insertions can be controlled with different
+% commands:
+%
+% \par\penalty-20029
+% If there are any insertions that will not fit on the current page,
+% a \supereject is performed and the following text will continue at
+% the top of a page after all insertions. If all insertions do fit
+% on the current page, then the following text will continue
+% immediately on this page.
+% \par\penalty-20030
+% Like above, except that if there are any footnotes at all on the
+% current page, the section must begin on the next page. (This is so
+% no footnote text from section 1 will appear beneath the beginning
+% of section 2.)
+% \par\penalty-10029
+% If any insertions cannot fit on the current page, eject them, and
+% then allow the following section to begin immediately on the same
+% page as the last insert. If all insertions do fit on the current
+% page, then the following text will continue immediately on this
+% page.
+% \barrier{\eject}{\topins}
+% If there are any pageinserts or topinserts that do not fit on the
+% current page, eject them, and then allow the following section to
+% begin immediately on the same page as the last insert. Split
+% footnotes or other insertions are allowed to intrude into the next
+% section.
+% \barrier{\supereject}{\topins}
+% Like the \barrier command above, but if any inserts are ejected
+% the following section will begin at the top of a new page (like
+% \supereject).
+% \barrier{...}{\footins}
+% *** NOT ALLOWED *** You will get spurious space and footnote-rules
+% at the bottom of pages!
+% \barrier{...}{\margins}
+% If you define other insertion classes, such as marginal notes, you
+% can use \barrier for them too. But only if \skip\margins=0pt.
+% You must also add any new insertion classes to the definition of
+% \placerestoreoutput
+%
+% How to use: First, \input this file (of course!). Then, at the beginning
+% of a new section, or at any boundary that insertions should not cross, put
+% one of the commands listed above. Presumably, you will actually put these
+% commands at the start of your own \section or \startsection macro; that is
+% why they are non mnemonic!
+%
+% There is a slight chance that a footnote may be separated from its reference
+% in the text after \penalty-xxxxx when there are no split insertions. (LaTeX
+% has the same possibility at every float!)
+
+\chardef\noplaceoutput\catcode`\@
+\catcode`\@=11
+
+\edef\zero@skip{\the\z@skip}
+
+\def\barrier#1#2{\par\begingroup
+ \ifdim\skip#2>\z@{\newlinechar10\errhelp{\barrier#2may produce some spurious
+ extra material on the page, ^^J but I will try anyway.}\errmessage{Bad use
+ of \string\barrier}}%
+ \fi
+ \skip@\lastskip \edef\next{\the\skip@}\ifx\next\zero@skip\else\vskip-\skip@\fi
+ \penalty\z@ % update page parameters
+ \fam-\insertpenalties
+ \insert#2{\floatingpenalty\@ne}%
+ \ifx\next\zero@skip\else\vskip\skip@\fi
+ \advance\fam\insertpenalties % 0: no held; 1: held over
+ \expandafter\endgroup
+ \ifnum\fam=\@ne % then do eject
+% \message{There are held-over \string#2 inserts; performing \string#1. }%
+ \ifdim\pagetotal<\topskip \leftline{}\kern-\topskip\fi % avoid empty list
+ {\dimen@\pagetotal \advance\dimen@\pagedepth
+ \ifdim\dimen@<\pagegoal\vfill\fi}%
+ #1\@barrier{#1}{#2}\else
+% \message{There are no held-over \string#2 inserts. \space}%
+\fi
+}
+
+\def\placeinsoutput{%
+\ifnum\outputpenalty=-20030\relax % eject if any footnotes
+ \ifvoid\footins\else
+ \fam\insertpenalties \advance\fam\@ne \insertpenalties\fam
+ \fi \outputpenalty=-20029\relax
+\fi
+\ifnum\outputpenalty=-20029\relax % Check for `supereject' flag
+ \ifnum\insertpenalties>\z@ % something is being held over, must get it out
+% \message{Forcing insertions on their own pages. \space}%
+ \ifvoid\footins \r@ggedbottomtrue \else \advance\skip\footins 0ptplus1fil\fi
+ \noplaceoutput % performs \supereject
+ \else % must rejoin seamlessly:
+ \placerestoreoutput
+ \fi
+\else % check for other flag...
+ \ifnum\outputpenalty=-10028 % in the middle of ejecting
+ \ifnum\insertpenalties=\z@ \global\setbox\@cclv\vbox{}\fi
+ \outputpenalty=-10029
+ \fi
+ \ifnum\outputpenalty=-10029\relax % section start
+ \ifnum\insertpenalties>\z@ % something is being held over, must get it out
+% \message{Forcing insertions. \space}%
+ \ifvoid\footins \r@ggedbottomtrue \else \advance\skip\footins 0ptplus1fil\fi
+ \noplaceoutput % performs \eject, perhaps repeatedly:
+ \leftline{}\kern-\topskip \penalty-10028\relax % (like \dosupereject)
+ \else % must rejoin seamlessly:
+ \placerestoreoutput
+ \fi
+ \else % just a regular page break
+ \noplaceoutput
+ \fi
+\fi
+}
+
+% there is a slim chance that footnotes may lose their place.
+\def\placerestoreoutput{%
+ \ifvoid\footins\else\insert\footins{\unvbox\footins}\fi
+ \ifvoid\topins\else\insert\topins{\unvbox\topins}\fi
+% If you have other floating insertion classes, do the same here.
+ \unvbox\@cclv
+}
+
+\catcode`\@=\noplaceoutput
+
+\edef\noplaceoutput{\the\output}
+\output{\placeinsoutput}
diff --git a/macros/plain/contrib/misc/plain-cm.tex b/macros/plain/contrib/misc/plain-cm.tex
new file mode 100644
index 0000000000..3f6d9ed75f
--- /dev/null
+++ b/macros/plain/contrib/misc/plain-cm.tex
@@ -0,0 +1,371 @@
+% This is a MODIFIED and EXTENDED version of the Plain format described
+% in the TeXbook. It's modularized so that Plain is read in first
+% (to allow easy inclusion of new versions) and then appropriate macros
+% are modified here.
+%
+% N.B.: A version number is defined at the very end of this file;
+% please change that number whenever the file is modified!
+
+% Modified 17 Jul 86 by RAY
+% to use CM instead of AM fonts. The new twelve point fonts
+% replace their magnified ten point counterparts. A version
+% of plain without preloaded fonts is not needed for the CM
+% format and we no longer update the AM, TR, or HE formats.
+
+% Modified 26 Aug 85 by DCB
+% to first read in Plain and then make modifications. Actually,
+% we have to make a version of Plain that has no preloaded fonts
+% or the fonts loaded here won't fit, but this is a lot easier
+% than integrating massive changes.
+
+% Modified 14 Dec 84 by BKPH
+% to have magnified math extension fonts (for 10, 11, 12, 14, & 18 pt)
+% and to allow \big et al to work in sizes other than ten point.
+% All changes are in definitions of \font\tenex, \font\elevenex etc.
+% and \def\eightpoint, \def\ninepoint, \def\tenpoint etc.
+
+% Created 6 Mar 84 by DCB
+% to have point sizes 8,9,10,11,12,14,16,18 (e.g., \ninepoint)
+% to define the \pointsize, \user###point (e.g., \userninepoint)
+% and \setnormalsp@cing macros
+% All the changes except these header lines and the last
+% 5 lines of the file are in the FONTS and MORE FONTS sections.
+
+\input plain
+
+% We make @ signs act like letters, temporarily, to avoid conflict
+% between user names and internal control sequences of plain format.
+\catcode`@=11
+
+\message{Loading the plain-augmented-CM format: different fonts,}
+
+% roman text
+\font\eighteenrm=cmr10 scaled\magstep3 % 17.28 pt
+\font\fourteenrm=cmr10 scaled\magstep2 % 14.4 pt
+%\font\twelverm=cmr10 scaled\magstep1 % 12 pt
+\font\twelverm=cmr12 % 12 pt
+\font\elevenrm=cmr10 scaled\magstephalf % 11 pt (almost)
+\font\tenrm=cmr10
+\font\ninerm=cmr9
+\font\eightrm=cmr8
+\font\sevenrm=cmr7
+\font\sixrm=cmr6
+\font\fiverm=cmr5
+
+% math italic
+\font\eighteeni=cmmi10 scaled\magstep3 % 17.28 pt
+\font\fourteeni=cmmi10 scaled\magstep2 % 14.4 pt
+%\font\twelvei=cmmi10 scaled\magstep1 % 12 pt
+\font\twelvei=cmmi12 % 12 pt
+\font\eleveni=cmmi10 scaled\magstephalf % 11 pt (almost)
+\font\teni=cmmi10
+\font\ninei=cmmi9
+\font\eighti=cmmi8
+\font\seveni=cmmi7
+\font\sixi=cmmi6
+\font\fivei=cmmi5
+
+% math symbols
+\font\eighteensy=cmsy10 scaled\magstep3 % 17.28 pt
+\font\fourteensy=cmsy10 scaled\magstep2 % 14.4 pt
+\font\twelvesy=cmsy10 scaled\magstep1 % 12 pt (no cmsy12)
+\font\elevensy=cmsy10 scaled\magstephalf % 11 pt (almost)
+\font\tensy=cmsy10
+\font\ninesy=cmsy9
+\font\eightsy=cmsy8
+\font\sevensy=cmsy7
+\font\sixsy=cmsy6
+\font\fivesy=cmsy5
+
+% math extension
+\font\eighteenex=cmex10 scaled\magstep3 % 17.28 pt
+\font\fourteenex=cmex10 scaled\magstep2 % 14.4 pt
+\font\twelveex=cmex10 scaled\magstep1 % 12 pt (no cmex12)
+\font\elevenex=cmex10 scaled\magstephalf % 11 pt (almost)
+\font\tenex=cmex10
+
+%% NOTE: cmex comes only in ten point size, but magnified 1/2, 1, 2, 3, 4, 5
+
+% boldface extended
+\font\eighteenbf=cmbx10 scaled\magstep3 % 17.28 pt
+\font\fourteenbf=cmbx10 scaled\magstep2 % 14.4 pt
+%\font\twelvebf=cmbx10 scaled\magstep1 % 12 pt
+\font\twelvebf=cmbx12 % 12 pt
+\font\elevenbf=cmbx10 scaled\magstephalf % 11 pt (almost)
+\font\tenbf=cmbx10
+\font\ninebf=cmbx9
+\font\eightbf=cmbx8
+\font\sevenbf=cmbx7
+\font\sixbf=cmbx6
+\font\fivebf=cmbx5
+
+% typewriter
+\font\eighteentt=cmtt10 scaled\magstep3 % 17.28 pt
+\font\fourteentt=cmtt10 scaled\magstep2 % 14.4 pt
+%\font\twelvett=cmtt10 scaled \magstep1 % 12pt
+\font\twelvett=cmtt12 % 12pt
+\font\eleventt=cmtt10 scaled \magstephalf % 11pt (almost)
+\font\tentt=cmtt10
+\font\ninett=cmtt9
+\font\eighttt=cmtt8
+
+\font\preloaded=cmsltt10 % slanted typewriter
+
+% slanted roman
+\font\eighteensl=cmsl10 scaled\magstep3 % 17.28 pt
+\font\fourteensl=cmsl10 scaled\magstep2 % 14.4 pt
+%\font\twelvesl=cmsl10 scaled \magstep1 % 12pt
+\font\twelvesl=cmsl12 % 12pt
+\font\elevensl=cmsl10 scaled \magstephalf % 11pt (almost)
+\font\tensl=cmsl10
+\font\ninesl=cmsl9
+\font\eightsl=cmsl8
+
+% text italic
+\font\eighteenit=cmti10 scaled\magstep3 % 17.28 pt
+\font\fourteenit=cmti10 scaled\magstep2 % 14.4 pt
+%\font\twelveit=cmti10 scaled \magstep1 % 12pt
+\font\twelveit=cmti12 % 12pt
+\font\elevenit=cmti10 scaled \magstephalf % 11pt (almost)
+\font\tenit=cmti10
+\font\nineit=cmti9
+\font\eightit=cmti8
+
+\message{more different fonts,}
+
+\font\preloaded=cmmib10 % bold math italic
+\font\preloaded=cmbsy10 % bold math symbols
+
+%\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\eighteeni='177 \skewchar\fourteeni='177 \skewchar\twelvei='177
+\skewchar\eleveni='177 \skewchar\teni='177 \skewchar\ninei='177
+\skewchar\eighti='177 \skewchar\seveni='177 \skewchar\sixi='177
+\skewchar\fivei='177
+\skewchar\eighteensy='60 \skewchar\fourteensy='60 \skewchar\twelvesy='60
+\skewchar\elevensy='60 \skewchar\tensy='60 \skewchar\ninesy='60
+\skewchar\eightsy='60 \skewchar\sevensy='60 \skewchar\sixsy='60
+\skewchar\fivesy='60
+
+\let\usereighteenpointmacro=\relax
+\def\eighteenpoint{\let\pointsize=\eighteenpoint
+ \textfont0=\eighteenrm \scriptfont0=\twelverm \scriptscriptfont0=\ninerm
+ \def\rm{\fam\z@\eighteenrm}%
+ \textfont1=\eighteeni \scriptfont1=\twelvei \scriptscriptfont1=\ninei
+ \def\mit{\fam\@ne}\def\oldstyle{\fam\@ne\eighteeni}%
+ \textfont2=\eighteensy \scriptfont2=\twelvesy \scriptscriptfont2=\ninesy
+ \def\cal{\fam\tw@}%
+ \textfont3=\eighteenex \scriptfont3=\eighteenex \scriptscriptfont3=\eighteenex%NEW
+ \textfont\itfam=\eighteenit
+ \def\it{\fam\itfam\eighteenit}%
+ \textfont\slfam=\eighteensl
+ \def\sl{\fam\slfam\eighteensl}%
+ \textfont\bffam=\eighteenbf \scriptfont\bffam=\twelvebf
+ \scriptscriptfont\bffam=\ninebf
+ \def\bf{\fam\bffam\eighteenbf}%
+ \textfont\ttfam=\eighteentt
+ \def\tt{\fam\ttfam\eighteentt}%
+ \def\big##1{{\hbox{$\left##1\vbox to15.3\p@{}\right.\n@space$}}}%NEW
+ \def\Big##1{{\hbox{$\left##1\vbox to20.7\p@{}\right.\n@space$}}}%NEW
+ \def\bigg##1{{\hbox{$\left##1\vbox to26.1\p@{}\right.\n@space$}}}%NEW
+ \def\Bigg##1{{\hbox{$\left##1\vbox to31.5\p@{}\right.\n@space$}}}%NEW
+ \setnormalsp@cing
+ \usereighteenpointmacro
+ }
+
+\let\usersixteenpointmacro=\relax
+\def\sixteenpoint{%
+ \message{You have asked for 16pt, but you are getting 14pt fonts.
+ There are no 16pt CM fonts in the local font library.}%
+ \fourteenpoint \let\pointsize=\sixteenpoint
+ \usersixteenpointmacro
+ }
+
+\let\userfourteenpointmacro=\relax
+\def\fourteenpoint{\let\pointsize=\fourteenpoint
+ \textfont0=\fourteenrm \scriptfont0=\tenrm \scriptscriptfont0=\sevenrm
+ \def\rm{\fam\z@\fourteenrm}%
+ \textfont1=\fourteeni \scriptfont1=\teni \scriptscriptfont1=\seveni
+ \def\mit{\fam\@ne}\def\oldstyle{\fam\@ne\fourteeni}%
+ \textfont2=\fourteensy \scriptfont2=\tensy \scriptscriptfont2=\sevensy
+ \def\cal{\fam\tw@}%
+ \textfont3=\fourteenex \scriptfont3=\fourteenex \scriptscriptfont3=\fourteenex%NEW
+ \textfont\itfam=\fourteenit
+ \def\it{\fam\itfam\fourteenit}%
+ \textfont\slfam=\fourteensl
+ \def\sl{\fam\slfam\fourteensl}%
+ \textfont\bffam=\fourteenbf \scriptfont\bffam=\tenbf
+ \scriptscriptfont\bffam=\sixbf
+ \def\bf{\fam\bffam\fourteenbf}%
+ \textfont\ttfam=\fourteentt
+ \def\tt{\fam\ttfam\fourteentt}%
+ \def\big##1{{\hbox{$\left##1\vbox to11.9\p@{}\right.\n@space$}}}%NEW
+ \def\Big##1{{\hbox{$\left##1\vbox to16.1\p@{}\right.\n@space$}}}%NEW
+ \def\bigg##1{{\hbox{$\left##1\vbox to20.3\p@{}\right.\n@space$}}}%NEW
+ \def\Bigg##1{{\hbox{$\left##1\vbox to24.5\p@{}\right.\n@space$}}}%NEW
+ \setnormalsp@cing
+ \userfourteenpointmacro
+ }
+
+\let\usertwelvepointmacro=\relax
+\def\twelvepoint{\let\pointsize=\twelvepoint
+ \textfont0=\twelverm \scriptfont0=\ninerm \scriptscriptfont0=\sixrm
+ \def\rm{\fam\z@\twelverm}%
+ \textfont1=\twelvei \scriptfont1=\ninei \scriptscriptfont1=\sixi
+ \def\mit{\fam\@ne}\def\oldstyle{\fam\@ne\twelvei}%
+ \textfont2=\twelvesy \scriptfont2=\ninesy \scriptscriptfont2=\sixsy
+ \def\cal{\fam\tw@}%
+ \textfont3=\twelveex \scriptfont3=\twelveex \scriptscriptfont3=\twelveex%NEW
+ \textfont\itfam=\twelveit
+ \def\it{\fam\itfam\twelveit}%
+ \textfont\slfam=\twelvesl
+ \def\sl{\fam\slfam\twelvesl}%
+ \textfont\bffam=\twelvebf \scriptfont\bffam=\ninebf
+ \scriptscriptfont\bffam=\sixbf
+ \def\bf{\fam\bffam\twelvebf}%
+ \textfont\ttfam=\twelvett
+ \def\tt{\fam\ttfam\twelvett}%
+ \def\big##1{{\hbox{$\left##1\vbox to10.2\p@{}\right.\n@space$}}}%NEW
+ \def\Big##1{{\hbox{$\left##1\vbox to13.8\p@{}\right.\n@space$}}}%NEW
+ \def\bigg##1{{\hbox{$\left##1\vbox to17.4\p@{}\right.\n@space$}}}%NEW
+ \def\Bigg##1{{\hbox{$\left##1\vbox to21\p@{}\right.\n@space$}}}%NEW
+ \setnormalsp@cing
+ \usertwelvepointmacro
+ }
+
+\let\userelevenpointmacro=\relax
+\def\elevenpoint{\let\pointsize=\elevenpoint
+ \textfont0=\elevenrm \scriptfont0=\eightrm \scriptscriptfont0=\fiverm
+ \def\rm{\fam\z@\elevenrm}%
+ \textfont1=\eleveni \scriptfont1=\eighti \scriptscriptfont1=\fivei
+ \def\mit{\fam\@ne}\def\oldstyle{\fam\@ne\eleveni}%
+ \textfont2=\elevensy \scriptfont2=\eightsy \scriptscriptfont2=\fivesy
+ \def\cal{\fam\tw@}%
+ \textfont3=\elevenex \scriptfont3=\elevenex \scriptscriptfont3=\elevenex%NEW
+ \textfont\itfam=\elevenit
+ \def\it{\fam\itfam\elevenit}%
+ \textfont\slfam=\elevensl
+ \def\sl{\fam\slfam\elevensl}%
+ \textfont\bffam=\elevenbf \scriptfont\bffam=\eightbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\bf{\fam\bffam\elevenbf}%
+ \textfont\ttfam=\eleventt
+ \def\tt{\fam\ttfam\eleventt}%
+ \def\big##1{{\hbox{$\left##1\vbox to9.3\p@{}\right.\n@space$}}}%NEW
+ \def\Big##1{{\hbox{$\left##1\vbox to12.6\p@{}\right.\n@space$}}}%NEW
+ \def\bigg##1{{\hbox{$\left##1\vbox to16\p@{}\right.\n@space$}}}%NEW
+ \def\Bigg##1{{\hbox{$\left##1\vbox to19.2\p@{}\right.\n@space$}}}%NEW
+ \setnormalsp@cing
+ \userelevenpointmacro
+ }
+
+\let\usertenpointmacro=\relax
+\def\tenpoint{\let\pointsize=\tenpoint
+ \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
+ \textfont\itfam=\tenit
+ \def\it{\fam\itfam\tenit}%
+ \textfont\slfam=\tensl
+ \def\sl{\fam\slfam\tensl}%
+ \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\bf{\fam\bffam\tenbf}%
+ \textfont\ttfam=\tentt
+ \def\tt{\fam\ttfam\tentt}%
+ \def\big##1{{\hbox{$\left##1\vbox to8.5\p@{}\right.\n@space$}}}%NEW
+ \def\Big##1{{\hbox{$\left##1\vbox to11.5\p@{}\right.\n@space$}}}%NEW
+ \def\bigg##1{{\hbox{$\left##1\vbox to14.5\p@{}\right.\n@space$}}}%NEW
+ \def\Bigg##1{{\hbox{$\left##1\vbox to17.5\p@{}\right.\n@space$}}}%NEW
+ \setnormalsp@cing
+ \usertenpointmacro
+ }
+
+\let\userninepointmacro=\relax
+\def\ninepoint{\let\pointsize=\ninepoint
+ \textfont0=\ninerm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+ \def\rm{\fam\z@\ninerm}%
+ \textfont1=\ninei \scriptfont1=\seveni \scriptscriptfont1=\fivei
+ \def\mit{\fam\@ne}\def\oldstyle{\fam\@ne\ninei}%
+ \textfont2=\ninesy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+ \def\cal{\fam\tw@}%
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \textfont\itfam=\nineit
+ \def\it{\fam\itfam\nineit}%
+ \textfont\slfam=\ninesl
+ \def\sl{\fam\slfam\ninesl}%
+ \textfont\bffam=\ninebf \scriptfont\bffam=\sevenbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\bf{\fam\bffam\ninebf}%
+ \textfont\ttfam=\ninett
+ \def\tt{\fam\ttfam\ninett}%
+ \def\big##1{{\hbox{$\left##1\vbox to8.5\p@{}\right.\n@space$}}}%NEW
+ \def\Big##1{{\hbox{$\left##1\vbox to11.5\p@{}\right.\n@space$}}}%NEW
+ \def\bigg##1{{\hbox{$\left##1\vbox to14.5\p@{}\right.\n@space$}}}%NEW
+ \def\Bigg##1{{\hbox{$\left##1\vbox to17.5\p@{}\right.\n@space$}}}%NEW
+ \setnormalsp@cing
+ \userninepointmacro
+ }
+
+\let\usereightpointmacro=\relax
+\def\eightpoint{\let\pointsize=\eightpoint
+ \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \def\rm{\fam\z@\eightrm}%
+ \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \def\mit{\fam\@ne}\def\oldstyle{\fam\@ne\eighti}%
+ \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ \def\cal{\fam\tw@}%
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \textfont\itfam=\eightit
+ \def\it{\fam\itfam\eightit}%
+ \textfont\slfam=\eightsl
+ \def\sl{\fam\slfam\eightsl}%
+ \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\bf{\fam\bffam\eightbf}%
+ \textfont\ttfam=\eighttt
+ \def\tt{\fam\ttfam\eighttt}%
+ \def\big##1{{\hbox{$\left##1\vbox to8.5\p@{}\right.\n@space$}}}%NEW
+ \def\Big##1{{\hbox{$\left##1\vbox to11.5\p@{}\right.\n@space$}}}%NEW
+ \def\bigg##1{{\hbox{$\left##1\vbox to14.5\p@{}\right.\n@space$}}}%NEW
+ \def\Bigg##1{{\hbox{$\left##1\vbox to17.5\p@{}\right.\n@space$}}}%NEW
+ \setnormalsp@cing
+ \usereightpointmacro
+ }
+
+%% NOTE: had to stick 10 point definitions of \big in 8, 9, and 10 point.
+
+\newtoks\baselinefactor \baselinefactor={1.2}
+\def\setnormalbaselines {%
+ \normalbaselineskip=\the\baselinefactor em\relax
+% \normallineskip=\p@ % these don't change with point size
+% \normallineskiplimit=0\p@
+ }
+
+\def\setnormalsp@cing{% SIDE EFFECT is to go into \rm
+ \rm % set the em properly
+ \setnormalbaselines
+ \normalbaselines
+ \abovedisplayskip=1.2em plus .3em minus .9em%
+ \abovedisplayshortskip=0em plus .3em%
+ \belowdisplayskip=1.2em plus .3em minus .9em%
+ \belowdisplayshortskip=.7em plus .3em minus .4em%
+ \setbox\strutbox=\hbox{\vrule height .7\baselineskip
+ depth .3\baselineskip width\z@}%
+ }
+
+\message{format id.}
+
+\catcode`@=12 % at signs are no longer letters
+
+\edef\fmtname{\fmtname-augmented} % include Plain name
+\edef\fmtversion{\fmtversion-CM861707} % include Plain version
diff --git a/macros/plain/contrib/misc/plotting.tex b/macros/plain/contrib/misc/plotting.tex
new file mode 100644
index 0000000000..ab3c59d0ac
--- /dev/null
+++ b/macros/plain/contrib/misc/plotting.tex
@@ -0,0 +1,369 @@
+%
+% plotting.tex - TeX Plotting Macros
+%
+% author: Laurence G. Yaffe (lgy@newton.phys.washington.edu) 1987
+%
+\setbox0 = \hbox{$0$}%
+\newdimen \digitheight \digitheight = \ht0
+\newdimen \titlespacing \titlespacing = 1.5 ex
+\newdimen \labelspacing \labelspacing = 0.9 ex
+\newdimen \labelwidth \labelwidth = 0.0 pt
+\newdimen \ticklength \ticklength = 0.7 em
+\newdimen \plotheight \plotheight = 5.0 in
+\newdimen \plotwidth \plotwidth = 5.0 in
+\newdimen \linewidth \linewidth = 0.241 pt
+\newskip \padding \padding = 0pt plus 1fil
+%
+\newbox \xAxis
+\newbox \XAxis
+\newbox \yAxis
+\newbox \YAxis
+\newbox \PlotData
+\newbox \PlotBox
+%
+\def\ratio #1:#2% adjust padding for log scale plotting
+ {%
+ \count255 = #1#2
+ \ifnum \count255=11 \global\padding = 0pt plus 1.00000 fil \else
+ \ifnum \count255=12 \global\padding = 0pt plus 0.30103 fil \else
+ \ifnum \count255=23 \global\padding = 0pt plus 0.17609 fil \else
+ \ifnum \count255=34 \global\padding = 0pt plus 0.12494 fil \else
+ \ifnum \count255=45 \global\padding = 0pt plus 0.09691 fil \else
+ \ifnum \count255=56 \global\padding = 0pt plus 0.07918 fil \else
+ \ifnum \count255=67 \global\padding = 0pt plus 0.06695 fil \else
+ \ifnum \count255=78 \global\padding = 0pt plus 0.05799 fil \else
+ \ifnum \count255=89 \global\padding = 0pt plus 0.05115 fil \else
+ \ifnum \count255=91 \global\padding = 0pt plus 0.04576 fil \else
+ \ifnum \count255=13 \global\padding = 0pt plus 0.47712 fil \else
+ \ifnum \count255=14 \global\padding = 0pt plus 0.60206 fil \else
+ \ifnum \count255=24 \global\padding = 0pt plus 0.30103 fil \else
+ \ifnum \count255=25 \global\padding = 0pt plus 0.39794 fil \else
+ \ifnum \count255=26 \global\padding = 0pt plus 0.47712 fil \else
+ \ifnum \count255=36 \global\padding = 0pt plus 0.30103 fil \else
+ \ifnum \count255=46 \global\padding = 0pt plus 0.17609 fil \else
+ \ifnum \count255=61 \global\padding = 0pt plus 0.22185 fil \else
+ \ifnum \count255=51 \global\padding = 0pt plus 0.30103 fil \else
+ \ifnum \count255=41 \global\padding = 0pt plus 0.39794 fil \else
+ \ifnum \count255=31 \global\padding = 0pt plus 0.52288 fil \else
+ \ifnum \count255=21 \global\padding = 0pt plus 0.69897 fil \else
+ \global\padding = 0pt
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ }%
+%
+\def\centered #1{\vbox to 0pt {\vss \hbox to 0pt {\hss #1\hss}\vss}}%
+%
+\def\dash #1%
+ {%
+ \vbox {\hrule height 0.5 \linewidth depth 0.5 \linewidth width #1}%
+ }%
+%
+\def\yaxis #1#2%
+ {%
+ \global\setbox \yAxis = \hbox
+ {%
+ \def \temp {#1}%
+ \ifx \temp\empty \else
+ \vbox to \plotheight {\vss \hbox {#1}\vss}%
+ \kern 0.7 \titlespacing
+ \fi
+ \def \temp {#2}%
+ \ifx \temp\empty \else
+ \labelwidth = 0pt
+ \setbox1=\box0\ytic #2,\cr,%
+ \ifnum \labelwidth = 0 \kern -\labelspacing \fi
+ \hbox to \labelwidth {\hfil}\box0%
+ \fi
+ \hbox to 0pt
+ {\hss \vrule height \plotheight depth 0pt width \linewidth \hss}%
+ }%
+ }%
+\def\ytic #1,%
+ {%
+ \def \temp {#1}%
+ \def \quit {\cr}%
+ \ifx \temp\quit
+ \let\next=\relax
+ \setbox0 = \vbox to \plotheight {\unvbox0 \unskip}%
+ \else
+ \let\next=\ytic \skip0 = \padding
+ \setbox1 = \hbox {\tenpoint $#1$}%
+ \ifnum \labelwidth < \wd1
+ \labelwidth = \wd1
+ \fi
+ \setbox1 = \hbox
+ {%
+ \smash
+ {%
+ \ifnum \wd1 = 0
+ \kern \labelspacing
+ \hbox to 0pt {\dash {0.67 \ticklength}\hss}%
+ \else
+ \lower 0.42 \digitheight \hbox to 0pt {\hss \unhbox1}%
+ \kern \labelspacing
+ \hbox to 0pt {\dash \ticklength \hss}%
+ \fi
+ }%
+ }%
+ \setbox0 = \vbox to \plotheight {\box1 \vskip \skip0 \unvbox0}%
+ \fi
+ \next
+ }%
+%
+\def\Yaxis #1#2%
+ {%
+ \global\setbox \YAxis = \hbox
+ {%
+ \hbox to 0pt
+ {\hss \vrule height \plotheight depth 0pt width \linewidth \hss}%
+ \def \temp {#2}%
+ \ifx \temp\empty \else \setbox1=\box0 \Ytic #2,\cr,\box0 \fi
+ \def \temp {#1}%
+ \ifx \temp\empty \else
+ \kern 0.7 \titlespacing
+ \vbox to \plotheight {\vss \hbox {#1}\vss}%
+ \fi
+ }%
+ }%
+\def\Ytic #1,%
+ {%
+ \def \temp {#1}%
+ \def \quit {\cr}%
+ \ifx \temp\quit
+ \let\next=\relax
+ \setbox0 = \vbox to \plotheight {\unvbox0 \unskip}%
+ \else
+ \let\next=\Ytic \skip0=\padding
+ \setbox1 = \hbox {\tenpoint $#1$}%
+ \setbox1 = \hbox
+ {%
+ \smash
+ {%
+ \ifnum \wd1=0
+ \hbox to 0pt {\hss \dash {0.67 \ticklength}}%
+ \else
+ \hbox to 0pt {\hss \dash \ticklength}%
+ \kern \labelspacing
+ \lower 0.42 \digitheight \box1%
+ \fi
+ }%
+ }%
+ \setbox0 = \vbox to \plotheight {\box1 \vskip \skip0 \unvbox0}%
+ \fi
+ \next
+ }%
+%
+\def\xaxis #1#2%
+ {%
+ \global\setbox \xAxis = \vtop
+ {%
+ \smash {\dash \plotwidth}%
+ \nointerlineskip
+ \def \temp {#2}%
+ \ifx \temp\empty \else \hbox to \plotwidth {\xtic #2,\cr,}\fi
+ \nointerlineskip
+ \def \temp {#1}%
+ \ifx \temp\empty \else
+ \kern 0.7 \titlespacing
+ \hbox to \plotwidth {\hss #1\hss}%
+ \fi
+ }%
+ }%
+\def\xtic #1,%
+ {%
+ \def \temp {#1}%
+ \def \quit {\cr}%
+ \ifx \temp\quit
+ \let\next=\unskip
+ \else
+ \let\next=\xtic
+ \vtop
+ {%
+ \setbox1 = \hbox to 0pt {\hss \tenpoint $#1$\hss}%
+ \ifnum \ht1=0
+ \smash
+ {\hbox to 0pt
+ {\hss \vrule height 0.67 \ticklength width \linewidth \hss}%
+ }%
+ \else
+ \smash
+ {\hbox to 0pt
+ {\hss \vrule height \ticklength width \linewidth \hss}%
+ }%
+ \nointerlineskip
+ \kern \labelspacing
+ \box1%
+ \fi
+ }%
+ \hskip \padding
+ \fi
+ \next
+ }%
+%
+\def\Xaxis #1#2%
+ {%
+ \global\setbox \XAxis = \vbox
+ {%
+ \def \temp {#1}%
+ \ifx \temp\empty \else
+ \hbox to \plotwidth {\hss #1\hss}%
+ \kern \titlespacing
+ \fi
+ \nointerlineskip
+ \def \temp {#2}%
+ \ifx \temp\empty \else \hbox to \plotwidth {\Xtic #2,\cr,}\fi
+ \nointerlineskip
+ \smash {\dash \plotwidth}%
+ }%
+ }%
+\def\Xtic #1,%
+ {%
+ \def \temp {#1}%
+ \def \quit {\cr}%
+ \ifx \temp\quit
+ \let\next=\unskip
+ \else
+ \let\next=\Xtic
+ \vbox
+ {%
+ \setbox1 = \hbox to 0pt {\hss \tenpoint $#1$\hss}%
+ \ifnum \ht1=0
+ \smash
+ {\hbox to 0pt
+ {\hss \vrule depth 0.67 \ticklength width \linewidth \hss}%
+ }%
+ \else
+ \box1%
+ \kern \labelspacing
+ \nointerlineskip
+ \smash
+ {\hbox to 0pt
+ {\hss \vrule depth \ticklength width \linewidth \hss}%
+ }%
+ \fi
+ }%
+ \hskip \padding
+ \fi
+ \next
+ }%
+%
+\def\plotbox (#1,#2)%
+ {%
+ \global\setbox \PlotData = \hbox to 0pt
+ {%
+ \unhbox \PlotData
+ \rlap {\kern #1\plotwidth \raise #2\plotheight \copy\PlotBox}%
+ }%
+ }%
+\def\plottext (#1,#2)#3%
+ {%
+ \setbox \PlotBox = \hbox {#3}%
+ \plotbox (#1,#2)%
+ }%
+\def\plotpoint (#1,#2)%
+ {%
+ \setbox \PlotBox = \centered.%
+ \plotbox (#1,#2)%
+ }%
+\def\plotsymbol (#1,#2)#3%
+ {%
+ \setbox \PlotBox = \centered {#3}%
+ \plotbox (#1,#2)%
+ }%
+\def\xrange #1]{\def\XRange {#1]}}%
+\def\yrange #1]{\def\YRange {#1]}}%
+%
+\def\makeplot #1#2#3%
+ {%
+ \plotwidth = #1 \plotheight = #2
+ \setbox \xAxis = \hbox to \plotwidth {\hfil}%
+ \setbox \XAxis = \hbox to \plotwidth {\hfil}%
+ \setbox \yAxis = \vbox to \plotheight {\vfil}%
+ \setbox \YAxis = \vbox to \plotheight {\vfil}%
+ \setbox \PlotData = \hbox {}%
+ {#3}%
+ \hbox
+ {%
+ \box \yAxis
+ \box \PlotData
+ \vbox
+ {%
+ \box \XAxis
+ \nointerlineskip \kern \plotheight \nointerlineskip
+ \box \xAxis
+ }%
+ \box \YAxis
+ }%
+ }%
+%
+\def\psfile #1% --- deferred input of postscript file ---
+ {%
+ \global\setbox \PlotData = \hbox to 0pt
+ {%
+ \unhbox \PlotData \special {psfile=#1}%
+ }%
+ }%
+%
+\def\addPS #1% --- immediate input of postscript commands ---
+ {%
+ \global\setbox \PlotData = \hbox to 0pt
+ {%
+ \unhbox \PlotData \special {"#1}%
+ }%
+ }%
+%
+\def\plotdatafile #1#2% --- deferred input of data file ---
+ {%
+ \global\setbox \PlotData = \hbox to 0pt
+ {%
+ \unhbox \PlotData
+ \special
+ {%
+ datafile="#1"
+ dash="[#2]"
+ xrange="\XRange"
+ yrange="\YRange"
+ hsize=\the\plotwidth\space
+ vsize=\the\plotheight\space
+ linewidth=\the\linewidth
+ }%
+ }%
+ }%
+%
+\def\plotdata #1#2% --- immediate input of data points ---
+ {%
+ \global\setbox \PlotData = \hbox to 0pt
+ {%
+ \unhbox \PlotData
+ \special
+ {%
+ datalist="#1"
+ dash="[#2]"
+ xrange="\XRange"
+ yrange="\YRange"
+ hsize=\the\plotwidth\space
+ vsize=\the\plotheight\space
+ linewidth=\the\linewidth
+ }%
+ }%
+ }%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Trivial Plotting Example
+%
+%\makeplot {5 in}{4.5 in}%
+% {%
+% \linewidth = 0.3 pt
+% \Xaxis {Title}{}
+% \Yaxis {\kern -5pt $Y$}{,2,4,6,8,10}
+% \yaxis {$y$}{0.0,,0.2,,0.4,,0.6,,0.8,,1.0}
+% \xaxis {$x$}{10^0 \ratio 1:2,\ratio 2:3,\ratio 3:4,\ratio 4:5,\ratio 5:6,
+% \ratio 6:7,\ratio 7:8,\ratio 8:9,\ratio 9:1,
+% 10^1 \ratio 1:2,\ratio 2:3,\ratio 3:4,\ratio 4:5,\ratio 5:6,
+% \ratio 6:7,\ratio 7:8,\ratio 8:9,\ratio 9:1,
+% 10^2 \ratio 1:1}
+% \plotsymbol (.9,.9)a
+% \plottext (.2,.4){some text}
+% \plottext (.25,.7){more text}
+% }%
+%\bye
diff --git a/macros/plain/contrib/misc/rcs.tex b/macros/plain/contrib/misc/rcs.tex
new file mode 100644
index 0000000000..da6e55769d
--- /dev/null
+++ b/macros/plain/contrib/misc/rcs.tex
@@ -0,0 +1,47 @@
+\catcode`\@=11
+%%
+%% REVISION CONTROL [by kris@diku.dk].
+%%
+%% \thedate
+%% \therevision
+%% These contain the date and revision of this paper, set by the
+%% following revision control commands. Default to the current date and
+%% to nothing.
+%%
+%% \RCSdate$...$
+%% \RCSrevision$...$
+%% Modify the date and revision of the paper as given by the RCS
+%% variables Date and Revision (not inserted above because then RCS
+%% would interfere with this comment). Use before \Draft.
+%%
+%% \Draft
+%% \ifdraft...\else...\fi
+%% \Draft prepends ``Draft'' to \therevision and sets \drafttrue.
+%%
+\edef\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\eat@#1{}
+%%
+\def\thedate{\today}
+\def\therevision{}
+%%
+\def\RCSdate$Date{%
+ \def\next@{%
+ \ifx\next$\let\nextii@=\eat@\else\let\nextii@=\RCSdate@\fi\nextii@}%
+ \futurelet\next\next@}
+\def\RCSdate@: #1/#2/#3 #4 ${\xdef\thedate{%
+ \ifcase#2\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\ignorespaces#3, \ifnum#1<100\relax19\fi#1}}
+%%
+\def\RCSrevision$Revision{%
+ \def\next@{%
+ \ifx\next$\let\nextii@=\eat@\else\let\nextii@=\RCSrevision@\fi\nextii@}%
+ \futurelet\next\next@}
+\def\RCSrevision@: #1 ${\xdef\therevision{[#1]}}
+%%
+\newif\ifdraft
+\def\Draft{\xdef\therevision{Draft \therevision}\drafttrue}
+%%
+\catcode`\@=\active
diff --git a/macros/plain/contrib/misc/redefine.tex b/macros/plain/contrib/misc/redefine.tex
new file mode 100644
index 0000000000..9b24b024e7
--- /dev/null
+++ b/macros/plain/contrib/misc/redefine.tex
@@ -0,0 +1,83 @@
+% -*- Mode: TeX -*-
+
+\ifx\thisfileis\anUndefinedMacro\input maybeload \fi
+
+\thisfileis{<eb.tex.texlocal>redefine} % abort loading if we're already loaded
+
+% The LaTex macros in this file provide redefinition warnings.
+% Also, the LaTex \newcommand facility is changed so that using
+% \newcommand to redefine a function produces only a warning
+% message, not an error.
+
+% A control sequence equivalent to \relax is considered
+% undefined, as in LaTex.
+
+% However, allocation commands such as \newtoks are changed so
+% that no redefinition takes place if their arguments are already
+% defined.
+
+\makeatletter
+
+\edef\@backslash{\expandafter\@car\string\relax\@nil}
+
+\def\@warnredef#1{\typeout{WARNING: The `#1' control sequence is being redefined.}}
+
+\def\@warnnoredef#1{\typeout{WARNING: Aborting redefinition of the `#1' control sequence.}}
+
+\def\@ifcsundefined#1#2#3{\ifx #1\anUndefinedMacro
+ \def\@@temp{#2}\else\ifx #1\relax\def\@@temp{#2}\else
+ \def\@@temp{#3}\fi\fi\@@temp}
+
+% Change LaTex behavior.
+
+\def\@notdefinable{\@warnredef{\@backslash\@tempa}}
+
+% Define \redefcheck{\ctlseq} that just checks the sequence
+% and ignores it.
+
+\def\redefcheck#1{\@ifcsundefined#1{}{\@warnredef{\string#1}}}
+
+% \redefabort{\oneargdefiner}{\ctlseq} puts out \oneargdefiner\ctlseq,
+% except that if \ctlseq is already defined, it just gobbles both
+% of them.
+
+\def\redefabort#1#2{\@ifcsundefined#2{#1#2}{\@warnnoredef{\string#2}}}
+
+% Define \newdef = \def with \redefcheck, and similarly for \gdef and \let.
+
+\def\newdef#1{\redefcheck{#1}\def#1}
+\def\newgdef#1{\redefcheck{#1}\gdef#1}
+\def\newlet#1{\redefcheck{#1}\let#1}
+
+% Add redefinition checking to \newif.
+% \newif is declared as \outer, so we need to delay the definition
+% of \latexnewif until we've scanned the definition of the new
+% \newif.
+
+\let\@tempa\newif
+\def\newif#1{\redefcheck{#1}\latexnewif#1}
+\let\latexnewif\@tempa
+
+% Now for the allocation commands, which I'm setting up to skip the
+% redefinition if their target control sequences are already defined.
+% These are also declared \outer, but the above \@tempa trick won't work
+% here; it's necessary to use another level of macros.
+
+\def\latexnewbox{\latexouternewbox}
+\let\latexouternewbox\newbox
+\def\newbox#1{\redefabort\latexnewbox{#1}}
+
+\def\latexnewcount{\latexouternewcount}
+\let\latexouternewcount\newcount
+\def\newcount#1{\redefabort\latexnewcount{#1}}
+
+\def\latexnewdimen{\latexouternewdimen}
+\let\latexouternewdimen\newdimen
+\def\newdimen#1{\redefabort\latexnewdimen{#1}}
+
+\def\latexnewtoks{\latexouternewtoks}
+\let\latexouternewtoks\newtoks
+\def\newtoks#1{\redefabort\latexnewtoks{#1}}
+
+\makeatother
+
diff --git a/macros/plain/contrib/misc/reference.tex b/macros/plain/contrib/misc/reference.tex
new file mode 100644
index 0000000000..965b31577f
--- /dev/null
+++ b/macros/plain/contrib/misc/reference.tex
@@ -0,0 +1,166 @@
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+% Version 2.1
+% 6/27/86
+% Written by: B.A. Leland (XHEMIA:BAL)
+% Calif Inst of Technology
+% Recognizes only ascending sequential footnote numbers, prints
+% everything else as read in the list
+% Required defs:
+% dash : defined as $^{-}$
+% checkref#1 : to determine if the reference has yet been
+% cited --- calls quickcnt
+% note#1 : initializes flags, counters, calls refext
+% refext#1 : does all the work, calls checkref, then prints
+% the footnote numbers. If newref=true write the
+% reference to the output file with its footnote
+% number, and redefine the def of the reference to
+% equal the current footnote number. If the
+% references are anything but ascending sequential
+% numbers, print the numbers separated by commas.
+% quickcnt#1 : based on Knuth's length macro (TeXbook, p.219)
+% counts the no. of non-blank characters in the
+% reference. If > or = 4, set the newref flag to
+% true.
+% Required misc:
+% counters
+% ftnum: previous footnote number of a newly cited ref
+% prev: previous PRINTED footnote number
+% flags
+% dsh : true = enable dash printing for no. ranges
+% newref : true = a reference that has not been cited
+%
+%\immediate\openout1=reflist % open the ouput file 'reflist.tex'
+%\newcount\ftnum % footnote number counter
+%\newcount\prev % previous footnote number
+%\newif\ifdsh % dsh=true: enable "dash" printing for ranges of #s
+%\def\dash{$^{-}$} % a dash for ranges of numbers
+%---------------------------------------------------------------------
+%\def\note#1{{
+%\dshtrue % toggle dsh flag to enable range printing
+%\prev=0 % initialize prev counter
+%\count0=0 % initialize cycle counter
+%\refext#1\end}} % call refext with list of references as argument
+%---------------------------------------------------------------------
+%\def\refext#1{
+%\ifx#1\end % \end is appended at end of reference list
+% \ifdsh % dsh=true do nothing
+% \else $^{\number\prev}$\fi\let\next=\relax % finish the range, quit
+%\else\checkref#1 % see if the reference has been cited previously
+% \ifnewref\global\advance\ftnum by1 % new reference,
+% % inc ftnum counter
+% \immediate\write1{\noexpand\item{$^{\the\ftnum}$}#1}
+% \xdef#1{\the\ftnum} % write the reference to the output file,
+% % and redefine the reference to be
+% % the current footnote number
+% \fi
+% \ifnum\count0=0 $^{#1}$ % first cycle, print the first no.
+% \else \ifnum\prev=#1 % duplicate reference, ignore
+% \else\advance\prev by1 % increment the prev counter
+% \ifnum\prev=#1 % if true, sequence is sequential
+% \ifdsh % if dsh enabled,
+% \dash % print a dash for the range
+% \dshfalse % and disable the dsh flag
+% \fi
+% \else\ifdsh $^{,\,#1}$ % if dsh enabled, print ", #"
+% \else % a dash was printed previously
+% \advance\prev by-1 % restore prev counter
+% $^{\number\prev ,\,#1}$ % finish the range, and
+% % print the new (non-sequential) no.
+% \dshtrue % toggle the dsh flag
+% \fi
+% \fi
+% \fi
+% \fi
+% \prev=#1 % save current footnote number in prev counter
+% \advance\count0 by1 % increment cycle counter
+% \let\next=\refext % recursive call
+%\fi
+%\next}
+%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+%\newcount\qckcntr
+%\newif\ifnewref % newref=true: 1st occurance of a given reference
+%---------------------------------------------------------------------
+%\def\checkref#1{{
+%\global\newreffalse % toggle the newref flag
+%\qckcntr=0 % initialize cycle "register"
+%\expandafter\quickcnt#1\end % expand the passed reference appending \end
+%\relax}}
+%---------------------------------------------------------------------
+%\def\quickcnt#1{
+%\ifx#1\end \let\next=\relax % relax and quit
+%\else\advance\qckcntr by1 % increment cycle register
+% \ifnum\qckcntr<4 % <4 cycles means nothing, so do nothing
+% \else\global\newreftrue % >= 4 means the reference has not been
+% % previously cited, toggle the newref flag
+% \fi
+% \let\next=\quickcnt % recursive call
+%\fi
+%\next}
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%________________________BEGIN__DEFS__________________________________
+%
+\immediate\openout1=reflist % open the ouput file 'reflist.tex'
+\newcount\ftnum % footnote number counter
+\newcount\prev % previous footnote number
+\newif\ifdsh % dsh=true: enable dash printing
+\def\dash{$^{-}$}
+\def\note#1{{\dshtrue \prev=0 \count0=0 \refext#1\end}}
+\def\refext#1{\ifx#1\end
+\ifdsh\else $^{\number\prev}$\fi\let\next=\relax
+\else\checkref#1\ifnewref\global\advance\ftnum by1 \immediate
+\write1{\noexpand\item{$^{\the\ftnum}$}#1}\xdef#1{\the\ftnum}\fi
+\ifnum\count0=0 $^{#1}$\else \ifnum\prev=#1 \else
+\advance\prev by1 \ifnum\prev=#1 \ifdsh \dash\dshfalse\fi\else
+\ifdsh $^{,\,#1}$\else
+\advance\prev by-1 $^{\number\prev ,\,#1}$\dshtrue \fi\fi\fi\fi
+\prev=#1 \advance\count0 by1 \let\next=\refext\fi \next}
+%
+\newcount\qckcntr
+\newif\ifnewref % newref=true: 1st occurance of a given reference
+\def\checkref#1{{\global\newreffalse\qckcntr=0
+\expandafter\quickcnt#1\end \relax}}
+\def\quickcnt#1{\ifx#1\end \let\next=\relax
+\else\advance\qckcntr by1 \ifnum\qckcntr<4 \else\global\newreftrue\fi
+\let\next=\quickcnt\fi \next}
+%
+%__________________________END__DEFS__________________________________
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%
+% S A M P L E U S A G E
+%
+% \def\a{this is reference a}
+% \def\aaa{aaaaa}
+% \def\b{this is reference b which has \reff }
+% \def\c{this is reference c which has \reff }
+% \def\d{this is reference d which has \reff }
+% \def\e{this is reference e which has \reff }
+% \def\g{this is reference e which has \reff }
+% \def\reff{reference f}
+%
+% {\rm
+% \ftnum=9
+% This is the example\note{\a} of
+% a\note{\b} paragraph
+% which contains footnotes that will ultimately end up on
+% a reference page.
+% This is the
+% second\note{\a} which
+% is supposed to be the same as the first reference.
+% If we continue, we\note{\c\b} should get another
+% one\note{\d} and\note{\a} so\note{\e} on.
+% If one needs to recall a couple of references\note{\aaa} one
+% uses a the same macro\note{\a\b\c\d\e} as before.
+% It is supposed to handle\note{\a\b\d\e} most any situation
+% up to and almost including\note{\e\d\c\b\a} except
+% this\note{\b\a\d\e} or this.\note{\a\b\c\d\d} One
+% must be cautioned that this has not been fully tested as yet..........
+% \vskip0.5truein
+% \immediate\closeout1
+% \vfill\eject
+% \baselineskip=14pt
+% \parindent=0pt
+% \parskip=0.1truein
+% \input reflist.tex
+% }
+% \vfill\end
+%
diff --git a/macros/plain/contrib/misc/resume.tex b/macros/plain/contrib/misc/resume.tex
new file mode 100644
index 0000000000..31f7d4645d
--- /dev/null
+++ b/macros/plain/contrib/misc/resume.tex
@@ -0,0 +1,352 @@
+%%% RESUME Library Created by KMP@MC -- Feb/Mar 1980
+%%% Converted for TEX from TEX80 by PARKER@OZ and MARC@OZ -- June 1985
+%%% Extended with NEWSECTION by MARKUS@OZ and PARKER@OZ -- Jan 1986
+%%%
+%%% Please notify PARKER@OZ of any changes to this file.
+%%%
+%%% This is a library for creating cookbook resumes. Everything is here.
+%%% All you add are the lies about yourself.
+%%%
+%%% For a sample usage, see the file TEXLOCAL:RESUME-SAMPLE.TEX
+%%% See the file TEXLOCAL:RESUME.CONVERSION for information on
+%%% converting your old TeX resume to run under the new system.
+%%%
+%%% Note: Currently you must run TeX using this package by doing:
+%%% @TEXTR <resume filename>
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% If things go wrong using this file, here are some common problems.
+%%% If all else fails, send me (PARKER@OZ) mail and maybe we can fix it.
+%%%
+%%% Debugging help:
+%%% ******THIS IS CRITICAL*******
+%%% -- look at arglist, esp. for twocol, split, and newsection. If there is a
+%%% space between the args (such as #1 and #2), then there must be
+%%% one in the source.
+%%% ******END CRITICAL SECTION****
+%%% -- if you get black vertical bars on your output, that means that
+%%% a line was overfull. Often the reason for this is the
+%%% width of the page (pagewidth) is not big enough to contain
+%%% both the section label and the value you specified for
+%%% textwidth. Adjust these numbers and all should work.
+%%% Be sure that if you have a big label name, you use twoline
+%%% to split it to two lines.
+%%% -- if you get a vertical overfull box problem and you have a one-line
+%%% objective, you will need to put \vskip .125in
+%%% in the format section at the end of your resume just after the
+%%% line \objective and just before the next one. You may still
+%%% get a warning from TeX about this box, but you will not have
+%%% any crowding on your output.
+%%% A possibly easier way of doing this is to make your objective
+%%% look like this:
+%%% \defsection{\objective}{\twoline {Employment}{Objective}}
+%%% {\text {This is my short objective.}
+%%% \text { }}
+%%% This blank text box will fake TeX into giving you the space you
+%%% need AND you won't get any warnings.
+%%% -- If you get font problems, try using the defaults and running
+%%% TeX using TEXTR, which uses the Times Roman font family.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% System implementor's message.
+\message{Please read the file TEXLOCAL:RESUME.TEX if you have problems.}
+\message{Note: Currently there are bugs w.r.t. output to QMS.}
+
+%%% Define system parameters
+
+\rm % Roman character set default type face
+\hsize=36pc % Page width = 36 picas ( 6 in )
+\vsize=45pc % Page height = 45 picas ( 7-1/2 in )
+\nopagenumbers % Flush page nos.
+\parindent=0pt % Flush indenting of paragraphs.
+ % Can be turned on locally if psyched to use it.
+
+%% Used in old TeX, but not needed here.
+%% \output{\page} % Just output page with no special headings, etc
+
+%% For now, at least as best I can tell from the point macros in TEXTR,
+%% small capitals aren't going to work, so just make them do something safe.
+\def\sc #1{\rm #1}
+
+
+%%% Define macros used internally
+
+
+\newdimen\rwid %% Width of the right box (text) is 28pc ( 4-2/3 in )
+\rwid=28pc
+
+%%% These commands may be used to enter a given typeface.
+%%%
+%%% \roman{... stuff to put in roman ...}
+%%% \bold{... stuff to put in bold ...}
+%%% \italic{... stuff to put in italic ...}
+
+\def\roman#1{{\rm #1}}
+\def\bold#1{{\bf #1}}
+\def\italic#1{{\it #1}}
+
+
+%%% These macros are provided for users who wish to change the various
+%%% width and height parameters used by this package.
+%%%
+%%% \textwidth size
+%%% \pagewidth size
+%%% \pagelength size
+
+\def\textwidth #1{\rwid=#1}
+\def\pagewidth #1{\hsize#1}
+\def\pagelength #1{\vsize#1}
+
+
+%%% Added by PARKER 6/85 to facilitate columnarizing of courses.
+%%%
+%%% Usage: \twocol{Foo Chemistry}{Bar Mathematics}
+%%%
+
+\def\twocol#1#2{\hbox to \rwid{\ourtextfont\hbox to 13.5pc{#1\hfill}
+ \hfill\hbox to 13.5pc{#2\hfill}}}
+
+%%% Commands for setting fonts. 'fontcmd' refers to a normal TeX font
+%%% affecting command such as \bf or \tenpoint.
+%%%
+%%% The font of text defined with \defname
+%%% \defnamefont{fontcmd} sets the font to be used for your name
+%%% \namefont changes to that font
+%%%
+%%% For varying the font of text in a \defsection
+%%% \defheaderfont{fontcmd} sets the font to be used for section headers
+%%% \headerfont changes to that font
+%%%
+%%% For varying the font of text in a \defaddress
+%%% \defaddressfont{fontcmd} sets the font to be used in the address
+%%% \addressfont changes to that font
+%%%
+%%% For varying the font of text in a \split
+%%% \deflsplitfont{fontcmd} sets the font to be used on the left of a split
+%%% \rsplitfont changes to that font
+%%% \defrsplitfont{fontcmd} sets the font to be used on the right of a split
+%%% \lsplitfont changes to that font
+%%%
+%%% For varying the font of text in a \text
+%%% \defourtextfont{fontcmd} is the font to be used in the main text area
+%%% \ourtextfont changes to that font
+
+\def\namefont{\twelvepoint\bf} % used to be HV14B
+\def\defnamefont#1{\def\namefont{#1}}
+
+\def\headerfont{\twelvepoint\bf} % used to be HV12B
+\def\defheaderfont#1{\def\headerfont{#1}}
+
+\def\labelfont{\tenpoint\bf}
+\def\deflabelfont#1{\def\labelfont{#1}}
+
+\def\lsplitfont{\tenpoint\bf}
+\def\deflsplitfont#1{\def\lsplitfont{#1}}
+
+\def\rsplitfont{\ninepoint\rm}
+\def\defrsplitfont#1{\def\rsplitfont{#1}}
+
+\def\ourtextfont{\tenpoint\rm} % was 9pt, but was losing...RP 6/30/85 17:58:20
+\def\deftextfont#1{\def\ourtextfont{#1}}
+
+\def\addressfont{\ninepoint\rm}
+\def\defaddressfont#1{\def\addressfont{#1}}
+
+
+%%% \skip -- inserts a gap between lines
+%%% \space -- inserts whitespace between horizontal text blocks
+
+\def\skip{\par\vskip 6pt}
+\def\space{\hfill}
+
+%%% \defname{yournamegoeshere}
+%%%
+%%% You must declare the name to go at the top of the form using this
+%%% macro.
+
+\def\defname#1{\gdef\name{\hbox to \hsize{\namefont\hfill #1\hfill}\par
+ \vskip 8pt}}
+
+%%% \defaddress{\macroname}{addressname}{...specs...}
+%%% specs may include
+%%% \street{...street address...} %% Required
+%%% \apt{apartment or room info} %% Optional
+%%% \city{cityname, statename} %% Required
+%%% \zip{02139} %% Optional
+%%% \phone{(617) 253-6765} %% Optional
+%%%
+%%% This defines an address box. They must appear in the specified order.
+%%% If required specs are not given, results may be unpredictable.
+%%% Any number of addressses may be defined---if you think they'll fit.
+%%% The format for how they get laid out is specified in the \format
+%%% command farther down.
+
+\def\defaddress#1#2#3{
+ \gdef#1{{\def\stext{} \def\ctext{} \def\ztext{} \def\atext{}
+ \def\qtext{\hbox{ }} \def\ptext{\hbox{ }}
+ \def\street####1{\def\stext{####1}}
+ \def\apt####1{\def\atext{\hbox{####1} \def\qtext{}}}
+ \def\city####1{\def\ctext{####1}}
+ \def\zip####1{\def\ztext{####1}}
+ \def\phone####1{\def\ptext{####1}}
+ #3
+ \addressfont\vbox{\hbox{\bf #2 Address} %%% used to have $\!$
+ %%
+ %% These next two lines used to be in the
+ %% other order [street then apt] but, as
+ %% pointed out by SR.WILSON@SPEECH, the
+ %% US Postal Service recommend an ordering
+ %% of information based on specificness.
+ %% If this change upsets you, simply
+ %% copy this \def into the beginning
+ %% of your resume file (after the \input)
+ %% and reverse them there. --RP 4/86
+ \atext
+ \hbox{\stext}
+ \hbox{\ctext\quad \ztext}
+ \hbox{\ptext}
+ \qtext}}}}
+
+
+%%% \defsection{macroname}{sectionname}
+%%% {main text of section}
+%%%
+%%% This macro allows you to define a macro named macroname which can be
+%%% called later and which will produce a box which looks like
+%%%
+%%% sectionname ... text ........
+%%% ... more text ...
+%%% ... etc .........
+%%%
+%%% The text of section must be constructed in turn by the use of either
+%%% of two special operators.
+%%%
+%%% \text{...} means that the text in the box is to be set as a
+%%% normal paragraph
+%%%
+%%% \split{...} {...} means that the two boxes are to be set on a single
+%%% line separated by whitespace. The first box is in
+%%% 9pt bold by default, the second is 8pt roman.
+%%%
+%%% A sample section definition looks like:
+%%%
+%%% \defsection{\education} {Education}
+%%% {\split{Massachusetts Institute of Technology} {Cambridge, MA}
+%%% \text {Got a Bachelor of Science in Humanities. Didn't learn much.}
+%%% \space
+%%% \split{Foo High School} {NoWhere, USA}
+%%% \text {I didn't really graduate from high school. I just kinda
+%%% gave up after a while and took up kollidge.}}
+%%%
+
+\def\defsection#1#2 #3
+ {\gdef#1{\headerfont
+ \setbox1=\hbox{\hsize \rwid\vbox{#3\par\vskip 10pt}}
+ \hbox to \hsize{\vbox to 1\ht1{\hbox{#2}\vfil}
+ \hfil
+ \box1}}}
+
+%%% NEWSECTION -- allows you to produce output with year labels, for instance,
+%%% to the right of each of your jobs. An alternative to putting the
+%%% year information inside the job description.
+%%%
+%%% This NEWSECTION by Markus Toth (MARKUS@OZ).
+%%%
+%%% Example of what the source code should look like:
+%%%
+%%%\defnewsection{\work}{Experience}
+%%% {\skip
+%%% \seclayer{\twoline {1985 to} {Present}}
+%%% {\split{Company A, Inc.} {Nowhere, MA}
+%%% \text {As director of food consumption....}}
+%%% \skip
+%%% \seclayer{\twoline {1982 to} {1985}}
+%%% {\split{Company B, Ltd.} {Somewhere, MA}
+%%% \text {Associate Research Scientist. ....}}
+%%% \vskip 0pt}} %% THIS MUST BE HERE
+%%%
+%%% And here is the output produced by that:
+%%%
+%%% Experience
+%%%
+%%% 1985 to Company A, Inc Nowhere, MA
+%%% Present As director of food consumption...
+%%%
+%%% 1982 to Company B, Ltd. Somewhere, MA
+%%% 1985 Associate Research Scientist. ....
+%%%
+%%% Note that the \vskip 0pt at the end of \defnewsection is CRITICAL.
+%%% Yes, this is a bug, and no we aren't going to fix it now.
+%%% And, yes, you are welcome to fix it iff you know how.
+
+\def\defnewsection#1#2 #3
+ {\gdef#1{\headerfont
+ \hbox to \hsize{#2 \hfil}
+ #3}}
+
+%%% SECLAYER -- each layer (i.e. each job) needs to be in one of these.
+%%%
+%%% Note that it uses LABELFONT for the labels. You can define labelfont
+%%% with \deflabelfont{\tenpoint\bf} or whatever.
+
+\def\seclayer#1 #2
+ {\labelfont
+ \setbox1=\hbox{\hsize \rwid\vbox{#2\par\vskip 10pt}}
+ \hbox to \hsize{\vbox to 1\ht1{\hbox{#1}\vfil}
+ \hfil
+ \box1}}
+
+
+%%% \oneline{text} - a no-op
+%%% \twoline{text}{text} - creates a two-line box
+%%% \threeline{text}{text}{text} - creates a three-line box
+%%%
+%%% These are for trivially creating one, two, or three line boxes for the
+%%% label field in the main body.
+
+\def\oneline#1{#1}
+\def\twoline#1#2{\vbox{\hbox{#1}\hbox{#2}}}
+\def\threeline#1#2#3{\vbox{\hbox{#1}\hbox{#2}\hbox{#3}}}
+
+
+
+%%% \format{addresslist}
+%%% {bodylist}
+%%%
+%%% This is what defines how things get laid out. Just list out your
+%%% address names (separate them with a \space) and your section names
+%%% in the order you want them to appear. eg,
+%%%
+%%% \format{\home\space\work\space\permanent}
+%%% {\objective\skip\education\skip\background}
+%%%
+%%% This will define a \copy and that will make it get output. You may
+%%% change fonts, etc, between doing \copy's and the changes will affect
+%%% subsequent \copy commands. You'll need to supply your own \bye at
+%%% the end of the file.
+
+\def\format #1 #2{
+ \count0=0
+ \gdef\copy{\global\advance\count0 by 1
+ {\def\split####1 ####2{\hbox to\rwid{\lsplitfont ####1\hfill\rsplitfont ####2}}
+ \def\text####1{\hbox {\hsize \rwid \vbox{\ourtextfont ####1}}}
+ \hbox{$ $}\par\vfill\name\vfill\hbox to \hsize{#1}\par\vfill
+ #2\par\vfill\eject}}}
+
+%% \def\format #1 #2{
+%% \setcount0 0
+%% \gdef\copy{\advcount0
+%% {\def\split####1 ####2{\hbox to \rwid{\lsplitfont ####1\hfill\rsplitfont ####2}}
+%% \def\text####1{\hbox par \rwid{\textfont ####1}}
+%% \hbox{$ $}\par\vfill\name\vfill\hbox to size {#1}\par\vfill
+%% #2\par\vfill\eject}}}
+
+
+% Local Modes:
+% MM AutoTeX Mode:1,m.mTex Mode"e m(m.m Load Library)TeX'w
+% Mode:AutoTeX
+% Comment Column:40
+% Comment Start:%
+% Atom Word Mode:0
+% Auto Fill Mode:0
+% End:
diff --git a/macros/plain/contrib/misc/rightfig.mac b/macros/plain/contrib/misc/rightfig.mac
new file mode 100644
index 0000000000..25fa72efb5
--- /dev/null
+++ b/macros/plain/contrib/misc/rightfig.mac
@@ -0,0 +1,103 @@
+\newif\ifoutput
+\newtoks\outputpretest
+
+\edef\oldoutput{\the\output} % copy old output routine
+\output={\the\outputpretest \ifoutput \oldoutput \fi}
+
+\outputpretest={\outputtrue}% default "outputpretest" routine
+
+
+% Define an alternate "outputpretest" routine --------------------------------
+
+\newbox\pagebox
+\newdimen\pageht
+
+\newif\iftryingfig \tryingfigfalse
+\newif\ifdoingfig \doingfigfalse
+\newif\ifpageafterfig \pageafterfigfalse
+
+\def\dofigtest{%
+ \ifnum\outputpenalty=-10001
+ \setbox\pagebox=\vbox{\unvbox255}%
+ \global\pageht=\ht\pagebox
+ \outputfalse
+ \unvbox\pagebox
+ \else
+ \outputtrue
+ \ifdoingfig
+ \pageafterfigtrue
+ \fi
+ \fi
+}
+
+
+% Define the "tryfig" macro for testing figure placement ---------------------
+
+\newdimen\startpageht
+\newdimen\htdone \htdone=0pt
+
+\edef\oldeverypar{\the\everypar}
+\everypar={\tryfig \oldeverypar}
+
+\def\tryfig{% "\global" is used in case user does any grouping
+ \iftryingfig
+ {\everypar={\relax}\setbox0=\lastbox
+ \parindent=\wd0 \parskip=0pt \par
+ \penalty-10001 \leavevmode}%
+ \dimen0=\vsize \advance\dimen0 by -\pageht
+ \advance\dimen0 by -2\baselineskip
+ \ifdim\dimen0>\ht\figbox
+ \dimen0=0.3\baselineskip \vrule depth \dimen0 width 0pt
+ \vadjust{\kern -\dimen0 \vtop to \dimen0{\baselineskip=\dimen0
+ \vss \vbox to 1ex{\hbox to \hsize{%
+ \hss \copy\figbox}\vss}\null}}%
+ \global\tryingfigfalse
+ \global\doingfigtrue
+ \global\startpageht=\pageht
+ \global\htdone=0pt
+ \dohang
+ \fi
+ \else
+ \ifdoingfig
+ {\everypar={\relax}\setbox0=\lastbox
+ \parindent=\wd0 \parskip=0pt \par
+ \penalty-10001 \leavevmode}%
+ \global\htdone=\pageht
+ \global\advance\htdone by -\startpageht
+ \ifpageafterfig
+ \global\doingfigfalse
+ \else
+ \ifdim\htdone<\ht\figbox
+ \dohang
+ \else
+ \global\doingfigfalse
+ \fi
+ \fi
+ \else
+ \global\outputpretest={\outputtrue}%
+ \fi
+ \fi
+}
+
+
+% Define macro to activate the figure insertion macros -----------------------
+
+\def\rightinsert{%
+ \outputpretest={\dofigtest}
+ \tryingfigtrue \doingfigfalse \pageafterfigfalse
+}
+
+
+% Define macro to calculate and set hanging indent values --------------------
+
+\newcount\hangcount
+\newdimen\figgutter % gap between text and figure
+
+\def\dohang{%
+ \dimen0=\ht\figbox \advance\dimen0 by -\htdone
+ \advance\dimen0 by 1.49\baselineskip \hangcount=\dimen0
+ \divide\hangcount by \baselineskip
+ \dimen0=\wd\figbox \advance\dimen0 by \figgutter
+ \global\hangafter=-\hangcount \global\hangindent=-\dimen0
+}
+
diff --git a/macros/plain/contrib/misc/rotate.tex b/macros/plain/contrib/misc/rotate.tex
new file mode 100644
index 0000000000..27891ee95e
--- /dev/null
+++ b/macros/plain/contrib/misc/rotate.tex
@@ -0,0 +1,43 @@
+%
+% 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/plain/contrib/misc/scmac.tex b/macros/plain/contrib/misc/scmac.tex
new file mode 100644
index 0000000000..e1b641465a
--- /dev/null
+++ b/macros/plain/contrib/misc/scmac.tex
@@ -0,0 +1,137 @@
+
+%% scmac.tex
+%% TeX macros for typesetting scripts version 2.00
+%% Copyright (C) 1989 by Na Choon Piaw
+%% This file may be freely used, distributed, and modified provided
+%% credit is given to the original author. You can even try to sell it,
+%% assuming someone's willing to pay for this, of course.
+
+%% This is a major rewrite --- hence, no change update is given.
+%% For more information see the user's documentation.
+
+%% tell user what version
+
+\immediate\write16{Loading scmac version 2.00 Beta release ...}
+
+%% fonts --- Use Computer Modern. Substitute these with local
+%% equivalents if no Computer Modern.
+\font\bigtenrm=cmr10 scaled\magstep2 %% big font for title
+\font\rm=cmr10 %% standard roman text
+\font\bf=cmbx10 %% for bold
+\font\sl=cmsl10 %% slanted text
+\font\it=cmti10 %% italics
+
+%% variable declarations
+\newcount\fnotecnt
+\newcount\FootNoteStyle
+\newcount\Style
+\newwrite\auxfile
+\fnotecnt=1
+\FootNoteStyle=1 %% "true" footnotes
+\Style=1
+
+%% preamble handling
+\def\Title{}
+\def\transl{}
+\def\oth{}
+\def\cpmessage{}
+\def\heading#1{\global\headline={\bf #1 \hfil Page \folio}}
+\def\translator#1{\edef\transl{\noindent\it Translation by #1.\hfil}}
+\def\others#1{\edef\oth{\noindent\it #1.\hfil}}
+\footline={\hfil}
+
+%% open auxilary file.
+\immediate\openout\auxfile=\jobname.aux
+
+%% Environments
+\def\beginscript{
+ \Title
+ \cpmessage
+ \transl
+ \oth
+ %% Open output file for footnotes
+ %% Can your wordprocessor do this?
+}
+
+\def\endscript{
+\immediate\closeout\auxfile
+\ifnum\FootNoteStyle=1
+ \relax
+\else
+ %% read in from aux file.
+ \bigskip
+ \filbreak
+ \line{\bf Footnotes\hfil}
+ \openin 1 = \jobname.aux
+ \readfootnotes
+\fi
+}
+
+%% songs
+\def\beginsong{\bigskip\begingroup\obeylines\narrower}
+\def\endsong{\par\endgroup\bigskip}
+
+\def\readfootnotes{
+%% recursive TeX macro! Can WordPerfect do this?
+\def\temp{}
+\ifeof 1
+ \relax
+\else
+ \read 1 to \temp
+ \ifeof 1
+ \relax
+ \else
+ \item{[\temp]}
+ \read 1 to \temp
+ \temp
+ \readfootnotes
+ \fi
+\fi
+}
+
+%% describe and desc are unchanged.
+\def\describe#1{\sl #1 \medskip\goodbreak}
+\def\desc#1{\it (#1\/)\rm}
+
+%% footnoting
+\def\fnote#1{\ifnum\FootNoteStyle=1
+%% footnotes at bottom of page
+ \footnote{$^{\the\fnotecnt}$}{\rm #1}
+\else
+%% new-style typeinto aux file for readback
+%% remember to change the \hskip value for different fonts!
+ $^{\the\fnotecnt}$ \hskip -0.15in
+ \immediate\write\auxfile{\the\fnotecnt}
+ \immediate\write\auxfile{#1}
+\fi
+\global\advance\fnotecnt by 1
+}
+
+%% unavoidable processing
+\ifnum\Style=1
+ %% old style: version 1.xx
+ \gdef\say#1#2{
+ \centerline{\bf #1}
+ {
+ \parindent=1in
+ \rm\narrower\raggedright\noindent
+ #2
+ \par
+ }
+ \bigskip\goodbreak
+ }
+\else
+ %% version 2.xx
+ \gdef\say#1:#2\par{
+ \centerline{\bf #1}
+ {
+ \parindent=1in
+ \rm\narrower\raggedright\noindent
+ #2
+ \par
+ }
+ \bigskip\goodbreak
+ }
+\fi
+
+
diff --git a/macros/plain/contrib/misc/scmac202.tex b/macros/plain/contrib/misc/scmac202.tex
new file mode 100644
index 0000000000..cf838a320e
--- /dev/null
+++ b/macros/plain/contrib/misc/scmac202.tex
@@ -0,0 +1,205 @@
+%% scmac.tex
+%% TeX macros for typesetting scripts version 2.02
+%% Copyright (C) 1989 by Na Choon Piaw
+%% This file may be freely used, distributed, and modified provided
+%% credit is given to the original author. You can even try to sell it,
+%% assuming someone's willing to pay for this, of course.
+
+%% \begin documentation
+
+%% 2.02 Alpha
+%% There never was a 2.00 release.
+%% Changes from the documentation are found here:
+
+%% Syntax change:
+%% From the beginning of the file we have:
+%% \input scmac.tex
+%% \Style=
+%% \FootNoteStyle=
+
+%% For the \Style, you may choose from:
+%% \OldStyle (pre 2.00)
+%% \NewStyle (post 2.00)
+
+%% \OldStyle is fully compatible with version 1.xx
+%% \NewStyle is fully compatible with version 2.00
+
+%% For \FootNoteStyle, you may choose from:
+%% \EndNotes (Put footnotes at the end)
+%% \FootNotes (Put footnotes at the bottom)
+
+%% Note that these are now the ONLY supported ways of specifying styles.
+%% If you put in numbers directly, they might work in this version, but
+%% if I change the macros in anyway in the next, they will no longer
+%% work.
+
+%% \end documentation
+
+%% macros proper
+
+%% tell user what version
+\message{Loading scmac version 2.01 Alpha ...}
+
+%% fonts --- Use Computer Modern. Substitute these with local
+%% equivalents if no Computer Modern.
+\message{fonts.}
+\font\bigtenrm=cmr10 scaled\magstep2 %% big font for title
+\font\rm=cmr10 %% standard roman text
+\font\bf=cmbx10 %% for bold
+\font\sl=cmsl10 %% slanted text
+\font\it=cmti10 %% italics
+
+%% variable declarations
+\message{counters.}
+\newcount\fnotecnt
+\newcount\FootNoteStyle
+\newcount\EndNotes
+\newcount\FootNotes
+\EndNotes=0
+\FootNotes=1
+\newcount\Style
+\newcount\OldStyle
+\newcount\NewStyle
+\OldStyle=1
+\NewStyle=2
+\newwrite\auxfile
+\newread\auxrfile
+\fnotecnt=1
+\FootNoteStyle=\FootNotes %% "true" footnotes
+\Style=\NewStyle
+
+%% preamble handling
+\message{preamble.}
+\def\Title{}
+\def\transl{}
+\def\oth{}
+\def\cpmessage{}
+\def\heading#1{\global\headline={\bf #1 \hfil Page \folio}}
+\def\translator#1{\edef\transl{\noindent\it Translation by #1.\hfil}}
+\def\others#1{\edef\oth{\noindent\it #1.\hfil}}
+\footline={\hfil}
+
+%% open auxilary file.
+\message{output files.}
+\immediate\openout\auxfile=\jobname.aux
+
+%% little patch to let me do the \let in side \beginscript
+%% now, when i rewrite this, i'd better use @s in them just like
+%% in plain.tex
+\message{macros.}
+\gdef\Styleone#1#2{
+ \centerline{\bf \noexpand#1}
+ {
+ \parindent=1in
+ \rm\narrower\raggedright\noindent
+ \noexpand#2
+ \par
+ }
+ \bigskip\goodbreak
+ }
+\gdef\Styletwo#1:#2\par{
+ \centerline{\bf #1}
+ {
+ \parindent=1in
+ \rm\narrower\raggedright\noindent
+ \noexpand
+ \hskip -1em\relax #2
+ %% horizontal skip to combat the speech-offset
+ %% problem. Remove it if the problem
+ %% disappears.
+ \par
+ }
+ \bigskip\goodbreak
+ }
+
+%% global \say --- in standard old style --- to warn people that
+%% the \style is not set
+
+\def\say#1#2{\message{! scmac Fatal Error: You must start the script with \string\beginscript and
+end it with \string\endscript!} \end}
+
+% Environments
+\def\beginscript{
+ \Title
+ \cpmessage
+ \transl
+ \oth
+%% Remember to recode in case format after I get the TeXbook back from
+%% Case. (Yech! Just realized the horrible pun)
+ \ifnum\Style=\OldStyle
+ %% old style: version 1.xx
+ \let\say=\Styleone
+ \let\errcheck=\relax
+ \else
+ \ifnum\Style=\NewStyle
+ %% version 2.xx
+ \let\say=\Styletwo
+ \let\errcheck=\relax
+ \else
+ \message{!Scmac Fatal Error: Style \the\Style is not supported!}
+ \let\errcheck=\end
+ \fi
+ \fi
+ \errcheck
+}
+
+\def\endscript{
+\immediate\closeout\auxfile
+\ifnum\FootNoteStyle=\FootNotes
+ \relax
+\else
+ \ifnum\FootNoteStyle=\EndNotes
+ %% read in from aux file.
+ \bigskip
+ \filbreak
+ \line{\bf Footnotes\hfil}
+ \openin\auxrfile = \jobname.aux
+ \readfootnotes
+ \else
+ \message{scmac Warning: \the\FootNoteStyle is not supported}
+ \fi
+\fi
+}
+
+%% songs
+\def\beginsong{\bigskip\begingroup\obeylines\narrower}
+\def\endsong{\par\endgroup\bigskip}
+
+\def\readfootnotes{
+%% recursive TeX macro! Can WordPerfect do this?
+\def\temp{}
+\ifeof 1
+ \relax
+\else
+ \read \auxrfile to \temp
+ \ifeof \auxrfile
+ \relax
+ \else
+ \item{[\temp]}
+ \read \auxrfile to \temp
+ \temp
+ \readfootnotes
+ \fi
+\fi
+}
+
+%% describe and desc are unchanged.
+\def\describe#1{\sl #1 \medskip\goodbreak}
+\def\desc#1{\it (#1\/)\rm}
+
+%% footnoting
+\def\fnote#1{\ifnum\FootNoteStyle=1
+%% footnotes at bottom of page
+ \footnote{$^{\the\fnotecnt}$}{\rm #1}
+\else
+%% new-style typeinto aux file for readback
+%% remember to change the \hskip value for different fonts!
+ $^{\the\fnotecnt}$ \hskip -0.15in
+ \immediate\write\auxfile{\the\fnotecnt}
+ \immediate\write\auxfile{#1}
+\fi
+\global\advance\fnotecnt by 1
+}
+\message{done.}
+
+
diff --git a/macros/plain/contrib/misc/scorecard.tex b/macros/plain/contrib/misc/scorecard.tex
new file mode 100644
index 0000000000..5a8f560605
--- /dev/null
+++ b/macros/plain/contrib/misc/scorecard.tex
@@ -0,0 +1,173 @@
+% Scorecard.tex v 1.1
+%
+% prints a baseball scorecard for one team;
+% also prints summary statistics boxes (Pitcher's stats, Offense,
+% Defense, and Pitching miscellanea, a Notes section, and a line score).
+%
+% This is currently intended to make a blank scorecard with which
+% to score a baseball game, and additional space to record information
+% with which to submit a Box Score with the information required by
+% newspapers, league offices, etc.
+%
+% Margins are set for landscape printing, be sure to DVI it with
+% the appropriate qualifiers.
+%
+% Shortly (ha ha) to come: scorecard.sty to allow full typesetting of
+% a baseball game. If anyone is actually writing a book/article that
+% could benefit from this, please let me know, as it may give me incentive
+% to finish.
+%
+% Dedicated to my wife who thinks the rules are the best part of baseball.
+%
+% Matthew Wall 4/89 revised 4/28/89 - looks much better, added space
+% to keep defensive stats
+%
+% WALL@BRANDEIS.Bitnet -or- matt%cs.brandeis.edu@relay.cs.net
+% c/o Research and Academic Computing, Brandeis University,
+% Waltham, MA, 02254
+%
+% (c) 1989
+% Free for the world to enjoy. Let no one gain commercial benefit
+% from this, lest ye be pushed into the pits of hell and the courts.
+%
+% May be freely modified and copied; please send neat changes/suggestions
+% to me in the email.
+%
+% God Bless the Designated Hitter;
+% To Lucifer with Astroturf;
+% Domes for the needy;
+% Smog for the undeserving;
+% May baseball return to Washington, D.C.
+%
+%
+\documentstyle[12pt]{article}
+\pagestyle{empty}
+
+ \setlength{\textwidth}{10.48in}
+ \setlength{\oddsidemargin}{-.95in}
+ \setlength{\evensidemargin}{-.95in}
+
+ \setlength{\textheight}{7.7in}
+ \setlength{\topmargin}{-.95in}
+
+
+\begin{document}
+\noindent ~~~~Date: ~\hrulefill~
+ At: ~\hrulefill~
+ Team: ~\hrulefill~
+ Vs: ~\hrulefill~\\
+
+ Start time: ~\hrulefill~
+ End time: ~\hrulefill~
+ Attendance: ~\hrulefill~
+ Temperature: ~\hrulefill~\\
+\LARGE
+
+\begin{tabular}{||l|c||c|c|c|c|c|c|c|c|c|c||c|c|c|c||c|c|c||} \hline \hline
+Player~~~~~& {\normalsize Pos}&~1~ & ~2~ & ~3~ & ~4~ & ~5~ & ~6~ & ~7~ & ~8~ &
+ ~9~ & ~10 & AB & ~H~ & ~R~ & BI
+ & P & A & E \\ \hline
+{\tt\small - - - - - - - - - - - } & {\tt\small - - }
+& & & & & & & & & & & & & & & & & \\ \hline
+{\tt\small - - - - - - - - - - - } & {\tt\small - - }
+& & & & & & & & & & & & & & & & & \\ \hline
+{\tt\small - - - - - - - - - - - } & {\tt\small - - }
+& & & & & & & & & & & & & & & & & \\ \hline
+{\tt\small - - - - - - - - - - - } & {\tt\small - - }
+& & & & & & & & & & & & & & & & & \\ \hline
+{\tt\small - - - - - - - - - - - } & {\tt\small - - }
+& & & & & & & & & & & & & & & & & \\ \hline
+{\tt\small - - - - - - - - - - - } & {\tt\small - - }
+& & & & & & & & & & & & & & & & & \\ \hline
+{\tt\small - - - - - - - - - - - } & {\tt\small - - }
+& & & & & & & & & & & & & & & & & \\ \hline
+{\tt\small - - - - - - - - - - - } & {\tt\small - - }
+& & & & & & & & & & & & & & & & & \\ \hline
+{\tt\small - - - - - - - - - - - } & {\tt\small - - }
+& & & & & & & & & & & & & & & & & \\ \hline
+{\tt\small - - - - - - - - - - - } & {\tt\small - - }
+& & & & & & & & & & & & & & & & & \\ \hline
+{\tt\small - - - - - - - - - - - } & {\tt\small - - }
+& & & & & & & & & & & & & & & & & \\ \hline \hline
+Totals &{\normalsize H/R} & / & / & / & / & / & / & / & / & / & / & & & &
+& & & \\ \hline \hline
+\end{tabular} \\
+
+\normalsize
+% WP, LP, 2B, 3B, HR, SB, SF, S, HBP, BB, E, SO, WP, ER, R, H, IP,DP, PB, B, PO?
+ {\bf Notes:} \\
+\pagebreak
+
+\noindent ~~~~Date: ~\hrulefill~
+ At: ~\hrulefill~
+ Team: ~\hrulefill~
+ Vs: ~\hrulefill~ \\
+
+\LARGE
+
+\begin{tabular}{||l|r|r|r|r|r|r||r} \cline{1- 7} \cline{1- 7}
+Pitcher~~~~~ & IP & ~H~ & ~R~ & ER & BB & SO &~~~{\bf\normalsize
+ Notes:} \\ \cline{1- 7}
+ & & & & & & & \\ \cline{1- 7}
+ & & & & & & & \\ \cline{1- 7}
+ & & & & & & & \\ \cline{1- 7}
+ & & & & & & & \\ \cline{1- 7}
+ & & & & & & & \\ \cline{1- 7} \cline{2- 7}
+Totals & & & & & & & \\ \cline{1- 7} \cline{2- 7}
+\end{tabular} \\
+\normalsize
+
+\medskip
+% I apologize for all the unbreakable spaces to follow. \fill commands
+% and tabular were just a bit too even to be useful, though they do look
+% better.
+
+\framebox{
+\parbox{9.2in}{
+{\bf Offense} \\
+\noindent 2B:~~~~~~~~~~~~~~~~~~~~ \\
+3B:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+HR:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+\\
+\noindent BB:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ SB:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~CS:
+\\
+\noindent SF:~~~~~~~~~~~~~~~~
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ S:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ HBP:~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LOB:~~~~~~~~
+}
+} \\
+\medskip
+
+\framebox{
+\parbox{9.2in}{
+{\bf Defense} \\
+\noindent PB:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+E:~~~~~\\
+\noindent DP:~~~~~~~~~~~~
+}
+} \\
+\medskip
+
+\framebox{
+\parbox{9.2in}{
+{\bf Pitching} \\
+HB:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+WP:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Balk:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+IW:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \\
+Win/Loss: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Save: ~~~~~~~~~~~~~~~~~~~~~~
+}
+}
+\LARGE
+\bigskip
+\bigskip
+
+\begin{tabular}{||l||r|r|r|r|r|r|r|r|r||r|r|r|r||} \hline\hline
+~~~~~~~~~~~~~~~~&~ &~ &~ &~ &~ &~ &~ &~ &~ &~ &~ &~ &~ \\ \hline
+~~~~~~~~~~~~~~~~&~ &~ &~ &~ &~ &~ &~ &~ &~ &~ &~ &~ &~ \\ \hline\hline
+\end{tabular} \\
+\end{document}
diff --git a/macros/plain/contrib/misc/selectp.tex b/macros/plain/contrib/misc/selectp.tex
new file mode 120000
index 0000000000..a1595df5d9
--- /dev/null
+++ b/macros/plain/contrib/misc/selectp.tex
@@ -0,0 +1 @@
+../../../latex/contrib/selectp/selectp.sty \ No newline at end of file
diff --git a/macros/plain/contrib/misc/setstrut.tex b/macros/plain/contrib/misc/setstrut.tex
new file mode 100644
index 0000000000..a6be78688d
--- /dev/null
+++ b/macros/plain/contrib/misc/setstrut.tex
@@ -0,0 +1,58 @@
+% SETSTRUT.TEX Automatic strut computation
+% by Stephan v.\ Bechtolsheim 1987
+% Save the current value of \baselineskip here for strut handling
+\newdimen\strutskip
+
+% \setstrut
+% =========
+% Compute \strut as a \vrule of
+% width: 0
+% height: 70% of the current value of \baselinekip
+% depth: the remaining 30% of \baselineskip.
+\def\setstrut {%
+ \strutskip = \baselineskip
+ \ifdim\baselineskip < 0pt
+ \errhelp = {You probably called \string\offinterlineskip
+ before \string\setstrut}
+ \errmessage{\string\setstrut: negative
+ \string\baselineskip (\the\baselineskip)}%
+ \fi
+}
+
+% \strut
+% ======
+% The strut
+\def\strut {%
+ \vrule height 0.7\strutskip
+ depth 0.3\strutskip
+ width 0pt
+}
+
+% \higherstrut
+% ============
+% Generate a strut, which is higher by #1 than the usual strut.
+% The depth is the depth of \strut.
+% #1: dimension, by which the strut is made higher
+\def\higherstrut #1{%
+ {%
+ \dimen0 = 0.7\strutskip
+ \advance\dimen0 by #1%
+ \vrule height \dimen0 depth 0.3\strutskip width 0pt
+ }%
+}
+
+% \deeperstrut
+% ============
+% Generate a strut, which is deeper by #1 than the usual strut.
+% the height is the height of \strut.
+% #1: dimension, by wghich the strut is made deeper.
+\def\deeperstrut #1{%
+ {%
+ \dimen0 = 0.3\strutskip
+ \advance\dimen0 by #1%
+ \vrule height 0.7\strutskip depth \dimen0 width 0pt
+ }%
+}
+
+% Initialize in case the user forgets to set up a strut
+\setstrut
diff --git a/macros/plain/contrib/misc/settosize.tex b/macros/plain/contrib/misc/settosize.tex
new file mode 100644
index 0000000000..c75cc2ff7c
--- /dev/null
+++ b/macros/plain/contrib/misc/settosize.tex
@@ -0,0 +1,103 @@
+
+%%% I need to be able to specify the width for text. I would like to
+%%% use the largest size (subject to a user specified maximum and
+%%% minimum). If the constraints mean that I cannot fill the width
+%%% then the text should be centered at the largest specified size.
+%%%
+%%% Phil Taylor January 1993
+
+\catcode `\@ = 11
+
+\newcount \r@mainder
+\newcount \m@gstepcount
+\newcount \m@gsteplimit
+\newcount \m@gstepvalue
+\newdimen \m@gstepdimen
+
+\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
+ }
+
+\catcode `\@ = 12
+
+\magsteps 63
+\newcount \loopcount
+\newdimen \thewidth
+
+\def \set #1 \in #2 \to %%% see example at end
+ {\def \thetext {#1}%
+ \def \thefont {#2 }%
+ \afterassignment \settowidth
+ \thewidth =
+ }
+
+\def \settowidth
+ {\loopcount = 0
+ \loop
+ \message {Trying \noexpand \magstep \the \loopcount...}%
+ \setbox 0 = \hbox
+ {\font \tempfont = \thefont scaled \magstep \loopcount
+ \tempfont \thetext
+ }%
+ \ifdim \wd 0 < \thewidth
+ \advance \loopcount by 1
+ \repeat
+ \advance \loopcount by -1
+ \message {The calculated font is \thefont \space
+ scaled \noexpand \magstep \the \loopcount}%
+
+ \hbox to \thewidth {\font \tempfont = \thefont scaled \magstep \loopcount
+ \hss \tempfont \thetext \hss}%
+ }
+
+\set Now is the time for \in cmr10 \to 50 cm
+
+
+
+
diff --git a/macros/plain/contrib/misc/split.tex b/macros/plain/contrib/misc/split.tex
new file mode 100644
index 0000000000..11d5708376
--- /dev/null
+++ b/macros/plain/contrib/misc/split.tex
@@ -0,0 +1,48 @@
+%%%------------------------rrrrrrrrrrrrrrip!--------------------------
+% Macro: \xsplit
+% By: Eric Skinner <ERS2F@UOTTAWA>
+% Function: Takes two pieces of text, and boxes them side by side.
+% Column widths and inter-column gap are set by user.
+% Parameters:
+% #1: Width of first column, including unit specification
+% #2: Width of space between columns, including units
+% #3: Width of second column, including units
+% ** Warning: Don't exceed page dimensions!
+% #4: First column text.
+% #5: Second column text.
+% Registers: \box1,\box2
+\def\xsplit#1#2#3#4#5{{
+ \setbox1=\vbox{\hsize= #1 #4} % First column
+ \setbox2=\vbox{\hsize= #3 #5} % Second column
+ % If the boxes are output side by side at this point, they
+ % will be aligned at the bottom instead of the top.
+ \ifdim\ht2>\ht1 % Column two is longer than column one
+ % Fill bottom of column one with glue
+ \setbox1=\vbox to \ht2{\hsize= #1 #4 \vfill}
+ \else
+ \ifdim\ht1>\ht2 % Column one is longer than column two
+ % Fill bottom of column two with glue
+ \setbox2=\vbox to \ht1{\hsize= #3 #5 \vfill}
+ \fi
+ \fi
+ \hbox{\box1\hskip#2\box2}}}
+%%%------Cut some more------------------------------------------------
+% Macro: \split
+% By: Eric Skinner <ERS2F@UOTTAWA>
+% Function: Takes two pieces of text, and boxes them side by side.
+% Column widths are set by user. Inter-column gap is
+% automatically adjusted to make the first column flush
+% with the left margin, and the second flush with the right.
+% Parameters:
+% #1: Width of first column, including unit specification
+% #2: Width of second column, including units
+% ** Sum of #1 and #2 should not exceed current \hsize!
+% #3: First column text. Don't do anything REALLY weird.
+% #4: Second column text.
+% Registers: \dimen1
+\def\split#1#2#3#4{
+ \dimen1=\hsize
+ \advance\dimen1 by -#1
+ \advance\dimen1 by -#2
+ \xsplit{#1}{\dimen1}{#2}{#3}{#4}}
+%%%------------Tear----------------------------------------------------
diff --git a/macros/plain/contrib/misc/tabledoc.tex b/macros/plain/contrib/misc/tabledoc.tex
new file mode 100644
index 0000000000..2ff9fe6deb
--- /dev/null
+++ b/macros/plain/contrib/misc/tabledoc.tex
@@ -0,0 +1,678 @@
+% file: tabledoc.tex
+% :: $Header: /usr2/myers/texsis/RCS/tabledoc.tex,v 1.1 90/05/24 13:39:32 myers Rel $
+% +--------------------------------------------------------------------+
+% | |
+% | This file contains documentation for the macro set TABLES.TEX. |
+% | |
+% | To make a copy, say "TEX1 TABLEDOC". |
+% | |
+% | |
+% | Ray F. Cowan, 22-February-85. |
+% | |
+% | Princeton University |
+% | |
+% | |
+% | Major Revision History: |
+% | ----------------------- |
+% | |
+% | 22-Oct-85 RFC Temporary fixes for \& added. |
+% | |
+% | 27-Feb-86 RFC Removed call to PHYZZX macro package. |
+% | Fixes for \& no longer needed and were removed. |
+% | |
+% +--------------------------------------------------------------------+
+%
+% Note to myself: add info on \tablelet
+% put \tstrut in table
+% \vctr
+% \ifhmode test in centeredtables
+% \header
+% \spreadwidth
+% new def of \tstrut
+% put spaces around entries
+% last revision ( 2 places )
+% notes on use of spaces
+%
+%%%\input TABLES.TEX
+\input ruled.tex % use E. Myers' ruled table macros instead
+%
+% +--------------------------------------------------------------------+
+% | |
+% | Definitions of font families and spacing parameters. |
+% | |
+% +--------------------------------------------------------------------+
+%
+\catcode`\@=11% Enable use of `@' in macro names.
+%
+\font\fourteenrm=cmr10 scaled\magstep2
+%
+\font\twelverm=cmr10 scaled\magstep1
+\font\twelvebf=cmbx10 scaled\magstep1
+\font\twelvei=cmmi10 scaled\magstep1 \skewchar\twelvei='177
+\font\twelvesy=cmsy10 scaled\magstep1 \skewchar\twelvesy='60
+\font\twelveex=cmex10 scaled\magstep1
+\font\twelvesl=cmsl10 scaled\magstep1
+\font\twelveit=cmti10 scaled\magstep1
+\font\twelvett=cmtt10 scaled\magstep1
+\font\twelvecp=cmcsc10 scaled\magstep1
+%
+\font\ninerm=cmr9 \font\sixrm=cmr6
+\font\ninebf=cmbx9 \font\sixbf=cmbx6
+\font\ninei=cmmi9 \skewchar\ninei='177
+\font\ninesy=cmsy9 \skewchar\ninesy='60
+\font\ninesl=cmsl9
+%
+\font\sixi=cmmi6 \skewchar\sixi='177
+\font\sixsy=cmsy6 \skewchar\sixsy='60
+%
+\font\tencp=cmcsc10
+\newfam\cpfam
+%
+\newcount\f@ntkey \f@ntkey=0
+\def\samef@nt{\relax \ifcase\f@ntkey \rm \or\oldstyle \or\or
+ \or\it \or\sl \or\bf \or\tt \or\caps \fi }
+%
+\def\twelvepoint{\relax
+ \textfont0=\twelverm \scriptfont0=\ninerm
+ \scriptscriptfont0=\sixrm
+ \def\rm{\fam0 \twelverm \f@ntkey=0 }\relax
+ \textfont1=\twelvei \scriptfont1=\ninei
+ \scriptscriptfont1=\sixi
+ \def\oldstyle{\fam1 \twelvei\f@ntkey=1 }\relax
+ \textfont2=\twelvesy \scriptfont2=\ninesy
+ \scriptscriptfont2=\sixsy
+ \textfont3=\twelveex \scriptfont3=\twelveex
+ \scriptscriptfont3=\twelveex
+ \def\it{\fam\itfam \twelveit \f@ntkey=4 }\textfont\itfam=\twelveit
+ \def\sl{\fam\slfam \twelvesl \f@ntkey=5 }\textfont\slfam=\twelvesl
+ \scriptfont\slfam=\ninesl
+ \def\bf{\fam\bffam \twelvebf \f@ntkey=6 }\textfont\bffam=\twelvebf
+ \scriptfont\bffam=\ninebf \scriptscriptfont\bffam=\sixbf
+ \def\tt{\fam\ttfam \twelvett \f@ntkey=7 }\textfont\ttfam=\twelvett
+ \h@big=10.2\p@{}
+ \h@Big=13.8\p@{}
+ \h@bigg=17.4\p@{}
+ \h@Bigg=21.0\p@{}
+ \def\caps{\fam\cpfam \twelvecp \f@ntkey=8 }\textfont\cpfam=\twelvecp
+ \setbox\strutbox=\hbox{\vrule height 10pt depth 4pt width\z@}
+ \samef@nt}
+%
+\def\tenpoint{\relax
+ \textfont0=\tenrm \scriptfont0=\sevenrm
+ \scriptscriptfont0=\fiverm
+ \def\rm{\fam0 \tenrm \f@ntkey=0 }\relax
+ \textfont1=\teni \scriptfont1=\seveni
+ \scriptscriptfont1=\fivei
+ \def\oldstyle{\fam1 \teni \f@ntkey=1 }\relax
+ \textfont2=\tensy \scriptfont2=\sevensy
+ \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex
+ \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam \tenit \f@ntkey=4 }\textfont\itfam=\tenit
+ \def\sl{\fam\slfam \tensl \f@ntkey=5 }\textfont\slfam=\tensl
+ \def\bf{\fam\bffam \tenbf \f@ntkey=6 }\textfont\bffam=\tenbf
+ \scriptfont\bffam=\sevenbf \scriptscriptfont\bffam=\fivebf
+ \def\tt{\fam\ttfam \tentt \f@ntkey=7 }\textfont\ttfam=\tentt
+ \def\caps{\fam\cpfam \tencp \f@ntkey=8 }\textfont\cpfam=\tencp
+ \setbox\strutbox=\hbox{\vrule height 8.5pt depth 3.5pt width\z@}
+ \samef@nt}
+%
+\newdimen\h@big \h@big=8.5\p@
+\newdimen\h@Big \h@Big=11.5\p@
+\newdimen\h@bigg \h@bigg=14.5\p@
+\newdimen\h@Bigg \h@Bigg=17.5\p@
+%
+\def\big#1{{\hbox{$\left#1\vbox to\h@big{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vbox to\h@Big{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vbox to\h@bigg{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vbox to\h@Bigg{}\right.\n@space$}}}
+%
+\normalbaselineskip = 20pt plus 0.2pt minus 0.1pt
+\normallineskip = 1.5pt plus 0.1pt minus 0.1pt
+\normallineskiplimit = 1.5pt
+\newskip\normaldisplayskip
+\normaldisplayskip = 20pt plus 5pt minus 10pt
+\newskip\normaldispshortskip
+\normaldispshortskip = 6pt plus 5pt
+\newskip\normalparskip
+\normalparskip = 6pt plus 2pt minus 1pt
+\newskip\skipregister
+\skipregister = 5pt plus 2pt minus 1.5pt
+%
+\newif\ifsingl@ \newif\ifdoubl@
+\newif\iftwelv@ \twelv@true
+%
+\def\singlespace{\singl@true\doubl@false\spaces@t}
+\def\doublespace{\singl@false\doubl@true\spaces@t}
+\def\normalspace{\singl@false\doubl@false\spaces@t}
+\def\Tenpoint{\tenpoint\twelv@false\spaces@t}
+\def\Twelvepoint{\twelvepoint\twelv@true\spaces@t}
+%
+\def\spaces@t{\relax%
+ \iftwelv@ \ifsingl@\subspaces@t3:4;\else\subspaces@t1:1;\fi%
+ \else \ifsingl@\subspaces@t3:5;\else\subspaces@t4:5;\fi \fi%
+ \ifdoubl@ \multiply\baselineskip by 5%
+ \divide\baselineskip by 4 \fi \unskip}
+%
+\def\subspaces@t#1:#2;{
+ \baselineskip = \normalbaselineskip
+ \multiply\baselineskip by #1 \divide\baselineskip by #2
+ \lineskip = \normallineskip
+ \multiply\lineskip by #1 \divide\lineskip by #2
+ \lineskiplimit = \normallineskiplimit
+ \multiply\lineskiplimit by #1 \divide\lineskiplimit by #2
+ \parskip = \normalparskip
+ \multiply\parskip by #1 \divide\parskip by #2
+ \abovedisplayskip = \normaldisplayskip
+ \multiply\abovedisplayskip by #1 \divide\abovedisplayskip by #2
+ \belowdisplayskip = \abovedisplayskip
+ \abovedisplayshortskip = \normaldispshortskip
+ \multiply\abovedisplayshortskip by #1
+ \divide\abovedisplayshortskip by #2
+ \belowdisplayshortskip = \abovedisplayshortskip
+ \advance\belowdisplayshortskip by \belowdisplayskip
+ \divide\belowdisplayshortskip by 2
+ \smallskipamount = \skipregister
+ \multiply\smallskipamount by #1 \divide\smallskipamount by #2
+ \medskipamount = \smallskipamount \multiply\medskipamount by 2
+ \bigskipamount = \smallskipamount \multiply\bigskipamount by 4 }
+%
+\def\normalbaselines{ \baselineskip=\normalbaselineskip
+ \lineskip=\normallineskip \lineskiplimit=\normallineskip
+ \iftwelv@\else \multiply\baselineskip by 4 \divide\baselineskip by 5
+ \multiply\lineskiplimit by 4 \divide\lineskiplimit by 5
+ \multiply\lineskip by 4 \divide\lineskip by 5 \fi }
+%
+\Twelvepoint % That's the default
+%
+\interlinepenalty=50
+\interfootnotelinepenalty=5000
+\predisplaypenalty=9000
+\postdisplaypenalty=500
+\hfuzz=1pt
+\vfuzz=0.2pt
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Next, I define output routines, footnotes & related stuff.
+%
+\def\pagecontents{
+ \ifvoid\topins\else\unvbox\topins\vskip\skip\topins\fi
+ \dimen@ = \dp255 \unvbox255
+ \ifvoid\footins\else\vskip\skip\footins\footrule\unvbox\footins\fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi }
+%
+\def\makeheadline{\vbox to 0pt{ \skip@=\topskip
+ \advance\skip@ by -12pt \advance\skip@ by -2\normalbaselineskip
+ \vskip\skip@ \line{\vbox to 12pt{}\the\headline} \vss
+ }\nointerlineskip}
+\def\makefootline{\baselineskip = 1.5\normalbaselineskip
+ \line{\the\footline}}
+%
+\newif\iffrontpage
+%
+% +--------------------------------------------------------------------+
+% | |
+% | Footnote definitions. |
+% | |
+% +--------------------------------------------------------------------+
+%
+\def\footrule{\dimen@=\prevdepth\nointerlineskip
+ \vbox to 0pt{\vskip -0.25\baselineskip \hrule width 0.35\hsize \vss}
+ \prevdepth=\dimen@ }
+%
+\newtoks\foottokens
+\foottokens={\Tenpoint\singlespace}
+\newdimen\footindent
+\footindent=24pt
+%
+\def\vfootnote#1{\insert\footins\bgroup \the\foottokens
+ \interlinepenalty=\interfootnotelinepenalty \floatingpenalty=20000
+ \splittopskip=\ht\strutbox \boxmaxdepth=\dp\strutbox
+ \leftskip=\footindent \rightskip=\z@skip
+ \parindent=0.5\footindent \parfillskip=0pt plus 1fil
+ \spaceskip=\z@skip \xspaceskip=\z@skip
+ \Textindent{$ #1 $}\footstrut\futurelet\next\fo@t}
+%
+\def\Textindent#1{\noindent\llap{#1\enspace}\ignorespaces}
+\def\footnote#1{\attach{#1}\vfootnote{#1}}
+\def\footattach{\attach\footsymbol}
+\def\foot{\attach\footsymbolgen\vfootnote{\footsymbol}}
+\let\footsymbol=\star
+%
+\newcount\lastf@@t \lastf@@t=-1
+\newcount\footsymbolcount \footsymbolcount=0
+\newif\ifPhysRev
+%
+\def\footsymbolgen{\relax \ifPhysRev \iffrontpage \NPsymbolgen\else
+ \PRsymbolgen\fi \else \NPsymbolgen\fi
+ \global\lastf@@t=\pageno \footsymbol }
+%
+\def\NPsymbolgen{\ifnum\footsymbolcount<0 \global\footsymbolcount=0\fi
+ {\iffrontpage \else \advance\lastf@@t by 1 \fi
+ \ifnum\lastf@@t<\pageno \global\footsymbolcount=0
+ \else \global\advance\footsymbolcount by 1 \fi }
+ \ifcase\footsymbolcount \fd@f\star\or \fd@f\dagger\or \fd@f\ast\or
+ \fd@f\ddagger\or \fd@f\natural\or \fd@f\diamond\or \fd@f\bullet\or
+ \fd@f\nabla\else \fd@f\dagger\global\footsymbolcount=0 \fi }
+\def\fd@f#1{\xdef\footsymbol{#1}}
+%
+\def\PRsymbolgen{\ifnum\footsymbolcount>0 \global\footsymbolcount=0\fi
+ \global\advance\footsymbolcount by -1
+ \xdef\footsymbol{\sharp\number-\footsymbolcount} }
+%
+\def\space@ver#1{\let\@sf=\empty \ifmmode #1\else \ifhmode
+ \edef\@sf{\spacefactor=\the\spacefactor}\unskip${}#1$\relax\fi\fi}
+\def\attach#1{\space@ver{\strut:{\mkern 2mu #1} }\@sf\ }
+%
+%
+\def\alphabetic#1{\count255='140 \advance\count255 by #1\char\count255}
+\def\Alphabetic#1{\count255='100 \advance\count255 by #1\char\count255}
+\def\Roman#1{\uppercase\expandafter{\romannumeral #1}}
+\def\roman#1{\romannumeral #1}
+\def\Number#1{\number #1}
+%
+\def\GENITEM#1;#2{\par \hangafter=0 \hangindent=#1
+ \Textindent{$ #2 $}\ignorespaces}
+\outer\def\newitem#1=#2;{\gdef#1{\GENITEM #2;}}
+%
+\newdimen\itemsize \itemsize=30pt
+\newitem\item=1\itemsize;
+\newitem\sitem=1.75\itemsize; \let\subitem=\sitem
+\newitem\ssitem=2.5\itemsize; \let\subsubitem\ssitem
+%
+\outer\def\newlist#1=#2&#3&#4;{\toks0={#2}\toks1={#3}%
+ \count255=\escapechar \escapechar=-1
+ \alloc@0\list\countdef\insc@unt\listcount \listcount=0
+ \edef#1{\par
+ \countdef\listcount=\the\allocationnumber
+ \advance\listcount by 1
+ \hangafter=0 \hangindent=#4
+ \Textindent{\the\toks0{\listcount}\the\toks1}}
+ \expandafter\expandafter\expandafter
+ \edef\c@t#1{begin}{\par
+ \countdef\listcount=\the\allocationnumber \listcount=1
+ \hangafter=0 \hangindent=#4
+ \Textindent{\the\toks0{\listcount}\the\toks1}}
+ \expandafter\expandafter\expandafter
+ \edef\c@t#1{con}{\par \hangafter=0 \hangindent=#4 \noindent}
+ \escapechar=\count255}
+\def\c@t#1#2{\csname\string#1#2\endcsname}
+%
+\newlist\point=\Number&.&1.0\itemsize;
+\newlist\subpoint=(\alphabetic&)&1.75\itemsize;
+\newlist\subsubpoint=(\roman&)&2.5\itemsize;
+%
+\let\spoint=\subpoint \let\sspoint=\subsubpoint
+\let\spointbegin=\subpointbegin \let\sspointbegin=\subsubpointbegin
+\let\spointcon=\subpointcon \let\sspointcon=\subsubpointcon
+%
+\def\endpage{\vfil\break}
+%
+\hsize=6.5in
+\vsize=8.9in
+\voffset=0.5in
+%
+%
+\catcode`\@=12% Return `@' to normal use.
+%
+%
+% +--------------------------------------------------------------------+
+% | |
+% | Verbatim listing macros. |
+% | |
+% +--------------------------------------------------------------------+
+%
+\newif\ifverbatimmode%
+\verbatimmodefalse%
+\def\|{|}%
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=12 }%
+ \dospecials%
+}%
+%
+\def\startverbatim{\catcode`\|=13}%
+\def\endverbatim{\catcode`\|=12}%
+\def\setupverbatim{%
+ \tt%
+ \def\par{\leavevmode\endgraf}%
+ \catcode`\`=13%
+ \obeylines%
+ \uncatcodespecials%
+ \obeyspaces%
+}%
+%
+{\obeyspaces\global\let =\ }% Let active space=control space.
+{\catcode`\`=13\gdef`{\relax\lq}}% Fix for Spanish punctuation in \tt.
+%
+{\catcode`\|=13%
+\gdef|{%
+ \relax%
+ \ifverbatimmode %
+ \endgroup%
+ \verbatimmodefalse%
+ \begingroup%
+ \else%
+ \verbatimmodetrue%
+ \begingroup%
+ \setupverbatim%
+ \parindent=1in% Set the indentation of verbatim lines.
+ \parskip=0pt% Don't put so much space between the lines.
+ \begingroup\aftergroup\relax% This makes \relax the first token
+% scanned after the |; prevents
+% premature association of catcodes.
+ \fi%
+\endgroup}%
+}% Return | to its normal use.
+\def\beginverbatimlisting{\par\begingroup\setupverbatim\doverbatim}
+{\catcode`\|=0 \catcode`\\=12 % | is temporary escape character
+ |obeylines|gdef|doverbatim^^M#1\endverbatimlisting{#1|endgroup}}
+%
+% Macro for verbatim listing of a file.
+%
+\def\inputverbatimlisting#1{%
+ \par%
+ \begingroup%
+ \parskip0pt%
+ \parindent0pt%
+ \setupverbatim%
+ \input#1 %
+ \endgroup%
+}%
+%
+\def\Table#1#2{%
+ \setbox0=\hbox to 1.5in{\hfil\it Table~#1.\quad}%
+ \par\hangindent1.5in\hangafter1%
+ \noindent\box0 #2%
+}%
+\def\\{\char`\\}
+\def\{{\char`\{}
+\def\}{\char`\}}
+\def\vbar{\char`\|}
+\def\Psizzl{%
+ P%
+ \kern-.30em\lower.70ex\hbox{s}%
+ \kern-.08em\lower.0 ex\hbox{i}%
+ \kern-.05em\lower.0 ex\hbox{z}%
+ \kern-.17em\lower.5 ex\hbox{z}%
+ \kern-.09em\lower.2 ex\hbox{l}%
+ }%
+%
+\font\tensltt=cmsltt10%
+\footline={\ifnum\count0=1
+\rlap{\tensl[From file {\tensltt TABLEDOC.TEX}]}%
+\hfil\it\number\count0\hfil\llap{\tensl[Last revision 27--Feb--86]}%
+\else\hfil\fi}
+\headline={\ifnum\count0=1 \hfil\else\vbox{\baselineskip0pt
+ \line{\tenit Page~\number\count0\hfil Making Tables with Macros}
+ \line{\leaders\hrule\hfill}}\fi}
+\startverbatim
+{\thicksize=0.8pt\def\tstrut{\vrule width0pt height18pt depth7pt}
+\begintable
+\quad\fourteenrm Making Tables with Macros\quad\endtable}
+\vskip 0.4in
+\centerline{Ray F.~Cowan}
+\vskip 0.1in
+\centerline{22 February 1985}
+\vskip 0.3in
+\par
+Tables have traditionally been difficult to make using \TeX---especially
+ruled tables. The file |TABLES.TEX| contains macros designed
+to prepare both ruled and unruled tables with considerably less effort.
+Note that |TABLES.TEX| can be
+used with any macro set;
+it does not depend upon prior loading of |PHYZZX|
+or \Psizzl, 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{`|\input TABLES|'} in your \TeX\
+file, somewhere before the first time you use them.
+The macros available are listed in Table~1 and Table~2.
+
+\endverbatim
+\midinsert
+\smallskip
+\tablewidth=\hsize
+\begintable
+\sl Macro name\hfill | \sl Description \hfill \crthick
+ \tt\\begintable\hfill | \para{Indicates the start of a new table.} \cr
+ \tt\\endtable\hfill | \para{Ends the current table. Must be used
+ in place of the last {\tt\\cr}.}\cr
+ \tt\\cr \hfill | \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
+ \tt\\crthick\hfill | \para{Similar to {\tt\\cr}, but the rows will be
+ separated with a thick horizontal rule.}\cr
+\tt\\crnorule \rm or \tt \\nr \hfill | \para{Similar
+to {\tt\\cr}, but the rows will not
+ be separated by any rule.}\cr
+ \vtop{\noindent\hsize=1.4in\tt\vbar\qquad \rm (vertical bar)\hfil\break
+ or \tt\\vb} \hfill
+ | \para{Separates one column from the next, and
+ puts a vertical rule between them.} \cr
+ \tt\&\ \rm or\tt\ \\novb \hfill
+ | \para{Same as {\tt\vbar}, but does not put in the
+ vertical rule between the columns.}\cr
+ \tt \\\vbar \hfill | \para{Same as {\tt\vbar}, but puts in a
+ thick vertical rule.}
+\endtable
+\Table{1}{Description of simple table macros.}
+\endinsert
+\startverbatim
+\par
+The general idea is that you start your table with the command
+|\begintable|, type your entries in one row at a time, then finish
+with the command |\endtable|.
+To specify a row, enter the individual entries into your \TeX\ file,
+separating each column entry with a {\tt \vbar}, an {\tt \&}, or
+a {\tt \\\vbar}. A {\tt \vbar} will separate the adjoining columns
+with a thin vertical rule, an {\tt \&} will leave out the vertical rule,
+and
+a {\tt \\\vbar} will separate the columns with a thick vertical rule.
+To end one row and start another, use either a |\cr|, a |\crnorule|, or
+a |\crthick|. A |\cr| separates the rows with a thin
+horizontal rule; a |\crnorule| leaves out the horizontal
+rule, while |\crthick| inserts a thick horizontal rule.
+Then end the last row with an |\endtable|.
+\par
+Each row of the table must contain exactly the same number of columns,
+otherwise unpredictable things will happen. Again, the {\it last row}
+ must {\it not} end
+with |\cr|$\ldots\,$, but
+{\it must} end with an |\endtable|. If you put a |\cr|
+and an |\endtable| both on the last row, you won't like what happens.
+\endverbatim
+\pageinsert
+\smallskip
+\tablewidth=\hsize
+\begintable
+\sl Macro name\hfill | \sl Description \hfill \crthick
+ \tt\\thicksize={\it dimen} \hfill | \para{This
+ dimension specifies the thickness
+ of the thick rules in the table. The default size
+ is 1.5 points.} \cr
+ \tt\\thinsize={\it dimen} \hfill | \para{This dimension specifies the
+ thickness of thin rules in the table. The default
+ size is 0.8 points.} \cr
+ \tt\\tablewidth={\it dimen} \hfill | \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
+ \tt\\multispan\{$n$\}\hfill | \para{Makes
+ the next entry span the next $n$
+ columns, where $n$ is an integer, $n>0$.
+ See other notes on {\tt\\multispan} below.}\cr
+ \tt\\omit \hfill | \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
+ \tt\\para\{{\it text}\}\ \hfill | \para{Formats {\it text} into
+ a neat little paragraph like this one. The width of
+ the paragraph produced is determined by the dimension
+ {\tt \\parasize}. The default is 4 inches. } \cr
+ \tt\\parasize={\it dimen} \hfill | \para{Sets the width of paragraphs
+ produced with the {\tt\\para} macro. } \cr
+ \tt\\ctr\{\#\} \hfill | \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
+ \par \tt \\def\\ctr\#1\{\\hfil\\\ \#1\\\ \\hfil\} } \cr
+ \tt\\vctr\{\#\}\hfill | \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
+ \tt\\centeredtables\hfill | \para{Turns table centering on. Each table
+ will be centered
+ left-to-right on the page. This is the
+ default.} \cr
+ \tt\\noncenteredtables\hfill | \para{Turns table centering off. Each
+ table is returned as an {\tt\\hbox}, and it
+ is up to the user to place it as desired.}
+\endtable
+\smallskip\rightline{\it continued$\ldots$}
+\vfill
+\endinsert
+\topinsert\leftline{\it continued$\ldots$}\smallskip
+\tablewidth=\hsize
+\begintable
+\sl Macro name\hfill | \sl Description \hfill \crthick
+\tt\\tableinfotrue\hfill | \para{Turns on the diagnostic message telling
+ you how many rows and colums were found in the
+ table. This is the default.} \cr
+\tt\\tableinfofalse\hfill\ | \para{Turns off the diagnostic messages
+ concerning rows and columns.}
+\endtable
+\Table{2}{Description of extended table macros.}
+\endinsert
+\startverbatim
+\par
+Each
+entry will be centered in its column (unless you use |\omit|, a \TeX\
+primitive, or |\multispan|. See notes below).
+The table will be centered in an |\hbox| of width the |\hsize|, unless
+you have turned table centering off (see the commands |\centeredtables|
+and |\noncenteredtables|).
+\par
+Each time a new table is encountered, a message similar to
+`|[Nrows=|$xx$|, Ncols=|$yy$|]|' is
+printed on your terminal, where $xx$ is the number of rows
+and $yy$ the number of columns discovered in your table. If you think
+they are incorrect, you may have left out some {\tt\|}'s or
+{\tt\&}'s or {\tt\\cr}'s.
+This diagnostic feature can be disabled by saying |\tableinfofalse|
+(and restarted by saying |\tableinfotrue|).
+\bigskip
+\leftline{\it An example}
+\par
+ 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 |\multispan|\foot{Note to experienced \TeX\ %
+ users: these macros locally (within the {\tt \\begintable}$\,\ldots%
+\,${\tt \\endtable} grouping) redefine {\tt \\multispan} to take as its %
+argument %
+the number of user entries $n$ to be spanned, and not the total number %
+of columns including rules, which would be $2n-1$.}):
+\endverbatim
+\par\noindent
+\line{\vbox{\parskip0pt\baselineskip15pt
+\beginverbatimlisting
+ \begintable
+ \multispan{2}\tstrut\hfil The Top Line\hfil\crthick
+ Entry 1 | Entry 2 \cr
+ Entry 3 | Entry 4 \endtable
+\endverbatimlisting}\hfil}
+\par\noindent
+These commands produce Table~3.
+\midinsert
+\medskip
+ \begintable
+ \multispan{2}\tstrut\hfil The Top Line\hfil\crthick
+ Entry 1 | Entry 2 \cr
+ Entry 3 | Entry 4 \endtable
+\smallskip
+\Table{3}{A sample table.}
+\medskip\endinsert
+\startverbatim
+\bigskip
+\leftline{\it An example of non-centered tables}
+\par
+Two or more tables can be placed side-by-side by using the
+|\noncenteredtables| command. Consider the two tables here:
+\midinsert
+\medskip
+\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
+} % This `}' ends the \line we started above.
+\smallskip
+\Table{4}{Two non-centered tables aligned side-by-side.}
+\medskip
+\endinsert
+These were produced by saying:
+\par\noindent
+\endverbatim
+\line{\vbox{\parskip0pt\baselineskip15pt
+\beginverbatimlisting
+ \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
+ } % This `}' ends the \line we started above.
+\endverbatimlisting}\hfil}
+\centeredtables
+\startverbatim
+\par\noindent
+Notice that tables of unequal height are aligned at the bottom.
+\bigbreak
+\par\noindent
+\leftline{$\underline{\hbox{\bf Usage notes:}}$}
+\pointbegin
+ Vertical spacing is done with a strut, called |\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 |\tstrut| to
+ your own
+ liking:|
+\def\tstrut{\vrule height |$hh$| depth |$dd$| width 0pt}
+|\pointcon where you
+ specify your desired height $hh$ and depth $dd$.
+\point You can control the thickness of the thin and thick rules
+ through the use of |\thicksize| and |\thinsize|. You can even
+ turn off the rules entirely by saying |
+\thinsize=0pt
+\thicksize=0pt
+|\pointcon for example.
+ \point If you use a |\multispan|
+ or an |\omit| in the first column of a row, you will
+ lose the effect of the |\tstrut| within that row and
+ must specify it yourself. See
+ the example above.
+ \point Use of |\multispan| and |\omit| will
+ cause the default centering of
+ the entry to be lost; if you want it centered, put an |\hfil| on
+ each side of the entry, as in the example above.
+ \point To override the default centering action, include an |\hfill| on
+ the left or right as desired; the |\hfill| will
+ override the default
+ |\hfil|.
+%
+\endverbatim
+\endpage
+\bye
diff --git a/macros/plain/contrib/misc/tables.tex b/macros/plain/contrib/misc/tables.tex
new file mode 100644
index 0000000000..f7fea87806
--- /dev/null
+++ b/macros/plain/contrib/misc/tables.tex
@@ -0,0 +1,316 @@
+%-*-tex-*-
+% Copyright Michael J. Ferguson, INRS-Telecommunications (1985,1986)
+% All rights reserved.
+\catcode`\@=11
+
+%======= Additional active Characters ===========
+% ALL ACTIVE CHARACTERS MUST BE DECLARED AND DEFINED AT THE VERY
+% BEGINNING OR THERE IS A DANGER OF INCORRECT TOKENIZATION
+% ======== THESE ARE USED IN THE TABLE MACROS =========
+\message{<< Additional Active Characters >>}
+\catcode`\|= \active
+\def|{\ifmmode \vert\else \char`\|\fi} % effectively undoes activeness
+\def\q@m{\string"}
+\catcode`\"=\active \def"{\char`\"}
+% update \dospecials
+\toksdef\toks@@=2
+\toks@{\do \"}%
+\toks@@ =\expandafter{\dospecials}\xdef\dospecials{\the\toks@@\the\toks@}
+\toks@{\do \|}%
+\toks@@ =\expandafter{\dospecials}\xdef\dospecials{\the\toks@@\the\toks@}
+%=== these are redefined inside the table macros =====
+
+
+%============= Table making macros ============
+% the basic format is
+% \begintable
+% <special definitions for this table>
+% \begintableformat
+% format as in halign except it needs ## instead of #
+% in tableformat, " means strut column
+% spacing controlled by \left, \center, \right
+% can use \math or \displaymath in conjuction with spacing
+% \endtableformat
+% \br{<struts>} .... | .... | .... " ..... | .... \er{<stuff>} (rows)
+% \- (horizontal rules)
+% ....etc
+% \endtable
+%
+% each row has format
+% \br{<..>} <item> | <item} " .... | <item> \er{<..>}
+% \br, \er mean beginning of row, end of row
+% in table | means rule, " means no rule in strut column
+% \: is standard strut, | is standard vrule
+%
+% \tablespread {to <dimen>} width of table
+% \tr=width of rules (default .4pt)
+% \midtabglue sets glue in table (default 0pt plus 1fill)
+% also can set explicit hrules and vrules
+% tokens (e.g. \tablespread, \tr, \midtabglue, etc.) can be set in \everytable
+
+% these macros require that | and " be active during the entire
+% document to work correctly. ... although some definitions specifically
+% set them active
+\newcount\a@lignstate \a@lignstate=0 %0 -- between lines after \cr
+ %1 -- beginning of line in \bl
+ %2 -- midline
+ %3 -- endline in \el
+\def\hssf{\hskip 0pt plus 1fill minus 1fill}
+\def\n@ewaligndefs{\def\center##1{\hssf ##1\hssf\null}
+ \def\left##1{##1\hssf\null}
+ \def\right##1{\hssf ##1\null}}
+\newdimen\trulesize
+\let\tr=\trulesize
+\trulesize = .4pt
+\def\zerocenteredbox#1{\ifmmode \ifinner \setbox2 =\hbox{$#1$}\else
+ \setbox2 =\hbox{$\displaystyle#1$}\fi
+ \else \setbox2 =\hbox{#1}\fi
+ \setbox0=\hbox{\lower.5ex\hbox{$\vcenter{\box2}$}}\ht0=0pt\dp0 =0pt\box0}
+\let\zb=\zerocenteredbox
+
+%this macro creates a strut with the that is higher by #2 and deeper than #3
+% than the natural size of #1 ... the sizes may be negative
+\def\modifystrut#1#2#3{\setbox4=\hbox{#1}\dimen0=\ht4
+ \advance \dimen0 by #2 \dimen2 = \dp4
+ \advance \dimen2 by #3
+ \vrule width 0pt height \dimen0 depth \dimen2}
+\let\mst=\modifystrut
+%general math form
+\def\math#1{\relax $\relax#1\relax$}
+\def\displaymath #1{\relax$\displaystyle #1\relax$}
+
+
+%
+\newskip\tcs
+\newtoks\tablespread
+\newskip\midtabglue \midtabglue = 0pt plus 1fill
+\newtoks\everytable \everytable = {\relax}
+
+{\catcode`\|=\active \catcode`\" = \active
+ \gdef\begintable{\vbox\bgroup \tcs=.5em % uses font in force when entering
+ \catcode`\|=\active
+ \catcode`\"=\active
+ \def\:{\relax \vrule height 2.5ex depth .9ex width 0pt}
+ \def\-{\ifcase\a@lignstate \fulltablerule{\tr}
+ \else
+ \thrule{\tr}\fi}
+ \let\t@xx =\relax % for premature expansions
+ \everycr={\noalign{\global\a@lignstate=0}}
+ \def\fulltablerule##1{\noalign{\hrule height
+ ##1}}
+ \def\thrule##1{\omit\leaders\hrule height ##1\hfill}
+ \def\center{\hskip\tcs\hss ########\hss\hskip\tcs}
+ \def\left{\hskip\tcs ########\hss\hskip\tcs}
+ \def\right{\hskip\tcs\hss ########\hskip\tcs}
+ \def\sprule{\tvrule{2.5\tr}}
+ \def|{\ifcase\a@lignstate \def\t@xx{\tvrule{\tr}}\or
+ \def\t@xx{\tvrule{\tr}}\or
+ \def\t@xx{\unskip&\tvrule{\tr}&}\else
+ \def\t@xx{\tvrule{\tr}}\fi\t@xx}
+ \def\|{\ifcase\a@lignstate \def\t@xx{\sprule}\or
+ \def\t@xx{\sprule}\or
+ \def\t@xx{\unskip&\sprule&}\else
+ \def\t@xx{\sprule}\fi\t@xx}
+ \def"{&########&} % for table format
+ \def\br##1{\global\a@lignstate=1 ##1\unskip\global\a@lignstate=2&}
+ \def\er##1{\global\a@lignstate=3\unskip&##1\unskip
+ \global\a@lignstate=0\cr}
+ \def\tvrule##1{\hss\vrule width ##1\hss}
+ \def~{\penalty\@M \hphantom{0}}
+% % changes ~ to be phantom of width .5em
+ \tablespread = {}
+ \the\everytable
+ }
+ \gdef\begintableformat #1\endtableformat{\offinterlineskip \tabskip = 0pt
+ \edef\t@blform{####\tabskip =\midtabglue &#1&####\tabskip=0pt\cr}
+% % adds rules front and back
+ \n@ewaligndefs
+ \def"{\ifcase\a@lignstate \def\t@xx{\relax}\or
+ \def\t@xx{\relax}\or
+ \def\t@xx{\unskip&&}\else
+ \def\t@xx{\relax}\fi\t@xx}
+ \edef\h@align{\halign \the\tablespread}
+ \h@align\bgroup\span\t@blform}
+ }% " and | are always active in INRSTEX
+
+\def\use#1{\omit\mscount=#1 \advance\mscount by -1\multiply\mscount by2
+ \loop\ifnum\mscount>1 \sp@n\repeat
+ \ifnum\mscount>0 \span \else \relax \fi}
+\let\sp=\span
+\let\om = \omit
+\def\sa#1{\setbox0=\hbox{#1}\hbox to \wd0{}}
+\def\endtable{\crcr\egroup\egroup}
+
+\catcode`\@=12
+
+******************************************
+\def\uncatcodespecials{\catcode`@=12\def\do##1{\catcode`##1=12}\dospecials}
+\def\setupverbatim{\tt\obeylines\uncatcodespecials\obeyspaces}
+{\obeyspaces\global\let =\ }
+\def\beginshowoff{\par\begingroup\setupverbatim\doverbatim}
+{\catcode`\!=0 \catcode`\\=12
+!obeylines!gdef!doverbatim^^M#1\endshowoff{#1!endgroup!medbreak!filbreak%
+!smallskip}}
+
+\input table
+
+\centerline{\bf Table}
+\bigskip
+The following illustrate the procedure for using the {\it INRStable\/}
+macros. See {\it The TUGboat}, vol.~7, no.~2, June, 1986, pp.~106--109.
+The characters {\tt "} and {\tt |} are active throughout the document,
+but this does not affect their use, except that following spaces are
+ignored. From the macro:
+\vskip.5truein
+
+\beginshowoff
+%============= Table making macros ============
+% the basic format is
+% \begintable
+% <special definitions for this table>
+% \begintableformat
+% format as in halign except it needs ## instead of #
+% in tableformat, " means strut column
+% spacing controlled by \left, \center, \right
+% can use \math or \displaymath in conjuction with spacing
+% \endtableformat
+% \br{<struts>} .... | .... | .... " ..... | .... \er{<stuff>} (rows)
+% \- (horizontal rules)
+% ....etc
+% \endtable
+%
+% each row has format
+% \br{<..>} <item> | <item} " .... | <item> \er{<..>}
+% \br, \er mean beginning of row, end of row
+% in table | means rule, " means no rule in strut column
+% \: is standard strut, | is standard vrule
+%
+% \tablespread {to <dimen>} width of table
+% \tr=width of rules (default .4pt)
+% \midtabglue sets glue in table (default 0pt plus 1fill)
+% also can set explicit hrules and vrules
+% tokens (e.g. \tablespread, \tr, \midtabglue, etc.) can be set in \everytable
+\endshowoff
+
+{}\vskip.5truein
+\centerline{ % see The TeXbook, p. 247
+\begintable
+\begintableformat
+\center " \center " \center % 3 centered columns, separated by struts
+\endtableformat
+\br{} \sa{Dividend} "\sa{Dividend} "\sa{Dividend} \er{} %optional sample row
+ %\sa means sample column (for width)
+\- % horizontal rule
+\br{\:|} \use{3} AT\&T Common Stock \er{|} %\use{3} means use 3 columns
+\-
+\br{\:|} Year | Price | Dividend \er{|}
+\-
+\br{\:|} 1971 | 41--54 | \$2.60 \er{|}
+\-
+\br{\:|} ~~~2 | 41--54 | ~2.70 \er{|}
+\-
+\br{\:|} ~~~3 | 46--55 | ~2.87 \er{|}
+\-
+\br{\:|} ~~~4 | 40--53 | ~3.24 \er{|}
+\-
+\br{\:|} ~~~5 | 45--52 | ~3.40 \er{|}
+\-
+\br{\:|} ~~~6 | 41--54 | ~~.95\rlap* \er{|}
+\-
+\br{\:}\use{3} \left{* (first quarter only)}
+\endtable }
+
+\vskip.5truein
+\beginshowoff
+\input table
+\centerline{ % see The TeXbook, p. 247
+\begintable
+\begintableformat
+\center " \center " \center % 3 centered columns, separated by struts
+\endtableformat
+\br{} \sa{Dividend} "\sa{Dividend} "\sa{Dividend} \er{} %optional sample row
+ %\sa means sample column (for width)
+\- % horizontal rule
+\br{\:|} \use{3} AT\&T Common Stock \er{|} %\use{3} means use 3 columns
+\-
+\br{\:|} Year | Price | Dividend \er{|}
+\-
+\br{\:|} 1971 | 41--54 | \$2.60 \er{|}
+\-
+\br{\:|} ~~~2 | 41--54 | ~2.70 \er{|}
+\-
+\br{\:|} ~~~3 | 46--55 | ~2.87 \er{|}
+\-
+\br{\:|} ~~~4 | 40--53 | ~3.24 \er{|}
+\-
+\br{\:|} ~~~5 | 45--52 | ~3.40 \er{|}
+\-
+\br{\:|} ~~~6 | 41--54 | ~~.95\rlap* \er{|}
+\-
+\br{\:}\use{3} \left{* (first quarter only)}
+\endtable }
+\endshowoff
+\vfill\eject
+
+{}\vskip.5truein
+\centerline{
+\begintable
+\def\sprule{\tvrule{5\tr}} % special rule defines \|
+ % \tr = .4pt
+\begintableformat&\center\endtableformat % repeating columns
+\-
+\br{\:|} \use{6} XYZABC \er{|\mst{\:}{3pt}{3pt}\rlap{\it ** i}}
+ % \mst{<token>}{<dimen1>}{<dimen2>} means modified strut derived from token
+ % with dimen1 extra height and dimen2 extra depth
+\-
+\br{\:|} \use{3} XYZ | \use{3} ABC \er{|\mst{\:}{2pt}{2pt}}
+\fulltablerule{5\tr} %explicit horizontal rule
+ %can also use \use\tvrule{<dimen>} for partial rules
+\br{\:|} X | Y | Z \| A | B | C \er{|}
+\-
+\br{\:|} 372.466 | 493.7 " 45 \| 124 | 489 | 280 \er{|}
+\-
+\br{\:|} 372.40~ | 493.7 | 45 \| 124 | 489 | 280 \er{|}
+\br{|} " " \| \use{3}\- \er{|}
+\br{\:|} 372.~~~ | 493.7 | 45 \| 124 | 489 | 280 \er{|\rlap{ \it ** ii}}
+\-
+\br{\:|} \use{2} | 832 \| abc | 774 |$\int$\er{|\mst{$\int$}{0pt}
+{3pt}}
+\br{|} \use{2}\zb{XY/A} |\use{4}\- \er{|}
+ % \zb{<item>} means zero centered box (with no height or depth)
+\br{\:|} \use{2} |qrr \| aaa | 799 | \er{|\rlap{ \it ** iii}}
+\-
+\endtable}
+
+\vskip.5truein
+\beginshowoff
+\centerline{
+\begintable
+\def\sprule{\tvrule{5\tr}} % special rule defines \|
+ % \tr = .4pt
+\begintableformat&\center\endtableformat % repeating columns
+\-
+\br{\:|} \use{6} XYZABC \er{|\mst{\:}{3pt}{3pt}\rlap{\it ** i}}
+ % \mst{<token>}{<dimen1>}{<dimen2>} means modified strut derived from token
+ % with dimen1 extra height and dimen2 extra depth
+\-
+\br{\:|} \use{3} XYZ | \use{3} ABC \er{|\mst{\:}{2pt}{2pt}}
+\fulltablerule{5\tr} %explicit horizontal rule
+ %can also use \use\tvrule{<dimen>} for partial rules
+\br{\:|} X | Y | Z \| A | B | C \er{|}
+\-
+\br{\:|} 372.466 | 493.7 " 45 \| 124 | 489 | 280 \er{|}
+\-
+\br{\:|} 372.40~ | 493.7 | 45 \| 124 | 489 | 280 \er{|}
+\br{|} " " \| \use{3}\- \er{|}
+\br{\:|} 372.~~~ | 493.7 | 45 \| 124 | 489 | 280 \er{|\rlap{ \it ** ii}}
+\-
+\br{\:|} \use{2} | 832 \| abc | 774 |$\int$\er{|\mst{$\int$}{0pt}
+{3pt}}
+\br{|} \use{2}\zb{XY/A} |\use{4}\- \er{|}
+ % \zb{<item>} means zero centered box (with no height or depth)
+\br{\:|} \use{2} |qrr \| aaa | 799 | \er{|\rlap{ \it ** iii}}
+\-
+\endtable}
+\endshowoff
+\bye
diff --git a/macros/plain/contrib/misc/tb0tree.tex b/macros/plain/contrib/misc/tb0tree.tex
new file mode 100644
index 0000000000..4b0c230819
--- /dev/null
+++ b/macros/plain/contrib/misc/tb0tree.tex
@@ -0,0 +1,423 @@
+% tb11eppstein.tex
+
+\Title Trees in \TeX
+\\David Eppstein
+\endx
+
+% This paper was 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
+
+% First the tree macro definitions.
+
+\input trees
+
+% Now the paper itself
+
+{\obeyspaces\gdef {\ifvmode\indent\fi\space}}
+{\catcode `|=0 \catcode`\\=12 |gdef|vbarg#1\endvb{#1|endgroup|medskip}}
+\def\makeother#1{\catcode`#112\relax}
+\def\vb{\medskip \begingroup \verb \obeylines \obeyspaces \tt \vbarg}
+\def\verb{\let\do\makeother \dospecials}
+\catcode`\*=\active
+\def*{\begingroup\verb\tt\dostar}
+\def\dostar#1*{#1\endgroup}
+
+% \centerline{\bf Trees in \TeX}
+% \centerline{David Eppstein; February 6, 1985}
+
+\beginsection Introduction
+
+There are many possible uses for trees in typeset text. The following
+taxonomy illustrates some of them.
+
+\tree
+ Tree
+ Uses
+
+ \subtree
+ Computer
+ Science
+
+ \subtree
+ Data
+ Structures
+
+ \leaf{Search Tree}
+ \leaf{Priority Queue}
+ \endsubtree
+
+ \subtree
+ Parsing
+
+ \leaf{Parse Tree}
+ \leaf{Symbol Table}
+ \endsubtree
+
+ \subtree
+ Structured
+ Programming
+ \endsubtree
+ \endsubtree
+
+ \subtree
+ Genealogy
+ \leaf{Ancestors}
+ \leaf{Descendants}
+ \endsubtree
+
+ \subtree
+ Taxonomies
+ \leaf{Tree Uses}
+ \endsubtree
+\endtree
+
+Unfortunately \TeX\ provides no easy way to typeset such trees.
+One possible method is given in exercise 22.14 of the \TeX book: using
+\TeX's alignment primitives by hand. This method becomes very clumsy as the
+trees grow, however. A more general technique is to write a set of tree
+construction macros; that is the approach taken in this paper. The
+taxonomy above was typeset with the following input:
+
+\vb
+\tree
+ Tree
+ Uses
+
+ \subtree
+ Computer
+ Science
+
+ \subtree
+ Data
+ Structures
+
+ \leaf{Search Tree}
+ \leaf{Priority Queue}
+ \endsubtree
+ ...
+ \endsubtree
+ ...
+\endtree
+\endvb
+
+It turns out that \TeX's alignment primitives are not very well suited to
+automatic generation of trees. The left edges of the trees at each
+level can easily be made to line up, but it is difficult to center
+lines of text for the root of a tree in vertical relation to its subtrees.
+Instead, the macros described here construct trees from boxes and
+glue, doing the alignment themselves. This is not quite as simple as
+it sounds---it would be incorrect to set subtrees independently of
+each other, because then the edges would not line up. For instance,
+in the taxonomy above, the text ``Search Tree'' should line up
+with ``Parse Tree''. A one-pass algorithm would set the former
+somewhat to the right of the latter.
+
+To solve this problem, the macros described here set a tree using
+three passes. First, a data structure is built up from the tree
+definition. Second, that data structure is used to calculate the
+width of each level of the tree, so that the subtrees can be aligned with each
+other. Finally, the data structure and the calculated list of widths
+are used to set the system of boxes, glue, and rules that make up the tree.
+
+\beginsection Pass 1: Internal storage of the tree structure
+
+There are several possible ways to store the structure defined by the
+tree macros. Since we want to remember already-set text (the words at
+the roots of each tree of subtree) we will use a nested structure of boxes.
+Each subtree is stored in an *\hbox*, so that pieces of it can be pulled
+off easily using *\lastbox* and *\unskip*. To distinguish it from
+another subtree, the text at the root of a subtree is stored in a *\vbox*.
+To make this clearer, let us return to our original taxonomy.
+We shall ignore for the moment
+the details inside the text *\vbox*es, and the glue between boxes.
+After the first pass, the tree as a whole would look like the
+following set of boxes:
+
+\vb
+\hbox{\vbox{Tree Uses}
+ \hbox{\vbox{Computer Science}
+ \hbox{\vbox{Data Structures}
+ \hbox{\vbox{Search Tree}}
+ \hbox{\vbox{Priority Queue}}}
+ ...}
+ ...}
+\endvb
+
+Now we can begin defining the tree macros. We start defining a tree
+with the *\tree* macro; this merely sets up the assignment of the
+boxed tree structure into a box called *\treebox*. Starting a subtree
+is similar, but there is no assignment; also, if it is the first
+*\subtree* of its tree or subtree, we must stop making the *\vbox*
+containing the root text. A leaf is merely a subtree without any
+sub-subtrees.
+
+\vb
+\newbox\treebox
+\def\tree{\global\setbox\treebox=\boxtree}
+\def\subtree{\ettext \boxtree}
+\def\leaf#1{\subtree#1\endsubtree}
+\endvb
+
+Finishing a subtree merely involves first making sure the root text is
+complete, and second
+completing the box that was started in the expansion of *\subtree*.
+Finishing a whole tree involves both of those steps, but then after the
+box is completed the remaining two passes must be run.
+
+\vb
+\def\endsubtree{\ettext \egroup}
+\def\endtree{\endsubtree \settreesizes \typesettree}
+\endvb
+
+
+Now all that remains to be defined of the first pass is the construction
+of the *\vbox* containing the root text. The difficulty here is
+convincing \TeX\ to make the *\vbox* only as wide as the widest line
+of text, rather than the width of the entire page. One solution is to
+put the text in an *\halign*, with *\crcr* implicit at the end of each line.
+The *\iftreetext* test is used to tell whether we are still inside the
+*\halign* and *\vbox*, so that *\ettext* can tell whether it should do
+anything. It is globally false, but within the *\vbox* it gets set to true.
+
+\vb
+\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
+\endvb
+
+\beginsection Pass 2: Calculation of widths at each level
+
+Here we calculate a list of the dimensions of each level of the tree;
+that is, the widths of the widest *\vbox* at each level.
+To do this, we need to be able to maintain lists of things. Since these
+are dimensions rather than boxes of text it will be most convenient to
+use macros like the ones given on page 378 of the \TeX book. However,
+it turns out that we need to set our lists both locally to some
+grouping and also globally. Therefore, we will use a stripped down
+version of those list macros that can handle the *\global* flag.
+To implement this feature, we have to lose some others; the chief losses
+are that the contents of the lists will be macro-expanded by various of
+the list manipulation macros, and that we can't use redefinitions of *\\*
+to perform some operation on the whole list.
+
+To initialize a control sequence to the empty list, we do *\let\csname\nil*.
+Then to add an element to the start of the list we do *\cons{tokens}\csname*,
+and to remove that element we do *\cdr\csname*. Both *\cons* and *\cdr*
+can be prefixed with *\global*. The first element on the list can be
+expanded into the token stream by doing *\car\csname*. There is no
+error checking, so giving *\car* or *\cdr* the empty list will cause
+mysterious errors later on. Because of the macro expansion performed
+by *\cons* and *\cdr*, the token used to separate list elements
+expands to itself, and unlike the \TeX book macros cannot be redefined
+to do anything useful.
+
+\vb
+\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.
+\endvb
+
+We calculate the level widths by calling *\setsizes* on the tree; it
+will in turn call itself recursively for each of its subtrees. The
+tree being sized will be in *\box0*, which is used as scratch in this
+macro, and the list of widths already found for this level and below
+will be in *\treesizes* (initially *\nil*). When the macro exits,
+*\treesizes* will be updated with the widths found in the various
+levels of the given tree or subtree. A new *\dimen*, *\treewidth*, is
+used within the macro to remember the previous maximum width at the
+level of the tree's root.
+
+\vb
+\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.
+\endvb
+
+The first thing *\setsizes* does is to find out what the previous
+maximum at this level was, and store it in *\treewidth*. If
+*\treesizes* is *\nil*, we haven't seen anything this deep in the tree
+before, so the previous size is zero. Otherwise, it is *\car\treesizes*,
+and we also do *\cdr\treesizes* to prepare for later recursive calls
+to *\setsizes*.
+
+\vb
+\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.
+\endvb
+
+At this point, we have a horizontal list (the *\hbox* in *\setsizes*)
+containing the *\vbox* for the text at the root of this subtree,
+followed by the *\hbox*es for all of its sub-subtrees. We loop pulling boxes
+from the end of the list with *\lastbox* until we find the text *\vbox*,
+calling *\setsizes* recursively for each *\hbox* we come across.
+
+\vb
+\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.
+\endvb
+
+Now all that remains to do in this call to *\setsizes* is to update
+*\treewidth* if the text box, which can be found in *\box0*, is wider
+than the previous maximum. Then we add the (possibly updated) value
+of *\treewidth* as a text string back onto the head of *\treesizes*.
+
+\vb
+\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
+\endvb
+
+\beginsection Pass 3: Typesetting the tree
+
+We are now ready to begin actual construction of the tree. This is
+done by calling *\maketree*, which like *\setsizes* calls itself
+recursively for all subtrees. It adds an *\hbox* containing the given
+subtree (which it finds in *\treebox*) to the current horizontal list;
+thus the outer call to *\maketree* sends the whole tree into \TeX's
+output stream.
+
+\vb
+\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.
+\endvb
+
+After *\maketree* sets *\treewidth* from *\treesizes*, it calls
+*\makesubtreebox*. This opens up the horizontal list describing this
+level of the tree, and checks whether it has subtrees. If not,
+*\ifleaf* is set to true; otherwise it is set to false, and *\box0*
+is set to contain a *\vbox* of them with their connecting rules,
+except for the horizontal rule leading from the tree text to the
+subtrees. In any case *\treebox* is set to the *\vbox* containing the
+tree text.
+
+\vb
+
+{\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.
+\endvb
+
+If this tree or subtree itself has subtrees, we need to put them and
+their connections in *\box0* for *\makesubtreebox*. We come here with
+the bottom subtree in *\treebox*, the remaining list of subtrees in
+the current horizontal list, and the already processed subtrees
+stacked in *\box0*. The *\ifbotsub* test will be true for the first
+call, that is, the bottom subtree. Here we process the subtree in
+*\treebox*. If this is the top subtree, we return; otherwise we tail
+recurse to process the remaining subtrees. We use *\box1* as
+another scratch variable; this is safe because the *\hbox* in *\maketree*
+puts us inside a group, and also because we are not changing the output list.
+
+\penalty-200 %%%%%%%%%%%%%%%%%%%% added for TUGboat
+
+\vb
+
+\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.
+\endvb
+
+Each subtree in the list is processed and stacked in *\box0*; this is
+done by *\addsubtreebox*, which calls *\subtreebox* to add connecting
+rules to the subtree in *\box1*, and appends to that the old contents
+of *\box0*. The vertical connecting rules in the tree are made with
+tall narrow *\hrule*s rather than a more simple calls to *\vrule*,
+because they are made inside a *\vbox*.
+
+\vb
+\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}
+\endvb
+
+The last line of the definition of *\subtreebox* calls *\treectrbox*
+twice: once for the horizontal connecting rule, and once for the
+subtree box itself. This macro centers its argument in a *\vbox* the
+height of this subtree and surrounding space. We also define here
+*\treehalfrule*, the macro called to make an *\hrule* half the height
+of the subtree (with half the height of the horizontal connection
+added to make the corners come out square).
+
+\vb
+\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.
+\endvb
+
+That completes *\makesubtree*. If this subtree has no sub-subtrees
+under it, *\maketree* will now run *\makeleaf*; this merely adds the
+tree text to the *\hbox* opened in *\maketree*. Otherwise we call
+*\makeparent* to attach the sub-subtrees and connecting rules to the
+text at the root of the subtree.
+
+\vb
+\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.
+\endvb
+
+% restore * to type ordinary
+\catcode`\*=12
+
+\endinput
+%\bye
diff --git a/macros/plain/contrib/misc/texinfo.tex b/macros/plain/contrib/misc/texinfo.tex
new file mode 120000
index 0000000000..193031bb7c
--- /dev/null
+++ b/macros/plain/contrib/misc/texinfo.tex
@@ -0,0 +1 @@
+../../../texinfo/latest/texinfo.tex \ No newline at end of file
diff --git a/macros/plain/contrib/misc/texpictex.tex b/macros/plain/contrib/misc/texpictex.tex
new file mode 100644
index 0000000000..fa979d4b70
--- /dev/null
+++ b/macros/plain/contrib/misc/texpictex.tex
@@ -0,0 +1,244 @@
+%
+% texpictex.tex -- The following macros over-ride certain definitions in the
+% PiCTeX macro package. The net effect is that line-drawing is done using
+% the \special's used by texpic (tpic). Several DVI printers understand
+% and handle these specials.
+%
+% Currently, only straight lines are translated. Recently, I added a
+% clipping routine to clip to the bounding box.
+%
+% If people extend this to included elliptic circles and quadratics,
+% please forward the extensions to me (quads are used in the \arrow
+% macro, making them very slow).
+%
+% Dirk Grunwald
+% Univ. of Illinois
+% grunwald@m.cs.uiuc.edu
+%
+\def\makebangletter{\catcode`\!=11\relax}
+\def\makebangother{\catcode`\!=12\relax}
+%
+\makebangletter
+%
+% The units that texpic deals in. You should define it this way instead
+% of simply saying ``0.001in'' because the difference in resolution
+% actually makes a big difference
+%
+\newdimen\!tpu
+\!tpu=1in
+\divide\!tpu by 1000
+%%%
+%% \!maptpus -- map a PiCTeX dimension to a TeXPiC dimension
+%% using the \!tpu conversion factor.
+%%
+%% uses: dimen0
+%%
+\def\!maptpus#1#2 {\dimen0=#1\divide \dimen0 by \!tpu #2=\dimen0}
+%
+% ** \setplotsymbol ({PLOTSYMBOL} [ ] < , >)
+% ** Save PLOTSYMBOL away in an hbox for use with curve plotting routines
+% ** See Subsection 5.2 of the manual.
+\def\setplotsymbol(#1#2){%
+ \!setputobject{#1}{#2}
+ \setbox\!plotsymbol=\box\!putobject%
+ \!plotsymbolxshift=\!xshift
+ \!plotsymbolyshift=\!yshift
+%
+% Additions: compute size of dot, convert to TPUs and issue a pensize
+%
+ \!dimenB=\wd\!plotsymbol
+ \!dimenC=\ht\!plotsymbol
+ \advance\!dimenC by \dp\!plotsymbol
+ \ifdim\!dimenB<\!dimenC \!dimenF=\!dimenC \else \!dimenF=\!dimenB\fi
+ \!maptpus{\!dimenF}{\!countC}
+ \special{pn \the\!countC}
+ \ignorespaces}
+
+\setplotsymbol({\fiverm .})% ** initialize plotsymbol
+
+% ** The following routine is used to draw a "solid" line between (xS,yS)
+% ** and (xE,yE). Points are spaced nearly every \plotsymbolspacing length
+% ** along the line.
+%
+% Note: this is a replacement for PicTeX \!linearsolid.
+% If line clipping is enabled, the line to be drawn is
+% clipped using \!clipline. If there's anything left
+% to draw after clipping, it's drawn. If clipping is off,
+% the line is simply drawn. In either case, line drawing
+% is done by \!texpicline.
+%
+\def\!linearsolid{%
+ \let\!nextLinearAct=\!texpicline
+ \expandafter\ifx \!initinboundscheck \relax
+ \else \!clipline \if!InBounds \else \let\!nextLinearAct=\relax \fi \fi%
+ \!nextLinearAct%
+}
+%
+% Texpic has increasing origin in the upper left corner, while
+% pictex has origin in bottom left corner. Ergo, we flip the signs
+% for y-coordinates.
+%
+\def\!texpicline{%
+\advance\!xS by -\!xorigin
+\advance\!xE by -\!xorigin
+\advance\!yS by -\!yorigin
+\advance\!yE by -\!yorigin
+\!maptpus{\!xS}{\!countC} \!maptpus{\!yS}{\!countD} \!countD=-\!countD%
+\special{pa \the\!countC \space \the\!countD}%
+\!maptpus{\!xE}{\!countC} \!maptpus{\!yE}{\!countD} \!countD=-\!countD%
+\special{pa \the\!countC \space \the\!countD}\special{fp}%
+\ignorespaces}
+%
+%%%
+% Code to support line clipping
+%
+% Line clipping routine. Clips to bounding box specified
+% by (!checkleft, !checkbot) and (!checkright, !checktop).
+% Note that this box is only defined if \initboundscheckon
+% has been called.
+%
+% The clipping algorithm was published in ACM TOG Vol 3 No 1
+% by people at Berkeley, but I've forgotten the complete reference.
+% This was translated from a version I wrote in C.
+%
+%%
+% After calling \!cliplines, !InBounds tells you if the line contains
+% any points within the clipping window.
+%
+\newif\if!InBounds
+%
+%%
+% \!clipt -- this corresponds to the routine by the same name
+% in the published algorithm.
+%
+% Dimens used are descibed below. All are grouped and know that
+% PiCTeX doesn't use dimen0..9. Variable names are taken from
+% the TOG article. The junk on the r.h.s. is indenting information
+%
+% Globals: dimen8 corresponds to t0
+% dimen9 corresponds to t1
+%
+% clipt dimen0 corresponds to p
+% dimen1 corresponds to q
+% dimen2 corresponds to r
+%
+% !fastclip Uses bounding boxes
+%
+% !clipline passes dimen3 to clipt as p
+% passes dimen4 to clipt as q
+% uses dimen0, dimen2
+%
+%
+\def\!clipt#1#2{%
+ \dimen0=#1 \relax \dimen1=#2 \relax
+ \ifdim \dimen0 < \!zpt% >0
+ \!divide{\dimen1}{\dimen0}{\dimen2}%
+ \ifdim \dimen2 > \dimen9% >1
+ \global\!InBoundsfalse
+ \else% =1
+ \ifdim \dimen2 > \dimen8 \dimen8=\dimen2 \fi
+ \fi% <1
+ \else \ifdim \dimen0 > \!zpt% =0>1
+ \!divide{\dimen1}{\dimen0}{\dimen2}%
+ \ifdim \dimen2 < \dimen8% >2
+ \global\!InBoundsfalse
+ \else% =2
+ \ifdim \dimen2 < \dimen9 \dimen9=\dimen2 \fi
+ \fi% <2
+ \else% =1
+ \ifdim \dimen1 < \!zpt \global\!InBoundsfalse \fi
+ \fi% <1
+ \fi% <0
+}
+%
+% fastclipcheck
+%
+\def\!fastclip#1#2{%
+ \ifdim #1<\!checkleft \global\!InBoundsfalse \else
+ \ifdim #1>\!checkright \global\!InBoundsfalse \else
+ \ifdim #2<\!checkbot \global\!InBoundsfalse \else
+ \ifdim #2>\!checktop \global\!InBoundsfalse \else
+ \fi
+ \fi
+ \fi
+ \fi}
+%
+% clipline - clip a line to the current bounding box.
+% assumes line is in (!xS, !yS) and extends to (!xE,!yE) and that
+% \!xdiff and \!ydiff has been set up. This is normally done
+% in \!lstart.
+%
+% \!clipline first checks to see if the start & end points are
+% conainted in the clipping box. If the simple compare works,
+% then no clipping is done, else \!doclip is called to
+% do the actually clipping computations.
+%
+\def\!clipline{%
+ \!!initinboundscheck
+ \!InBoundstrue
+ \!fastclip{\!xS}{\!yS}%
+ \!fastclip{\!xE}{\!yE}%
+ \if!InBounds\else\!doclip\fi}
+%
+\def\!doclip{%
+\begingroup%
+ \global\!InBoundstrue%
+ \dimen8=0pt
+ \dimen9=1pt
+ %
+ \dimen3=-\!xdiff
+ \dimen4=\!xS \advance\dimen4 by -\!checkleft% fromX-minX
+ \!clipt{\dimen3}{\dimen4}%
+%
+ \if!InBounds% 0
+ \dimen3=\!xdiff
+ \dimen4=\!checkright \advance\dimen4 by -\!xS% maxX - fromX
+ \!clipt{\dimen3}{\dimen4}%
+%
+ \if!InBounds% 1
+%
+ \dimen3=-\!ydiff
+ \dimen4=\!yS \advance\dimen4 by -\!checkbot% fromY-minY
+ \!clipt{\dimen3}{\dimen4}%
+%
+ \if!InBounds% 2
+%
+ \dimen3=\!ydiff
+ \dimen4=\!checktop \advance\dimen4 by -\!yS% maxY-fromY
+ \!clipt{\dimen3}{\dimen4}%
+%
+ \if!InBounds% 3
+ \dimen0=1pt
+%
+% The following \if's truncate the line based on the solution
+% to the parametric solution to the bounding box.
+%
+% Note that we don't have a \!multiply, the equivilent to \!divide.
+% The code below compute X * Y as (x / ( 1/ Y)), which is far
+% from optimal.
+%
+ \ifdim\dimen9 < \dimen0% 4
+ \!divide{\dimen0}{\dimen9}{\dimen2}%
+%
+ \dimen3=\!xdiff \!divide{\dimen3}{\dimen2}{\dimen4}%
+ \global\!xE=\dimen4 \global\advance\!xE by \!xS
+%
+ \dimen3=\!ydiff \!divide{\dimen3}{\dimen2}{\dimen4}%
+ \global\!yE=\dimen4 \global\advance\!yE by \!yS
+ \fi% 4
+ \ifdim\dimen8 > \!zpt% 4
+ \!divide{\dimen0}{\dimen8}{\dimen2}%
+%
+ \dimen3=\!xdiff \!divide{\dimen3}{\dimen2}{\dimen4}%
+ \global\advance\!xS by \dimen4
+%
+ \dimen3=\!ydiff \!divide{\dimen3}{\dimen2}{\dimen4}%
+ \global\advance\!yS by \dimen4
+ \fi% 4
+ \fi% 3
+ \fi% 2
+ \fi% 1
+ \fi% 0
+\endgroup}
+%
+\makebangother
diff --git a/macros/plain/contrib/misc/thirteen.tex b/macros/plain/contrib/misc/thirteen.tex
new file mode 100644
index 0000000000..034723dc4d
--- /dev/null
+++ b/macros/plain/contrib/misc/thirteen.tex
@@ -0,0 +1,202 @@
+ \parindent=0pt
+ \font\big=cmb10 scaled\magstep3
+ \centerline{\big FRIDAY THE THIRTEEN}
+ \normalbaselineskip=12pt
+ \noindent
+ \newcount\dw % Gets day of the week
+ \newcount\leap % Leap year fingaler
+ \newcount\m % Temp register
+ \newcount\y % Another temp register
+ \newcount\a
+ \newcount\b
+ \newcount\x
+ \newcount\jd
+ \newcount\aantal
+ \newcount\kalmaand
+ \newcount\alfa
+ \newcount\eindjaar
+ \newcount\tempjaar
+ \newcount\firstyear
+ \newcount\lastyear
+ \newcount\c
+ \newcount\d
+ \newcount\e
+ \newcount\f
+ \newcount\z
+ \newcount\jda
+ \newcount\jdb
+ \newcount\difference
+ \newcount\jaar
+ \newcount\maand
+ \newcount\dag
+ \newcount\jr
+ \newcount\mnd
+ \newcount\dg
+%
+\parskip=1.5cm
+%
+\def\daydifference
+{
+\message{date 1: }
+\datjul
+\jda=\jd
+\message{date 2: }
+\datjul
+\jdb=\jd
+\advance\jdb by-\jda
+\difference=\jdb
+\ifnum\difference<0
+\multiply\difference by -1
+\fi
+\hbox{\number\difference}\hfill\break
+}
+\def\dayafter
+{
+\message{date 1: }
+\datjul
+\message{day difference :}
+\read16 to\difference
+\advance\jd by\difference
+\number\difference\hfill\break
+\z=\jd
+\juldat
+\hbox{\number\jr\ \number\mnd\ \number\dg}\hfill\break
+}
+
+\def\datjul{
+%
+%
+%
+%
+\jaar=1991
+%\read16 to\maand
+%\read16 to\dag
+%\hbox{\number\jaar\ \number\maand\ \number\dag}\hfill\break
+\global\eindjaar=\jaar
+\global\advance\eindjaar by15
+\maand=1
+\dag=1
+\ifnum\maand>2
+ \y=\jaar
+ \m=\maand
+\else
+ \y=\jaar \advance\y by-1
+ \m=\maand \advance\m by12
+\fi
+\a=\y
+\divide\a by100
+\b=2
+\advance\b by-\a
+\x=\a
+\divide\x by4
+\advance\b by\x
+%
+\jd=\y
+\multiply\jd by36525
+\divide\jd by100
+%
+\x=\m
+\advance\x by1
+\multiply\x by306001
+\divide\x by10000
+\advance\jd by\x
+\advance\jd by\dag
+\advance\jd by1720995
+\advance\jd by\b
+}
+%
+\def\dayofweek{
+\x=\jd
+\advance\x by 1
+\dw=\x \divide\x by 7 \multiply\x by 7 \advance\dw by -\x
+}
+
+%
+%
+\def\juldat{
+\ifnum\z<2299161
+ \a=\z
+\else
+ \alfa=\z
+ \multiply\alfa by100
+ \advance\alfa by-186721625
+ \divide\alfa by3652425
+ \a=\z
+ \advance\a by1
+ \advance\a by\alfa
+ \divide\alfa by4
+ \advance\a by-\alfa
+\fi
+%
+\b=\a
+\advance\b by1524
+%
+\c=\b
+\multiply\c by100
+\advance\c by-12210
+\divide\c by36525
+%
+\d=\c
+\multiply\d by36525
+\divide\d by100
+%
+\e=\b
+\advance\e by-\d
+\multiply\e by10000
+\divide\e by306001
+%
+%
+\x=\b
+\advance\x by-\d
+\dg=\x
+\x=\e
+\multiply\x by306001
+\divide\x by10000
+\advance\dg by-\x
+%
+\mnd=\e
+\advance\mnd by-1
+\ifnum\e>13
+ \advance\mnd by-12
+\fi
+%
+\jr=\c
+\advance\jr by-4715
+\ifnum\mnd>2
+ \advance\jr by-1
+\fi
+}
+%
+\def\leesjul{
+\relax
+\read16 to \z
+}
+\newdimen\cf
+\setbox0=\hbox{\rm0}
+\cf=\wd0
+\def\breedte{\kern\cf}
+\def\dertien{
+\datjul
+\kalmaand=\maand
+\dayofweek
+\z=\jd
+\juldat
+\loop\ifnum\jr<\eindjaar
+ \dayofweek
+ \ifnum\dg=13
+ \ifnum\dw=5
+ \hbox{\number\jr\ \number\dg\ \number\mnd}
+ \fi
+ \fi
+ \advance\z by1
+ \jd=\z
+ \juldat
+\repeat
+}
+%
+\dertien
+\bye
+
+
+
+
diff --git a/macros/plain/contrib/misc/threecol.tex b/macros/plain/contrib/misc/threecol.tex
new file mode 100644
index 0000000000..bc8dde3523
--- /dev/null
+++ b/macros/plain/contrib/misc/threecol.tex
@@ -0,0 +1,47 @@
+% Definitions to produce threecolumn output in TeX from
+% the TeXbook.
+%
+ % this is threecolumn for a newsletter. All of the pages have
+ % an 8 inch form size, the first page is offset 1.5 inches from
+ % the top, the rest are offset one inch from the top. The first
+ % page has an extra-high, two line headline.
+
+\tenrm
+\hoffset=-.5in
+\voffset=-.02in
+\parindent=0pt
+\tolerance=10000
+\vsize=9.04in
+\nopagenumbers
+
+\newbox\midcolumn
+\newbox\leftcolumn
+\newdimen\fullhsize
+\newdimen\partialhsize
+\fullhsize=8.5in \hsize=2.8in
+\def\fullline{\hbox to\fullhsize}
+\def\columnbox{\leftline{\pagebody}}
+
+\let\lr=L
+\let\nextvskip=N
+
+\def\tripleformat
+ {\shipout\vbox
+ {\fullline{\box\leftcolumn\hfil\box\midcolumn\hfil\columnbox}
+ }
+ \advancepageno
+ }
+
+\output={\if L\lr
+ \global\setbox\leftcolumn=\columnbox \global\let\lr=M
+ \else\if M\lr
+ \global\setbox\midcolumn=\columnbox \global\let\lr=R
+ \else \tripleformat \global\let\lr=L\fi\fi
+
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+\font\bigrm=CMSS10 at 10pt
+\bigrm
+
+\obeylines
+\def\label#1{\vbox to .98in{\vfill #1}}
+\def\zip#1{\line{\hfill #1\hfill}}
diff --git a/macros/plain/contrib/misc/toc.mac b/macros/plain/contrib/misc/toc.mac
new file mode 100644
index 0000000000..d1b1db7f44
--- /dev/null
+++ b/macros/plain/contrib/misc/toc.mac
@@ -0,0 +1,37 @@
+% TOC
+%
+% This macro can be used for Table Of Contents portion of a paper
+% or book. To use this macro package, put the line
+% \input toc
+% at the top of your file. The following are the symbols that may be
+% used with this macro:
+%
+% \tocindent{ SIZE }
+% This is used to indent the table of contents
+% entries by "SIZE". "SIZE" is something like
+% `50pt', `1.0truein' or something similar.
+% (default=0pt)
+% \tochead{ HEAD }
+% This is essentially the same as the definition
+% `\leftline'. The table of cantents headers are
+% not indented by `\tocindent'.
+% \tocline{ SECTION }{ PAGE }
+% This is the standard table of contents line
+% containing a section and page number separated
+% with either dots or a line. This entry is in-
+% dented by `\tocindent'.
+% \filldot
+% This will make the filling between the `\tocline'
+% section and page be `\dotfill'. (default)
+% \filline
+% This will make the filling between the `\tocline'
+% section and page be `\hrulefil' (a solid horizon-
+% tal line).
+%
+\def\xyztocind{\hskip 0pt}
+\def\xyztocfil{\dotfill}
+\def\tocindent#1{\def\xyztocind{\hskip #1}}
+\def\filldot{\def\xyztocfil{\dotfill}}
+\def\filline{\def\xyztocfil{\hrulefill}}
+\def\tocline#1#2{\hbox to \hsize{\xyztocind #1\ \xyztocfil\ #2}}
+\def\tochead#1{\hbox to \hsize{#1\hfill}}
diff --git a/macros/plain/contrib/misc/toc.tex b/macros/plain/contrib/misc/toc.tex
new file mode 100644
index 0000000000..ab1c665fd9
--- /dev/null
+++ b/macros/plain/contrib/misc/toc.tex
@@ -0,0 +1,59 @@
+%%%--- Cut here -----------------------------------------------------------
+%%% File toc.tex
+%
+% Automatically generate a Table Of Contents (TOC) while the
+% document is being processed by PLAIN TeX
+%
+% Use \tocref{ texta }{ textb } to insert TOC entries. `texta'
+% will be typeset in the TOC and at the current location,
+% for example `\centerline{\tocref{Chapter 1}{}}' inserts
+% `Chapter 1' at the current location in your document
+% centered, and enters it in the TOC (not centered).
+% `textb' is a prefix text/TeX commands to precede `texta'
+% in the TOC only (it will not appear in the current loc-
+% ation of your document -- {{`textb'`texta'}.....\folio}).
+% Use \tocline to add info only intended for the TOC (no page number or
+% dotfill is used for tocline entries).
+% Use \tocgen to force the last TOC page to be printed (last command
+% before \end?)
+% To specialize, look at the below comments in the right
+%
+% Uses variable names
+% tocnew, tocopage, tocbox, tocsize, tocstrut, tocref,
+% tocbanner, tocsuffix, tocline, tocstart, tocont, tocgen
+%
+% Created by Dan Zirin. Copyright (c) 1987 Zar Limited.
+% Permission given for inclusion in TeXMaG.
+%
+\newcount\tocnew\tocnew=1\newcount\tocopage
+\newbox\tocbox\newdimen\tocsize
+\def\tocstrut{{\vrule height8.5pt depth3.5pt width0pt}} % TOC baselineskip -1pt
+\def\tocref#1#2{\tocbanner#1 % Where `texta' is duplicated
+ \global\setbox\tocbox=\vbox{
+ \box\tocbox\vbox{
+ \line{\tocstrut{#2#1}~\dotfill~\folio} % Where the TOC line is made
+ }}\tocsuffix}
+\def\tocline#1{\tocbanner
+ \global\setbox\tocbox=\vbox{
+ \box\tocbox\vbox{
+ \line{\tocstrut{#1}}
+ }}\tocsuffix}
+\def\tocbanner{\ifnum\tocnew=1\tocstart\fi
+ \ifnum\tocnew=3\tocont\fi}
+\def\tocsuffix{\ifdim\tocsize<\ht\tocbox\tocgen
+ \global\tocnew=3\fi}
+% Do not change tocsize = 1.0 (TeX may go into an infinite loop)
+\def\tocstart{\global\tocsize=.95\vsize % TOC page >95% full, print it
+ \global\setbox\tocbox=\vbox{
+ \centerline{\tocstrut\bf Table Of Contents} % TOC page 1 banner line 1
+ \line{\tocstrut\hfil} % TOC page 1 banner line 2 blank line
+ }\global\tocnew=2}
+\def\tocont{\global\setbox\tocbox=\vbox{
+ \centerline{\tocstrut Table Of Contents (Continued)} % TOC page <> 1 banner
+ }\global\tocnew=2}
+\def\tocgen{\ifnum\tocnew=1
+ \message{No TOC entries found.}\else
+ \tocopage=\pageno\pageno=0\message{(TOC}
+ \shipout\box\tocbox\message{)}
+ \pageno=\tocopage\global\tocnew=1\fi}
+%%%--- Cut here -----------------------------------------------------------
diff --git a/macros/plain/contrib/misc/ulem.sty b/macros/plain/contrib/misc/ulem.sty
new file mode 120000
index 0000000000..fb341fbf56
--- /dev/null
+++ b/macros/plain/contrib/misc/ulem.sty
@@ -0,0 +1 @@
+../../../latex/contrib/ulem/ulem.sty \ No newline at end of file
diff --git a/macros/plain/contrib/misc/unouter.tex b/macros/plain/contrib/misc/unouter.tex
new file mode 100644
index 0000000000..8b640aaf1f
--- /dev/null
+++ b/macros/plain/contrib/misc/unouter.tex
@@ -0,0 +1,36 @@
+% unouter.tex - remove the concept of \outer from plain TeX
+% By Eamonn McManus Nov 88. This file is not copyrighted.
+
+% This macro removes the outerness of the control sequence \csname#1\endcsname
+% by copying it to \csname un*#1\endcsname and then defining
+% \csname#1\endcsname to be a macro that expands to that. For example,
+% after \unouter{proclaim}, we have: \proclaim=macro:->\un*proclaim .
+% and \un*proclaim=\outer macro:->[original definition of \proclaim] .
+% It would be nice if we could avoid this extra level, but I know of no way
+% of doing that short of writing the \meaning to a file and reading that in
+% again (yeuch).
+\def\unouter#1{\toks0=\expandafter{\csname un*#1\endcsname}%
+ \edef\next{\let\the\toks0=}\expandafter\next\csname#1\endcsname
+ \expandafter\edef\csname#1\endcsname{\the\toks0}}
+
+% In the case where the macro has no parameter text, we can unouter it
+% directly by putting its expansion into a token list and redefining it
+% in terms of that expansion.
+\def\simpunouter#1{%
+ \toks0=\expandafter\expandafter\expandafter{\csname#1\endcsname}%
+ \expandafter\edef\csname#1\endcsname{\the\toks0}}
+
+% ^^L is defined as \outer\par
+\let^^L=\par
+
+% Change everything else defined as \outer.
+\simpunouter{newcount} \simpunouter{newdimen} \simpunouter{newskip}
+\simpunouter{newmuskip} \simpunouter{newbox} \simpunouter{newtoks}
+\simpunouter{newread} \simpunouter{newwrite} \simpunouter{newfam}
+\simpunouter{+} \simpunouter{bye}
+\unouter{newhelp} \unouter{newif} \unouter{beginsection} \unouter{proclaim}
+
+% \unouter no longer needed, and remove the offending primitive!
+\let\unouter=\undefined \let\simpunouter=\undefined \let\outer=\relax
+
+\endinput
diff --git a/macros/plain/contrib/misc/varindent.tex b/macros/plain/contrib/misc/varindent.tex
new file mode 100644
index 0000000000..117eb00c0c
--- /dev/null
+++ b/macros/plain/contrib/misc/varindent.tex
@@ -0,0 +1,60 @@
+%From: Donald Arseneau <ASND@TRIUMFCL.BITNET>
+%Subject: Variable indentation puzzle
+%
+%The puzzle in TeXmag V4N1 about making indentation match the length of
+%the line above is interesting because there are (at least) two very different
+%approaches. One is to set every paragraph in a \vbox in order to measure the
+%width of its last line. I hope someone sends in a solution using that method
+%because I chose the method suggested by the question: "(as per what is done
+%with displayed equations)."
+% The width of the line above a displayed equation
+%is given with the parameter \predisplaysize, so it would seem trivial to use
+%a displayed equation to measure the line width. However, there are some
+%details to keep things interesting: The vertical spacing must be the same
+%as for an ordinary paragraph, including the \parskip; Likewise for the
+%penalties; The depths must be preserved, especially if a pagebreak occurs;
+%If the indentation gets too wide something must be done to prevent a bad
+%linebreak. The unboxing method has this last problem too, but there it may
+%be possible to reset the final line to the full textwidth. Here I use
+%ordinary indentation when the line gets too long. The advantage the display
+%method has over reboxing is that there are things that cannot be pulled
+%of a vertical list, so reboxing won't always work.
+
+\newdimen \normalparindent
+\newdimen \longlinelen
+\newdimen \gscratch % used globally
+
+% useful little macro: gives absolute value of a number or a dimension (if in
+% a dimension register). Note that this makes use of TeX's confusing habit of
+% expanding \if's within a number
+
+\def\abs#1{\ifnum#1<0 -\fi#1}
+
+% \usevarindent turns on variable indentation. Use grouping to turn it off.
+% (It would be easy to convert this to a LaTeX environment.)
+% It is necessary to say \usevarindent before ending the paragraph
+% above the first variable indentation.
+
+\def\usevarindent{%
+% don't try indenting to within 2\parindent of the right margin
+ \normalparindent=\parindent
+ \longlinelen=\hsize \advance\longlinelen-2\normalparindent
+ \displaywidowpenalty=\widowpenalty
+ \let\par=\varindent}
+
+% \varindent is used to end each paragraph during variable indentation.
+
+\def\varindent{\ifhmode\ifinner\else $$ % test for unrestricted horizontal mode
+ \lineskiplimit=-999pt % so we get a baselineskip that we can cancel with:
+ \abovedisplayskip=-\baselineskip \abovedisplayshortskip=-\baselineskip
+ \belowdisplayskip=0pt \belowdisplayshortskip=0pt
+ \halign{##\cr\noalign{\global\gscratch=\prevdepth}% get depth of line above
+ \hbox{\vrule width0pt depth \gscratch }\cr}% preserve its depth
+% now get the width of the last line of the paragraph that just ended,
+% If it is too long just use normal indentation:
+ \ifdim\abs\predisplaysize>\longlinelen \global\gscratch=\normalparindent
+% otherwise, use the width of the line above (\predisplaysize-2em):
+ \else\global\gscratch=\predisplaysize \global\advance\gscratch -2em\fi
+$$\parindent=\gscratch
+\fi\fi \endgraf}% Plain TeX sets \endgraf=\par; use \@@par in LaTeX
+
diff --git a/macros/plain/contrib/misc/verbatim.mac b/macros/plain/contrib/misc/verbatim.mac
new file mode 100644
index 0000000000..b0c5d1ce6d
--- /dev/null
+++ b/macros/plain/contrib/misc/verbatim.mac
@@ -0,0 +1,56 @@
+% ttbar.tex
+
+
+% Lifted from TUGBOT.STY.
+%
+% Support verbatim listing of TeX source, as defined in TeXbook, p. 421;
+% lifted from MANMAC.TEX, and modified slightly for narrower columns.
+
+\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
+ \catcode`\"=\other
+ \obeyspaces \obeylines \tt}
+
+\newskip\ttglue
+{\tenpoint\tt \global\ttglue=.5em plus .25em minus .15em}
+% this should be installed in each font
+
+% From David Eppstein's ``Trees'' paper (6#1), preserve initial spaces.
+{\obeyspaces\gdef {\ifvmode\indent\fi\space}}
+
+\newdimen\ttrightskip
+\ttrightskip=5pc
+
+\newif\ifttVertChar \ttVertCharfalse
+{\catcode`\|=\active \gdef\VertChar{\def|{\char"7C }}}
+
+%\outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=\z@
+\outer\def\begintt{$$\def\par{\leavevmode\null\endgraf}\ttverbatim \parskip=\z@
+ \ifttVertChar \VertChar \global\ttVertCharfalse \else \catcode`\|=0 \fi
+ \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$$}}
+
+% Other non-tt elements that may be embedded within \begintt...\endtt .
+\def\MTH{$}
+\def\sb{_}
+\def\sp{^}
+\def\SP{{\tt\char"20 }} % "visible" space
+\chardef\bs=`\\
+\def\vrt{{\tt\char`\|}}
+
+\catcode`\|=\active
+%{\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}}
+{\obeylines \gdef\activatettbar{\global\catcode`\|=\active %
+ \gdef|{\ttverbatim \spaceskip\ttglue \xspaceskip\ttglue %
+ \let^^M=\ \let|=\endgroup}}}
+\activatettbar
+
+% The active | (which here implements verbatim mode) is redefined in
+% such headers as TABLES.TeX and must be able to be reinstated.
+% \activatettbar been tested with TABLES.TeX, and the two uses are
+% mutually operable (TUGboat 7#2, "Tables in INRSTeX").
diff --git a/macros/plain/contrib/misc/verbatim.tex b/macros/plain/contrib/misc/verbatim.tex
new file mode 100644
index 0000000000..e4b0b0fe7a
--- /dev/null
+++ b/macros/plain/contrib/misc/verbatim.tex
@@ -0,0 +1,44 @@
+% -*- Mode: TeX -*-
+
+\ifx\thisfileis\anUndefinedMacro\input maybeload \fi
+
+\thisfileis{<eb.tex.texlocal>verbatim} % abort loading if we're already loaded
+
+\input redefine
+
+% This file provides a way of defining new verbatim environments, which is
+% otherwise difficult. The '\newverbatimenvironment' declaration is just like
+% the '\newenvironment' declaration except that the stuff in between \begin{foo}
+% and \end{foo} is read with the special syntax of verbatim mode.
+%
+
+\makeatletter
+
+% First, dispatch depending on whether there is an optional argument.
+
+\def\newverbatimenvironment#1{\@ifnextchar
+ [{\@new@v@env{#1}}{\@new@v@env{#1}[0]}}
+
+% In the definition of \@new@v@env, the easy part (definition of \endFOO) comes
+% first. The definition of \FOOVERBATIM is harder, and finally \FOO is defined
+% to have \verb@syntax\FOOVERBATIM at the end of its expansion.
+
+\def\@new@v@env#1[#2]#3#4{\expandafter\def\csname end#1\endcsname{#4}\relax
+ \expandafter\def@verbatim\csname #1VERBATIM\endcsname{#1}{##1\end{#1}}\relax
+ \expandafter\newcommand\csname #1\endcsname
+ [#2]{#3\verb@syntax\csname #1VERBATIM\endcsname}}
+
+% Define verbatim syntax.
+
+\def\verb@syntax{\obeylines\tt\let\do\@makeother\dospecials\frenchspacing\@vobeyspaces}
+
+% Finally, an auxiliary function to define a macro whose argument is delimited
+% by \end{foo} in special syntax, \def@verbatim{\CS}{foo}{...body...}.
+
+\begingroup \catcode `|=0 \catcode `[= 1
+\catcode`]=2 \catcode `\{=12 \catcode `\}=12
+\catcode`\\=12 |gdef|def@verbatim#1#2#3[|def#1##1\end{#2}[#3]]
+|endgroup
+
+\makeatletter
+
diff --git a/macros/plain/contrib/misc/verbtim2.tex b/macros/plain/contrib/misc/verbtim2.tex
new file mode 100644
index 0000000000..1265fce8f1
--- /dev/null
+++ b/macros/plain/contrib/misc/verbtim2.tex
@@ -0,0 +1,36 @@
+% From: Tim Morgan <morgan@uci-icsa>
+% 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
+}
+
+% This macro turns on verbatim mode until ?endverbatim is seen.
+\def\verbatim{\begingroup \setupverbatim
+ \parskip=0pt plus .05\baselineskip \parindent=0pt
+ \catcode`\ =13 \catcode`\^^M=13 \catcode`\?=0
+ \verbatimgobble}
+{\catcode`\^^M=13{\catcode`\ =13\gdef\verbatimdefs{\def^^M{\ \par}\let =\ }}
+ \gdef\verbatimgobble#1^^M{}}
+
+% This defines ?endverbatim to end the group which begins with \verbatim
+\let\endverbatim=\endgroup
+
+% 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/plain/contrib/misc/web9pt.tex b/macros/plain/contrib/misc/web9pt.tex
new file mode 100644
index 0000000000..f00df7b744
--- /dev/null
+++ b/macros/plain/contrib/misc/web9pt.tex
@@ -0,0 +1,5 @@
+\xdef\fmtversion{\fmtversion+WEB9PT1.0}
+\input 9point.tex
+\ninepoint
+\let\sc=\sevenrm \let\mainfont=\ninerm
+\font\tentex=cmtex9
diff --git a/macros/plain/contrib/misc/webmacss.tex b/macros/plain/contrib/misc/webmacss.tex
new file mode 100644
index 0000000000..3596a10394
--- /dev/null
+++ b/macros/plain/contrib/misc/webmacss.tex
@@ -0,0 +1,15 @@
+%%%-This is the unkindest cut here of all----------------------------
+% This is WEBMACss.TEX in text format, as of Aug 27, 1987.
+% modification to standard macros for WEB listings (in addition to
+% PLAIN.TEX)
+% Prints Pascal text in sans-serif type.
+% To use, include the line \input WEBMACss.TeX in the ``limbo''
+% section of your WEB program
+\font\pit=cmss10 % type for identifiers
+\font\pbf=cmssbx10 % type for reserved words.
+
+\def\\#1{\hbox{\pit#1\/\kern.05em}} % italic type for identifiers
+%\def\|#1{\hbox{$#1$}} % one-letter identifiers look a bit better this way
+\let\|=\\ % We aren't using \mit anymore.
+\def\&#1{\hbox{\pbf#1\/}} % boldface type for reserved words
+%%%-Julius Caeser never really said that-----------------------------
diff --git a/macros/plain/contrib/misc/weirdtitle.tex b/macros/plain/contrib/misc/weirdtitle.tex
new file mode 100644
index 0000000000..a1573361d0
--- /dev/null
+++ b/macros/plain/contrib/misc/weirdtitle.tex
@@ -0,0 +1,11 @@
+%%%----------Remove and admire----------------------------------------
+ \def\weirdtitle#1{%
+ \setbox0=\vbox{\noindent #1}%
+ \setbox1=\vbox{%
+ \unvbox0
+ \setbox2=\lastbox
+ \line{\hfill\unhbox2 \hfill}%
+ }%
+ \unvbox1
+ }%
+%%%---------Neat, isn't it?-------------------------------------------
diff --git a/macros/plain/contrib/misc/wochtag.tex b/macros/plain/contrib/misc/wochtag.tex
new file mode 100644
index 0000000000..5c2d610320
--- /dev/null
+++ b/macros/plain/contrib/misc/wochtag.tex
@@ -0,0 +1,54 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Wochentag zu einem Datum ermitteln %
+% von Andreas Schrell %
+% Windhoevel 2 %
+% 5600 Wuppertal 2 %
+% Tel. 0202/666889 %
+% E-Mail: ma107 at dhafeu11.bitnet %
+% Version 1.0 vom 9.10.1991 %
+% %
+% Aufruf: %
+% \Wochentag dd.mm.jjjj. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+{\catcode`\@=11
+\newcount\@tag
+\newcount\@monat
+\newcount\@jahr
+\newcount\@ja
+\newcount\@jb
+\newcount\@ha
+\newcount\@hb
+\newcount\@hc
+\newcount\@b
+\newcount\@f
+\gdef\Wochentag #1.#2.#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
+\@ha=\@f
+\divide\@ha by 7
+\multiply\@ha by 7
+\advance\@f by -\@ha % f:= f mod 7
+\ifcase\@f Sonntag\or Montag\or Dienstag\or Mittwoch\or Donnerstag\or
+ Freitag\or Samstag\else ????????\fi}
+}
+
diff --git a/macros/plain/contrib/misc/xii.tex b/macros/plain/contrib/misc/xii.tex
new file mode 120000
index 0000000000..5452572ef0
--- /dev/null
+++ b/macros/plain/contrib/misc/xii.tex
@@ -0,0 +1 @@
+../xii/xii.tex \ No newline at end of file
diff --git a/macros/plain/contrib/mnras/README b/macros/plain/contrib/mnras/README
new file mode 100644
index 0000000000..167ae336a0
--- /dev/null
+++ b/macros/plain/contrib/mnras/README
@@ -0,0 +1,15 @@
+% readme.txt (v1.1 released 2nd September 1994)
+% for Monthly Notices (plain TeX)
+%
+% The files for MN are as follows:
+%
+% README.TXT this file
+% FONTTEST.TEX a file to test all of the fonts used in the MN design
+% with your output device
+% MN.TEX the design macros
+% MNGUIDE.TEX authors' instructions
+% MNSAMPLE.TEX sample pages
+% MNLAND.TEX landscape page for sample pages
+%
+% Typeset MNGUIDE.TEX, MNSAMPLE.TEX and MNLAND.TEX for instructions
+% and examples.
diff --git a/macros/plain/contrib/mnras/fonttest.tex b/macros/plain/contrib/mnras/fonttest.tex
new file mode 100644
index 0000000000..c84aa89bc4
--- /dev/null
+++ b/macros/plain/contrib/mnras/fonttest.tex
@@ -0,0 +1,169 @@
+% FONTTEST.TEX
+%
+% Test all the possible font combinations in the MN design
+%
+% v0.4 --- released 25th August 1994 (M. Reed)
+% v0.3 --- released 22nd February 1994
+% v0.25 --- released 24th July 1992
+% v0.1 --- first released 27th February 1992
+%
+% Copyright Cambridge University Press
+
+% The following line automatically loads the mn macros if you are not
+% using a format file.
+\ifx\mnmacrosloaded\undefined \input mn\fi
+
+
+% If your system has the AMS fonts version 2.0 installed, MN.tex can be
+% made to use them by uncommenting the line: %\AMStwofontstrue
+%
+% By doing this, you will be able to obtain upright Greek characters.
+% e.g. \umu, \upi etc. See the section on "Upright Greek characters" in
+% the author guide for further information.
+
+\newif\ifAMStwofonts
+%\AMStwofontstrue
+
+\ifCUPmtplainloaded
+ \AMStwofontstrue
+\else
+ \NewTextAlphabet{textbfit} {cmbxti10} {}
+ \NewTextAlphabet{textbfss} {cmssbx10} {}
+ \NewMathAlphabet{mathbfit} {cmbxti10} {} % for math mode
+ \NewMathAlphabet{mathbfss} {cmssbx10} {} % " " "
+ %
+ \ifAMStwofonts
+ \NewSymbolFont{upmath} {eurm10}
+ \NewSymbolFont{AMSa} {msam10}
+ \NewMathSymbol{\upi} {0}{upmath}{19}
+ \NewMathSymbol{\umu} {0}{upmath}{16}
+ \NewMathSymbol{\upartial}{0}{upmath}{40}
+ \NewMathSymbol{\leqslant}{3}{AMSa}{36}
+ \NewMathSymbol{\geqslant}{3}{AMSa}{3E}
+ \let\oldle=\le \let\oldleq=\leq
+ \let\oldge=\ge \let\oldgeq=\geq
+ \let\leq=\leqslant \let\le=\leqslant
+ \let\geq=\geqslant \let\ge=\geqslant
+ \fi
+ %
+\fi
+
+\def\tface{\ifCUPmtplainloaded (Monotype Times)\else (Computer Modern)\fi}
+
+\parindent=0pt
+
+\onecolumn
+
+\pageoffset{-2.5pc}{0pc}
+
+\begintopmatter
+\title{A test file showing all of the possible font combinations}
+
+\shortauthor{Monthly Notices font test \tface}
+\shorttitle{Monthly Notices font test \tface}
+\maketitle
+
+\overfullrule=0pt
+
+\loadboldmathnames
+
+% not available in sub, sub sub and super, super super script:
+% \it, \sl, \tt, \sc and \sf (Computer Modern version)
+
+\def\digs{0123456789}
+\def\testfont#1{%
+ \advance\baselineskip by 5pt
+ {\tenrm #1:}\medskip
+ {$\rm Roman^{\rm Roman^{\rm Roman}}$}\ \
+ {$\bf Boldface^{\bf Boldface^{\bf Boldface}}$}\par
+%
+ \ifCUPmtplainloaded % Times version
+ {$\it Italic^{\it Italic^{\it Italic}}$}\ \
+ {$\sl Slanted^{\sl Slanted^{\sl Slanted}}$}\par
+ {$\tt Typewriter^{\tt Typewriter^{\tt Typewriter}}$}\ \
+ {$\sc Small\ Caps^{\sc Small\ Caps^{\sc Small\ Caps}}$}\par
+ {$\sf Sans\ Serif^{\sf Sans\ Serif^{\sf Sans\ Serif}}$}\par
+ \else
+ {\it Italic}\ \
+ {\sl Slanted}\ \
+ {\tt Typewriter}\par
+ {\sc Small Caps}\ \
+ {\sf Sans Serif}\par
+ \fi
+ %
+ {\textbfit{Bold text italic}%
+ $^{\mathbfit{Bold\ text\ italic^{\mathbfit{Bold\ text\ italic}}}}$}\par
+ {\textbfss{Bold sans-serif}%
+ $^{\mathbfss{Bold\ sans-serif}^{\mathbfss{Bold\ sans-serif}}}$}\par
+ %
+ \ifAMStwofonts
+ Upright math, and others $\upi^{\upi^{\upi}}, \umu^{\umu^{\umu}},
+ \upartial^{\upartial^{\upartial}}, \le^{\le^{\le}}, \ge^{\ge^{\ge}}$
+ \par
+ \fi
+ %
+ {$\cal CALAGRAPHIC^{\cal CALAGRAPHIC^{\cal CALAGRAPHIC}}$}\par
+ {$\bmath{\cal BOLD\ CALAGRAPHIC^{\cal BOLD\ CALAGRAPHIC^{\cal BOLD\ CALAGRAPHIC}}}$}\par
+
+ {$Math\ italic^{Math\ italic^{Math\ italic}}$}\par
+ {$\bmath{Bold\ math\ italic^{Bold\ math\ italic^{Bold\ math\ italic}}}$}\par
+
+ {${\rm Oldstyle}\ \oldstyle \digs^{\oldstyle \digs^{\oldstyle \digs}}$}\par
+ {${\rm Bold\ oldstyle}\ \bmath{\oldstyle \digs^{\oldstyle \digs^{\oldstyle \digs}}}$}\par
+
+ {\rm Math symbols}\ \
+ $\gamma^{\gamma^{\gamma}}\quad \theta^{\theta^{\theta}}
+ \quad \nu^{\nu^{\nu}}\quad \nabla^{\nabla^{\nabla}}$\par
+ {\rm Bold math symbols}\ \
+ $\bgamma^{\bgamma^{\bgamma}}\quad \btheta^{\btheta^{\btheta}}
+ \quad \bnu^{\bnu^{\bnu}}\quad \bnabla^{\bnabla^{\bnabla}}$\par
+% $$
+% \bar x_1-\bar x_2-\left (t_{1-{\alpha\over 2}}
+% \ \times \ s\sqrt{{1\over n_1}+{1\over n_2}}\right )\ {\rm to} \ \bar
+% x_1-\bar x_2+\left (t_{1-{\alpha\over 2}}
+% \times s\sqrt{{1\over n_1}+{1\over n_2}}\right )
+% $$
+% }%
+ Special symbols:
+ $\la$\ $\ga$\ $\getsto$\ $\cor$\ $\lid$\ $\gid$\ $\sol$\ $\sog$\
+ $\lse$\ $\gse$\ $\grole$\ $\leogr$\ $\loa$\ $\goa$\ \sun\ \degr\
+ \diameter\ $\sq$\ \fd\ \fh\ \fm\ \fs\ \fdg\ \fp\ \farcs\ \farcm\
+ \arcsec\ \arcmin\ $\bbbr$ $\bbbm$ $\bbbn$ $\bbbf$ $\bbbh$ $\bbbk$
+ $\bbbp$ $\bbbone$ $\bbbc$ $\bbbq$ $\bbbt$ $\bbbs$ $\bbbz$\par
+ %
+ \ifCUPmtplainloaded
+ \Half
+ \noindent (Monotype Times version only)\par
+ \noindent AMS symbol fonts:
+ $\boxplus$, $\boxtimes$, $\blacksquare$, $\centerdot$, $\lozenge$,
+ $\blacklozenge$, $\yen$, $\checkmark$, $\circledR$, $\maltese$,
+ $\nleqq$, $\ngeqq$,
+ $\precneqq$, $\succneqq$, $\precnapprox$, $\succnapprox$, $\lnapprox$,
+ $\gnapprox$\par
+ \noindent Blackboard Bold: $\Bbb{A}\ldots\Bbb{Z}$\par
+ \fi
+ \Two
+}
+
+
+\eightpoint\testfont{8 point}%
+
+\ninepoint\testfont{9 point}%
+
+\vfil\eject
+
+\tenpoint\testfont{10 point}%
+
+\elevenpoint\testfont{11 point}%
+
+\vfil\eject
+
+\fourteenpoint\testfont{14 point}%
+
+\vfil\eject
+
+\seventeenpoint\testfont{17 point}%
+
+\bye
+
+% end of fonttest.tex
diff --git a/macros/plain/contrib/mnras/mn.tex b/macros/plain/contrib/mnras/mn.tex
new file mode 100644
index 0000000000..e2abf7c9c4
--- /dev/null
+++ b/macros/plain/contrib/mnras/mn.tex
@@ -0,0 +1,3086 @@
+% MN.TEX (Computer Modern version)
+%
+% plain TeX single / double column macros for the
+% Monthly Notices of Royal Astronomical Society
+%
+% v1.6 (mn.tex) --- released 18th September 1995 (A. Woollatt)
+% v1.5 " --- released 25th August 1994 (M. Reed)
+% v1.4 " --- released 22nd February 1994
+% v1.3 (mnd.tex) --- released 28th November 1992
+% v1.26 " --- released 1st August 1992
+% v1.25 " --- released 25th February 1992
+%
+% Copyright Cambridge University Press
+%
+% > Incorporating special symbol code from laa.sty v1.1 (25th Feb 1991)
+% used with the permission of Springer Verlag.
+% > Incorporating parts of mssymb.tex (8th July 1987).
+% > Incorporating NewFont.sty v ALPHA patchlevel 8 (16th August 1994).
+% > Add footlines, add footnotes in double column (18th September
+% 1995).
+
+\catcode `\@=11 % @ signs are letters
+
+\def\@version{1.6}
+\def\@verdate{18th September 1995}
+
+
+% Fonts: Computer Modern / Monotype Times (CUP only)
+%
+% Font family sizes available:
+% 8pt, 9pt, 10pt, 11pt, 14pt and 17pt.
+%
+% Faces available:
+% \rm, math italic, symbol, \it, \bf, \sl, \tt, \sc, \sf, \cal, \em,
+% \mit and \oldstyle.
+
+% define the typeface in use
+
+\newif\ifprod@font
+
+\ifx\@typeface\undefined
+ \def\@typeface{Comp. Modern}\prod@fontfalse
+\else
+ \prod@fonttrue % We want Times
+\fi
+
+\def\newfam{\alloc@8\fam\chardef\sixt@@n} % made not outer
+
+\ifprod@font
+%
+\font\fiverm=mtr10 at 5pt
+\font\fivebf=mtbx10 at 5pt
+\font\fiveit=mtti10 at 5pt
+\font\fivesl=mtsl10 at 5pt
+\font\fivett=cmtt8 at 5pt \hyphenchar\fivett=-1
+\font\fivecsc=mtcsc10 at 5pt
+\font\fivesf=mtss10 at 5pt
+\font\fivei=mtmi10 at 5pt \skewchar\fivei='177
+\font\fivesy=mtsy10 at 5pt \skewchar\fivesy='60
+
+\font\sixrm=mtr10 at 6pt
+\font\sixbf=mtbx10 at 6pt
+\font\sixit=mtti10 at 6pt
+\font\sixsl=mtsl10 at 6pt
+\font\sixtt=cmtt8 at 6pt \hyphenchar\sixtt=-1
+\font\sixcsc=mtcsc10 at 6pt
+\font\sixsf=mtss10 at 6pt
+\font\sixi=mtmi10 at 6pt \skewchar\sixi='177
+\font\sixsy=mtsy10 at 6pt \skewchar\sixsy='60
+
+\font\sevenrm=mtr10 at 7pt
+\font\sevenbf=mtbx10 at 7pt
+\font\sevenit=mtti10 at 7pt
+\font\sevensl=mtsl10 at 7pt
+\font\seventt=cmtt8 at 7pt \hyphenchar\seventt=-1
+\font\sevencsc=mtcsc10 at 7pt
+\font\sevensf=mtss10 at 7pt
+\font\seveni=mtmi10 at 7pt \skewchar\seveni='177
+\font\sevensy=mtsy10 at 7pt \skewchar\sevensy='60
+
+\font\eightrm=mtr10 at 8pt
+\font\eightbf=mtbx10 at 8pt
+\font\eightit=mtti10 at 8pt
+\font\eighti=mtmi10 at 8pt \skewchar\eighti='177
+\font\eightsy=mtsy10 at 8pt \skewchar\eightsy='60
+\font\eightsl=mtsl10 at 8pt
+\font\eighttt=cmtt8 \hyphenchar\eighttt=-1
+\font\eightcsc=mtcsc10 at 8pt
+\font\eightsf=mtss10 at 8pt
+
+\font\ninerm=mtr10 at 9pt
+\font\ninebf=mtbx10 at 9pt
+\font\nineit=mtti10 at 9pt
+\font\ninei=mtmi10 at 9pt \skewchar\ninei='177
+\font\ninesy=mtsy10 at 9pt \skewchar\ninesy='60
+\font\ninesl=mtsl10 at 9pt
+\font\ninett=cmtt9 \hyphenchar\ninett=-1
+\font\ninecsc=mtcsc10 at 9pt
+\font\ninesf=mtss10 at 9pt
+
+\font\tenrm=mtr10
+\font\tenbf=mtbx10
+\font\tenit=mtti10
+\font\teni=mtmi10 \skewchar\teni='177
+\font\tensy=mtsy10 \skewchar\tensy='60
+\font\tenex=cmex10
+\font\tensl=mtsl10
+\font\tentt=cmtt10 \hyphenchar\tentt=-1
+\font\tencsc=mtcsc10
+\font\tensf=mtss10
+
+\font\elevenrm=mtr10 at 11pt
+\font\elevenbf=mtbx10 at 11pt
+\font\elevenit=mtti10 at 11pt
+\font\eleveni=mtmi10 at 11pt \skewchar\eleveni='177
+\font\elevensy=mtsy10 at 11pt \skewchar\elevensy='60
+\font\elevensl=mtsl10 at 11pt
+\font\eleventt=cmtt10 at 11pt \hyphenchar\eleventt=-1
+\font\elevencsc=mtcsc10 at 11pt
+\font\elevensf=mtss10 at 11pt
+
+\font\twelverm=mtr10 at 12pt
+\font\twelvebf=mtbx10 at 12pt
+\font\twelveit=mtti10 at 12pt
+\font\twelvesl=mtsl10 at 12pt
+\font\twelvett=cmtt12 \hyphenchar\twelvett=-1
+\font\twelvecsc=mtcsc10 at 12pt
+\font\twelvesf=mtss10 at 12pt
+\font\twelvei=mtmi10 at 12pt \skewchar\twelvei='177
+\font\twelvesy=mtsy10 at 12pt \skewchar\twelvesy='60
+
+\font\fourteenrm=mtr10 at 14pt
+\font\fourteenbf=mtbx10 at 14pt
+\font\fourteenit=mtti10 at 14pt
+\font\fourteeni=mtmi10 at 14pt \skewchar\fourteeni='177
+\font\fourteensy=mtsy10 at 14pt \skewchar\fourteensy='60
+\font\fourteensl=mtsl10 at 14pt
+\font\fourteentt=cmtt12 at 14pt \hyphenchar\fourteentt=-1
+\font\fourteencsc=mtcsc10 at 14pt
+\font\fourteensf=mtss10 at 14pt
+
+\font\seventeenrm=mtr10 at 17pt
+\font\seventeenbf=mtbx10 at 17pt
+\font\seventeenit=mtti10 at 17pt
+\font\seventeeni=mtmi10 at 17pt \skewchar\seventeeni='177
+\font\seventeensy=mtsy10 at 17pt \skewchar\seventeensy='60
+\font\seventeensl=mtsl10 at 17pt
+\font\seventeentt=cmtt12 at 17pt \hyphenchar\seventeentt=-1
+\font\seventeencsc=mtcsc10 at 17pt
+\font\seventeensf=mtss10 at 17pt
+%
+\else
+%
+\font\fiverm=cmr5
+\font\fivei=cmmi5 \skewchar\fivei='177
+\font\fivesy=cmsy5 \skewchar\fivesy='60
+\font\fivebf=cmbx5
+
+\font\sixrm=cmr6
+\font\sixi=cmmi6 \skewchar\sixi='177
+\font\sixsy=cmsy6 \skewchar\sixsy='60
+\font\sixbf=cmbx6
+
+\font\sevenrm=cmr7
+\font\sevenit=cmti7
+\font\seveni=cmmi7 \skewchar\seveni='177
+\font\sevensy=cmsy7 \skewchar\sevensy='60
+\font\sevenbf=cmbx7
+
+\font\eightrm=cmr8
+\font\eightbf=cmbx8
+\font\eightit=cmti8
+\font\eighti=cmmi8 \skewchar\eighti='177
+\font\eightsy=cmsy8 \skewchar\eightsy='60
+\font\eightsl=cmsl8
+\font\eighttt=cmtt8 \hyphenchar\eighttt=-1
+\font\eightcsc=cmcsc10 at 8pt
+\font\eightsf=cmss8
+
+\font\ninerm=cmr9
+\font\ninebf=cmbx9
+\font\nineit=cmti9
+\font\ninei=cmmi9 \skewchar\ninei='177
+\font\ninesy=cmsy9 \skewchar\ninesy='60
+\font\ninesl=cmsl9
+\font\ninett=cmtt9 \hyphenchar\ninett=-1
+\font\ninecsc=cmcsc10 at 9pt
+\font\ninesf=cmss9
+
+\font\tenrm=cmr10
+\font\tenbf=cmbx10
+\font\tenit=cmti10
+\font\teni=cmmi10 \skewchar\teni='177
+\font\tensy=cmsy10 \skewchar\tensy='60
+\font\tenex=cmex10
+\font\tensl=cmsl10
+\font\tentt=cmtt10 \hyphenchar\tentt=-1
+\font\tencsc=cmcsc10
+\font\tensf=cmss10
+
+\font\elevenrm=cmr10 scaled \magstephalf
+\font\elevenbf=cmbx10 scaled \magstephalf
+\font\elevenit=cmti10 scaled \magstephalf
+\font\eleveni=cmmi10 scaled \magstephalf \skewchar\eleveni='177
+\font\elevensy=cmsy10 scaled \magstephalf \skewchar\elevensy='60
+\font\elevensl=cmsl10 scaled \magstephalf
+\font\eleventt=cmtt10 scaled \magstephalf \hyphenchar\eleventt=-1
+\font\elevencsc=cmcsc10 scaled \magstephalf
+\font\elevensf=cmss10 scaled \magstephalf
+
+\font\twelverm=cmr10 scaled \magstep1
+\font\twelvebf=cmbx10 scaled \magstep1
+\font\twelvei=cmmi10 scaled \magstep1 \skewchar\twelvei='177
+\font\twelvesy=cmsy10 scaled \magstep1 \skewchar\twelvesy='60
+
+\font\fourteenrm=cmr10 scaled \magstep2
+\font\fourteenbf=cmbx10 scaled \magstep2
+\font\fourteenit=cmti10 scaled \magstep2
+\font\fourteeni=cmmi10 scaled \magstep2 \skewchar\fourteeni='177
+\font\fourteensy=cmsy10 scaled \magstep2 \skewchar\fourteensy='60
+\font\fourteensl=cmsl10 scaled \magstep2
+\font\fourteentt=cmtt10 scaled \magstep2 \hyphenchar\fourteentt=-1
+\font\fourteencsc=cmcsc10 scaled \magstep2
+\font\fourteensf=cmss10 scaled \magstep2
+
+\font\seventeenrm=cmr10 scaled \magstep3
+\font\seventeenbf=cmbx10 scaled \magstep3
+\font\seventeenit=cmti10 scaled \magstep3
+\font\seventeeni=cmmi10 scaled \magstep3 \skewchar\seventeeni='177
+\font\seventeensy=cmsy10 scaled \magstep3 \skewchar\seventeensy='60
+\font\seventeensl=cmsl10 scaled \magstep3
+\font\seventeentt=cmtt10 scaled \magstep3 \hyphenchar\seventeentt=-1
+\font\seventeencsc=cmcsc10 scaled \magstep3
+\font\seventeensf=cmss10 scaled \magstep3
+%
+\fi
+
+\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}
+
+\def\makestrut{%
+ \setbox\strutbox=\hbox{%
+ \vrule height.7\baselineskip depth.3\baselineskip width \z@}%
+}
+
+\def\baselinestretch{1}
+\newskip\tmp@bls
+
+\def\b@ls#1{% set baseline using \baselinestretch as a scale factor
+ \tmp@bls=#1\relax
+ \baselineskip=#1\relax\makestrut
+ \normalbaselineskip=\baselinestretch\tmp@bls
+ \normalbaselines
+}
+
+\def\nostb@ls#1{% set baseline skip ignoring \baselinestretch
+ \normalbaselineskip=#1\relax
+ \normalbaselines
+ \makestrut
+}
+
+
+% families \itfam, \slfam, \bffam, \ttfam defined in PLAIN.
+%
+% \itfam is \fam4
+% \slfam is \fam5
+% \bffam is \fam6
+% \ttfam is \fam7
+
+\newfam\scfam % \fam8
+\newfam\sffam % \fam9
+
+\def\mit{\fam\@ne}
+\def\cal{\fam\tw@}
+\def\em{\ifdim\fontdimen1\font>\z@ \rm\else\it\fi}
+
+\textfont3=\tenex
+\scriptfont3=\tenex
+\scriptscriptfont3=\tenex
+
+\setbox0=\hbox{\tenex B} \p@renwd=\wd0 % width of the big left (
+
+\def\eightpoint{% 8^6^5 on 10pt
+ \def\rm{\fam0\eightrm}%
+ \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm%
+ \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei%
+ \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy%
+ \textfont\itfam=\eightit\def\it{\fam\itfam\eightit}%
+ \ifprod@font
+ \scriptfont\itfam=\sixit
+ \scriptscriptfont\itfam=\fiveit
+ \else
+ \scriptfont\itfam=\eightit
+ \scriptscriptfont\itfam=\eightit
+ \fi
+ \textfont\bffam=\eightbf%
+ \scriptfont\bffam=\sixbf%
+ \scriptscriptfont\bffam=\fivebf%
+ \def\bf{\fam\bffam\eightbf}%
+ \textfont\slfam=\eightsl\def\sl{\fam\slfam\eightsl}%
+ \ifprod@font
+ \scriptfont\slfam=\sixsl
+ \scriptscriptfont\slfam=\fivesl
+ \else
+ \scriptfont\slfam=\eightsl
+ \scriptscriptfont\slfam=\eightsl
+ \fi
+ \textfont\ttfam=\eighttt\def\tt{\fam\ttfam\eighttt}%
+ \ifprod@font
+ \scriptfont\ttfam=\sixtt
+ \scriptscriptfont\ttfam=\fivett
+ \else
+ \scriptfont\ttfam=\eighttt
+ \scriptscriptfont\ttfam=\eighttt
+ \fi
+ \textfont\scfam=\eightcsc\def\sc{\fam\scfam\eightcsc}%
+ \ifprod@font
+ \scriptfont\scfam=\sixcsc
+ \scriptscriptfont\scfam=\fivecsc
+ \else
+ \scriptfont\scfam=\eightcsc
+ \scriptscriptfont\scfam=\eightcsc
+ \fi
+ \textfont\sffam=\eightsf\def\sf{\fam\sffam\eightsf}%
+ \ifprod@font
+ \scriptfont\sffam=\sixsf
+ \scriptscriptfont\sffam=\fivesf
+ \else
+ \scriptfont\sffam=\eightsf
+ \scriptscriptfont\sffam=\eightsf
+ \fi
+ \def\oldstyle{\fam\@ne\eighti}%
+ \b@ls{10pt}\rm\@viiipt%
+}
+\def\@viiipt{}
+
+\def\ninepoint{% 9^6^5 on 11pt (two col) / 12 (single col)
+ \def\rm{\fam0\ninerm}%
+ \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm%
+ \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei%
+ \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy%
+ \textfont\itfam=\nineit\def\it{\fam\itfam\nineit}%
+ \ifprod@font
+ \scriptfont\itfam=\sixit
+ \scriptscriptfont\itfam=\fiveit
+ \else
+ \scriptfont\itfam=\nineit
+ \scriptscriptfont\itfam=\nineit
+ \fi
+ \textfont\bffam=\ninebf%
+ \scriptfont\bffam=\sixbf%
+ \scriptscriptfont\bffam=\fivebf%
+ \def\bf{\fam\bffam\ninebf}%
+ \textfont\slfam=\ninesl\def\sl{\fam\slfam\ninesl}%
+ \ifprod@font
+ \scriptfont\slfam=\sixsl
+ \scriptscriptfont\slfam=\fivesl
+ \else
+ \scriptfont\slfam=\ninesl
+ \scriptscriptfont\slfam=\ninesl
+ \fi
+ \textfont\ttfam=\ninett\def\tt{\fam\ttfam\ninett}%
+ \ifprod@font
+ \scriptfont\ttfam=\sixtt
+ \scriptscriptfont\ttfam=\fivett
+ \else
+ \scriptfont\ttfam=\ninett
+ \scriptscriptfont\ttfam=\ninett
+ \fi
+ \textfont\scfam=\ninecsc\def\sc{\fam\scfam\ninecsc}%
+ \ifprod@font
+ \scriptfont\scfam=\sixcsc
+ \scriptscriptfont\scfam=\fivecsc
+ \else
+ \scriptfont\scfam=\ninecsc
+ \scriptscriptfont\scfam=\ninecsc
+ \fi
+ \textfont\sffam=\ninesf\def\sf{\fam\sffam\ninesf}%
+ \ifprod@font
+ \scriptfont\sffam=\sixsf
+ \scriptscriptfont\sffam=\fivesf
+ \else
+ \scriptfont\sffam=\ninesf
+ \scriptscriptfont\sffam=\ninesf
+ \fi
+ \def\oldstyle{\fam\@ne\ninei}%
+ \b@ls{\TextLeading plus \Feathering}\rm\@ixpt%
+}
+\def\@ixpt{}
+
+\def\tenpoint{% 10^7^5 on 11pt
+ \def\rm{\fam0\tenrm}%
+ \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm%
+ \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei%
+ \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy%
+ \textfont\itfam=\tenit\def\it{\fam\itfam\tenit}%
+ \ifprod@font
+ \scriptfont\itfam=\sevenit
+ \scriptscriptfont\itfam=\fiveit
+ \else
+ \scriptfont\itfam=\tenit
+ \scriptscriptfont\itfam=\tenit
+ \fi
+ \textfont\bffam=\tenbf%
+ \scriptfont\bffam=\sevenbf%
+ \scriptscriptfont\bffam=\fivebf%
+ \def\bf{\fam\bffam\tenbf}%
+ \textfont\slfam=\tensl\def\sl{\fam\slfam\tensl}%
+ \ifprod@font
+ \scriptfont\slfam=\sevensl
+ \scriptscriptfont\slfam=\fivesl
+ \else
+ \scriptfont\slfam=\tensl
+ \scriptscriptfont\slfam=\tensl
+ \fi
+ \textfont\ttfam=\tentt\def\tt{\fam\ttfam\tentt}%
+ \ifprod@font
+ \scriptfont\ttfam=\seventt
+ \scriptscriptfont\ttfam=\fivett
+ \else
+ \scriptfont\ttfam=\tentt
+ \scriptscriptfont\ttfam=\tentt
+ \fi
+ \textfont\scfam=\tencsc\def\sc{\fam\scfam\tencsc}%
+ \ifprod@font
+ \scriptfont\scfam=\sevencsc
+ \scriptscriptfont\scfam=\fivecsc
+ \else
+ \scriptfont\scfam=\tencsc
+ \scriptscriptfont\scfam=\tencsc
+ \fi
+ \textfont\sffam=\tensf\def\sf{\fam\sffam\tensf}%
+ \ifprod@font
+ \scriptfont\sffam=\sevensf
+ \scriptscriptfont\sffam=\fivesf
+ \else
+ \scriptfont\sffam=\tensf
+ \scriptscriptfont\sffam=\tensf
+ \fi
+ \def\oldstyle{\fam\@ne\teni}%
+ \b@ls{11pt}\rm\@xpt%
+}
+\def\@xpt{}
+
+\def\elevenpoint{% 11^8^6 on 13pt
+ \def\rm{\fam0\elevenrm}%
+ \textfont0=\elevenrm \scriptfont0=\eightrm \scriptscriptfont0=\sixrm%
+ \textfont1=\eleveni \scriptfont1=\eighti \scriptscriptfont1=\sixi%
+ \textfont2=\elevensy \scriptfont2=\eightsy \scriptscriptfont2=\sixsy%
+ \textfont\itfam=\elevenit\def\it{\fam\itfam\elevenit}%
+ \ifprod@font
+ \scriptfont\itfam=\eightit
+ \scriptscriptfont\itfam=\sixit
+ \else
+ \scriptfont\itfam=\elevenit
+ \scriptscriptfont\itfam=\elevenit
+ \fi
+ \textfont\bffam=\elevenbf%
+ \scriptfont\bffam=\eightbf%
+ \scriptscriptfont\bffam=\sixbf%
+ \def\bf{\fam\bffam\elevenbf}%
+ \textfont\slfam=\elevensl\def\sl{\fam\slfam\elevensl}%
+ \ifprod@font
+ \scriptfont\slfam=\eightsl
+ \scriptscriptfont\slfam=\sixsl
+ \else
+ \scriptfont\slfam=\elevensl
+ \scriptscriptfont\slfam=\elevensl
+ \fi
+ \textfont\ttfam=\eleventt\def\tt{\fam\ttfam\eleventt}%
+ \ifprod@font
+ \scriptfont\ttfam=\eighttt
+ \scriptscriptfont\ttfam=\sixtt
+ \else
+ \scriptfont\ttfam=\eleventt
+ \scriptscriptfont\ttfam=\eleventt
+ \fi
+ \textfont\scfam=\elevencsc\def\sc{\fam\scfam\elevencsc}%
+ \ifprod@font
+ \scriptfont\scfam=\eightcsc
+ \scriptscriptfont\scfam=\sixcsc
+ \else
+ \scriptfont\scfam=\elevencsc
+ \scriptscriptfont\scfam=\elevencsc
+ \fi
+ \textfont\sffam=\elevensf\def\sf{\fam\sffam\elevensf}%
+ \ifprod@font
+ \scriptfont\sffam=\eightsf
+ \scriptscriptfont\sffam=\sixsf
+ \else
+ \scriptfont\sffam=\elevensf
+ \scriptscriptfont\sffam=\elevensf
+ \fi
+ \def\oldstyle{\fam\@ne\eleveni}%
+ \b@ls{13pt}\rm\@xipt%
+}
+\def\@xipt{}
+
+\def\fourteenpoint{% 14^10^7 on 17pt
+ \def\rm{\fam0\fourteenrm}%
+ \textfont0\fourteenrm \scriptfont0\tenrm \scriptscriptfont0\sevenrm%
+ \textfont1\fourteeni \scriptfont1\teni \scriptscriptfont1\seveni%
+ \textfont2\fourteensy \scriptfont2\tensy \scriptscriptfont2\sevensy%
+ \textfont\itfam=\fourteenit\def\it{\fam\itfam\fourteenit}%
+ \ifprod@font
+ \scriptfont\itfam=\tenit
+ \scriptscriptfont\itfam=\sevenit
+ \else
+ \scriptfont\itfam=\fourteenit
+ \scriptscriptfont\itfam=\fourteenit
+ \fi
+ \textfont\bffam=\fourteenbf%
+ \scriptfont\bffam=\tenbf%
+ \scriptscriptfont\bffam=\sevenbf%
+ \def\bf{\fam\bffam\fourteenbf}%
+ \textfont\slfam=\fourteensl\def\sl{\fam\slfam\fourteensl}%
+ \ifprod@font
+ \scriptfont\slfam=\tensl
+ \scriptscriptfont\slfam=\sevensl
+ \else
+ \scriptfont\slfam=\fourteensl
+ \scriptscriptfont\slfam=\fourteensl
+ \fi
+ \textfont\ttfam=\fourteentt\def\tt{\fam\ttfam\fourteentt}%
+ \ifprod@font
+ \scriptfont\ttfam=\tentt
+ \scriptscriptfont\ttfam=\seventt
+ \else
+ \scriptfont\ttfam=\fourteentt
+ \scriptscriptfont\ttfam=\fourteentt
+ \fi
+ \textfont\scfam=\fourteencsc\def\sc{\fam\scfam\fourteencsc}%
+ \ifprod@font
+ \scriptfont\scfam=\tencsc
+ \scriptscriptfont\scfam=\sevencsc
+ \else
+ \scriptfont\scfam=\fourteencsc
+ \scriptscriptfont\scfam=\fourteencsc
+ \fi
+ \textfont\sffam=\fourteensf\def\sf{\fam\sffam\fourteensf}%
+ \ifprod@font
+ \scriptfont\sffam=\tensf
+ \scriptscriptfont\sffam=\sevensf
+ \else
+ \scriptfont\sffam=\fourteensf
+ \scriptscriptfont\sffam=\fourteensf
+ \fi
+ \def\oldstyle{\fam\@ne\fourteeni}%
+ \b@ls{17pt}\rm\@xivpt%
+}
+\def\@xivpt{}
+
+\def\seventeenpoint{% 17^12^10 on 20pt
+ \def\rm{\fam0\seventeenrm}%
+ \textfont0\seventeenrm \scriptfont0\twelverm \scriptscriptfont0\tenrm%
+ \textfont1\seventeeni \scriptfont1\twelvei \scriptscriptfont1\teni%
+ \textfont2\seventeensy \scriptfont2\twelvesy \scriptscriptfont2\tensy%
+ \textfont\itfam=\seventeenit\def\it{\fam\itfam\seventeenit}%
+ \ifprod@font
+ \scriptfont\itfam=\twelveit
+ \scriptscriptfont\itfam=\tenit
+ \else
+ \scriptfont\itfam=\seventeenit
+ \scriptscriptfont\itfam=\seventeenit
+ \fi
+ \textfont\bffam=\seventeenbf%
+ \scriptfont\bffam=\twelvebf%
+ \scriptscriptfont\bffam=\tenbf%
+ \def\bf{\fam\bffam\seventeenbf}%
+ \textfont\slfam=\seventeensl\def\sl{\fam\slfam\seventeensl}%
+ \ifprod@font
+ \scriptfont\slfam=\twelvesl
+ \scriptscriptfont\slfam=\tensl
+ \else
+ \scriptfont\slfam=\seventeensl
+ \scriptscriptfont\slfam=\seventeensl
+ \fi
+ \textfont\ttfam=\seventeentt\def\tt{\fam\ttfam\seventeentt}%
+ \ifprod@font
+ \scriptfont\ttfam=\twelvett
+ \scriptscriptfont\ttfam=\tentt
+ \else
+ \scriptfont\ttfam=\seventeentt
+ \scriptscriptfont\ttfam=\seventeentt
+ \fi
+ \textfont\scfam=\seventeencsc\def\sc{\fam\scfam\seventeencsc}%
+ \ifprod@font
+ \scriptfont\scfam=\twelvecsc
+ \scriptscriptfont\scfam=\tencsc
+ \else
+ \scriptfont\scfam=\seventeencsc
+ \scriptscriptfont\scfam=\seventeencsc
+ \fi
+ \textfont\sffam=\seventeensf\def\sf{\fam\sffam\seventeensf}%
+ \ifprod@font
+ \scriptfont\sffam=\twelvesf
+ \scriptscriptfont\sffam=\tensf
+ \else
+ \scriptfont\sffam=\seventeensf
+ \scriptscriptfont\sffam=\seventeensf
+ \fi
+ \def\oldstyle{\fam\@ne\seventeeni}%
+ \b@ls{20pt}\rm\@xviipt%
+}
+\def\@xviipt{}
+
+\lineskip=1pt \normallineskip=\lineskip
+\lineskiplimit=\z@ \normallineskiplimit=\lineskiplimit
+
+
+% BOLD MATH SYMBOLS
+
+\def\loadboldmathnames{%
+ \def\balpha{{\bmath{\alpha}}}%
+ \def\bbeta{{\bmath{\beta}}}%
+ \def\bgamma{{\bmath{\gamma}}}%
+ \def\bdelta{{\bmath{\delta}}}%
+ \def\bepsilon{{\bmath{\epsilon}}}%
+ \def\bzeta{{\bmath{\zeta}}}%
+ \def\boldeta{{\bmath{\eta}}}%
+ \def\btheta{{\bmath{\theta}}}%
+ \def\biota{{\bmath{\iota}}}%
+ \def\bkappa{{\bmath{\kappa}}}%
+ \def\blambda{{\bmath{\lambda}}}%
+ \def\bmu{{\bmath{\mu}}}%
+ \def\bnu{{\bmath{\nu}}}%
+ \def\bxi{{\bmath{\xi}}}%
+ \def\bpi{{\bmath{\pi}}}%
+ \def\brho{{\bmath{\rho}}}%
+ \def\bsigma{{\bmath{\sigma}}}%
+ \def\btau{{\bmath{\tau}}}%
+ \def\bupsilon{{\bmath{\upsilon}}}%
+ \def\bphi{{\bmath{\phi}}}%
+ \def\bchi{{\bmath{\chi}}}%
+ \def\bpsi{{\bmath{\psi}}}%
+ \def\bomega{{\bmath{\omega}}}%
+ \def\bvarepsilon{{\bmath{\varepsilon}}}%
+ \def\bvartheta{{\bmath{\vartheta}}}%
+ \def\bvarpi{{\bmath{\varpi}}}%
+ \def\bvarrho{{\bmath{\varrho}}}%
+ \def\bvarsigma{{\bmath{\varsigma}}}%
+ \def\bvarphi{{\bmath{\varphi}}}%
+ \def\baleph{{\bmath{\aleph}}}%
+ \def\bimath{{\bmath{\imath}}}%
+ \def\bjmath{{\bmath{\jmath}}}%
+ \def\bell{{\bmath{\ell}}}%
+ \def\bwp{{\bmath{\wp}}}%
+ \def\bRe{{\bmath{\Re}}}%
+ \def\bIm{{\bmath{\Im}}}%
+ \def\bpartial{{\bmath{\partial}}}%
+ \def\binfty{{\bmath{\infty}}}%
+ \def\bprime{{\bmath{\prime}}}%
+ \def\bemptyset{{\bmath{\emptyset}}}%
+ \def\bnabla{{\bmath{\nabla}}}%
+ \def\btop{{\bmath{\top}}}%
+ \def\bbot{{\bmath{\bot}}}%
+ \def\btriangle{{\bmath{\triangle}}}%
+ \def\bforall{{\bmath{\forall}}}%
+ \def\bexists{{\bmath{\exists}}}%
+ \def\bneg{{\bmath{\neg}}}%
+ \def\bflat{{\bmath{\flat}}}%
+ \def\bnatural{{\bmath{\natural}}}%
+ \def\bsharp{{\bmath{\sharp}}}%
+ \def\bclubsuit{{\bmath{\clubsuit}}}%
+ \def\bdiamondsuit{{\bmath{\diamondsuit}}}%
+ \def\bheartsuit{{\bmath{\heartsuit}}}%
+ \def\bspadesuit{{\bmath{\spadesuit}}}%
+ \def\bsmallint{{\bmath{\smallint}}}%
+ \def\btriangleleft{{\bmath{\triangleleft}}}%
+ \def\btriangleright{{\bmath{\triangleright}}}%
+ \def\bbigtriangleup{{\bmath{\bigtriangleup}}}%
+ \def\bbigtriangledown{{\bmath{\bigtriangledown}}}%
+ \def\bwedge{{\bmath{\wedge}}}%
+ \def\bvee{{\bmath{\vee}}}%
+ \def\bcap{{\bmath{\cap}}}%
+ \def\bcup{{\bmath{\cup}}}%
+ \def\bddagger{{\bmath{\ddagger}}}%
+ \def\bdagger{{\bmath{\dagger}}}%
+ \def\bsqcap{{\bmath{\sqcap}}}%
+ \def\bsqcup{{\bmath{\sqcup}}}%
+ \def\buplus{{\bmath{\uplus}}}%
+ \def\bamalg{{\bmath{\amalg}}}%
+ \def\bdiamond{{\bmath{\diamond}}}%
+ \def\bbullet{{\bmath{\bullet}}}%
+ \def\bwr{{\bmath{\wr}}}%
+ \def\bdiv{{\bmath{\div}}}%
+ \def\bodot{{\bmath{\odot}}}%
+ \def\boslash{{\bmath{\oslash}}}%
+ \def\botimes{{\bmath{\otimes}}}%
+ \def\bominus{{\bmath{\ominus}}}%
+ \def\boplus{{\bmath{\oplus}}}%
+ \def\bmp{{\bmath{\mp}}}%
+ \def\bpm{{\bmath{\pm}}}%
+ \def\bcirc{{\bmath{\circ}}}%
+ \def\bbigcirc{{\bmath{\bigcirc}}}%
+ \def\bsetminus{{\bmath{\setminus}}}%
+ \def\bcdot{{\bmath{\cdot}}}%
+ \def\bast{{\bmath{\ast}}}%
+ \def\btimes{{\bmath{\times}}}%
+ \def\bstar{{\bmath{\star}}}%
+ \def\bpropto{{\bmath{\propto}}}%
+ \def\bsqsubseteq{{\bmath{\sqsubseteq}}}%
+ \def\bsqsupseteq{{\bmath{\sqsupseteq}}}%
+ \def\bparallel{{\bmath{\parallel}}}%
+ \def\bmid{{\bmath{\mid}}}%
+ \def\bdashv{{\bmath{\dashv}}}%
+ \def\bvdash{{\bmath{\vdash}}}%
+ \def\bnearrow{{\bmath{\nearrow}}}%
+ \def\bsearrow{{\bmath{\searrow}}}%
+ \def\bnwarrow{{\bmath{\nwarrow}}}%
+ \def\bswarrow{{\bmath{\swarrow}}}%
+ \def\bLeftrightarrow{{\bmath{\Leftrightarrow}}}%
+ \def\bLeftarrow{{\bmath{\Leftarrow}}}%
+ \def\bRightarrow{{\bmath{\Rightarrow}}}%
+ \def\bleq{{\bmath{\leq}}}%
+ \def\bgeq{{\bmath{\geq}}}%
+ \def\bsucc{{\bmath{\succ}}}%
+ \def\bprec{{\bmath{\prec}}}%
+ \def\bapprox{{\bmath{\approx}}}%
+ \def\bsucceq{{\bmath{\succeq}}}%
+ \def\bpreceq{{\bmath{\preceq}}}%
+ \def\bsupset{{\bmath{\supset}}}%
+ \def\bsubset{{\bmath{\subset}}}%
+ \def\bsupseteq{{\bmath{\supseteq}}}%
+ \def\bsubseteq{{\bmath{\subseteq}}}%
+ \def\bin{{\bmath{\in}}}%
+ \def\bni{{\bmath{\ni}}}%
+ \def\bgg{{\bmath{\gg}}}%
+ \def\bll{{\bmath{\ll}}}%
+ \def\bnot{{\bmath{\not}}}%
+ \def\bleftrightarrow{{\bmath{\leftrightarrow}}}%
+ \def\bleftarrow{{\bmath{\leftarrow}}}%
+ \def\brightarrow{{\bmath{\rightarrow}}}%
+ \def\bmapstochar{{\bmath{\mapstochar}}}%
+ \def\bsim{{\bmath{\sim}}}%
+ \def\bsimeq{{\bmath{\simeq}}}%
+ \def\bperp{{\bmath{\perp}}}%
+ \def\bequiv{{\bmath{\equiv}}}%
+ \def\basymp{{\bmath{\asymp}}}%
+ \def\bsmile{{\bmath{\smile}}}%
+ \def\bfrown{{\bmath{\frown}}}%
+ \def\bleftharpoonup{{\bmath{\leftharpoonup}}}%
+ \def\bleftharpoondown{{\bmath{\leftharpoondown}}}%
+ \def\brightharpoonup{{\bmath{\rightharpoonup}}}%
+ \def\brightharpoondown{{\bmath{\rightharpoondown}}}%
+ \def\blhook{{\bmath{\lhook}}}%
+ \def\brhook{{\bmath{\rhook}}}%
+ \def\bldotp{{\bmath{\ldotp}}}%
+ \def\bcdotp{{\bmath{\cdotp}}}%
+}
+
+% Make \, work in non-math mode
+\def\,{\relax\ifmmode \mskip\thinmuskip\else \thinspace\fi}
+\let\protect=\relax
+
+\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
+ #1\endcsname\relax#2\else#3\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% NewFont.sty: ALPHA VERSION patchlevel 8, 16th August 1994, M. Reed
+
+% \addtom@thgroup{math font loading info}
+% Adds to internal \math@groups definition, which is executed at the end
+% of each size changing command. It is called by \NewSymbolFont.
+
+\newtoks\math@groups \math@groups={}
+\def\addtom@thgroup#1#2{#1\expandafter{\the#1#2}} % \mac={new\the\mac}
+
+
+% Make TeX change the values of \s@ze, \ss@ze, \sss@ze when \@npt is
+% executed. This makes it possible for math characters to be loaded
+% at the correct size automatically when the size is changed.
+
+% \addtosizeh@ok{x}{10}{7}{5}
+
+\def\addtosizeh@ok#1#2#3#4{%
+ \expandafter\def\csname @#1pt\endcsname{%
+ \def\s@ze{#2}\def\ss@ze{#3}\def\sss@ze{#4}\the\math@groups%
+ }%
+}
+
+
+% \resetsizehook allows the size parameters to be reset after \addtosizeh@ok
+% has been called (it re-defines \@npt).
+% e.g JFM which requires \xpt to have 10.5pt instead of 10pt.
+% Note: \resetsizehook must be used in the preamble BEFORE any
+% \New... commands.
+
+% e.g. \resetsizehook{x}{10.5}{7}{5}
+
+\let\resetsizehook=\addtosizeh@ok
+
+
+% Standard LaTeX sizes
+
+\ifprod@font
+% \addtosizeh@ok{v} {5} {5} {5}
+% \addtosizeh@ok{vi} {6} {6} {6}
+% \addtosizeh@ok{vii} {7} {6} {5}
+ \addtosizeh@ok{viii} {8} {6} {5}
+ \addtosizeh@ok{ix} {9} {6} {5}
+ \addtosizeh@ok{x} {10}{7} {5}
+ \addtosizeh@ok{xi} {11}{8} {6}
+% \addtosizeh@ok{xii} {12}{8} {6}
+ \addtosizeh@ok{xiv} {14}{10} {7}
+ \addtosizeh@ok{xvii} {17}{12}{10}
+% \addtosizeh@ok{xx} {20}{14}{12}
+% \addtosizeh@ok{xxv} {25}{20}{17}
+\else
+% \addtosizeh@ok{v} {5} {5} {5}
+% \addtosizeh@ok{vi} {6} {6} {6}
+% \addtosizeh@ok{vii} {7} {6} {5}
+ \addtosizeh@ok{viii} {8} {6} {5}
+ \addtosizeh@ok{ix} {9} {6} {5}
+ \addtosizeh@ok{x} {10} {7} {5}
+ \addtosizeh@ok{xi} {10.95} {8} {6}
+% \addtosizeh@ok{xii} {12} {8} {6}
+ \addtosizeh@ok{xiv} {14.4} {10} {7}
+ \addtosizeh@ok{xvii} {17.28} {12} {10}
+% \addtosizeh@ok{xx} {20.74} {14.4} {12}
+% \addtosizeh@ok{xxv} {24.88} {20.74} {17.28}
+\fi
+
+
+\def\get@font#1#2#3{%
+ \edef\fonts@ze{\romannumeral#3}% 10 -> x
+ \edef\fontn@me{\fonts@ze#1}% AMSa -> xAMSa
+ \@ifundefined{\fontn@me}%
+ {%%\typeout{defining \fontn@me}%
+ \global\expandafter\font\csname \fontn@me\endcsname=#2 at #3pt}%
+ {}%
+}
+
+\def\ass@tfont#1#2{%
+ \xdef\fam@name{\csname #1\endcsname}%
+ \xdef\font@name{\csname #2\endcsname}%
+ \let\textfont@name\font@name
+ \textfont\fam@name\textfont@name
+}
+
+\def\ass@sfont#1#2{%
+ \xdef\fam@name{\csname #1\endcsname}%
+ \xdef\font@name{\csname #2\endcsname}%
+ \let\textfont@name\font@name
+ \scriptfont\fam@name\textfont@name
+}
+
+\def\ass@ssfont#1#2{%
+ \xdef\fam@name{\csname #1\endcsname}%
+ \xdef\font@name{\csname #2\endcsname}%
+ \let\textfont@name\font@name
+ \scriptscriptfont\fam@name\textfont@name
+}
+
+
+% fam name base font (allocates a \newfam)
+% \NewSymbolFont {AMSa} {mtxm10}
+
+\def\NewSymbolFont#1#2{%
+ \expandafter\ifx\csname sym#1fam\endcsname\relax % if not defined
+ \expandafter\newfam\csname sym#1fam\endcsname
+ \expandafter\edef\csname sym#1fam\endcsname{\the\allocationnumber}%
+ \addtom@thgroup\math@groups{%
+ \get@font{#1}{#2}{\s@ze}%
+ \ass@tfont{sym#1fam}{\fontn@me}%
+ \get@font{#1}{#2}{\ss@ze}%
+ \ass@sfont{sym#1fam}{\fontn@me}%
+ \get@font{#1}{#2}{\sss@ze}%
+ \ass@ssfont{sym#1fam}{\fontn@me}%
+ }%
+ \else
+ \errmessage{Family `#1' already defined}%
+ \fi
+}
+
+
+% symbol type fam pos (hex)
+% \NewMathSymbol {\blacksquare} {0} {AMSa} {04}
+
+\def\NewMathSymbol#1#2#3#4{%
+ \edef\f@mly{\expandafter\hexnumber{\csname sym#3fam\endcsname}}%
+ \mathchardef#1="#2\f@mly#4\relax
+}
+
+
+% macro name type fam1 pos fam2 pos
+% \NewMathDelimiter{\ulcorner} {4} {AMSa} {70} {AMSb} {70}
+
+\newif\ifd@f
+
+\def\NewMathDelimiter#1#2#3#4#5#6{%
+ \d@ftrue
+ \expandafter\ifx\csname sym#3fam\endcsname\relax
+ \d@ffalse \errmessage{Family `#3' is not defined}%
+ \fi
+ \expandafter\ifx\csname sym#5fam\endcsname\relax
+ \d@ffalse \errmessage{Family `#5' is not defined}%
+ \fi
+ \ifd@f
+ \edef\f@mly{\expandafter\hexnumber{\csname sym#3fam\endcsname}}%
+ \edef\f@mlytw@{\expandafter\hexnumber{\csname sym#5fam\endcsname}}%
+ \xdef#1{\delimiter"#2\f@mly #4\f@mlytw@ #6\relax}%
+ \fi
+}
+
+
+% macro name base font skewchar setting e.g '60 (octal)
+% \NewMathAlphabet {mathbssi} {mtmisb10} {}
+
+\def\setboxz@h{\setbox\z@\hbox}
+\def\wdz@{\wd\z@}
+\def\boxz@{\box\z@}
+\def\setbox@ne{\setbox\@ne}
+\def\wd@ne{\wd\@ne}
+
+\def\math@atom#1#2{%
+ \binrel@{#1}\binrel@@{#2}}
+\def\binrel@#1{\setboxz@h{\thinmuskip0mu
+ \medmuskip\m@ne mu\thickmuskip\@ne mu$#1\m@th$}%
+ \setbox@ne\hbox{\thinmuskip0mu\medmuskip\m@ne mu\thickmuskip
+ \@ne mu${}#1{}\m@th$}%
+ \setbox\tw@\hbox{\hskip\wd@ne\hskip-\wdz@}}
+\def\binrel@@#1{\ifdim\wd2<\z@\mathbin{#1}\else\ifdim\wd\tw@>\z@
+ \mathrel{#1}\else{#1}\fi\fi}
+
+\def\m@thit{1}
+
+\def\set@skchar#1{\global\expandafter\skewchar
+ \csname\fontn@me\endcsname=#1\relax}
+
+\def\NewMathAlphabet#1#2#3{%
+ \def\tst{#3}%
+ \ifx\tst\empty\else % if a \skewchar setting is present
+ \expandafter\gdef\csname #1@sc\endcsname{}% \def\cmd@sc{..}
+ \fi
+ %
+ \expandafter\def\csname #1\endcsname{% \def\cmd{\protect\@cmd}
+ \protect\csname @#1\endcsname}%
+ %
+ \expandafter\def\csname @#1\endcsname##1{% \def\@cmd{..}
+ {%
+ \begingroup
+ \get@font{#1}{#2}{\s@ze}%
+ \@ifundefined{#1@sc}{}{\set@skchar{#3}}%
+ \ass@tfont{m@thit}{\fontn@me}%
+ \get@font{#1}{#2}{\ss@ze}%
+ \@ifundefined{#1@sc}{}{\set@skchar{#3}}%
+ \ass@sfont{m@thit}{\fontn@me}%
+ \get@font{#1}{#2}{\sss@ze}%
+ \@ifundefined{#1@sc}{}{\set@skchar{#3}}%
+ \ass@ssfont{m@thit}{\fontn@me}%
+ %
+ \math@atom{##1}{%
+ \mathchoice%
+ {\hbox{$\m@th\displaystyle##1$}}%
+ {\hbox{$\m@th\textstyle##1$}}%
+ {\hbox{$\m@th\scriptstyle##1$}}%
+ {\hbox{$\m@th\scriptscriptstyle##1$}}}%
+ \endgroup
+ }%
+ }%
+}
+
+
+% macro name base font hyphenchar setting e.g -1 (off)
+% \NewTextAlphabet {textbfit} {mtbxti10} {}
+
+% save a family if \NewTextAlphabet is not used.
+\newif\iffirstta \firsttatrue
+
+\def\set@hchar#1{\global\expandafter\hyphenchar
+ \csname\fontn@me\endcsname=#1\relax}
+
+\def\NewTextAlphabet#1#2#3{%
+ \iffirstta
+ \global\firsttafalse
+ \newfam\scratchfam
+ \edef\scrt@fam{\the\allocationnumber}%
+ \fi
+ \def\tst{#3}%
+ \ifx\tst\empty\else % if a \hyphenchar setting is required
+ \expandafter\gdef\csname #1@hc\endcsname{}% \def\cmd@sc{..}
+ \fi
+ %
+ \expandafter\def\csname #1\endcsname{% \def\cmd{\protect\t@cmd}
+ \protect\csname t@#1\endcsname}%
+ %
+ \long\expandafter\def\csname t@#1\endcsname##1{% \def\t@cmd{..}
+ \ifmmode
+ \typeout{Warning: do not use \expandafter\string\csname #1\endcsname
+ \space in math mode}\fi%
+ {%
+ \get@font{#1}{#2}{\s@ze}\let\t@xtfnt=\fontn@me\relax
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@tfont{scrt@fam}{\fontn@me}%
+ \get@font{#1}{#2}{\ss@ze}%
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@sfont{scrt@fam}{\fontn@me}%
+ \get@font{#1}{#2}{\sss@ze}%
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@ssfont{scrt@fam}{\fontn@me}%
+ \fam\scratchfam\csname\t@xtfnt\endcsname
+ ##1%
+ }%
+ }%
+ %
+ \expandafter\def\csname #1shape% \def\cmdshape{\protect\@cmdshape}
+ \endcsname{\protect\csname @#1shape\endcsname}%
+ %
+ \expandafter\def\csname @#1shape\endcsname{% \def\@cmdshape
+ \ifmmode
+ \typeout{Warning: do not use \expandafter\string\csname
+ #1shape\endcsname \space in math mode}\fi
+ %
+ \get@font{#1}{#2}{\s@ze}\let\t@xtfnt=\fontn@me\relax
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@tfont{scrt@fam}{\fontn@me}%
+ \get@font{#1}{#2}{\ss@ze}%
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@sfont{scrt@fam}{\fontn@me}%
+ \get@font{#1}{#2}{\sss@ze}%
+ \@ifundefined{#1@hc}{}{\set@hchar{#3}}%
+ \ass@ssfont{scrt@fam}{\fontn@me}%
+ \fam\scratchfam\csname\t@xtfnt\endcsname
+ }%
+}
+
+
+% \bmath{math text}
+
+\ifprod@font
+ \def\math@itfnt{mtmib10}
+ \def\math@syfnt{mtbsy10}
+\else
+ \def\math@itfnt{cmmib10}
+ \def\math@syfnt{cmbsy10}
+\fi
+
+\def\m@thsy{2}
+
+\def\bmath{\protect\@bmath}
+\def\@bmath#1{%
+ {%
+ \begingroup
+ \get@font{mthit}{\math@itfnt}{\s@ze}\set@skchar{'177}%
+ \ass@tfont{m@thit}{\fontn@me}%
+ \get@font{mthit}{\math@itfnt}{\ss@ze}\set@skchar{'177}%
+ \ass@sfont{m@thit}{\fontn@me}%
+ \get@font{mthit}{\math@itfnt}{\sss@ze}\set@skchar{'177}%
+ \ass@ssfont{m@thit}{\fontn@me}%
+ %
+ \get@font{mthsy}{\math@syfnt}{\s@ze}\set@skchar{'60}%
+ \ass@tfont{m@thsy}{\fontn@me}%
+ \get@font{mthsy}{\math@syfnt}{\ss@ze}\set@skchar{'60}%
+ \ass@sfont{m@thsy}{\fontn@me}%
+ \get@font{mthsy}{\math@syfnt}{\sss@ze}\set@skchar{'60}%
+ \ass@ssfont{m@thsy}{\fontn@me}%
+ %
+ \math@atom{#1}{%
+ \mathchoice%
+ {\hbox{$\m@th\displaystyle#1$}}%
+ {\hbox{$\m@th\textstyle#1$}}%
+ {\hbox{$\m@th\scriptstyle#1$}}%
+ {\hbox{$\m@th\scriptscriptstyle#1$}}}%
+ \endgroup
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% Astronomy and Astrophysics symbol macros
+
+\def\la{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\sim\cr}}}}}
+
+\def\ga{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\sim\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\sim\cr}}}}}
+
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+
+\def\cor{\mathrel{\mathchoice {\hbox{$\widehat=$}}{\hbox{$\widehat=$}}
+{\hbox{$\scriptstyle\hat=$}}
+{\hbox{$\scriptscriptstyle\hat=$}}}}
+
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+
+\def\sol{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr\sim\cr<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\sim\cr
+<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\sim\cr
+<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\sim\cr<\cr}}}}}
+
+\def\sog{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr\sim\cr>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\sim\cr
+>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+\sim\cr>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\sim\cr>\cr}}}}}
+
+\def\lse{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\simeq\cr}}}}}
+
+\def\gse{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\simeq\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\simeq\cr}}}}}
+
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1.5pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.5pt}<\cr}}}}}
+
+\def\leogr{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip-1.5pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\noalign{\vskip-1.5pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\noalign{\vskip-1pt}>\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\noalign{\vskip-0.5pt}>\cr}}}}}
+
+\def\loa{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+<\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr\approx\cr}}}}}
+
+\def\goa{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\approx\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\approx\cr}}}}}
+
+\def\sun{\hbox{$\odot$}}
+\def\degr{\hbox{$^\circ$}}
+\def\diameter{{\ifmmode\mathchoice
+{\ooalign{\hfil\hbox{$\displaystyle/$}\hfil\crcr
+{\hbox{$\displaystyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\textstyle/$}\hfil\crcr
+{\hbox{$\textstyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\scriptstyle/$}\hfil\crcr
+{\hbox{$\scriptstyle\mathchar"20D$}}}}
+{\ooalign{\hfil\hbox{$\scriptscriptstyle/$}\hfil\crcr
+{\hbox{$\scriptscriptstyle\mathchar"20D$}}}}
+\else{\ooalign{\hfil/\hfil\crcr\mathhexbox20D}}%
+\fi}}
+
+\def\sq{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+
+\def\fd{\hbox{$.\!\!^{\rm d}$}}
+\def\fh{\hbox{$.\!\!^{\rm h}$}}
+\def\fm{\hbox{$.\!\!^{\rm m}$}}
+\def\fs{\hbox{$.\!\!^{\rm s}$}}
+\def\fdg{\hbox{$.\!\!^\circ$}}
+\def\farcm{\hbox{$.\mkern-4mu^\prime$}}
+\def\farcs{\hbox{$.\!\!^{\prime\prime}$}}
+\def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}}
+\def\arcmin{\hbox{$^\prime$}}
+\def\arcsec{\hbox{$^{\prime\prime}$}}
+
+% Simulated Blackboard Bold symbols
+
+\def\bbbr{{\rm I\!R}}
+\def\bbbm{{\rm I\!M}}
+\def\bbbn{{\rm I\!N}}
+\def\bbbf{{\rm I\!F}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+\def\bbbz{{\mathchoice {\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\sf\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\sf\scriptscriptstyle Z\kern-0.2em Z$}}}}
+
+
+% NUMBER THE DESIGN ELEMENTS
+
+\def\Nulle{0} % null element
+\def\Afe{1} % author affiliation
+\def\Hae{2} % heading A
+\def\Hbe{3} % heading B
+\def\Hce{4} % heading C
+\def\Hde{5} % heading D
+
+
+% TEMPORARY REGISTERS
+
+\newcount\LastMac \LastMac=\Nulle
+
+\newskip\half \half=5.5pt plus 1.5pt minus 2.25pt
+\newskip\one \one=11pt plus 3pt minus 5.5pt
+\newskip\onehalf \onehalf=16.5pt plus 5.5pt minus 8.25pt
+\newskip\two \two=22pt plus 5.5pt minus 11pt
+
+\def\Half{\addvspace{\half}}
+\def\One{\addvspace{\one}}
+\def\OneHalf{\addvspace{\onehalf}}
+\def\Two{\addvspace{\two}}
+
+\def\Referee{% produce version for refereeing
+ \def\baselinestretch{2}%
+ \ninepoint
+}
+
+\def\Raggedright{% set lines unjustified
+ \rightskip=\z@ plus \hsize\relax
+}
+
+\def\Fullout{% set lines justified
+ \rightskip=\z@\relax
+}
+
+\def\Hang#1#2{% set hanging indentation
+ \hangindent=#1%
+ \hangafter=#2\relax
+}
+
+\def\makeatletter{\catcode `\@=11\relax}
+\def\makeatother{\catcode `\@=12\relax}
+
+
+% Pagestyles
+
+\newif\ifsp@page
+\def\pagestyle#1{\csname ps@#1\endcsname}
+\def\thispagestyle#1{\global\sp@pagetrue\gdef\sp@type{#1}}
+
+\def\ps@titlepage{%
+ \def\@oddhead{\eightpoint\noindent \the\CatchLine
+ \ifprod@font\else\qquad Printed\ \today\qquad
+ (MN plain \TeX\ macros\ v\@version)\fi \hfil}%
+ \let\@evenhead=\@oddhead
+ \def\@oddfoot{\eightpoint\copyright\ \@pubyear\ RAS\hfil}%
+ \def\@evenfoot{\hfil\eightpoint\noindent\copyright\ \@pubyear\ RAS}%
+}
+
+\def\ps@headings{%
+ \def\@oddhead{\elevenpoint\it\noindent
+ \hfill\the\RightHeader\hskip1.5em\rm\folio}%
+ \def\@evenhead{\elevenpoint\noindent
+ \folio\hskip1.5em\it\the\LeftHeader\hfill}%
+ \def\@oddfoot{\eightpoint\noindent\copyright\ \@pubyear\ RAS,
+ MNRAS {\bf \@volume}, \@pagerange\hfil}%
+ \def\@evenfoot{\hfil\eightpoint\copyright\ \@pubyear\ RAS,
+ MNRAS {\bf \@volume}, \@pagerange}%
+}
+
+\def\ps@plate{%
+ \def\@oddhead{\eightpoint\noindent\plt@cap\hfil}%
+ \def\@evenhead{\eightpoint\noindent\plt@cap\hfil}%
+ \def\@oddfoot{\eightpoint\noindent\copyright\ \@pubyear\ RAS,
+ MNRAS {\bf \@volume}, \@pagerange\hfil}%
+ \def\@evenfoot{\hfil\eightpoint\copyright\ \@pubyear\ RAS,
+ MNRAS {\bf \@volume}, \@pagerange}%
+}
+
+
+% DESIGN ELEMENT DEFINITIONS
+
+% Article opening
+
+\def\title#1{% article title
+ \bgroup
+ \vbox to 8pt{\vss}%
+ \seventeenpoint
+ \Raggedright
+ \noindent \strut{\bf #1}\par
+ \egroup
+}
+
+\def\author#1{% article author(s)
+ \bgroup
+ \ifnum\LastMac=\Afe \OneHalf\else \vskip 21pt\fi
+ \fourteenpoint
+ \Raggedright
+ \noindent \strut #1\par
+ \vskip 3pt%
+ \egroup
+}
+
+\def\affiliation#1{% author(s) affiliation
+ \bgroup
+ \vskip -4pt%
+ \eightpoint
+ \Raggedright
+ \noindent \strut {\it #1}\par
+ \egroup
+ \LastMac=\Afe\relax
+}
+
+\def\acceptedline#1{% acceptance date
+ \bgroup
+ \Two
+ \eightpoint
+ \Raggedright
+ \noindent \strut #1\par
+ \egroup
+}
+
+\long\def\abstract#1{%
+ \bgroup
+ \vskip 20pt%
+ \leftskip 11pc\rightskip\z@
+ \noindent{\ninebf ABSTRACT}\par
+ \tenpoint
+ \Fullout
+ \noindent #1\par
+ \egroup
+}
+
+\long\def\keywords#1{% keywords
+ \bgroup
+ \Half
+ \leftskip 11pc\rightskip\z@
+ \tenpoint
+ \Fullout
+ \noindent\hbox{\bf Key words:}\ #1\par
+ \egroup
+}
+
+
+% The \maketitle macro ensures that the two spanning material appears
+% at the top of the first page, and that it has two lines of space
+% underneath it. If you forget this in you input, no output will be produced.
+% The \BeginOpening (alias \begintopmatter) macro should be called at the
+% very start of the input file, so that it is in force when the document
+% starts. This ensures that when \maketitle is called that the group is
+% closed, and the material gets printed.
+
+\def\maketitle{%
+ \EndOpening
+ \ifsinglecol \else \MakePage\fi
+}
+
+
+% Page offset
+
+\def\pageoffset#1#2{\hoffset=#1\relax\voffset=#2\relax}
+
+
+% Counter setup
+
+\def\@nameuse#1{\csname #1\endcsname}
+\def\arabic#1{\@arabic{\@nameuse{#1}}}
+\def\alph#1{\@alph{\@nameuse{#1}}}
+\def\Alph#1{\@Alph{\@nameuse{#1}}}
+\def\@arabic#1{\number #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\errmessage{Counter out of range}\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\errmessage{Counter out of range}\fi}
+
+
+% Equation auto-numbering
+
+\newcount\Eqnno
+\newcount\SubEqnno
+
+\def\theeq{\arabic{Eqnno}}
+\def\thesubeq{\alph{SubEqnno}}
+
+\def\stepeq{\relax
+ \global\SubEqnno \z@
+ \global\advance\Eqnno \@ne\relax
+ {\rm (\theeq)}%
+}
+
+\def\startsubeq{\relax
+ \global\SubEqnno \z@
+ \global\advance\Eqnno \@ne\relax
+ \stepsubeq
+}
+
+\def\stepsubeq{\relax
+ \global\advance\SubEqnno \@ne\relax
+ {\rm (\theeq\thesubeq)}%
+}
+
+
+% Headings
+
+\newcount\Sec % heading auto number counters
+\newcount\SecSec
+\newcount\SecSecSec
+
+\def\thesection{\arabic{Sec}}
+\def\thesubsection{\thesection.\arabic{SecSec}}
+\def\thesubsubsection{\thesubsection.\arabic{SecSecSec}}
+
+
+\Sec=\z@
+
+\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token
+\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}
+
+\def\@ifnextchar#1#2#3{%
+ \let\@tempMACe #1%
+ \def\@tempMACa{#2}%
+ \def\@tempMACb{#3}%
+ \futurelet \@tempMACc\@ifnch%
+}
+
+\def\@ifnch{%
+\ifx \@tempMACc \@sptoken%
+ \let\@tempMACd\@xifnch%
+\else%
+ \ifx \@tempMACc \@tempMACe%
+ \let\@tempMACd\@tempMACa%
+ \else%
+ \let\@tempMACd\@tempMACb%
+ \fi%
+\fi%
+\@tempMACd%
+}
+
+\def\@ifstar#1#2{\@ifnextchar *{\def\@tempMACa*{#1}\@tempMACa}{#2}}
+
+\newskip\@tempskipb
+
+\def\addvspace#1{%
+ \ifvmode\else \endgraf\fi%
+ \ifdim\lastskip=\z@%
+ \vskip #1\relax%
+ \else%
+ \@tempskipb#1\relax\@xaddvskip%
+ \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%
+}
+
+\newskip\@tmpSKIP
+
+\def\addpen#1{%
+ \ifvmode
+ \if@nobreak
+ \else
+ \ifdim\lastskip=\z@
+ \penalty#1\relax
+ \else
+ \@tmpSKIP=\lastskip
+ \vskip -\lastskip
+ \penalty#1\vskip\@tmpSKIP
+ \fi
+ \fi
+ \fi
+}
+
+\newcount\@clubpen \@clubpen=\clubpenalty
+\newif\if@nobreak \@nobreakfalse
+
+\def\@noafterindent{%
+ \global\@nobreaktrue
+ \everypar{\if@nobreak
+ \global\@nobreakfalse
+ \clubpenalty \@M
+ {\setbox\z@\lastbox}%
+ \LastMac=\Nulle\relax%
+ \else
+ \clubpenalty \@clubpen
+ \everypar{}%
+ \fi}%
+}
+
+\newcount\gds@cbrk \gds@cbrk=-300
+
+\def\@nohdbrk{\interlinepenalty \@M\relax}
+
+\let\@par=\par
+\def\@restorepar{\def\par{\@par}}
+
+\newif\if@endpe \@endpefalse
+
+\def\@doendpe{\@endpetrue \@nobreakfalse \LastMac=\Nulle\relax%
+ \def\par{\@restorepar\everypar{}\par\@endpefalse}%
+ \everypar{\setbox\z@\lastbox\everypar{}\@endpefalse}%
+}
+
+\def\section{\@ifstar{\@ssection}{\@section}}
+
+\def\@section#1{% heading A (\section{....})
+ \if@nobreak
+ \everypar{}%
+ \ifnum\LastMac=\Hae \addvspace{\half}\fi
+ \else
+ \addpen{\gds@cbrk}%
+ \addvspace{\two}%
+ \fi
+ \bgroup
+ \ninepoint\bf
+ \Raggedright
+ \global\advance\Sec \@ne
+ \ifappendix
+ \global\Eqnno=\z@ \global\SubEqnno=\z@\relax
+ \def\ch@ck{#1}%
+ \ifx\ch@ck\empty \def\c@lon{}\else\def\c@lon{:}\fi
+ \noindent\@nohdbrk APPENDIX\ \thesection\c@lon\hskip 0.5em%
+ \uppercase{#1}\par
+ \else
+ \noindent\@nohdbrk\thesection\hskip 1pc \uppercase{#1}\par
+ \fi
+ \global\SecSec=\z@
+ \egroup
+ \nobreak
+ \vskip\half
+ \nobreak
+ \@noafterindent
+ \LastMac=\Hae\relax
+}
+
+\def\@ssection#1{% main section heading (\section*{....})
+ \if@nobreak
+ \everypar{}%
+ \ifnum\LastMac=\Hae \addvspace{\half}\fi
+ \else
+ \addpen{\gds@cbrk}%
+ \addvspace{\two}%
+ \fi
+ \bgroup
+ \ninepoint\bf
+ \Raggedright
+% \ifappendix
+% \global\Eqnno=\z@ \global\SubEqnno=\z@\relax % mh in apps dont reset
+% \noindent\@nohdbrk APPENDIX:\hskip 0.5em%
+% \uppercase{#1}\par
+% \else
+ \noindent\@nohdbrk\uppercase{#1}\par
+% \fi
+ \egroup
+ \nobreak
+ \vskip\half
+ \nobreak
+ \@noafterindent
+ \LastMac=\Hae\relax
+}
+
+\def\subsection{\@ifstar{\@ssubsection}{\@subsection}}
+
+\def\@subsection#1{% heading B
+ \if@nobreak
+ \everypar{}%
+ \ifnum\LastMac=\Hae \addvspace{1pt plus 1pt minus .5pt}\fi
+ \else
+ \addpen{\gds@cbrk}%
+ \addvspace{\onehalf}%
+ \fi
+ \bgroup
+ \ninepoint\bf
+ \Raggedright
+ \global\advance\SecSec \@ne
+ \noindent\@nohdbrk\thesubsection \hskip 1pc\relax #1\par
+ \global\SecSecSec=\z@
+ \egroup
+ \nobreak
+ \vskip\half
+ \nobreak
+ \@noafterindent
+ \LastMac=\Hbe\relax
+}
+
+\def\@ssubsection#1{% heading B*
+ \if@nobreak
+ \everypar{}%
+ \ifnum\LastMac=\Hae \addvspace{1pt plus 1pt minus .5pt}\fi
+ \else
+ \addpen{\gds@cbrk}%
+ \addvspace{\onehalf}%
+ \fi
+ \bgroup
+ \ninepoint\bf
+ \Raggedright
+ \noindent\@nohdbrk #1\par
+ \egroup
+ \nobreak
+ \vskip\half
+ \nobreak
+ \@noafterindent
+ \LastMac=\Hbe\relax
+}
+
+\def\subsubsection{\@ifstar{\@ssubsubsection}{\@subsubsection}}
+
+\def\@subsubsection#1{% heading C
+ \if@nobreak
+ \everypar{}%
+ \ifnum\LastMac=\Hbe \addvspace{1pt plus 1pt minus .5pt}\fi
+ \else
+ \addpen{\gds@cbrk}%
+ \addvspace{\onehalf}%
+ \fi
+ \bgroup
+ \ninepoint\it
+ \Raggedright
+ \global\advance\SecSecSec \@ne
+ \noindent\@nohdbrk\thesubsubsection \hskip 1pc\relax #1\par
+ \egroup
+ \nobreak
+ \vskip\half
+ \nobreak
+ \@noafterindent
+ \LastMac=\Hce\relax
+}
+
+\def\@ssubsubsection#1{% heading C*
+ \if@nobreak
+ \everypar{}%
+ \ifnum\LastMac=\Hbe \addvspace{1pt plus 1pt minus .5pt}\fi
+ \else
+ \addpen{\gds@cbrk}%
+ \addvspace{\onehalf}%
+ \fi
+ \bgroup
+ \ninepoint\it
+ \Raggedright
+ \noindent\@nohdbrk #1\par
+ \egroup
+ \nobreak
+ \vskip\half
+ \nobreak
+ \@noafterindent
+ \LastMac=\Hce\relax
+}
+
+\def\paragraph#1{% heading D
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpen{\gds@cbrk}%
+ \addvspace{\one}%
+ \fi%
+ \bgroup%
+ \ninepoint\it
+ \noindent #1\ \nobreak%
+ \egroup
+ \LastMac=\Hde\relax
+ \ignorespaces
+}
+
+
+% Appendix
+
+\newif\ifappendix
+
+\def\appendix{%
+ \global\appendixtrue
+ \def\thesection{\Alph{Sec}}%
+ \def\thesubsection{\thesection\arabic{SecSec}}%
+ \def\theeq{\thesection\arabic{Eqnno}}%
+ \Sec=\z@ \SecSec=\z@ \SecSecSec=\z@ \Eqnno=\z@ \SubEqnno=\z@\relax
+}
+
+
+% Text
+
+\let\tx=\relax % provided for backward compatibility
+
+
+% Lists
+
+\def\beginlist{%
+ \par\if@nobreak \else\addvspace{\half}\fi%
+ \bgroup%
+ \ninepoint
+ \let\item=\list@item%
+}
+
+\def\list@item{%
+ \par\noindent\hskip 1em\relax%
+ \ignorespaces%
+}
+
+\def\endlist{\par\egroup\addvspace{\half}\@doendpe}
+
+
+% References
+
+\def\beginrefs{%
+ \par
+ \bgroup
+ \eightpoint
+ \Fullout
+ \let\bibitem=\bib@item
+}
+
+\def\bib@item{%
+ \par\parindent=1.5em\Hang{1.5em}{1}%
+ \everypar={\Hang{1.5em}{1}\ignorespaces}%
+ \noindent\ignorespaces
+}
+
+\def\endrefs{\par\egroup\@doendpe}
+
+
+% Page heads
+
+\newtoks\CatchLine
+
+\def\@journal{Mon.\ Not.\ R.\ Astron.\ Soc.\ } % The journal title string
+\def\@pubyear{1994} % Assign a default publication year
+\def\@pagerange{000--000} % Assign a default page-range
+\def\@volume{000} % Assign a default volume number
+\def\@microfiche{} %
+
+\def\pubyear#1{\gdef\@pubyear{#1}\@makecatchline}
+\def\pagerange#1{\gdef\@pagerange{#1}\@makecatchline}
+\def\volume#1{\gdef\@volume{#1}\@makecatchline}
+\def\microfiche#1{\gdef\@microfiche{and Microfiche\ #1}\@makecatchline}
+
+\def\@makecatchline{%
+ \global\CatchLine{%
+ {\rm \@journal {\bf \@volume},\ \@pagerange\ (\@pubyear)\ \@microfiche}}%
+}
+
+\@makecatchline % Assign a catchline, using the above defaults
+
+\newtoks\LeftHeader
+\def\shortauthor#1{% left page head
+ \global\LeftHeader{#1}%
+}
+
+\newtoks\RightHeader
+\def\shorttitle#1{% right page head
+ \global\RightHeader{#1}%
+}
+
+\def\PageHead{% recto/verso running heads
+ \begingroup
+ \ifsp@page
+ \csname ps@\sp@type\endcsname
+ \fi
+ \ifodd\pageno
+ \let\the@head=\@oddhead
+ \else
+ \let\the@head=\@evenhead
+ \fi
+ \vbox to \z@{\vskip-22.5\p@%
+ \hbox to \PageWidth{\vbox to8.5\p@{}%
+ \the@head
+ }%
+ \vss}%
+ \endgroup
+ \nointerlineskip
+}
+
+\gdef\PageFoot{%
+ \nointerlineskip%
+ \begingroup
+ \ifsp@page
+ \csname ps@\sp@type\endcsname
+ \global\sp@pagefalse
+ \fi
+ \vbox to 22pt{\vfil%
+ \hbox to \PageWidth{%
+ \eightpoint\strut\noindent
+ \ifodd\pageno
+ \@oddfoot
+ \else
+ \@evenfoot
+ \fi
+ }%
+ }%
+ \endgroup
+}
+
+\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%
+}
+
+
+\def\authorcomment#1{%
+ \gdef\PageFoot{%
+ \nointerlineskip%
+ \vbox to 20pt{\vfil%
+ \hbox to \PageWidth{\elevenpoint\noindent \hfil #1 \hfil}}%
+ }%
+}
+
+
+% Plate pages
+
+\newif\ifplate@page
+\newbox\plt@box
+
+\def\beginplatepage{%
+ \let\plate=\plate@head
+ \let\caption=\fig@caption
+ \global\setbox\plt@box=\vbox\bgroup
+ \TEMPDIMEN=\PageWidth % For \fig@caption test
+ \hsize=\PageWidth\relax
+}
+
+\def\endplatepage{\par\egroup\global\plate@pagetrue}
+\def\plate@head#1{\gdef\plt@cap{#1}}
+
+% Letters option
+
+\def\letters{%
+ \gdef\folio{\ifnum\pageno<\z@ L\romannumeral-\pageno
+ \else L\number\pageno \fi}%
+}
+
+
+% Math setup
+
+% The standard math indentation
+\newdimen\mathindent
+
+\global\mathindent=\z@
+\global\everydisplay{\global\@dspwd=\displaywidth\displaysetup}
+
+% New versions of \displaylines, \eqalign, \eqalignno for
+% when non-centered math is in use.
+
+\def\@displaylines#1{% (for non-centered math)
+ {}$\displ@y\hbox{\vbox{\halign{$\@lign\hfil\displaystyle##\hfil$\crcr
+ #1\crcr}}}${}%
+}
+
+\def\@eqalign#1{\null\vcenter{\openup\jot\m@th% (for non-centered math)
+ \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
+ \crcr#1\crcr}}%
+}
+
+\def\@eqalignno#1{% (for non-centered math)
+ \global\advance\@dspwd by -\mathindent%
+ {}$\displ@y\hbox{\vbox{\halign to\@dspwd%
+ {\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
+ &\llap{$\@lign##$}\tabskip\z@skip\crcr
+ #1\crcr}}}${}%
+}
+
+% When equations are flushleft ensure, that \displaylines,
+% \eqalign, \eqalignno and \leqalignno point to the new versions of
+% the macros. Also make \leqalignno act like \eqalignno, otherwise the
+% equation text would `crash' into the equation number.
+
+\global\let\displaylines=\@displaylines
+\global\let\eqalign=\@eqalign
+\global\let\eqalignno=\@eqalignno
+\global\let\leqalignno=\@eqalignno
+
+\newdimen\@dspwd \@dspwd=\z@
+\newif\if@eqno
+\newif\if@leqno
+\newtoks\@eqn
+\newtoks\@eq
+
+\def\displaysetup#1$${\displaytest#1\eqno\eqno\displaytest}
+
+\def\displaytest#1\eqno#2\eqno#3\displaytest{%
+ \if!#3!\ldisplaytest#1\leqno\leqno\ldisplaytest
+ \else\@eqnotrue\@leqnofalse\@eqn={#2}\@eq={#1}\fi
+ \generaldisplay$$}
+
+\def\ldisplaytest#1\leqno#2\leqno#3\ldisplaytest{%
+\@eq={#1}%
+ \if!#3!\@eqnofalse\else\@eqnotrue\@leqnotrue
+ \@eqn={#2}\fi}
+
+\def\generaldisplay{%
+ \if@eqno
+ \if@leqno
+ \hbox to \displaywidth{\noindent
+ \rlap{$\displaystyle\the\@eqn$}%
+ \hskip\mathindent$\displaystyle\the\@eq$\hfil}%
+ \else
+ \hbox to \displaywidth{\noindent
+ \hskip\mathindent
+ $\displaystyle\the\@eq$\hfil$\displaystyle\the\@eqn$}%
+ \fi
+ \else
+ \hbox to \displaywidth{\noindent
+ \hskip\mathindent$\displaystyle\the\@eq$\hfil}%
+ \fi
+}
+
+
+% Finishing notice
+
+\def\@notice{%
+ \par\Two%
+ \noindent{\b@ls{11pt}\ninerm This paper has been produced using the
+ Royal Astronomical Society/Blackwell Science \TeX\ macros.\par}%
+}
+
+% redefine \bye to output our identification notice :
+\outer\def\bye{\@notice\par\vfill\supereject\end}
+
+
+% define a sign on :
+
+\def\start@mess{%
+ Monthly notices of the RAS journal style (\@typeface)\space
+ v\@version,\space \@verdate.%
+}
+
+\everyjob{\Warn{\start@mess}}
+
+
+% Two-column macros
+
+%--------------------------------------------------------%
+% INITIALISATION %
+%--------------------------------------------------------%
+
+\newif\if@debug \@debugfalse % when false, only warnings displayed
+
+\def\Print#1{\if@debug\immediate\write16{#1}\else \fi}
+\def\Warn#1{\immediate\write16{#1}}
+\def\wlog#1{}
+
+\newcount\Iteration % temporary loop counter
+
+\def\Single{0} \def\Double{1} % ItemSPAN's
+\def\Figure{0} \def\Table{1} % ItemTYPE's
+
+\def\InStack{0} % ItemSTATUS
+\def\InZoneA{1}
+\def\InZoneB{2}
+\def\InZoneC{3}
+
+\newcount\TEMPCOUNT % temporary count register
+\newdimen\TEMPDIMEN % temporary dimen register
+\newbox\TEMPBOX % temporary box register
+\newbox\VOIDBOX % a box which is permenately void
+
+\newcount\LengthOfStack % number of items currently in stack
+\newcount\MaxItems % maximum number of items allowed in stack
+\newcount\StackPointer
+\newcount\Point % used in calculation for generating the
+ % physical address of an item in the stack.
+\newcount\NextFigure % number of next figure to be output
+\newcount\NextTable % number of next table to be output
+\newcount\NextItem % Next item to consider by order in stack
+
+\newcount\StatusStack % set to point to top of STATUS stack
+\newcount\NumStack % set to point to top of NUMBER stack
+\newcount\TypeStack % set to point to top of TYPE stack
+\newcount\SpanStack % set to point to top of SPAN stack
+\newcount\BoxStack % set to point to top of BOX stack
+
+\newcount\ItemSTATUS % status of present item
+\newcount\ItemNUMBER % number of present item
+\newcount\ItemTYPE % type of present item
+\newcount\ItemSPAN % span of present item
+\newbox\ItemBOX % box of present item
+\newdimen\ItemSIZE % size of present item
+ % (calculated by GetItemBOX)
+
+\newdimen\PageHeight % vertical measure of full page
+\newdimen\TextLeading % distance between baselines of body text
+\newdimen\Feathering % amount of interline stretch
+\newcount\LinesPerPage % height of page in text lines
+\newdimen\ColumnWidth % width of 1 column of text
+\newdimen\ColumnGap % size of gap between columns
+\newdimen\PageWidth % = \ColumnWidth * 2 + \ColumnGap
+\newdimen\BodgeHeight % Bodge to align figures and tables with text
+\newcount\Leading % Set to same as \TextLeading above
+
+\newdimen\ZoneBSize % size of items in ZoneB
+\newdimen\TextSize % size of text in ZoneB
+\newbox\ZoneABOX % contains Zone A material
+\newbox\ZoneBBOX % contains Zone B material
+\newbox\ZoneCBOX % contains Zone C material
+
+\newif\ifFirstSingleItem
+\newif\ifFirstZoneA
+\newif\ifMakePageInComplete
+\newif\ifMoreFigures \MoreFiguresfalse % set true in join stack
+\newif\ifMoreTables \MoreTablesfalse % set true in join stack
+
+\newif\ifFigInZoneB % used to determine in which zone an item
+\newif\ifFigInZoneC % will be placed based on what is in other
+\newif\ifTabInZoneB % zones already for a given page.
+\newif\ifTabInZoneC
+
+\newif\ifZoneAFullPage
+
+\newbox\MidBOX % = LeftBOX+gap+RightBOX
+\newbox\LeftBOX
+\newbox\RightBOX
+\newbox\PageBOX % complete made-up page
+
+\newif\ifLeftCOL % flags first pass through output routine
+\LeftCOLtrue
+
+\newdimen\ZoneBAdjust
+
+\newcount\ItemFits
+\def\Yes{1}
+\def\No{2}
+
+\def\LineAdjust#1{\global\ZoneBAdjust=#1\TextLeading\relax}
+
+
+% Setup file.
+
+\MaxItems=15
+\NextFigure=\z@ % used for article opening
+\NextTable=\@ne
+
+\BodgeHeight=6pt
+\TextLeading=11pt % baselineskip of body text
+\Leading=11
+\Feathering=\z@ % amount of interline stretch
+\LinesPerPage=61 % number of text lines per full page -1
+\topskip=\TextLeading
+\ColumnWidth=20pc % width of text columns
+\ColumnGap=2pc % gap between columns
+
+\newskip\ItemSepamount % space between floats
+\ItemSepamount=\TextLeading plus \TextLeading minus 4pt
+
+\parskip=\z@ plus .1pt
+\parindent=18pt
+\widowpenalty=\z@
+\clubpenalty=10000
+\tolerance=1500
+\hbadness=1500
+\abovedisplayskip=6pt plus 2pt minus 1pt
+\belowdisplayskip=6pt plus 2pt minus 1pt
+\abovedisplayshortskip=6pt plus 2pt minus 1pt
+\belowdisplayshortskip=6pt plus 2pt minus 1pt
+
+\frenchspacing
+
+\ninepoint % start main text size
+
+\PageHeight=682pt
+\PageWidth=2\ColumnWidth
+\advance\PageWidth by \ColumnGap
+
+\pagestyle{headings}
+
+
+%--------------------------------------------------------%
+% STACKS %
+%--------------------------------------------------------%
+
+% THE ITEM STACK
+% The item stack contains contains figures and tables
+% in the order in which they appear in the article source
+% code.
+
+% allocate stack space
+
+\newcount\DUMMY \StatusStack=\allocationnumber
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+
+\newcount\DUMMY \NumStack=\allocationnumber
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+
+\newcount\DUMMY \TypeStack=\allocationnumber
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+
+\newcount\DUMMY \SpanStack=\allocationnumber
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+\newcount\DUMMY \newcount\DUMMY \newcount\DUMMY
+
+\newbox\DUMMY \BoxStack=\allocationnumber
+\newbox\DUMMY \newbox\DUMMY \newbox\DUMMY
+\newbox\DUMMY \newbox\DUMMY \newbox\DUMMY
+\newbox\DUMMY \newbox\DUMMY \newbox\DUMMY
+\newbox\DUMMY \newbox\DUMMY \newbox\DUMMY
+\newbox\DUMMY \newbox\DUMMY \newbox\DUMMY
+
+\def\wlog{\immediate\write\m@ne}
+
+% \GetItemSTATUS, \GetItemNUMBER, \GetItemTYPE, \GetItemSPAN,
+% \GetItemBox
+% are used to get details of a particular item from the item
+% stack. The argument to each of these is the items position
+% in the stack (usually \StackPointer)...not the items number.
+
+\def\GetItemAll#1{%
+ \GetItemSTATUS{#1}
+ \GetItemNUMBER{#1}
+ \GetItemTYPE{#1}
+ \GetItemSPAN{#1}
+ \GetItemBOX{#1}
+}
+
+% Note: \LeaveStack uses this routine. Do not destroy \Point
+\def\GetItemSTATUS#1{%
+ \Point=\StatusStack
+ \advance\Point by #1
+ \global\ItemSTATUS=\count\Point
+}
+
+% Note: \LeaveStack uses this routine. Do not destroy \Point
+\def\GetItemNUMBER#1{%
+ \Point=\NumStack
+ \advance\Point by #1
+ \global\ItemNUMBER=\count\Point
+}
+
+% Note: \LeaveStack uses this routine. Do not destroy \Point
+\def\GetItemTYPE#1{%
+ \Point=\TypeStack
+ \advance\Point by #1
+ \global\ItemTYPE=\count\Point
+}
+
+% Note: \LeaveStack uses this routine. Do not destroy \Point
+\def\GetItemSPAN#1{%
+ \Point\SpanStack
+ \advance\Point by #1
+ \global\ItemSPAN=\count\Point
+}
+
+% Note: \LeaveStack uses this routine. Do not destroy \Point
+\def\GetItemBOX#1{%
+ \Point=\BoxStack
+ \advance\Point by #1
+ \global\setbox\ItemBOX=\vbox{\copy\Point}
+ \global\ItemSIZE=\ht\ItemBOX
+ \global\advance\ItemSIZE by \dp\ItemBOX
+ \TEMPCOUNT=\ItemSIZE
+ \divide\TEMPCOUNT by \Leading
+ \divide\TEMPCOUNT by 65536
+ \advance\TEMPCOUNT \@ne
+ \ItemSIZE=\TEMPCOUNT pt
+ \global\multiply\ItemSIZE by \Leading
+}
+
+% item joins stack
+
+\def\JoinStack{%
+ \ifnum\LengthOfStack=\MaxItems % stack is full of items
+ \Warn{WARNING: Stack is full...some items will be lost!}
+ \else
+ \Point=\StatusStack
+ \advance\Point by \LengthOfStack
+ \global\count\Point=\ItemSTATUS
+ \Point=\NumStack
+ \advance\Point by \LengthOfStack
+ \global\count\Point=\ItemNUMBER
+ \Point=\TypeStack
+ \advance\Point by \LengthOfStack
+ \global\count\Point=\ItemTYPE
+ \Point\SpanStack
+ \advance\Point by \LengthOfStack
+ \global\count\Point=\ItemSPAN
+ \Point=\BoxStack
+ \advance\Point by \LengthOfStack
+ \global\setbox\Point=\vbox{\copy\ItemBOX}
+ \global\advance\LengthOfStack \@ne
+ \ifnum\ItemTYPE=\Figure % used in \MakePage
+ \global\MoreFigurestrue
+ \else
+ \global\MoreTablestrue
+ \fi
+ \fi
+}
+
+% item leaves stack
+% #1=physical position of the item to be removed
+
+\def\LeaveStack#1{%
+ {\Iteration=#1
+ \loop
+ \ifnum\Iteration<\LengthOfStack
+ \advance\Iteration \@ne
+ \GetItemSTATUS{\Iteration}
+ \advance\Point by \m@ne
+ \global\count\Point=\ItemSTATUS
+ \GetItemNUMBER{\Iteration}
+ \advance\Point by \m@ne
+ \global\count\Point=\ItemNUMBER
+ \GetItemTYPE{\Iteration}
+ \advance\Point by \m@ne
+ \global\count\Point=\ItemTYPE
+ \GetItemSPAN{\Iteration}
+ \advance\Point by \m@ne
+ \global\count\Point=\ItemSPAN
+ \GetItemBOX{\Iteration}
+ \advance\Point by \m@ne
+ \global\setbox\Point=\vbox{\copy\ItemBOX}
+ \repeat}
+ \global\advance\LengthOfStack by \m@ne
+}
+
+% clean stack
+% This routine scans through the stack and removes anything
+% that does not have STATUS=\InStack.
+
+\newif\ifStackNotClean
+
+\def\CleanStack{%
+ \StackNotCleantrue
+ {\Iteration=\z@
+ \loop
+ \ifStackNotClean
+ \GetItemSTATUS{\Iteration}
+ \ifnum\ItemSTATUS=\InStack
+ \advance\Iteration \@ne
+ \else
+ \LeaveStack{\Iteration}
+ \fi
+ \ifnum\LengthOfStack<\Iteration
+ \StackNotCleanfalse
+ \fi
+ \repeat}
+}
+
+% Find item.
+% This macro searches from the top to the bottom of the
+% stack for an item of a specified type and number.
+% #1=type, #2=number
+% If the specified item is found, then \StackPointer is set
+% to point to it, else \StackPointer=-1.
+% This routine is used to find the next figure or table
+% by number.
+
+\def\FindItem#1#2{%
+ \global\StackPointer=\m@ne % assume item isn't in stack for now
+ {\Iteration=\z@
+ \loop
+ \ifnum\Iteration<\LengthOfStack
+ \GetItemSTATUS{\Iteration}
+ \ifnum\ItemSTATUS=\InStack
+ \GetItemTYPE{\Iteration}
+ \ifnum\ItemTYPE=#1
+ \GetItemNUMBER{\Iteration}
+ \ifnum\ItemNUMBER=#2
+ \global\StackPointer=\Iteration
+ \Iteration=\LengthOfStack % terminate loop
+ \fi
+ \fi
+ \fi
+ \advance\Iteration \@ne
+ \repeat}
+}
+
+% Find next type
+% This macro searches from the top to the bottom of the stack
+% looking for the first item which has STATUS=\InStack.
+% If it is a figure then a figure is what will be considered
+% next by \MakePage else table.
+
+\def\FindNext{%
+ \global\StackPointer=\m@ne % assume stack is empty for now
+ {\Iteration=\z@
+ \loop
+ \ifnum\Iteration<\LengthOfStack
+ \GetItemSTATUS{\Iteration}
+ \ifnum\ItemSTATUS=\InStack
+ \GetItemTYPE{\Iteration}
+ \ifnum\ItemTYPE=\Figure
+ \ifMoreFigures
+ \global\NextItem=\Figure
+ \global\StackPointer=\Iteration
+ \Iteration=\LengthOfStack % terminate loop
+ \fi
+ \fi
+ \ifnum\ItemTYPE=\Table
+ \ifMoreTables
+ \global\NextItem=\Table
+ \global\StackPointer=\Iteration
+ \Iteration=\LengthOfStack % terminate loop
+ \fi
+ \fi
+ \fi
+ \advance\Iteration \@ne
+ \repeat}
+}
+
+% Change status
+% Macro to change the status of a specified item in stack.
+% #1=item, #2=new status
+
+\def\ChangeStatus#1#2{%
+ \Point=\StatusStack
+ \advance\Point by #1
+ \global\count\Point=#2
+}
+
+
+%--------------------------------------------------------%
+% MAKEPAGE %
+%--------------------------------------------------------%
+
+% This macro is called at the start of every new page
+% including the first. It scans through the stack picking
+% out items which should be placed on this page. It then
+% leaves space for the items to be placed later. The routine
+% terminates when either there is no room on the page to
+% fit the next figure or table, or there are no more items
+% in the stack.
+
+\def\Zone{\InZoneA}
+
+\ZoneBAdjust=\z@
+
+\def\MakePage{% allocate space on this page for stack items
+ \global\ZoneBSize=\PageHeight
+ \global\TextSize=\ZoneBSize
+ \global\ZoneAFullPagefalse
+ \global\topskip=\TextLeading
+ \MakePageInCompletetrue
+ \MoreFigurestrue
+ \MoreTablestrue
+ \FigInZoneBfalse
+ \FigInZoneCfalse
+ \TabInZoneBfalse
+ \TabInZoneCfalse
+ \global\FirstSingleItemtrue
+ \global\FirstZoneAtrue
+ \global\setbox\ZoneABOX=\box\VOIDBOX
+ \global\setbox\ZoneBBOX=\box\VOIDBOX
+ \global\setbox\ZoneCBOX=\box\VOIDBOX
+ \loop
+ \ifMakePageInComplete
+ \FindNext
+ \ifnum\StackPointer=\m@ne
+ \NextItem=\m@ne
+ \MoreFiguresfalse
+ \MoreTablesfalse
+ \fi
+ \ifnum\NextItem=\Figure
+ \FindItem{\Figure}{\NextFigure}
+ \ifnum\StackPointer=\m@ne \global\MoreFiguresfalse
+ \else
+ \GetItemSPAN{\StackPointer}
+ \ifnum\ItemSPAN=\Single \def\Zone{\InZoneB}\relax
+ \ifFigInZoneC \global\MoreFiguresfalse\fi
+ \else
+ \def\Zone{\InZoneA}
+ \ifFigInZoneB \def\Zone{\InZoneC}\fi
+ \fi
+ \fi
+ \ifMoreFigures\Print{}\FigureItems\fi
+ \fi
+\ifnum\NextItem=\Table
+ \FindItem{\Table}{\NextTable}
+ \ifnum\StackPointer=\m@ne \global\MoreTablesfalse
+ \else
+ \GetItemSPAN{\StackPointer}
+ \ifnum\ItemSPAN=\Single\relax
+ \ifTabInZoneC \global\MoreTablesfalse\fi
+ \else
+ \def\Zone{\InZoneA}
+ \ifTabInZoneB \def\Zone{\InZoneC}\fi
+ \fi
+ \fi
+ \ifMoreTables\Print{}\TableItems\fi
+ \fi
+ \MakePageInCompletefalse % assume page is complete
+ \ifMoreFigures\MakePageInCompletetrue\fi
+ \ifMoreTables\MakePageInCompletetrue\fi
+ \repeat
+%\Print{TextSize=\the\TextSize}
+%\Print{ZoneBSize=\the\ZoneBSize}
+ \ifZoneAFullPage
+ \global\TextSize=\z@
+ \global\ZoneBSize=\z@
+ \global\vsize=\z@\relax
+ \global\topskip=\z@\relax
+ \vbox to \z@{\vss}
+ \eject
+ \else
+ \global\advance\ZoneBSize by -\ZoneBAdjust
+ \global\vsize=\ZoneBSize
+ \global\hsize=\ColumnWidth
+ \global\ZoneBAdjust=\z@
+ \ifdim\TextSize<23pt
+ \Warn{}
+ \Warn{* Making column fall short: TextSize=\the\TextSize *}
+ \vskip-\lastskip\eject\fi
+ \fi
+}
+
+\def\MakeRightCol{% allocate space for the right column of text
+ \global\TextSize=\ZoneBSize
+ \MakePageInCompletetrue
+ \MoreFigurestrue
+ \MoreTablestrue
+ \global\FirstSingleItemtrue
+ \global\setbox\ZoneBBOX=\box\VOIDBOX
+ \def\Zone{\InZoneB}
+ \loop
+ \ifMakePageInComplete
+ \FindNext
+ \ifnum\StackPointer=\m@ne
+ \NextItem=\m@ne
+ \MoreFiguresfalse
+ \MoreTablesfalse
+ \fi
+ \ifnum\NextItem=\Figure
+ \FindItem{\Figure}{\NextFigure}
+ \ifnum\StackPointer=\m@ne \MoreFiguresfalse
+ \else
+ \GetItemSPAN{\StackPointer}
+ \ifnum\ItemSPAN=\Double\relax
+ \MoreFiguresfalse\fi
+ \fi
+ \ifMoreFigures\Print{}\FigureItems\fi
+ \fi
+ \ifnum\NextItem=\Table
+ \FindItem{\Table}{\NextTable}
+ \ifnum\StackPointer=\m@ne \MoreTablesfalse
+ \else
+ \GetItemSPAN{\StackPointer}
+ \ifnum\ItemSPAN=\Double\relax
+ \MoreTablesfalse\fi
+ \fi
+ \ifMoreTables\Print{}\TableItems\fi
+ \fi
+ \MakePageInCompletefalse % assume page is complete
+ \ifMoreFigures\MakePageInCompletetrue\fi
+ \ifMoreTables\MakePageInCompletetrue\fi
+ \repeat
+ \ifZoneAFullPage
+ \global\TextSize=\z@
+ \global\ZoneBSize=\z@
+ \global\vsize=\z@\relax
+ \global\topskip=\z@\relax
+ \vbox to \z@{\vss}
+ \eject
+ \else
+ \global\vsize=\ZoneBSize
+ \global\hsize=\ColumnWidth
+ \ifdim\TextSize<23pt
+ \Warn{}
+ \Warn{* Making column fall short: TextSize=\the\TextSize *}
+ \vskip-\lastskip\eject\fi
+\fi
+}
+
+\def\FigureItems{% Stack pointer points to next figure
+ \Print{Considering...}
+ \ShowItem{\StackPointer}
+ \GetItemBOX{\StackPointer} % auto calculates ItemSIZE
+ \GetItemSPAN{\StackPointer}
+ \CheckFitInZone % check to see if item fits
+ \ifnum\ItemFits=\Yes
+ \ifnum\ItemSPAN=\Single
+ \ChangeStatus{\StackPointer}{\InZoneB} % flag to be output
+ \global\FigInZoneBtrue
+ \ifFirstSingleItem
+ \hbox{}\vskip-\BodgeHeight
+ \global\advance\ItemSIZE by \TextLeading
+ \fi
+ \unvbox\ItemBOX\ItemSep
+ \global\FirstSingleItemfalse
+ \global\advance\TextSize by -\ItemSIZE% allocate space
+ \global\advance\TextSize by -\TextLeading
+ \else
+ \ifFirstZoneA
+ \global\advance\ItemSIZE by \TextLeading
+ \global\FirstZoneAfalse\fi
+ \global\advance\TextSize by -\ItemSIZE
+ \global\advance\TextSize by -\TextLeading
+ \global\advance\ZoneBSize by -\ItemSIZE
+ \global\advance\ZoneBSize by -\TextLeading
+ \ifFigInZoneB\relax
+ \else
+ \ifdim\TextSize<3\TextLeading
+ \global\ZoneAFullPagetrue
+ \fi
+ \fi
+ \ChangeStatus{\StackPointer}{\Zone}
+ \ifnum\Zone=\InZoneC \global\FigInZoneCtrue\fi
+ \fi
+ \Print{TextSize=\the\TextSize}
+ \Print{ZoneBSize=\the\ZoneBSize}
+ \global\advance\NextFigure \@ne
+ \Print{This figure has been placed.}
+ \else
+ \Print{No space available for this figure...holding over.}
+ \Print{}
+ \global\MoreFiguresfalse
+ \fi
+}
+
+\def\TableItems{% Stack pointer points to next table
+ \Print{Considering...}
+ \ShowItem{\StackPointer}
+ \GetItemBOX{\StackPointer} % auto calculates ItemSIZE
+ \GetItemSPAN{\StackPointer}
+ \CheckFitInZone % check to see of item fits in Zone
+ \ifnum\ItemFits=\Yes
+ \ifnum\ItemSPAN=\Single
+ \ChangeStatus{\StackPointer}{\InZoneB}
+ \global\TabInZoneBtrue
+ \ifFirstSingleItem
+ \hbox{}\vskip-\BodgeHeight
+ \global\advance\ItemSIZE by \TextLeading
+ \fi
+ \unvbox\ItemBOX\ItemSep
+ \global\FirstSingleItemfalse
+ \global\advance\TextSize by -\ItemSIZE
+ \global\advance\TextSize by -\TextLeading
+ \else
+ \ifFirstZoneA
+ \global\advance\ItemSIZE by \TextLeading
+ \global\FirstZoneAfalse\fi
+ \global\advance\TextSize by -\ItemSIZE
+ \global\advance\TextSize by -\TextLeading
+ \global\advance\ZoneBSize by -\ItemSIZE
+ \global\advance\ZoneBSize by -\TextLeading
+ \ifFigInZoneB\relax
+ \else
+ \ifdim\TextSize<3\TextLeading
+ \global\ZoneAFullPagetrue
+ \fi
+ \fi
+ \ChangeStatus{\StackPointer}{\Zone}
+ \ifnum\Zone=\InZoneC \global\TabInZoneCtrue\fi
+ \fi
+% \Print{TextSize=\the\TextSize}
+% \Print{ZoneBSize=\the\ZoneBSize}
+ \global\advance\NextTable \@ne
+ \Print{This table has been placed.}
+ \else
+ \Print{No space available for this table...holding over.}
+ \Print{}
+ \global\MoreTablesfalse
+ \fi
+}
+
+% These macros check to see if an item of ItemSIZE will
+% fit in a particular zone. If it will, then ItemFits
+% will be set true else false.
+
+\def\CheckFitInZone{%
+{\advance\TextSize by -\ItemSIZE
+ \advance\TextSize by -\TextLeading
+ \ifFirstSingleItem
+ \advance\TextSize by \TextLeading
+ \fi
+ \ifnum\Zone=\InZoneA\relax
+ \else \advance\TextSize by -\ZoneBAdjust
+ \fi
+ \ifdim\TextSize<3\TextLeading \global\ItemFits=\No
+ \else \global\ItemFits=\Yes\fi}
+}
+
+\def\BeginOpening{%
+ % start 9pt a.s.a.p. so that \New.. commands get a chance to init.
+ \ninepoint
+ \thispagestyle{titlepage}%
+ \global\setbox\ItemBOX=\vbox\bgroup%
+ \hsize=\PageWidth%
+ \hrule height \z@
+ \ifsinglecol\vskip 6pt\fi % Bodge, to get same pos. as two-column!
+}
+
+\let\begintopmatter=\BeginOpening % alias for \BeginOpening
+
+\def\EndOpening{%
+ \One% 1 line fixed space below opening
+ \egroup
+ \ifsinglecol
+ \box\ItemBOX%
+ \vskip\TextLeading plus 2\TextLeading% var. space: min 1, max 3 lines
+ \@noafterindent
+ \else
+ \ItemNUMBER=\z@%
+ \ItemTYPE=\Figure
+ \ItemSPAN=\Double
+ \ItemSTATUS=\InStack
+ \JoinStack
+ \fi
+}
+
+
+% Figures
+
+\newif\if@here \@herefalse
+
+\def\no@float{\global\@heretrue}
+\let\nofloat=\relax % only enabled for one column
+
+\def\beginfigure{%
+ \@ifstar{\global\@dfloattrue \@bfigure}{\global\@dfloatfalse \@bfigure}%
+}
+
+\def\@bfigure#1{%
+ \par
+ \if@dfloat
+ \ItemSPAN=\Double
+ \TEMPDIMEN=\PageWidth
+ \else
+ \ItemSPAN=\Single
+ \TEMPDIMEN=\ColumnWidth
+ \fi
+ \ifsinglecol
+ \TEMPDIMEN=\PageWidth
+ \else
+ \ItemSTATUS=\InStack
+ \ItemNUMBER=#1%
+ \ItemTYPE=\Figure
+ \fi
+ \bgroup
+ \hsize=\TEMPDIMEN
+ \global\setbox\ItemBOX=\vbox\bgroup
+ \eightpoint\nostb@ls{10pt}%
+ \let\caption=\fig@caption
+ \ifsinglecol \let\nofloat=\no@float\fi
+}
+
+\def\fig@caption#1{%
+ \vskip 5.5pt plus 6pt%
+ \bgroup % grouping and size change needed for plate pages
+ \eightpoint\nostb@ls{10pt}%
+ \setbox\TEMPBOX=\hbox{#1}%
+ \ifdim\wd\TEMPBOX>\TEMPDIMEN
+ \noindent \unhbox\TEMPBOX\par
+ \else
+ \hbox to \hsize{\hfil\unhbox\TEMPBOX\hfil}%
+ \fi
+ \egroup
+}
+
+\def\endfigure{%
+ \par\egroup % end \vbox
+ \egroup
+ \ifsinglecol
+ \if@here \midinsert\global\@herefalse\else \topinsert\fi
+ \unvbox\ItemBOX
+ \endinsert
+ \else
+ \JoinStack
+ \Print{Processing source for figure \the\ItemNUMBER}%
+ \fi
+}
+
+
+% Tables
+
+\newbox\tab@cap@box
+\def\tab@caption#1{\global\setbox\tab@cap@box=\hbox{#1\par}}
+
+\newtoks\tab@txt@toks
+\long\def\tab@txt#1{\global\tab@txt@toks={#1}\global\table@txttrue}
+
+\newif\iftable@txt \table@txtfalse
+\newif\if@dfloat \@dfloatfalse
+
+\def\begintable{%
+ \@ifstar{\global\@dfloattrue \@btable}{\global\@dfloatfalse \@btable}%
+}
+
+\def\@btable#1{%
+ \par
+ \if@dfloat
+ \ItemSPAN=\Double
+ \TEMPDIMEN=\PageWidth
+ \else
+ \ItemSPAN=\Single
+ \TEMPDIMEN=\ColumnWidth
+ \fi
+ \ifsinglecol
+ \TEMPDIMEN=\PageWidth
+ \else
+ \ItemSTATUS=\InStack
+ \ItemNUMBER=#1%
+ \ItemTYPE=\Table
+ \fi
+ \bgroup
+ \eightpoint\nostb@ls{10pt}%
+ \global\setbox\ItemBOX=\vbox\bgroup
+ \let\caption=\tab@caption
+ \let\tabletext=\tab@txt
+ \ifsinglecol \let\nofloat=\no@float\fi
+}
+
+\def\endtable{%
+ \par\egroup % end \vbox
+ \egroup
+ \setbox\TEMPBOX=\hbox to \TEMPDIMEN{%
+ \eightpoint\nostb@ls{10pt}%
+ \hss
+ \vbox{%
+ \hsize=\wd\ItemBOX
+ \ifvoid\tab@cap@box
+ \else
+ \noindent\unhbox\tab@cap@box
+ \vskip 5.5pt plus 6pt%
+ \fi
+ \box\ItemBOX
+ \iftable@txt
+ \vskip 10pt%
+ \noindent\the\tab@txt@toks
+ \global\table@txtfalse
+ \fi
+ }%
+ \hss
+ }%
+ \ifsinglecol
+ \if@here \midinsert\global\@herefalse\else \topinsert\fi
+ \box\TEMPBOX
+ \endinsert
+ \else
+ \global\setbox\ItemBOX=\box\TEMPBOX
+ \JoinStack
+ \Print{Processing source for table \the\ItemNUMBER}%
+ \fi
+}
+
+
+\def\UnloadZoneA{%
+\FirstZoneAtrue
+ \Iteration=\z@
+ \loop
+ \ifnum\Iteration<\LengthOfStack
+ \GetItemSTATUS{\Iteration}
+ \ifnum\ItemSTATUS=\InZoneA
+ \GetItemBOX{\Iteration}
+ \ifFirstZoneA \vbox to \BodgeHeight{\vfil}%
+ \FirstZoneAfalse\fi
+ \unvbox\ItemBOX\ItemSep
+ \LeaveStack{\Iteration}
+ \else
+ \advance\Iteration \@ne
+ \fi
+ \repeat
+}
+
+\def\UnloadZoneC{%
+\Iteration=\z@
+ \loop
+ \ifnum\Iteration<\LengthOfStack
+ \GetItemSTATUS{\Iteration}
+ \ifnum\ItemSTATUS=\InZoneC
+ \GetItemBOX{\Iteration}
+ \ItemSep\unvbox\ItemBOX
+ \LeaveStack{\Iteration}
+ \else
+ \advance\Iteration \@ne
+ \fi
+ \repeat
+}
+
+
+%--------------------------------------------------------%
+% DIAGNOSTICS %
+%--------------------------------------------------------%
+
+\def\ShowItem#1{% Show details of on item entry in stack
+ {\GetItemAll{#1}
+ \Print{\the#1:
+ {TYPE=\ifnum\ItemTYPE=\Figure Figure\else Table\fi}
+ {NUMBER=\the\ItemNUMBER}
+ {SPAN=\ifnum\ItemSPAN=\Single Single\else Double\fi}
+ {SIZE=\the\ItemSIZE}}}
+}
+
+\def\ShowStack{%
+ \Print{}
+ \Print{LengthOfStack = \the\LengthOfStack}
+ \ifnum\LengthOfStack=\z@ \Print{Stack is empty}\fi
+ \Iteration=\z@
+ \loop
+ \ifnum\Iteration<\LengthOfStack
+ \ShowItem{\Iteration}
+ \advance\Iteration \@ne
+ \repeat
+}
+
+\def\B#1#2{%
+\hbox{\vrule\kern-0.4pt\vbox to #2{%
+\hrule width #1\vfill\hrule}\kern-0.4pt\vrule}
+}
+
+
+%-------------------------------------------------------%
+% SINGLE COLUMN OUTPUT ROUTINE %
+%-------------------------------------------------------%
+
+\newif\ifsinglecol \singlecolfalse
+
+\def\onecolumn{%
+ \global\output={\singlecoloutput}%
+ \global\hsize=\PageWidth
+ \global\vsize=\PageHeight
+ \global\ColumnWidth=\hsize
+ \global\TextLeading=12pt
+ \global\Leading=12
+ \global\singlecoltrue
+ \global\let\onecolumn=\relax% stop them using \onecolumn again
+ \global\let\footnote=\sing@footnote% enable footnotes
+ \global\let\vfootnote=\sing@vfootnote
+ \ninepoint % reset \baselineskip after leading change
+ \message{(Single column)}%
+}
+
+\def\singlecoloutput{%
+ \shipout\vbox{\PageHead\vbox to \PageHeight{\pagebody\vss}\PageFoot}%
+ \advancepageno
+%
+ \ifplate@page
+ \shipout\vbox{%
+ \sp@pagetrue
+ \def\sp@type{plate}%
+ \global\plate@pagefalse
+ \PageHead\vbox to \PageHeight{\unvbox\plt@box\vfil}\PageFoot%
+ }%
+ \message{[plate]}%
+ \advancepageno
+ \fi
+%
+ \ifnum\outputpenalty>-\@MM \else\dosupereject\fi%
+}
+
+\def\ItemSep{\vskip\ItemSepamount\relax}
+
+\def\ItemSepbreak{\par\ifdim\lastskip<\ItemSepamount
+ \removelastskip\penalty-200\ItemSep\fi%
+}
+
+% Modify plain's \endinsert so that the mn's spacing is used
+
+\let\@@endinsert=\endinsert % save plain's original \endinsert
+
+\def\endinsert{\egroup % finish the \vbox
+ \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ \advance\dimen@12\p@
+ \advance\dimen@\pagetotal \advance\dimen@-\pageshrink
+ \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
+ \if@mid \ItemSep\box\z@\ItemSepbreak
+ \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\ItemSep\fi}\fi\endgroup%
+}
+
+
+% Footnotes (only enabled in single column)
+
+\def\gobbleone#1{}
+\def\gobbletwo#1#2{}
+\let\footnote=\gobbletwo % Gobble footnote's unless enabled by \onecolumn
+\let\vfootnote=\gobbleone
+
+\def\sing@footnote#1{\let\@sf\empty % parameter #2 (the text) is read later
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ \hbox{$^{\hbox{\eightpoint #1}}$}\@sf\sing@vfootnote{#1}%
+}
+
+\def\sing@vfootnote#1{\insert\footins\bgroup\eightpoint\b@ls{9pt}%
+ \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
+ \noindent $^{\scriptstyle\hbox{#1}}$\hskip 4pt%
+ \footstrut\futurelet\next\fo@t%
+}
+
+% Kill footnote rule
+\def\footnoterule{\kern-3\p@ \hrule height \z@ \kern 3\p@}
+
+\skip\footins=19.5pt plus 12pt minus 1pt
+\count\footins=1000
+\dimen\footins=\maxdimen
+
+% for footnotes in double column: use \note{$\star$}{footnote}
+\def\note#1#2{%
+ \let\@sf=\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ #1\insert\footins\bgroup
+ \eightpoint\b@ls{10pt}\rm
+ \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
+ \noindent\footstrut #1$\,$#2\strut\par
+ \egroup
+ \@sf\relax}
+
+% Landscape
+
+\def\landscape{%
+ \global\TEMPDIMEN=\PageWidth
+ \global\PageWidth=\PageHeight
+ \global\PageHeight=\TEMPDIMEN
+ \global\let\landscape=\relax% stop them using \landscape again.
+ \onecolumn
+ \message{(landscape)}%
+ \raggedbottom
+}
+
+
+%-------------------------------------------------------%
+% TWO COLUMN OUTPUT ROUTINE %
+%-------------------------------------------------------%
+
+% Very slight redefinition of the \output routine of mn.tex, to allow footnotes.
+\output{%
+ \ifLeftCOL
+ \global\setbox\LeftBOX=\vbox to \ZoneBSize{\box255\unvbox\ZoneBBOX
+ \ifvoid\footins\else
+ \vskip\skip\footins\unvbox\footins\fi
+ }%
+ \global\LeftCOLfalse
+ \MakeRightCol
+ \else
+ \setbox\RightBOX=\vbox to \ZoneBSize{\box255\unvbox\ZoneBBOX
+ \ifvoid\footins\else
+ \vskip\skip\footins\unvbox\footins\fi
+ }%
+ \setbox\MidBOX=\hbox{\box\LeftBOX\hskip\ColumnGap\box\RightBOX}%
+ \setbox\PageBOX=\vbox to \PageHeight{%
+ \UnloadZoneA\box\MidBOX\UnloadZoneC}%
+ \shipout\vbox{\PageHead\vbox to \PageHeight{\box\PageBOX\vss}\PageFoot}%
+ \advancepageno
+%
+ \ifplate@page
+ \shipout\vbox{%
+ \sp@pagetrue
+ \def\sp@type{plate}%
+ \global\plate@pagefalse
+ \PageHead\vbox to \PageHeight{\unvbox\plt@box\vfil}\PageFoot%
+ }%
+ \message{[plate]}%
+ \advancepageno
+ \fi
+%
+ \global\LeftCOLtrue
+ \CleanStack
+ \MakePage
+ \fi
+}
+
+
+
+% Startup message
+
+\Warn{\start@mess}
+
+\newif\ifCUPmtplainloaded % for use in documents
+\ifprod@font
+ \global\CUPmtplainloadedtrue
+\fi
+
+\def\mnmacrosloaded{} % so articles can see if a format file has been used.
+
+\catcode `\@=12 % @ signs are non-letters
+
+% \dump
+
+% end of mn.tex
+
diff --git a/macros/plain/contrib/mnras/mnguide.tex b/macros/plain/contrib/mnras/mnguide.tex
new file mode 100644
index 0000000000..1580262d4c
--- /dev/null
+++ b/macros/plain/contrib/mnras/mnguide.tex
@@ -0,0 +1,1998 @@
+% MNGUIDE.TEX
+%
+% Authors' guide for the plain TeX MN macros
+%
+% v1.6 --- released 18th September 1995 (A. Woollatt)
+% v1.5 --- released 25th August 1994 (M. Reed)
+% v1.4 --- released 22nd February 1994
+% v1.3 --- released 21st December 1992
+%
+% Copyright Cambridge University Press
+
+% The following line automatically loads the mn macros if you are not
+% using a format file.
+\ifx\mnmacrosloaded\undefined \input mn\fi
+
+% If your system has the AMS fonts version 2.0 installed, MN.tex can be
+% made to use them by uncommenting the line: %\AMStwofontstrue
+%
+% By doing this, you will be able to obtain upright Greek characters.
+% e.g. \umu, \upi etc. See the section on "Upright Greek characters" in
+% this guide for further information.
+
+\newif\ifAMStwofonts
+%\AMStwofontstrue
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%% Macros for this guide %%%%%%%%%%%%%%%%%%%%%%%%%%%
+\makeatletter
+\newskip\ttglue \ttglue=0pt
+
+\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}%
+{\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=\ttglue\let^^M=\ \let|=\endgroup}}
+
+\newdimen\macind \macind=1em % the default indent
+
+\def\beginlines{\par\begingroup\nobreak\Half
+ \leftskip=\macind
+ \parindent=0pt%
+ \nobreak \obeylines \everypar{\strut}%
+}
+\def\endlines{\endgroup\Half\noindent}
+
+\def\hang#1#2{%
+ \par\hangindent=70pt%
+ \advance\hangindent by 1em
+ \noindent\hskip 1em \rlap{\tt #1}\hskip 70pt\relax
+ #2\par%
+}
+
+\def\beginexhang#1{\par\bgroup\let\item=\ex@hang}
+
+\def\ex@hang#1{%
+ \everypar{}\par
+ \Half
+ \everypar{\noindent \ignorespaces}%
+ \noindent %\hskip-\hangindent
+ \boxw{\tt\char"5C #1}\quad\ignorespaces
+}
+
+\def\endexhang{\par\egroup\Half}
+
+\def\beginquote{\bgroup\par\Half\leftskip=2em \rightskip=2em
+ \eightpoint\noindent\ignorespaces}
+\def\endquote{\par\Half\egroup\noindent}
+
+\newdimen\fboxrule \fboxrule=.4pt
+\newdimen\fboxsep \fboxsep=3pt
+\newdimen\tempdimA
+\newbox\BoxA
+
+\newif\ifnocr
+\def\boxw#1{{\global\nocrtrue \fboxsep=2pt \boxit{#1}}}
+
+\long\def\boxit#1{%
+ \setbox\BoxA=\hbox{\kern\fboxsep #1\kern\fboxsep}%
+ \tempdimA=\fboxrule
+ \advance\tempdimA by \fboxsep
+ \advance\tempdimA by \dp\BoxA
+ \noindent \hbox{\lower\tempdimA
+ \hbox{%
+ \vbox{%
+ \hrule height \fboxrule
+ \hbox{%
+ \vrule width \fboxrule \hskip-\fboxrule
+ \vbox{\vskip\fboxsep \box\BoxA\vskip.5\fboxsep}%
+ \hskip -\fboxrule \vrule width \fboxrule
+ }%
+ \hrule height \fboxrule
+ }%
+ }%
+ }%
+ \ifnocr \global\nocrfalse\else \par\medskip\noindent\ignorespaces\fi
+}
+
+\def\multi{\vbox\bgroup\advance\hsize by -2\fboxsep \def\\{\hfil\break}}
+\def\endmulti{\egroup}
+
+\def\Notes{%
+ \if@nobreak \everypar{}\half \else \addpen{\gds@cbrk}\addvspace{\half}\fi
+ \noindent\@nohdbrk {\em Notes}\par
+ \nobreak \vskip\half \nobreak \@noafterindent
+}
+
+
+\def\LaTeX{La\TeX}
+\makeatother
+%%%%%%%%%%%%%%%%%%%%%% End of macros for guide %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifCUPmtplainloaded \else
+ \NewTextAlphabet{textbfit} {cmbxti10} {}
+ \NewTextAlphabet{textbfss} {cmssbx10} {}
+ \NewMathAlphabet{mathbfit} {cmbxti10} {} % for math mode
+ \NewMathAlphabet{mathbfss} {cmssbx10} {} % " " "
+ %
+ \ifAMStwofonts
+ %
+ \NewSymbolFont{upmath} {eurm10}
+ \NewSymbolFont{AMSa} {msam10}
+ \NewMathSymbol{\upi} {0}{upmath}{19}
+ \NewMathSymbol{\umu} {0}{upmath}{16}
+ \NewMathSymbol{\upartial}{0}{upmath}{40}
+ \NewMathSymbol{\leqslant}{3}{AMSa}{36}
+ \NewMathSymbol{\geqslant}{3}{AMSa}{3E}
+ \let\oldle=\le \let\oldleq=\leq
+ \let\oldge=\ge \let\oldgeq=\geq
+ \let\leq=\leqslant \let\le=\leqslant
+ \let\geq=\geqslant \let\ge=\geqslant
+ \else
+ \def\umu{\mu}
+ \def\upi{\pi}
+ \def\upartial{\partial}
+ \fi
+\fi
+
+% Marginal adjustments using \pageoffset maybe required when printing
+% proofs on a Laserprinter (this is usually not needed).
+% Syntax: \pageoffset{ +/- hor. offset}{ +/- vert. offset}
+% e.g. \pageoffset{-3pc}{-4pc}
+
+\pageoffset{-2.5pc}{0pc}
+\overfullrule=0pt
+
+\loadboldmathnames
+
+\begintopmatter % start the two spanning material
+
+\title{Monthly Notices of the Royal Astronomical Society:\hfil\break
+ plain \TeX\ style guide for authors}
+\author{M. A. Reed}
+\affiliation{Cambridge University Press, Shaftesbury Road,
+ Cambridge CB2 2BS}
+
+\shortauthor{M. A. Reed}
+\shorttitle{Monthly Notices: plain \TeX\ guide for authors}
+
+\acceptedline{Accepted 1993 December 11. Received 1993 March 17}
+
+\abstract {This guide is for authors who are preparing papers for the
+Monthly Notices of the Royal Astronomical Society using the
+Monthly Notices plain \TeX\ macros.}
+
+\keywords {Plain \TeX, {\tt mn.tex} -- sample text -- user guide.}
+\pagerange{1--13}%%
+\pubyear{1994}
+
+\maketitle
+
+% Start of main text
+
+\section{Introduction}
+
+In addition to the standard submission of hardcopy from authors,
+Monthly Notices accepts machine-readable forms of papers in \TeX.
+The layout design for Monthly Notices has been implemented as a
+\TeX\ format. This guide is not a substitute for the \TeX\ manual
+itself. Authors planning to submit their papers in \TeX\ are advised
+to use |mn.tex| as early as possible in the creation of their files.
+
+
+\subsection{The MN macros}
+
+MN is a set of plain \TeX\ macros for the Monthly Notices design,
+incorporating both the single- and double-column formats.
+MN.STY is the corresponding \LaTeX\ style file.
+The MN design package consists of the following files; do not edit these
+files in any way.
+\Half
+\hang{MN.TEX} {the macro definitions}
+\hang{MNGUIDE.TEX} {the input file for this guide}
+\hang{MNSAMPLE.TEX} {the input file for a sample article}
+\hang{MNLAND.TEX} {a landscape figure for use with the sample article}
+\hang{FONTTEST.TEX} {a file to test all of the fonts used in MN}
+\Half
+\noindent The input files for the guide, sample pages, landscape sample and
+fonttest automatically call in the MN macros if you haven't preloaded them
+by using a format file.
+Therefore, this guide can be typeset by typing: |tex MNGUIDE|, or
+|tex &mn MNGUIDE|.
+
+When your article is printed in the Monthly Notices journal, it is typeset
+in Monotype Times. As most authors do not have this font, it is likely that
+the make-up will change with the change of font. For this reason, we ask
+you to ignore details such as slightly long lines, page stretching, or
+figures falling out of synchronization, because these details can be dealt with at a later stage.
+
+
+\subsection{General style issues}
+
+For general style issues, authors are referred to the `Instructions for
+Authors' on the inside back cover of Monthly Notices. Authors who are
+interested in the details of style are referred to Butcher (1992) and
+The Chicago Manual (1982). The language of the journal is British
+English and spelling should conform to this.
+
+
+\subsection{Submission of \TeX\ articles to the journal}
+
+Authors are urged to state that electronic submission is intended when
+first submitting their paper. Papers should initially be submitted in the
+usual way to the Executive Secretary, Royal Astronomical Society, Burlington
+House, London W1V~0NL, as set out on the inside front cover of each issue
+of Monthly Notices. Three hard copies should be supplied. One of these
+copies should be single-sided and double-spaced throughout, while the other
+two should be weight-reduced, by being either single-spaced or double-sided.
+Note that articles, or revised versions thereof, may not be submitted by
+electronic mail. Appropriate gaps should be left for figures, original
+versions and copies of which should also be supplied. Authors should ensure
+that their figures are suitable (in terms of lettering, size, etc.) for the
+reduction they intend.
+
+Authors who wish to include PostScript artwork dir\-ectly into their
+articles can do so, by using either Tomas Rokicki's {\sf EPSF} macros
+or Trevor Darrell's {\sf PSFIG} macros (both of which are supplied with
+the DVIPS PostScript driver). Please remember to supply any additional
+figure macros you use with your article.
+Please also supply hard copies of your figures, for the use of production
+editors and as a back-up.
+Authors should not attempt to
+use implementation specific |\special|'s directly.
+
+The correct Monthly Notices House
+Style should be used -- details are given in the Instructions for Authors,
+in the Style Guide published in the 1~January 1993 issue (\hbox{MNRAS},
+260,~1), and in Appendix C of this guide.
+No disk should be submitted at this initial stage. When the paper has been
+accepted, the double-spaced copy will be marked up by the subeditors at
+Blackwell Science (BS) and returned to you for correction.
+When the requested corrections have been made, you should send the following
+material to BS:
+\beginlist
+\item (i) a 3.5-inch or 5.25-inch disk for PC (double or high density or
+Apple Mac), containing the {\em corrected\/} version of the paper; the file
+for the final version should be text-only, with no source-dependent control
+codes (i.e. an ASCII file);
+
+\item (ii) two hard copies of the corrected version, plus the original
+marked up copy of the article; {\em any further author corrections should
+be clearly indicated on the latter\/};
+
+\item (iii) a signed statement that the revised hard copy and the disk do
+indeed correspond.
+\endlist
+In addition, you should submit the following information concerning the disk
+and its contents:
+\beginlist
+\item (i) the disk format (e.g. PC 360k);
+
+\item (ii) how many files the disk contains, their names, a description of
+the file contents and the number of pages each file will produce when
+printed; details of any user-defined macros;
+
+\item (iii) the computer system and implementation of \TeX\ used (e.g.
+IBM~PC-386, PC\TeX~v3.14).
+\endlist
+Unless the layout of the paper has to be significantly changed by the
+typesetter (for example, if the gaps left for figures are not suitable), it
+will not be necessary to send you a typeset proof to check, as the paper
+will be set directly from your submitted disk. However, you should note
+that, if serious problems are encountered with the coding of your paper
+(missing author-defined macros, for example), it may prove necessary to
+divert the paper to conventional typesetting.
+
+
+\section{General instructions for installation}
+
+The simplest way to use this macro package is to copy the above files into a
+suitable directory or work area on your computer. Write your
+article using the macros described below (or use the sample article as a
+template) and ensure that the following is included at the very beginning of your input file:
+\beginlines
+|\ifx\mnmacrosloaded\undefined \input mn\fi|
+\endlines
+
+When you typeset your article using |tex <article file name>| the macro
+definitions will be loaded automatically before your text is processed.
+This will happen rather slowly on a small computer and you may find it much
+faster to work with the \TeX\ format file for the MN macros.
+This can be created by using the program INITEX:
+\beginlines
+|initex &plain mn|
+\endlines
+This usage of this command will vary from one installation of \TeX\ to
+another. In {\sc Unix} implementations of \TeX\ the `|&|' character must
+be `escaped' with a `|\|` because it is a magic character,
+e.g. |initex \&plain mn|.
+In PC\TeX\ you type the following (seek local advice if you
+are not sure how to use INITEX on your system):
+\beginlines
+|tex &plain mn /i|
+\endlines
+
+When the process is complete type |\dump| at the \TeX\ prompt.
+This creates the format file |MN.FMT|. Type the following command to
+typeset your article:
+\beginlines
+|tex &mn <article file name>|
+\endlines
+\TeX\ will process your article at high speed.
+
+
+\subsection{The font test and sample pages}
+
+Once you have installed the MN macros, run the following test. The file
+|FONTTEST.TEX| produces a sample of each font size used in the MN design.
+To use this do |tex FONTTEST| or |tex &mn FONTTEST| (after creating the
+|MN.FMT| format file).
+Preview the resulting |DVI| file on-screen and generate hard copy output on
+your facilities. It will show you whether any of the fonts selected by the
+Monthly Notices design are going to cause problems on your system.
+
+As a final test of the installation, typeset the sample article, using
+|tex MNSAMPLE| or |tex &mn MNSAMPLE|.
+Use this article in conjunction with the instructions in this guide to
+work out how to typeset an article for Monthly Notices.
+
+
+\subsubsection{Page margins}
+
+Some \TeX\ sites may find that pages from the MN design are positioned
+incorrectly on the paper from local laserprinters. This can be corrected by the
+use of the |\pageoffset| macro. It takes two parameters, the first being
+the horizontal offset, the second the vertical offset, e.g.
+\beginlines
+|\pageoffset{-1pc}{2pc}|
+\endlines
+The above example will shift the output one pica to the left, and two picas
+down the page. Usually there is no need to use this macro; only use it if
+required.
+
+
+\subsubsection{Author macro names}
+
+For efficiency, some authors may wish to write their own macros. Those who
+intend to do this will be aware of the problem of creating unique
+identifiers (macro names). The most common way around this problem has been
+to include |@| somewhere in the identifier, e.g. |\@utput| or |\sec@tion|.
+Knuth, the creator of \TeX, has adopted this method in the plain \TeX\
+definitions and it can also be found in other format packages such as
+\LaTeX.
+
+However, use of this method can cause problems if the internals of plain
+\TeX\ or the MN macros get `over-ridden'. There is a simpler method which is
+much safer. Simply prefix your macro names with your initials,
+e.g.\ |\MARmacro|.
+
+
+\section{The design macros}
+
+Refer to the source code of the sample pages for examples of the following
+design macros in use. It is very important that the article should end
+with a |\bye| as this typesets `This paper$\ldots$' at the very end.
+
+
+\subsection{Article opening}
+
+There are certain macros that should appear near the top of your input file.
+The following is the recommended way to begin your article.
+%
+\beginexhang{begintopmatter}
+\item{onecolumn} Selects single-column output (default = two-column).
+ The |\onecolumn| command {\em must\/} be used before |\begintopmatter|
+ for the article opening to work correctly.
+
+ You should not use |\onecolumn| unless your article has a high
+ mathematical content which won't fit into the two-column measure easily.
+ Selection of one-column output also affects the actions of other macros,
+ particularly those controlling figures and tables.
+
+\item {Referee} This selects referee mode (double spaced) if required
+ (default = not selected). Figure captions and Tables are not double
+ spaced by this option.
+
+\item {authorcomment} This creates a catchline at the bottom of the page
+ which authors may wish to use to keep track of the versions of their
+ article.
+
+\item {begintopmatter} This macro should be used just before defining the
+ article title and author names. If you omit this macro \TeX\ will
+ complain loudly when it reaches the |\maketitle| macro.
+
+\item {title} Set the article title, e.g.
+\beginlines
+|\title{Dust envelopes around RV Tauri stars}|
+\endlines
+
+\item {author} Set the article author(s), e.g.
+\beginlines
+|\author{A. V. Raveendran}|
+\endlines
+
+\item {affiliation} Set the author affiliation(s), e.g.
+\beginlines
+|\affiliation{Indian Institute of Astrophysics..}|
+\endlines
+Multiple author names should be set as follows. Do not use
+`\&' between names, always use `and'. Each author name is
+listed, followed by a reference mark (usually a superscripted
+number). The reference mark refers to each author's
+respective affiliations in a list which follows afterwards.
+For example,
+\beginlines
+\vbox{%
+|\author{A.~Moorhouse,$^{1,2}$|
+| P.~W.~J.~L.~Brand,$^1$|
+| T.~R.~Geballe$^3$ and M.~G.~Burton$^4$}|
+|\affiliation{$^1$ Department of Astronomy, ...}|
+|\affiliation{$^2$ Present address: Dublin|
+| Institute for ...}|
+|\affiliation{$^3$ Joint Astronomy Centre ...}|
+|\affiliation{$^4$ NASA Ames Research Center ...}|
+}%
+\endlines
+Note that the `present address' in
+the above example is treated as though it were an affiliation. Similarly,
+fellowships or other posts, for example `Visiting Observer, Mount John
+University Observatory \dots' should be listed in the acknowledgments.
+
+\item {shortauthor} Define the even-page running head.
+\beginlines
+|\shortauthor{R. A. Stathakis and E. M. Sadler}|
+\endlines
+Initials only should be used in running heads; use `and',
+not~`\&', to separate the final two names. When there is a
+long list of authors (four or more) use the form
+\beginlines
+|\shortauthor{D.~T.~Wickramasinghe et al.}|
+\endlines
+
+\item {shorttitle} Define the odd-page running head.
+\beginlines
+|\shorttitle{The H\,{\eightit I} spectra}|
+\endlines
+Notice the use of the |\,| (thinspace) after the `H' in the above example.
+The |\eightit| simulates the effect of an italic small-caps.
+If you require roman (upright) text in the short-title, say for `IRAS',
+you would use:
+\beginlines
+|\shorttitle{...{\rm IRAS}...}|
+\endlines
+It may also be necessary to add an italic correction |\/| before the |\rm|
+to improve the spacing.
+
+\item {abstract} Set the abstract information, e.g.
+\beginlines
+|\abstract {This is the text of the abstract ...}|
+\endlines
+This design macro requires that the text (which can be
+longer than one paragraph) is enclosed in braces.
+The abstract must fit on to the
+first page of the article when typeset.
+
+\item {keywords} Set any article key words, e.g.
+\beginlines
+|\keywords {circumstellar matter|
+| -- infrared: stars.}|
+\endlines
+The same applies for |\keywords| as for the |\abstract| macro.
+
+\item {maketitle} This macro must be used just before the first section
+ or the first text paragraph.
+\endexhang
+
+
+\subsection{Headings}
+
+Some headings are capitalized. Where this is true the design macro will
+automatically capitalize whatever you key. As a rule, it is advisable to
+capitalize the first letter, and any words that normally start with a capital,
+i.e. proper nouns, abbreviations, but key all other words in lower case.
+
+The |\section|, |\subsection| and |\subsubsection| mac\-ros are
+automatically numbered. To produce unnumbered headings, `star' forms of
+these macros exist, e.g. |\section*|.
+%
+\beginexhang{subsubsection}
+\item {section} Start a new section, e.g.
+\beginlines
+|\section{Introduction}|
+\endlines
+For main section headings such as `Acknowledgments' and
+`References' use the |\section*| macro, e.g.
+\beginlines
+|\section*{Acknowledgments}|
+\endlines
+The |\section| command is also used to produce appendices
+(see Subsection~3.11 for more information).%%
+
+\item {subsection} Start a new subsection, e.g.
+\beginlines
+|\subsection{Colour--colour diagram}|
+\endlines
+
+\item {subsubsection} Start a new subsubsection, e.g.
+\beginlines
+|\subsubsection{Correlation with subgroups}|
+\endlines
+
+\item {paragraph} Start a new subsubsubsection, e.g.
+\beginlines
+|\paragraph{Correlation with subgroups.} Text|
+| runs on after heading...|
+\endlines
+It is important to note that text runs on after a
+|\paragraph|. There should be no break between this heading
+and the next paragraph.
+\endexhang
+
+\noindent The macro |\section| forces the text of the heading into upper
+case, and |\subsection| emboldens the text. When headings contain names
+with lowercase or small capital letters, place these letters in the
+argument of |\lowercase|, e.g.
+\beginlines
+|N\lowercase{a}\,{\sixbf I}/%|
+|C\lowercase{a}\,{\sixbf II}|
+\endlines
+to get `\dots\ {\bf Na\,{\sixbf I}/Ca\,{\sixbf II}}\ \dots' in a section
+heading. The |\sixbf| commands produce a simulated bold small-caps.
+This technique can also be applied to the running heads; see the example in
+|\shorttitle|.
+
+The paragraph indent on any text following a |\section|, |\subsection|
+or |\subsubsection| is automatically removed by the macros.
+
+
+\subsection{Lists}
+\subsubsection{Numbered lists}
+
+Numbered lists are keyed in a simple and straightforward way. They begin
+with a |\beginlist| command. Each item is marked with |\item| with its
+number (in round braces) followed by the text for the item. The number
+should be in lower case roman numerals. The list is ended with |\endlist|.
+For example,
+\beginlines
+|\beginlist|
+|\item (i) the attenuated and diluted stellar|
+| radiation;|
+|\item (ii) scattered radiation, and|
+|\item (iii) reradiation from other grains.|
+|\endlist|
+\endlines
+
+\Notes
+
+\beginlist
+\item (i) Extra white space is automatically added above and below the list.
+\item (ii) Outside the scope of the |\beginlist| and |\endlist| commands the
+ |\item| command reverts to its plain \TeX\ definition. Don't use the
+ plain \TeX\ |\item| command on its own, as the spacing and indents will
+ be incorrect.
+\item (iii) The paragraph indentation on the first paragraph following the
+ |\endlist| command is removed automatically if you leave no blank
+ line between the |\endlist| and the text.
+\endlist
+
+
+\subsubsection{Unnumbered lists}
+
+These should be keyed in the same way as numbered lists (described above),
+except that each item in the list has no number in round braces.
+
+
+\subsection{Illustrations (or figures)}
+
+Figures should be keyed as follows:
+\beginlines
+|\beginfigure{|{\em n\/}|}|
+| \vskip 3cm|
+| \caption{{\bf Figure |{\it f}|.} An example figure in|
+| which space has been left for the artwork.}|
+|\endfigure|
+\endlines
+Figure captions should be below the figure itself, therefore
+the |\caption| command should appear after the figure or space
+left for an illustration.
+The {\em n\/} value is the logical figure number. This number determines
+the output order of the figure (in two-column mode).
+It must start at~1 and increase with each successive figure.
+\beginfigure{1}
+ \vskip 3cm
+ \caption{{\bf Figure 1.} An example figure in which space has been
+ left for the artwork.}
+\endfigure
+The |\caption| macro is only valid in the scope of
+|\beginfigure|$\ldots$|\endfigure|.
+
+The example above will produce a single-column figure in two-column mode.
+To produce a double-spanning figure use:
+\beginlines
+|\beginfigure*{|{\em n\/}|}|
+| |$\ldots$
+| \caption{|$\ldots$|}|
+|\endfigure|
+\endlines
+Notice that |\beginfigure*| ends with |\endfigure|. If the text in the
+caption is less than one line long it is centred automatically, otherwise
+it is set full-out.
+
+\Notes
+
+\beginlist
+\item (i) If there is more than one figure panel to a caption, the depth
+ value should increase by 13pt (4.5mm) for every extra figure (if they are
+ one above another). This allows for a gap between each figure panel.
+
+\item (ii) If a figure occupies one complete page, insert a depth that does
+ not completely fill the page, otherwise the figure may be output at the
+ end of the paper (or not at all)!
+\endlist
+
+See `Instructions for Authors' in Monthly Notices for submission of
+artwork.
+
+\subsubsection{Points to note for figures in one-column articles}
+
+\beginlist
+\item (i) All figures (and their captions) will be set to full width even
+ if they are keyed using |\beginfigure|$\ldots$|\endfigure|.
+ Captions shorter than one line will be centred as normal.
+
+\item (ii) The logical figure number is ignored in one-column mode.
+ Therefore the figures are output in the order in which they appear in
+ the source.
+
+\item (iii) If a figure is placed very early in the source code,
+ it is possible for it to float to the top of the first page
+ (above the title). In this case, move the figure one paragraph down and
+ try again. It may be necessary to do this with other figures to keep the
+ output order correct.
+\endlist
+
+
+\subsection{Tables}
+
+Tables should be keyed something like this:
+\beginlines
+|\begintable{|{\em n\/}|}|
+| \caption{{\bf Table |{\em t\/}|.} |$\ldots$|}|
+| \halign{| $<$alignment$>$ |}|
+| \tabletext{| text below table, table footnotes, etc. |}|
+|\endtable|
+\endlines
+The {\em n\/} value is the logical table number, and {\em t\/} is the
+table number. The logical table number determines the output order of the
+table (in two-column mode).
+It must start at~1 and increase with each successive table.
+
+The table caption should appear before the body of the table.
+The |\tabletext| macro is provided for table notes, and table footnotes.
+It can contain more than one paragraph of text. Ten points of space are
+automatically added above |\tabletext|. Only one |\tabletext| is allowed
+per table. The usage of |\tabletext| is optional.
+
+If you wish to insert non-aligned text into the body of the alignment do
+not use |\noalign{|{\em text\/}|}| as this will make the table appear to
+be full width to the macros, resulting in the table being set flush left.
+In this case you can either use |\multispan| or use
+|\noalign{\hbox{|{\em text\/}|}}|.
+
+The caption, and any text below the table will be set to the table
+width, when the table is centred by the macros.
+The |\caption| and |\tabletext| macros are only valid in the scope of the
+|\begintable|$\ldots$|\endtable|.
+
+Table~1 is produced with the following code:
+\beginlines
+|\begintable{1}|
+| \caption{{\bf Table 1.} Radio-band beaming|
+| model parameters for FSRQs and BL Lacs.}|
+| \halign{#\hfil & \quad \hfil#\hfil\quad &|
+| \hfil#\hfil\quad & \hfil#\hfil\quad &|
+| \hfil#\hfil\quad & \hfil#\hfil\quad &|
+| \hfil#\hfil\cr|
+| Class & $\gamma_1$ & $\gamma_2$ & $\langle|
+| \gamma \rangle$ & $G$ & $f$|
+| & $\theta_{\rm c}$ \cr|
+| BL Lacs & 5 & 36 & 7 & $-4.0$ & $1.0\times|
+| 10^{-2}$ & 10$^\circ$ \cr|
+| FSRQs & 5 & 40 & 11 & $-2.3$ & $0.5\times|
+| 10^{-2}$ & 14$^\circ$ \cr|
+| }|
+| \tabletext{{\em G} is the slope of the Lorentz|
+| factor distribution, i.e. $n(\gamma)\propto|
+| \gamma^G$, extending between $\gamma_1$|
+| and $\gamma_2$, with mean value $\langle|
+| \gamma\rangle$, {\em f\/} is the ratio|
+| between the intrinsic jet luminosity and the|
+| extended, unbeamed luminosity, while|
+| $\theta_{{\rm c}}$ is the critical angle|
+| separating the beamed class from the parent|
+| population.}|
+|\endtable|
+\endlines
+
+\begintable{1}
+ \caption{{\bf Table 1.} Radio-band beaming model parameters
+ for FSRQs and BL Lacs.}
+ \halign{#\hfil&\quad \hfil#\hfil\quad& \hfil#\hfil\quad&
+ \hfil#\hfil\quad& \hfil#\hfil\quad& \hfil#\hfil\quad&
+ \hfil#\hfil\cr
+ Class & $\gamma_1$ & $\gamma_2$ & $\langle \gamma \rangle$ & $G$ & $f$
+ & $\theta_{\rm c}$ \cr
+ BL Lacs & 5 & 36 & 7 & $-4.0$ & $1.0\times 10^{-2}$ & 10$^\circ$ \cr
+ FSRQs & 5 & 40 & 11 & $-2.3$ & $0.5\times 10^{-2}$ & 14$^\circ$ \cr
+ }
+ \tabletext{{\em G} is the slope of the Lorentz factor distribution, i.e.
+ $n(\gamma)\propto \gamma ^G$, extending between $\gamma _1$ and
+ $\gamma_2$, with mean value $\langle \gamma \rangle$, {\em f\/} is the
+ ratio between the intrinsic jet luminosity and the extended, unbeamed
+ luminosity, while $\theta_{{\rm c}}$ is the critical angle separating
+ the beamed class from the parent population.}
+\endtable
+
+\noindent The example above will produce a single-column table in two-column
+mode. To produce a double-spanning table use:
+\beginlines
+|\begintable*{|{\em n\/}|}|
+| \caption{|$\ldots$|}|
+| \halign{|$\ldots$|}|
+| \tabletext{|$\ldots$|}|
+|\endtable|
+\endlines
+Notice that |\begintable*| ends with |\endtable|.
+
+Tables are allowed to have single horizontal rules, at the head
+and foot only. Horizontal rules should have 3pt of space above and below
+them. Vertical rules should not be used.
+
+If a table occupies one complete page, you may find it necessary to reduce
+its depth slightly, so that it doesn't completely fill the page, otherwise
+the table may be output at the end of the paper (or not at all)!
+
+
+\subsubsection{Points to note for tables in one-column articles}
+
+\beginlist
+\item (i) Tables that will fit into a column in two-column mode will be
+ centred on the full page width in one-column mode.
+
+\item (ii) The logical table number is ignored in two-column mode.
+ Therefore the tables are output in the order in which they appear in
+ the source.
+
+\item (iii) If a table is placed very early in the source code,
+ it is possible for it to float to the top of the first page
+ (above the title). In this case, move the table one paragraph down and
+ try again. It may be necessary to do this with other tables to keep the
+ output order correct.
+\endlist
+
+
+\subsection{Captions for continued figures and tables}
+
+If a very large figure or table does not fit on one page,
+it must be split into two floats; the second float should use a
+continued caption in the form:
+\smallskip
+\centerline{{\bf Figure 6} -- {\it continued}}
+\smallskip
+\noindent The figure or table number in the continued caption should be
+the same as in the original caption. These captions should be keyed as
+follows:
+\beginlines
+|\begintable{|{\it n\/}|}|
+| \caption{{\bf Table |{\it t\/}|} -- {\it continued}}|
+| :|
+|\endtable|
+\endlines
+Notice that there is no full-point after the figure/table number.
+
+
+\subsection{Landscape pages}
+
+If a table or illustration is too wide to fit the standard measure, it
+must be turned, with its caption, through 90 degrees anticlockwise.
+Landscape illustrations and/or tables cannot be produced directly
+using the MN macros because \TeX\ itself cannot turn the
+page, and not all device drivers provide such a facility.
+
+The first step is to produce blank pages (with a running head) in the
+output, so that the landscape material can be pasted in later. How
+this is done depends on whether your article is in one or two columns.
+
+For one-column articles use the following:
+\beginlines
+|\pageinsert|
+| \vfil\centerline{{\bf Figure |{\em f\/}|.} Landscape|
+| figure to go here.}\vfil|
+|\endinsert|
+\endlines
+otherwise use
+\beginlines
+|\beginfigure*{|{\em n\/}|}|
+| \vbox to 646pt{\vfil \caption{{\bf Figure |{\em f\/}|.}|
+| Landscape figure to go here.}\vfil}|
+|\endfigure|
+\endlines
+for two-column articles. You may find it necessary to move the above code
+up or down the source code until the blank page appears on the page after
+the first reference.
+
+Next create a separate document containing the command |\landscape| near
+the top (or use |mnland.tex| as a template).
+In this file include the complete tables and illustrations (with captions)
+using the figure and table macros provided, remembering to number the
+captions in the correct sequence, e.g.
+\ifCUPmtplainloaded \else \eject\fi %%
+\beginlines
+|\ifx\mnmacrosloaded\undefined \input mn\fi|
+\smallskip
+|% use the following if your driver supports it|
+|% \special{landscape}|
+\smallskip
+|% you may require \pageoffset for landscape|
+|% \pageoffset{0pc}{-1.5pc}|
+\smallskip
+|\landscape|
+|\authorcomment{Landscape material to be pasted|
+| into the article.}|
+\smallskip
+|\begintopmatter|
+|\maketitle|
+\smallskip
+|\beginfigure{1}|
+|\caption{{\bf Figure 4.} Photometric|
+| comparisons |$\ldots$|}|
+|\endfigure|
+\smallskip
+|:|
+\smallskip
+|\bye|
+\endlines
+Once you have successfully processed the new file with the MN macros, you
+can pass the resulting output through your dvi printer driver. Because the
+output of the MN macros is wider than it is deep, the page has to be printed
+landscape on your output device.
+
+Some dvi printer drivers will understand the `landscape' |\special| command
+and will automatically rotate the output, while others need to be told from
+the command line. Consult your local documentation if you don't know how to
+do this.
+
+
+\subsection{Plate pages}
+
+These are provided for tip-in plates, and should only be used for
+these. The plate page macros create a blank page with a special running
+head; its contents can be set using the |\plate| command. The text in the
+head should be keyed as shown below. The {\em no\/} and {\em vol\/}
+numbers will be determined by the typesetter.
+\beginlines
+|\beginplatepage|
+| \plate{Opposite p.~|{\em no\/}|, MNRAS, {\bf |{\em vol\/}|}}|
+| \caption{{\bf Figure |{\em f\/}|.} |$\ldots$|}|
+|\endplatepage|
+\endlines
+If the plate is a `landscape' plate its caption (if any) should be set
+using a separate `landscape' file (as described above). If the plate is
+to be placed `portrait' its caption can be set by using the |\caption|
+command as shown above. The style of the caption should be the same as for
+normal figure captions. If the plate fills most of the page, it is advisable
+to place the caption at the very bottom of the page -- this can be achieved
+by using |\vfill| above the caption.
+
+Plate pages will always appear on the page following the one on which the
+|\endplatepage| command is encountered. At present it is impossible to have
+two plate pages side by side, since there must be at least one page between
+them. If a new plate page is started before a previous one is output the
+first plate page is lost.
+
+
+\subsection{Footnotes}
+
+In the two-column format, footnotes should be keyed using |\note|, e.g.
+\beginlines
+|text\note {|{\em symbol\/}|}{|{\em footnote text}$\ldots$|} text|
+\endlines
+where {\em symbol\/} should be in the sequence:
+$\star$ (|\star|), \dag, \ddag, \S, \P, $\|$, $\star\star$ (|\star\star|),
+\dag\dag, \ddag\ddag, \S\S, \P\P, $\|\|$.
+The |\note| command should only be used for footnotes in the main text.
+
+In the one-column format, footnotes should be keyed in the standard plain
+\TeX\ way using |\footnote|, e.g.
+\beginlines
+|text\footnote {|{\em symbol\/}|}{|{\em footnote text}$\ldots$|} text|
+\endlines
+where {\em symbol\/} should be in the above sequence.
+Again, the |\footnote| command should only be used for footnotes in the main text.
+
+\subsection{Bibliography}
+
+References to published literature should be quoted in text by author
+and date: e.g.\ Draine (1978) or (Begelman, Blandford \& Rees 1984).
+Where more than one reference is cited having the same author(s) and date,
+the letters a,b,c, $\ldots$ should follow the date: e.g.\ Smith (1988a),
+Smith (1988b), etc.
+
+
+\subsubsection{References in the text}
+
+References in the text are given by author and date, and, whichever
+method is used to produce the bibliography, the references in the text
+are done in the same way.
+When you introduce a three-author paper, you should list all
+three authors at the first citation, and thereafter use et al.
+
+\subsubsection{The list of references}
+
+The following listing shows how references should be keyed in the style of
+the journal.
+\beginlines
+|\section*{References}|
+\smallskip
+|\beginrefs|
+|\bibitem Butcher J., 1992, Copy-editing:|
+| The Cambridge Handbook, 3rd edn.|
+| Cambridge Univ. Press, Cambridge|
+|\bibitem The Chicago Manual of Style, 1982.|
+| Univ. Chicago Press, Chicago|
+|\bibitem Blanco P., 1991, PhD thesis,|
+| Edinburgh University|
+|\bibitem Brown A. B., Jones C. D., 1989,|
+| in Robinson E. F., Smith G. H., eds,|
+| Proc. IAU Symp. 345, Black Dwarfs.|
+| Kluwer, Dordrecht, p. 210|
+|\bibitem Edelson R. A., 1987, ApJ, 313, 651|
+|\bibitem Lamport L., 1986, \LaTeX: A Document|
+| Preparation System. Addison--Wesley,|
+| New York|
+|\bibitem Mirabel I. F., Sanders D. B., 1989,|
+| ApJ, 340, L53|
+|\bibitem Misner C. W., Thorne K. S.,|
+| Wheeler J. A., 1973, Gravitation.|
+| Freeman, San Francisco|
+|\bibitem Sopp H. M., Alexander P., 1991,|
+| MNRAS, 251, 112|
+|\bibitem Stella L., Campana S., 1991, in|
+| Treves A., Perola G. C., Stella L., eds,|
+| Iron Line Diagnostic in X-ray Sources.|
+| Springer--Verlag, Berlin, p. 230|
+|\endrefs|
+\endlines
+The following rules apply for the ordering of your references:
+\beginlist
+\item (i) if an author has written several papers, some with other authors,
+ the rule is that the single-author papers precede the two-author
+ papers, which, in turn, precede the multi-author papers;
+\item (ii) within the two-author paper citations, the order is determined
+ by the second author's surname, regardless of date;
+\item (iii) within the multi-author paper citations, the order is
+ chronological, regardless of author surnames.
+\endlist
+
+\Notes
+
+\beginlist
+\item (i) The |\bibitem| command is undefined unless it is used in the
+ scope of the |\beginrefs|$\ldots$|\endrefs|.
+\item (ii) Bibliographical items can be longer than one paragraph.
+\item (iii) The paragraph indentation on the first paragraph following the
+ |\endrefs| command is removed automatically if you leave no blank
+ line between the |\endrefs| and the text.
+\endlist
+
+
+\subsection{Appendices}
+
+The appendices section of your article should start with a |\appendix|,
+after which each |\section| starts a new appendix. For example,
+\beginlines
+|\appendix|
+|\section{for authors}|
+\endlines
+will yield:\par
+\smallskip
+\centerline{\bf APPENDIX A:\enskip FOR AUTHORS}\par
+\smallskip
+\noindent The |\appendix| macro should only be used once.
+
+If the appendix has no subtitle, the parameter to the |\section| command
+should be left empty. For example,
+\beginlines
+|\section{}|
+\endlines
+will produce:\par
+\smallskip
+\centerline{\bf APPENDIX B}\par
+\smallskip
+\noindent Any subsections or subsubsections in the appendix are
+automatically numbered.
+You should also note that displayed equations in appendices should be
+numbered (A1), (A2) for Appendix A, and (B1), (B2) for Appendix B, etc.
+
+The numbering for displayed equations can be made automatic by using the
+|\stepeq| macros described in Subsubsection~3.13.2.%%
+
+Figures and Tables should also be numbered in a similar way,
+e.g. Fig. A1, A2, Table A1, A2 in appendices.
+
+
+\subsection{Typeface selection}
+
+The normal plain \TeX\ typeface conventions apply. The following faces
+are available as normal: |\rm|, |\it|, |\bf|, |\sl|, |\sf|, |\sc|,
+|\tt|, |\mit|, |\cal| and |\oldstyle|.
+
+Bold versions of |\cal| and |\oldstyle| can be produced in
+combination with |\bmath|. Use of |\bmath| on its own will provide bold
+math italic letters.
+
+A new |\em| command provides {\em emphasis\/} for important words.
+The |\em| command will automatically switch the face of the emphasized
+words to make them stand out. So,
+\beginlines
+|\rm this is an {\em emphasized\/} word.|
+|\it this is an {\em emphasized} word.|
+\endlines
+gives\par
+\centerline{\rm this is an {\em emphasized\/} word.}
+\centerline{\it this is an {\em emphasized\/} word.}
+\Half
+\noindent Notice the use of the italic correction command (|\/|) in the
+above example.
+
+The following are fully loaded in text, script and scriptscript sizes:
+|\rm|, |\bf|, math italic, math symbol, bold math italic and bold symbol.
+The faces |\it|, |\sl|, |\tt|, |\sc| and |\sf| are loaded at text size only.
+See |fonttest.tex| for a better idea of how these work.
+
+
+\subsection{Typesetting mathematics}
+\subsubsection{Displayed mathematics}
+
+Equations should be keyed using normal plain \TeX\ macros.
+Display mathematics are automatically set flush left by the macros.
+The standard plain \TeX\ math commands |\eqalign|, |\eqalignno| will
+work as before. The |\leqalignno| command is switched automatically
+to |\eqalignno| to prevent the equation number from crashing into the
+equation. If you wish to use |\displaylines|, this has to be handled
+in a slightly different way. For example,
+$$
+\displaylines{%
+ \hbox to \hsize{}\cr
+ [\nu_1]-[\nu_2]=-2.5\log [f(\nu_1)/f(\nu_2)],\hfill\stepeq\cr
+ \alpha=-(1+Q)\beta-3,\hfill\stepeq\cr
+ q=2+\gamma -Q.\hfill\stepeq\cr}
+$$
+was produced with:
+\beginlines
+|$$|
+|\displaylines{%|
+| \hbox to \hsize{}\cr|
+| [\nu_1]-[\nu_2]=-2.5\log [f(\nu_1)/f(\nu_2)],|
+| \hfill\stepeq\cr|
+| \alpha=-(1+Q)\beta-3,\hfill\stepeq\cr|
+| q=2+\gamma -Q.\hfill\stepeq\cr}|
+|$$|
+\endlines
+Notice the |\hbox to \hsize{}| to ensure that the equation is set to the
+full width. The |\hfill|'s ensure that the equations are set flush left
+and the equation numbers are set flush right.
+
+If the equations in |\displaylines| are unnumbered, you still need the
+|\hfill|'s to ensure the equations are set flush left.
+
+
+\subsubsection{Automatic equation numbering}
+
+Displayed equations can be numbered automatically by the use of |\stepeq|.
+For example,
+\beginlines
+|$$|
+| \alpha=-(1+Q)\beta-3,\eqno\stepeq|
+|$$|
+\endlines
+which produces:
+$$
+\alpha=-(1+Q)\beta-3,\eqno\stepeq
+$$
+The |\stepeq| macro can be used in any of the places where a equation
+number is normally expected. Sub-equation numbering is also provided,
+allowing equation numbers in the form (2a) to be produced. For example,
+$$
+\eqalignno{%
+ \alpha & =-(1+Q)\beta-3, & \startsubeq\cr
+ q & =2+\gamma -Q. & \stepsubeq\cr
+ [\nu_1]-[\nu_2] & =-2.5\log [f(\nu_1)/f(\nu_2)] & \stepsubeq\cr}
+$$
+was produced by:
+\ifCUPmtplainloaded \else \eject\fi %%
+\beginlines
+|$$|
+|\eqalignno{%|
+| \alpha & =-(1+Q)\beta-3, & \startsubeq\cr|
+| q & =2+\gamma -Q. & \stepsubeq\cr|
+| [\nu_1]-[\nu_2] & =-2.5\log [f(\nu_1)/f(\nu_2)]|
+| & \stepsubeq\cr}|
+|$$|
+\endlines
+The sub-equation number is reset each time a |\stepeq| is used. Equation
+numbering is automatically reset to `(A1)' when a |\appendix| is used.
+
+
+\subsubsection{Bold math italic}
+
+To obtain bold math italic, you should use |\bmath|.
+So to obtain:
+$$
+ d(\bmath{s_{t_u}}) = \langle [RM(\bmath{X_y}
+ + \bmath{s_t}) - RM(\bmath{x_y})]^2 \rangle
+$$
+you would key:
+\beginlines
+|$$|
+| d(\bmath{s_{t_u}}) = \langle [RM(\bmath{X_y}|
+| + \bmath{s_t}) - RM(\bmath{x_y})]^2 \rangle|
+|$$|
+\endlines
+This facility is available in all typesizes.
+
+
+\subsubsection{Bold Greek and other bold symbols}
+
+Bold lowercase Greek characters can be obtained by prefixing
+the normal (unbold) symbol name with a `b', e.g.\ |\bgamma| gives $\bgamma$.
+This rule does not apply to bold |\eta|, as this would lead to a name
+clash with |\beta|. Instead use |\boldeta| for bold eta. Note that there
+is no |\omicron| (so there is no |\bomicron|), just use `o' in math mode
+for omicron and `|\bmath{o}|' for bold omicron.
+
+Bold versions of most of the other symbols in appendix~F in the \TeX book
+can be obtained in the same way.
+
+For bold uppercase Greek, prefix the unbold character name with |\bf|,
+e.g.\ |\bf\Gamma| gives $\bf\Gamma$.
+Upper and lowercase Greek characters are available in all typesizes.
+
+You can then use these definitions in math mode, as you would normal Greek
+characters:
+%
+\beginlines
+|$$|
+| \balpha_{\bmu} = {\bf\Theta} \alpha.|
+|$$|
+\endlines
+%
+will produce
+%
+$$
+ \balpha_{\bmu} = {\bf\Theta} \alpha.
+$$
+To save \TeX's valuable memory the symbol names for the bold math
+characters are not loaded automatically. To load them simply type
+\beginlines
+| \loadboldmathnames|
+\endlines
+in the document. Alternatively, if you only need one or two of them,
+simply copy the appropriate definitions from |mn.tex|
+to your document. For a complete list of the bold math symbols
+supplied, see the file |mn.tex|.
+
+
+\subsubsection{Upright Greek characters}
+
+You can obtain upright Greek characters if you have access to the
+American Maths Society Euler fonts (version 2.0), but you may not
+have these. In this case, you will have to use the normal math italic
+symbols and the typesetter will substitute the corresponding upright
+characters. You will make this easier if you can use the macros |\upi|,
+|\umu| and |\upartial| etc.\ in your text to indicate the need for upright
+characters, together with the following definitions in the preamble
+(before |\begintopmatter|):
+
+\subsubsection*{Authors with AMS fonts}
+
+\beginlines
+|\ifCUPmtplainloaded \else|
+| \NewSymbolFont{upmath} {eurm10}|
+| \NewMathSymbol{\upi} {0}{upmath}{19}|
+| \NewMathSymbol{\umu} {0}{upmath}{16}|
+| \NewMathSymbol{\upartial}{0}{upmath}{40}|
+|\fi|
+\endlines
+
+\subsubsection*{Authors without AMS fonts}
+
+\beginlines
+|\ifCUPmtplainloaded \else|
+| \def\umu{\mu}|
+| \def\upi{\pi}|
+| \def\upartial{\partial}|
+|\fi|
+\endlines
+Wether you have AMS fonts or not, the |\if..| and |\fi| are required in the
+above examples to ensure that when your article is typeset in Monotype
+Times, the correct definitions for these symbols are used.
+
+The sample pages, guide and fonttest can be made to use AMS fonts if you
+have them. To use them, just uncomment the following line in the preamble
+of |mnguide.tex|, |mnsample.tex| and |fonttest.tex|:
+%
+\beginlines
+|%\AMStwofontstrue|
+\endlines
+%
+If you do this, the following upright symbols are used in the
+sample pages, guide and fonttest: |\upi|, |\umu| and |\upartial|.
+
+
+\subsubsection{Special symbols}
+
+The macros for the special symbols in Tables~2 and~3 have been taken from
+the Springer Verlag `Astronomy and Astrophysics' design, with their
+permission. They are directly compatible and use the same macro names.
+These symbols will work in all text sizes, but are only guaranteed to work
+in text and displaystyles. Some of the symbols will not get any smaller
+when they are used in sub- or superscripts, and will therefore be displayed
+at the wrong size. Don't worry about this as the typesetter will be able to
+sort it out.
+%
+\begintable*{2}
+\caption{{\bf Table 2.} Special symbols which can only be used in
+math mode.}
+\advance\baselineskip by 2pt
+\halign{#\hfil\quad&#\hfil\quad&#\hfil\qquad\qquad
+ &#\hfil\quad&#\hfil\quad&#\hfil\cr
+Input & Explanation & Output & Input & Explanation & Output\cr
+\noalign{\vskip 3pt\hrule\vskip 3pt}
+|\la| & less or approx & $\la$ &
+ |\ga| & greater or approx & $\ga$\cr
+|\getsto| & gets over to & $\getsto$ &
+ |\cor| & corresponds to & $\cor$\cr
+|\lid| & less or equal & $\lid$ &
+ |\gid| & greater or equal & $\gid$\cr
+|\sol| & similar over less & $\sol$ &
+ |\sog| & similar over greater & $\sog$\cr
+|\lse| & less over simeq & $\lse$ &
+ |\gse| & greater over simeq & $\gse$\cr
+|\grole| & greater over less & $\grole$ &
+ |\leogr| & less over greater & $\leogr$\cr
+|\loa| & less over approx & $\loa$ &
+ |\goa| & greater over approx & $\goa$\cr
+|\bbbr| & Blackboard bold R & $\bbbr$ &
+ |\bbbm| & Blackboard bold M & $\bbbm$ \cr
+|\bbbn| & Blackboard bold N & $\bbbn$ &
+ |\bbbf| & Blackboard bold F & $\bbbf$ \cr
+|\bbbh| & Blackboard bold H & $\bbbh$ &
+ |\bbbk| & Blackboard bold K & $\bbbk$ \cr
+|\bbbp| & Blackboard bold P & $\bbbp$ &
+ |\bbbone| & Blackboard bold 1 & $\bbbone$ \cr
+|\bbbc| & Blackboard bold C & $\bbbc$ &
+ |\bbbq| & Blackboard bold Q & $\bbbq$ \cr
+|\bbbt| & Blackboard bold T & $\bbbt$ &
+ |\bbbs| & Blackboard bold S & $\bbbs$ \cr
+|\bbbz| & Blackboard bold Z & $\bbbz$ \cr
+%
+\noalign{\vskip 3pt\hrule}
+}
+\endtable
+
+\begintable*{3}
+\caption{{\bf Table 3.} Special symbols which don't have to be
+used in math mode.}
+\advance\baselineskip by 2pt
+\halign{#\hfil\quad&#\hfil\quad&#\hfil\qquad\qquad
+ &#\hfil\quad&#\hfil\quad&#\hfil\cr
+Input & Explanation & Output & Input & Explanation & Output\cr
+\noalign{\vskip 3pt\hrule\vskip 3pt}
+|\sun| & sun symbol & $\sun$ &
+ |\degr| & degree & $\degr$\cr
+|\diameter| & diameter & \diameter &
+ |\sq| & square & $\sq$\cr
+|\fd| & fraction of day & \fd &
+ |\fh| & fraction of hour & \fh\cr
+|\fm| & fraction of minute & \fm &
+ |\fs| & fraction of second & \fs\cr
+|\fdg| & fraction of degree & \fdg &
+ |\fp| & fraction of period & \fp\cr
+|\farcs| & fraction of arcsecond & \farcs &
+ |\farcm| & fraction of arcmin & \farcm\cr
+|\arcsec| & arcsecond & \arcsec &
+ |\arcmin| & arcminute & \arcmin\cr
+\noalign{\vskip 3pt\hrule}
+}
+\endtable
+
+\ifCUPmtplainloaded
+\subsubsection{Extra features in the Monotype Times version}
+
+This section of the guide will only be included if the guide is \TeX ed
+with the Times version of the MN macros (mtmn.tex). The following features
+are only available in the Times version:
+\beginlist
+\item (i) All of the type sizes available are fully loaded.
+\item (ii) Most of the symbols in Table~2 will be substituted
+ with symbols from the |mtxm| font. Only |\sq| is substituted in Table~3.
+\item (iii) All of the symbols in the |mtxm| and |mtym| fonts can be used,
+ at any size (using the normal AMS names).
+ If the author has used |mssymb.tex| then this can be removed, as most
+ of this file is now included in MN. If the author has used the new AMS
+ symbol fonts |msam| and |msbm| -- check the log file for missing
+ characters (once you've removed |msam| and |msbm|).
+ You have to do this because |msam| and |msbm| contain a few extra
+ characters NOT in |mtxm| and |mtym|. If you find missing characters get
+ help!
+\item (iv) Uppercase blackboard bold is available in all sizes. e.g.
+ \beginlines
+ |$\Bbb{A}\ldots\Bbb{Z}$|\qquad gives\qquad $\Bbb{A}\ldots\Bbb{Z}$
+ \endlines
+ If the author has made-up their own uppercase blackboard bold characters
+ you can safely use |\Bbb| instead.
+\item (v) If the author has used the simulated Blackboard bold symbols
+ these are automatically substituted for the real characters, except for
+ |\bbbone| which is redefined to work better with Times fonts.
+\endlist
+\fi
+
+\section{Example of section heading with
+ S{\sevenbf MALL} C{\sevenbf APS},
+ \lowercase{lowercase}, \textbfit{italic}, and bold
+ Greek such as $\bmu^{\bkappa}$}
+
+The above heading was produced with:
+\beginlines
+|\section{Example of section heading with|
+| S{\sevenbf MALL} C{\sevenbf APS},|
+| \lowercase{lowercase}, \textbfit{italic},|
+| and bold Greek such as $\bmu^{\bkappa}$}|
+\endlines
+
+\appendix
+\section{for authors}
+
+Table~A1 is a list of design macros which are unique to |mn.tex|. The list
+displays each macro's name and description.
+%
+\begintable*{4}
+\caption{{\bf Table A1.} Authors' notes.}
+\vbox to 630pt{%
+\halign{#\hfil&\quad #\hfil\cr
+Macro name and syntax & Description\cr
+\noalign{\vskip 3pt\hrule\vskip 3pt}
+|\pageoffset {h-off}{v-off}| & Adjust positioning of text area on paper.\cr
+|\Referee| & Enable double-spaced referee mode.\cr
+|\onecolumn| & Enable one-column mode (default =
+ two-column).\cr
+|\landscape| & Enable landscape mode (default = portrait).\cr
+ & The |\landscape| command automatically calls |\onecolumn|.\cr
+|\loadboldmathnames| & Enable the use of bold symbols, e.g. |\bgamma|\cr
+|\authorcomment| & Catchline for draft version/date.\cr
+\noalign{\Half}
+|\begintopmatter| & Start the two-spanning topmatter.\cr
+|\title {<text>}| & Article title.\cr
+|\author {<text>}| & Author(s).\cr
+|\affiliation {<text>}| & Author affiliation(s).\cr
+|\shortauthor {<text>}| & Set the even-page running head.\cr
+|\shorttitle {<text>}| & Set the odd-page running head.\cr
+|\abstract {<text>}| & Abstract.\cr
+|\keywords {<text>}| & Key words.\cr
+|\maketitle| & End the two-spanning topmatter.\cr
+\noalign{\Half}
+|\section {<text>}| & Heading level A.\cr
+|\section* {<text>}| & Unnumbered A-heading.\cr
+|\subsection {<text>}| & Heading level B.\cr
+|\subsubsection {<text>}| & Heading level C.\cr
+|\paragraph {<text>}| & Heading level D.\cr
+|\appendix| & Start the articles appendix section.
+ The |\section| command starts\cr
+ & a new appendix.\cr
+\noalign{\Half}
+|\stepeq|, |\startsubeq|, |\stepsubeq| & Automatic equation numbering.\cr
+\noalign{\Half}
+|\beginlist| & Numbered list:\cr
+| \item (i) <text>| & Omit the number and round braces from
+ each |\item| for an unnumbered list.\cr
+| \item (ii) <text>|\cr
+\noalign{\vskip-.25\baselineskip}
+| |$\ldots$\cr
+\noalign{\vskip-.2\baselineskip}
+|\endlist|\cr
+\noalign{\Half}
+|\beginrefs| & Bibliography.\cr
+| \bibitem <text>|\cr
+\noalign{\vskip-.25\baselineskip}
+| |$\ldots$\cr
+\noalign{\vskip-.2\baselineskip}
+|\endrefs|\cr
+\noalign{\Half}
+|\beginfigure{n}| & Figures:\cr
+| <figure space>| & Use the |\beginfigure*| form for a
+ double-spanning figure\cr
+| \caption{{\bf Figure n.} caption}| & in two-column mode.\cr
+|\endfigure|\cr
+\noalign{\Half}
+|\begintable{n}| & Tables:\cr
+| \caption{{\bf Table n.} caption}|
+ & Use the |\begintable*| form for a double-spanning table\cr
+| <alignment>| & in two-column mode.\cr
+| \tabletext{<text>}|\cr
+|\endtable|\cr
+\noalign{\Half}
+|\caption{{\bf Figure n} -- {\it continued}}| & Continued captions.\cr
+|\caption{{\bf Table n} -- {\it continued}}|\cr
+\noalign{\Half}
+|\beginplatepage| & Plate pages.\cr
+| \plate{Opposite p.\ n, MNRAS, {\bf n}}|\cr
+| <figure space>|\cr
+| \caption{{\bf Figure n.} caption}|\cr
+|\endplatepage|\cr
+\noalign{\Half}
+|\note| & Use for footnotes in two-column mode.\cr
+\noalign{\Half}
+|\Two, \OneHalf, \One, \Half| & Extra vertical space: These macros insert
+ white space, in multiples\cr
+ & of the linefeed, between paragraphs. Use during page make-up in \cr
+ & preference to plain \TeX's |\smallskip|, |\medskip| and |\bigskip|.\cr
+\noalign{\Half}
+|\bmath{math text}|, |\em| & Bold math and emphasized text.\cr
+|\textbfit{text}|, |\mathbfit{text}| & Bold text italic (defined in
+ the preamble of |mnsample.tex|).\cr
+|\textbfss{text}|, |\mathbfss{text}|& Bold text sans serif (defined in
+ the preamble of |mnsample.tex|).\cr
+|\umu|, |\upi|, |\upartial| & Upright math characters. These will only
+ appear upright if you have\cr
+ & AMS v2.0 fonts. See ``upright greek
+ characters" for further information.\cr
+\noalign{\vskip 3pt\hrule\vskip 3pt}
+}}
+\endtable
+
+
+\section{for editors}
+
+The additional features shown in Table~B1 may be used for production
+purposes only.
+%
+\begintable*{5}
+\caption{{\bf Table B1.} Editors' notes.}
+\halign{#\hfil&\quad #\hfil\cr
+Macro name and syntax & Description\cr
+\noalign{\vskip 3pt\hrule\vskip 3pt}
+|\pageno=000| & to set pagination; default = 1.\cr
+|\pagerange{000--000}| & note the use of the en-rule\cr
+|\letters| & for short communications (adds L to folios)\cr
+|\pagerange{L00--L00}| & for short communications\cr
+|\microfiche{MN000/0}| & for articles accompanied by microfiche\cr
+|\pubyear{0000}| & catchline date\cr
+|\volume{000}| & catchline volume\cr
+|\acceptedline{text}| & acceptance date\cr
+|\nofloat| & Position a figure or table at the current position
+ (one-column only).\cr
+ & The |\nofloat| macro should be positioned directly after the\cr
+ & |\beginfigure|/|table|, and will cause the macros to use |\midinsert|\cr
+ & (remember that |\midinsert| will turn into a |\topinsert| if there\cr
+ & is not enough space).\cr
+\noalign{\vskip 3pt\hrule\vskip 3pt}
+}
+\endtable
+
+
+\section{Monthly Notices journal style}
+
+Authors submitting \TeX\ or \LaTeX\ papers to Monthly Notices
+may wish to note the following points regarding journal style.
+Adherence to correct style from the start will obviously save time
+and effort later on, in terms of fewer requested subeditorial
+corrections. The notes given here relate to common style errors found
+in Monthly Notices manuscripts, and are {\it not\/} intended to be
+exhaustive. Please see the editorials in issues 257/2 and 260/1, as
+well as any recent issue of the journal, for more details. As far
+as possible, the subeditor will indicate which of your changes
+would be best done globally, thus saving you time.
+
+\subsection{Punctuation}
+
+When deciding where to add commas, it may be helpful to read
+ through the sentence and note where the natural `pauses' occur.
+The needs of readers for whom English is not a first language
+should be borne in mind when punctuating long sentences.
+\ifCUPmtplainloaded \else \vadjust{\eject}\fi %%
+For example, consider the following sentence as it
+appeared in Monthly Notices:
+`When we do not limit ourselves by constraints arising
+from the choice of an initial fluctuation spectrum, structures in
+an open universe, including the peculiar velocity structure, can
+be reproduced in a flat Lema\^{\i}tre universe for a large part of
+their evolution.' Now consider the same sentence without commas:
+`When we do not limit ourselves by constraints arising
+from the choice of an initial fluctuation spectrum structures in
+an open universe including the peculiar velocity structure can be
+reproduced in a flat Lema\^{\i}tre universe for a large part of their
+evolution.'
+
+
+\subsection{Spelling}
+
+Please use British spelling -- e.g.\ centre not center, labelled
+not labeled. The following style regarding -ise and -ize spellings is
+followed. -ise: devise, surprise, comprise, revise,
+exercise, analyse. -ize: recognize, criticize, minimize, emphasize, organize.
+
+
+\subsection{Titles and section/subsection headings}
+
+With the exception of section headings (e.g.\
+{\bf INTRO\-DUC\-TION}$\ldots$),
+capital letters should be used only where they occur in a normal
+sentence -- e.g.\
+`\textbfit{ROSAT\/} {\bf observations of the unusual star}$\ldots$', not
+`\textbfit{ROSAT\/} {\bf Observations of the Unusual Star}$\ldots$'.
+
+\subsection{Key words}
+
+The list of Monthly Notices key words is published with the 4th
+issue of each volume. No other key words should be used. Please
+use the correct layout for key words:
+\smallskip
+
+\noindent {\bf Key words:} galaxies: active -- galaxies: Seyfert --
+radio continuum: galaxies.
+
+\subsection{Hyphens and N-rules}
+
+\beginlist
+\item (i) Hyphens (one dash in \TeX/\LaTeX). Monthly Notices uses hyphens
+for compound adjectives (e.g.\ low-density gas, least-squares fit,
+two-component model). This also applies to simple units (e.g.\
+1.5-m telescope, 284.5-nm line), but not to complex units or
+ranges, which could become cumbersome (e.g.\ 15 km s$^{-1}$ feature,
+100--200 $\umu$m observations).
+
+\item (ii) N-rules (two dashes in \TeX/\LaTeX). These are used (a) to
+separate key words, (b) as parentheses (e.g.\ `the results --
+assuming no temperature gradient -- are indicative of$\ldots$), (c) to
+denote a range (e.g.\ 1.6--2.2 $\umu$m), and (d) to denote the joining
+of two words (e.g.\ Kolmogorov--Smirnov test, Herbig--Haro
+object).
+
+\item (iii) The M-rule (three dashes in \TeX/\LaTeX) is not used in
+Monthly Notices.
+\endlist
+
+
+\subsection{References}
+
+It is important to use the correct reference style, details of
+which can be found in the editorials cited above, and which is
+demonstrated in any recent issue of the journal. The main points
+are summarized below.
+%
+\beginlist
+\item (i) In text -- for three-author papers, give all three authors
+at first mention, and `et al.' thereafter.
+
+\item (ii) In references list -- no bold or italic, no commas after
+author surnames, and no ampersand between final two author names.
+Use simplified abbreviations for frequently used journals (e.g.\
+MNRAS, ApJ, A\&A, PASP -- see full list in editorial in issue
+260/1). List all authors if eight or less, otherwise `et al.' For
+example,
+\endlist
+
+\beginrefs
+\bibitem Biggs J.D., Lyne A.G., 1992, MNRAS, 254, 257
+
+\bibitem Brown A.B., Jones C.D., 1989, in Robinson E.F.,
+Smith G.H., eds, Proc. IAU Symp. 345, Black Dwarfs. Kluwer, Dordrecht,
+p.~210
+
+\bibitem Felsteiner J., Opher R., 1991, in Treves A., ed.,
+Iron Line Diagnostics in X-ray Sources. Springer-Verlag, Berlin, p.~209
+
+\bibitem Gunn J.E., Knapp G., 1993, in Soifer B.T., ed., ASP
+Conf.\ Ser.\ Vol.~43, Sky Surveys. Astron.\ Soc.\ Pac., San Francisco,
+p.~267
+
+\bibitem Peebles P.J.E., 1980, The Large-Scale Structure of the Universe. Princeton Univ. Press, Princeton, NJ
+
+\bibitem Pounds K.A. et al., 1993, MNRAS, 260, 77
+
+\bibitem Williams B.G., 1992, PhD thesis, Univ.\ Edinburgh
+\endrefs
+
+
+\subsection{Maths}
+
+Scalar variables are italic; vectors are bold italic; matrices
+are `bold Univers' font (like bold sans serif). Differential d,
+complex i, exponential e, sin, cos, tan, log, etc., are roman.
+Sub/superscripts that are physical variables are italic, while
+those that are just labels are roman (e.g.\ $C_p$, but $T_{{\rm eff}}$).
+Equations should be punctuated as part of the sentence.
+
+
+\subsection{Miscellaneous}
+
+e.g., i.e., cf., etc., are roman.
+Single quotes ` ' not double quotes `` ".
+Take care to use correct units -- see recent \hbox{issues} for details.
+Use superscript $-1$, not solidus /, for units -- e.g.\ km~s$^{-1}$ not
+km/s. The unit of arcseconds is arcsec when used to denote angular
+size or separation (e.g.\ `beamsize 12~arcsec', `30~arcsec
+west of the star'); use \arcsec\ for positions (e.g.\
+Dec.~$-30^\circ$~29\arcmin~23\arcsec) (similarly for arcminutes).
+The unit of magnitudes is mag,
+not superscript m. Percentages should be written `per cent', not
+\%. Use the degree symbol $^\circ$ (|$^\circ$|) except to denote, e.g., areas, where
+`deg$^2$' may be more appropriate (e.g.\ `a survey area of 3~deg$^2$').
+Degree symbols should be positioned above the decimal point if
+there is one -- i.e.\ 23\fdg 4 not 23.4$^\circ$ (similarly for
+\ifCUPmtplainloaded \vadjust{\eject}\else\fi %%
+superscript
+h, m, s, and \arcmin, \arcsec\ symbols in coordinates). See guide for coding.
+Ionized species should be denoted by small caps, with a thin
+space -- e.g.\ \hbox{He\,{\sc ii}}, \hbox{C\,{\sc iv}},
+\hbox{[Fe\,{\sc ii}]} 465.8 nm, \hbox{N\,{\sc iii}} 463.4~nm. If
+lack of the correct font at your site prevents this from coming
+out on your printout, it would be helpful if you were to indicate
+as such on your manuscript so that the subeditor knows that there
+is no need for correction.
+Computer software (e.g.\ {\sc figaro}) should be in small capitals.
+Satellite names should be italic (e.g.\ {\it Ginga, IRAS\/}).
+The correct bracket order is $\{[( )]\}$.
+
+
+\section{Trouble-shooting}
+
+Authors may from time to time encounter problems with the preparation
+of their papers in \TeX/\LaTeX. The appropriate action to
+take will depend on the nature of the problem -- the following is
+intended to act as a guide.
+%
+\beginlist
+\item (i) If a problem is with \TeX/\LaTeX\ itself, rather than with the
+actual macros, \ifCUPmtplainloaded \else \vadjust{\eject}\fi %%
+please refer to the appropriate handbooks for
+initial advice.\footnote{\dag}{\TeX : Knuth D., 1986, The \TeX book.
+Addison Wesley; \LaTeX: Lamport L., 1985, \LaTeX\ User's Guide and
+Reference Manual. Addison Wesley.} If the
+solution cannot be found, and you suspect that the problem lies
+with the macros, then please contact the RAS Journal Production
+team at Blackwell Science (BS), 23 Ainslie
+Place, Edinburgh EH3 6AJ, UK (Tel: 031 226 7232; Fax: 031 226 3803;
+omit the first zero if calling from outside the UK).
+The BS office will shortly be
+accessible by email -- please see the Instructions for Authors on
+the inside back cover of Monthly Notices for details. Please
+provide precise details of the problem (what you were trying to
+do -- ideally, include examples of source code as well -- and
+what exactly happened; what error message was received).
+
+\item (ii) Problems with page make-up, particularly in the two-column
+mode (e.g.\ large spaces between paragraphs, or under headings or
+figures; uneven columns; figures/tables appearing out of order).
+Please do {\it not\/} attempt to remedy these yourself using `hard' page
+make-up commands -- the typesetters at Cambridge University Press
+(CUP) will sort out problems when typesetting. (You may, if you
+wish, draw attention to particular problems when submitting the
+final version of your paper.)
+
+\item (iii) If a required font is not available at your site, allow \TeX\
+to substitute the font and report the problem on your disk
+documentation form.
+\endlist
+
+
+\subsection{Fixes for coding problems}
+
+The new versions of the style files and macros have been designed
+to minimize the need for user-defined macros to create special
+symbols. Authors are urged, wherever possible, to use the following
+coding rather than create their own. This will minimize the
+danger of author-defined macros being accidentally `over-ridden'
+when the paper is typeset in Monotype Times (see Subsection~3.13, %%
+`Typesetting mathematics').
+%
+\beginlist
+\item (i) Fonts in sections and paper titles. The following are examples
+of styles that sometimes prove difficult to code.
+\endlist
+
+
+\subsection*{\it P\lowercase{aper titles}}
+
+\boxit{\multi\seventeenpoint\bf
+ A survey of \textbfit{IRAS\/} galaxies\\
+ at $\bmath{\delta > {\bf 50}^\circ}$\endmulti}
+%
+is produced by:
+%
+\beginlines
+|\title{A survey of \textbfit{IRAS\/} galaxies|
+| \hfil\break at $\bmath{\delta>{\bf 50}^\circ}$}|
+\smallskip
+|\shorttitle{A survey of IRAS galaxies at $\delta|
+| > 50^\circ$}|
+\endlines
+\bigskip
+
+\boxit{\multi\seventeenpoint\bf\noindent
+ Observations of compact\\
+ H\,{\elevenbf II} regions\endmulti}
+%
+is produced by:
+%
+\beginlines
+|\title{Observations of compact|
+| H\,{\elevenbf II} regions}|
+\smallskip
+|\shorttitle{Observations of compact|
+| H\,{\eightit II} regions}|
+\endlines
+
+
+\subsection*{\it S\lowercase{ection headings}}
+
+\boxit{\bf 1\quad THE \textbfit{IRAS\/} DATA FOR
+ $\bmath{\delta > {\bf 50}^\circ}$}
+%
+is produced by:
+%
+\beginlines
+|\section{The \textbfit{IRAS\/} data for|
+| $\bmath{\delta>{\bf 50}^\circ}$}|
+\endlines
+\bigskip
+
+\boxit{\bf 2\quad H\,{\sevenbf II} GALAXIES AT
+ $\bmath{\lowercase{z} > {\bf 1.6}}$}
+%
+is produced by:
+%
+\beginlines
+|\section{H\,{\sevenbf II} galaxies at|
+| $\bmath{\lowercase{z}>{\bf 1.6}}$}|
+\endlines
+
+
+\subsection*{\it S\lowercase{ubsection headings}}
+
+\boxit{\multi\bf 2.1\quad The \textbfit{IRAS\/} data for
+ $\bmath{\delta > {\bf 50}^\circ}$: galaxies\\
+ at $\bmath{z > {\bf 1.5}}$\endmulti}
+%
+is produced by:
+%
+\beginlines
+|\subsection{The \textbfit{IRAS\/} data for|
+| $\bmath{\delta > {\bf 50}^\circ}$: galaxies|
+| \hfil\break at $\bmath{z > {\bf 1.5}}$}|
+\endlines
+\bigskip
+
+\boxit{\bf 2.2\quad Observations of compact H\,{\sevenbf II} regions}
+%
+is produced by:
+%
+\beginlines
+|\subsection{Observations of compact|
+| H\,{\sevenbf II} regions}|
+\endlines
+\bigskip
+
+\boxit{\it 2.2.1\quad A survey of radio galaxies
+ for $\delta > {\it 50}^\circ$}
+%
+is produced by:
+%
+\beginlines
+|\subsubsection{A survey of radio galaxies|
+| for $\delta > {\it 50}^\circ$}|
+\endlines
+\bigskip
+
+\boxit{\it 2.2.2\quad Determination of T$_{eff}$ in compact
+ H\,{\sevenit II} regions}
+%
+is produced by:
+%
+\beginlines
+|\subsubsection{Determination of T$_{eff}$ in|
+| compact H\,{\sevenit II} regions}|
+\endlines
+
+\beginlist
+\item (ii) Small capitals and other unusual fonts in table and figure
+captions:
+\par\smallskip
+\boxit{\eightpoint {\bf Figure 1.} Profiles of the H$\alpha$ and
+ N\,{\sc iii} lines observed.}
+%
+is produced by:
+%
+\beginlines
+|\caption{Profiles of the H$\alpha$ and|
+| N\,{\sc iii} lines observed.}|
+\endlines
+
+\item (iii) Multiple author lists (to get the correct vertical spacing
+and wraparound on the title page of a multiple-author paper).
+\par\smallskip
+
+\boxit{\multi
+ \seventeenpoint\bf\noindent
+ The variation in the\\
+ strength of low-$\bmath{l}$ solar\\
+ $\bmath{p}$-modes: 1981--2
+ \medskip
+ \fourteenpoint\noindent
+ Y. Elsworth, R. Howe, G.R. Isaac,\\
+ C.P. McLeod, B.A. Miller, R. New,\\
+ C.C. Speake and S.J. Wheeler\endmulti
+}
+%
+is produced by:
+%
+\beginlines
+|\title{The variation in the\hfil\break|
+| strength of low-$\bmath{l}$ solar\hfil\break|
+| $\bmath{p}$-modes: 1981--2}|
+\smallskip
+|\shorttitle{The variation in the strength of|
+| low-$l$ solar $p$-modes: 1981--2}|
+\smallskip
+|\author{Y. Elsworth, R. Howe, G.R. Isaac,|
+| \hfil\break C.P. McLeod, B.A. Miller, R. New,|
+| \hfil\break C.C. Speake and S.J. Wheeler}|
+\smallskip
+|\shortauthor{Y. Elsworth et al.}|
+\endlines
+
+\item (iv) Ionized species (as used in the examples above). The correct
+style calls for the use of small capitals and a thin space after
+the symbol for the element: e.g.\ for \hbox{H\,{\sc ii}}, use the code
+|\hbox{H\,{\sc ii}}|. The use of the |\hbox| will stop the
+H and the {\sc ii} being separated.
+
+\item (v) Lower case greek pi ($\pi$), mu ($\mu$) and partial ($\partial$).
+In certain circumstances, the Monthly Notices style calls for these to be
+roman [when pi is used to denote the constant 3.1415$\ldots$, mu is
+used to denote `micro' in a unit (e.g.\ $\umu$m, $\umu$Jy), and partial
+is a differential symbol]. See Subsubsection~3.13.5 for instructions.
+
+\item (vi) Decimal degrees, arcmin, arcsec, hours, minutes and seconds.
+The symbol needs to be placed vertically above the decimal point.
+For example, the sentence
+%
+\beginquote
+The observations were made along position angle
+120\fdg 5, starting from the central coordinates
+${\rm RA}(1950)=19^{\rm h}~22^{\rm m}~18\fs 2$,
+${\rm Dec.}~(1950)=45^\circ~18'~36\farcs 4$
+\endquote
+%
+uses the following coding:
+%
+\beginlines
+|The observations were made along position angle|
+|120\fdg 5, starting from the central coordinates|
+|${\rm RA}(1950)=19^{\rm h}~22^{\rm m}~18\fs 2$,|
+|${\rm Dec.}~(1950)=45^\circ~18'~36\farcs 4$|
+\endlines
+
+\item (vii) The correct coding for the prime symbol \arcmin\ is
+|\arcmin|, and that for \arcsec\ is |\arcsec|; see the two
+tables on special symbols.
+
+\item (viii) N-rules, hyphens and minus signs (see style guide for
+correct usage). To create the correct symbols in the sentence
+%
+\beginquote
+The high-resolution observations were made along a
+line at an angle of $-15^\circ$ (east from north)
+from the axis of the jet, which runs north--south
+\endquote
+%
+you would use the following code:
+%
+\beginlines
+|The high-resolution observations were made along|
+|a line at an angle of $-15^\circ$ (east from|
+|north) from the axis of the jet, which runs|
+|north--south|
+\endlines
+
+\item (ix) Vectors and matrices should be bold italic and bold sans
+serif respectively. To create the correct fonts for the vector $\bmath{x}$
+and the matrix \textbfss{P}, you should use |$\bmath{x}$| and
+|\textbfss{P}| respectively; |\mathbfss| is for use in
+math mode. Bold face text italic can be obtained by using
+|\textbfit{..}| and |\mathbfit{..}| for math mode.
+\ifCUPmtplainloaded \else \vfil\eject\fi %%
+\item (x) Bold italic superscripts and subscripts. To get these
+to come out in the correct font and the right size, you need to use
+|\bmath|. You can create the output $\bmath{k_x}$ by typing |$\bmath{k_x}$|.
+Try to avoid using \TeX\ commands to determine script sizes that are
+already defined in the macros. For example, macros such as
+%
+\beginlines
+|\def\th{^\hbox{\sevenrm th}}|
+\endlines
+%
+are generating extra work;
+%
+\beginlines
+|\def\th{^{\rm th}}|
+\endlines
+%
+will do, and will get the size of the superscript right whether in main
+text, tables or captions (the use of |\sevenrm| over-rides the macros).
+Also, the |\hbox| is not necessary, as \TeX\ won't split a
+superscript/subscript from its variable at a line break.
+
+\item (xi) Calligraphic letters (uppercase only).
+%
+Normal uppercase calligraphic can be produced with |\cal| as
+normal (in math mode). Bold calligraphic can be produced with |\bmath|,
+e.g.\ |$\bmath{\cal A}$| gives $\bmath{\cal A}$.
+
+\item (xii) Automatic scaling of brackets. The codes |\left| and
+|\right| should be used to scale brackets automatically to
+fit the equation being set. For example, to get
+$$
+ v = x \left( {N+2}\over {N} \right)
+$$
+use the code
+%
+\beginlines
+|$$|
+| v = x \left( {N+2}\over {N} \right)|
+|$$|
+\endlines
+
+\item (xiii) Roman font in equations. It is often necessary to make some
+symbols roman in an equation (e.g.\ units, subscripts). For example,
+to get the following output:
+$$
+ \sigma \simeq (r/13~h^{-1}~{\rm Mpc})^{-0.9},
+ \qquad \omega = {{N-N_{\rm s}}\over {N_{\rm R}}},
+$$
+you should use:
+%
+\beginlines
+|$$|
+| \sigma\simeq (r/13~h^{-1}~{\rm Mpc})^{-0.9},|
+| \qquad\omega={{N-N_{\rm s}}\over {N_{\rm R}}},|
+|$$|
+\endlines
+
+\item (xiv) Continuation figure and table captions.
+See Subsection~3.6. %%
+\endlist
+
+
+\subsection{Springer-Verlag macro names}
+
+These have been incorporated from the Astronomy \& Astrophysics \LaTeX\
+style file, to aid in the creation of various commonly used
+astronomical symbols. Please see Subsubsection~3.13.6 for details. %%
+
+\bye
+
+% end of mnguide.tex
diff --git a/macros/plain/contrib/mnras/mnland.tex b/macros/plain/contrib/mnras/mnland.tex
new file mode 100644
index 0000000000..968077488f
--- /dev/null
+++ b/macros/plain/contrib/mnras/mnland.tex
@@ -0,0 +1,82 @@
+% MNLAND.TEX
+%
+% A landscape figure for the sample plain TeX Monthly Notices article.
+%
+% v1.1 --- released 25th August 1994 (M. Reed)
+% v1.0 --- first released 17th February 1994
+%
+% Copyright Cambridge University Press
+
+% The following line automatically loads the mn macros if you are not
+% using a format file.
+\ifx\mnmacrosloaded\undefined \input mn\fi
+
+% If your system has the AMS fonts version 2.0 installed, MN.tex can be
+% made to use them by uncommenting the line: %\AMStwofontstrue
+%
+% By doing this, you will be able to obtain upright Greek characters.
+% e.g. \umu, \upi etc. See the section on "Upright Greek characters" in
+% this guide for further information.
+
+% !! AMS fonts are not used in this file. The following code is provided
+% for your convenience !!
+\newif\ifAMStwofonts
+%\AMStwofontstrue
+
+\ifCUPmtplainloaded \else
+ \NewTextAlphabet{textbfit} {cmbxti10} {}
+ \NewTextAlphabet{textbfss} {cmssbx10} {}
+ \NewMathAlphabet{mathbfit} {cmbxti10} {} % for math mode
+ \NewMathAlphabet{mathbfss} {cmssbx10} {} % " " "
+ %
+ \ifAMStwofonts
+ %
+ \NewSymbolFont{upmath} {eurm10}
+ \NewSymbolFont{AMSa} {msam10}
+ \NewMathSymbol{\upi} {0}{upmath}{19}
+ \NewMathSymbol{\umu} {0}{upmath}{16}
+ \NewMathSymbol{\upartial}{0}{upmath}{40}
+ \NewMathSymbol{\leqslant}{3}{AMSa}{36}
+ \NewMathSymbol{\geqslant}{3}{AMSa}{3E}
+ \let\oldle=\le \let\oldleq=\leq
+ \let\oldge=\ge \let\oldgeq=\geq
+ \let\leq=\leqslant \let\le=\leqslant
+ \let\geq=\geqslant \let\ge=\geqslant
+ \else
+ \def\umu{\mu}
+ \def\upi{\pi}
+ \def\upartial{\partial}
+ \fi
+\fi
+
+
+%\special{landscape} % only use this if your driver supports it
+
+% Marginal adjustments using \pageoffset maybe required when printing
+% proofs on a Laserprinter (this is usually not needed).
+% Syntax: \pageoffset{ +/- hor. offset}{ +/- vert. offset}
+% e.g. \pageoffset{-3pc}{-4pc}
+
+\pageoffset{0pc}{-1.5pc}
+
+\landscape
+\authorcomment{Landscape material to be pasted into the article.}
+
+\begintopmatter % these must be here
+\maketitle %
+
+
+\beginfigure{1}
+\caption{{\bf Figure 4.} Photometric comparisons in the overlap areas
+ between the fields. The differences between photometry of individual images
+ from different fields for the overlapping fields 52--51, 50--51, 50--28 and
+ 30--29 are shown for the $B_{\rm J}$ and $R$ wavebands. The axes are as
+ follows. Left-hand panels: $\Delta B$ ($-1$ to 1) against
+ $\langle B \rangle$ (13 to 21). Right-hand panels: $\Delta R$ ($-1$ to 1)
+ against $\langle R \rangle$ (12 to 20).}
+\endfigure
+
+
+\bye
+
+% end of mnland.tex
diff --git a/macros/plain/contrib/mnras/mnsample.tex b/macros/plain/contrib/mnras/mnsample.tex
new file mode 100644
index 0000000000..b19ea01c60
--- /dev/null
+++ b/macros/plain/contrib/mnras/mnsample.tex
@@ -0,0 +1,705 @@
+% MNSAMPLE.TEX
+%
+% A sample plain TeX single/two column Monthly Notices article.
+%
+% v1.5 --- released 25th August 1994 (M. Reed)
+% v1.4 --- released 22nd February 1994
+% v1.3 --- released 8th December 1992
+%
+% Copyright Cambridge University Press
+
+% The following line automatically loads the mn macros if you are not
+% using a format file.
+\ifx\mnmacrosloaded\undefined \input mn\fi
+
+% If your system has the AMS fonts version 2.0 installed, MN.tex can be
+% made to use them by uncommenting the line: %\AMStwofontstrue
+%
+% By doing this, you will be able to obtain upright Greek characters.
+% e.g. \umu, \upi etc. See the section on "Upright Greek characters" in
+% this guide for further information.
+
+\newif\ifAMStwofonts
+%\AMStwofontstrue
+
+\ifCUPmtplainloaded \else
+ \NewTextAlphabet{textbfit} {cmbxti10} {}
+ \NewTextAlphabet{textbfss} {cmssbx10} {}
+ \NewMathAlphabet{mathbfit} {cmbxti10} {} % for math mode
+ \NewMathAlphabet{mathbfss} {cmssbx10} {} % " " "
+ %
+ \ifAMStwofonts
+ %
+ \NewSymbolFont{upmath} {eurm10}
+ \NewSymbolFont{AMSa} {msam10}
+ \NewMathSymbol{\upi} {0}{upmath}{19}
+ \NewMathSymbol{\umu} {0}{upmath}{16}
+ \NewMathSymbol{\upartial}{0}{upmath}{40}
+ \NewMathSymbol{\leqslant}{3}{AMSa}{36}
+ \NewMathSymbol{\geqslant}{3}{AMSa}{3E}
+ \let\oldle=\le \let\oldleq=\leq
+ \let\oldge=\ge \let\oldgeq=\geq
+ \let\leq=\leqslant \let\le=\leqslant
+ \let\geq=\geqslant \let\ge=\geqslant
+ \else
+ \def\umu{\mu}
+ \def\upi{\pi}
+ \def\upartial{\partial}
+ \fi
+\fi
+
+
+% Marginal adjustments using \pageoffset maybe required when printing
+% proofs on a Laserprinter (this is usually not needed).
+% Syntax: \pageoffset{ +/- hor. offset}{ +/- vert. offset}
+% e.g. \pageoffset{-3pc}{-4pc}
+
+\pageoffset{-2.5pc}{0pc}
+
+\loadboldmathnames
+
+% \Referee % uncomment this for referee mode (double spaced)
+
+% \pagerange, \pubyear and \volume are defined at the Journals office and
+% not by an author.
+
+% \onecolumn % enable one column mode
+% \letters % for `letters' articles
+\pagerange{1--7} % `letters' articles should use \pagerange{Ln--Ln}
+\pubyear{1989}
+\volume{226}
+% \microfiche{} % for articles with microfiche
+% \authorcomment{} % author comment for footline
+
+\begintopmatter % start the two spanning material
+
+\title{Dust envelopes around RV Tauri stars}
+\author{A. V. Raveendran}
+\affiliation{Indian Institute of Astrophysics, Bangalore 560034, India}
+
+\shortauthor{A. V. Raveendran}
+\shorttitle{Dust envelopes around RV Tauri stars}
+
+% \acceptedline is to be defined at the Journals office and not
+% by an author.
+
+\acceptedline{Accepted 1988 December 15. Received 1988 December 14;
+ in original form 1988 October 11}
+
+\abstract {In the {\it IRAS\/} [12]--[25], [25]--[60]
+colour--colour diagram, RV Tauri stars are found to populate
+cooler temperature regions $(T<600\,{\rm K})$, distinctly
+different from those occupied by the oxygen and carbon Miras.
+The {\it IRAS\/} fluxes are consistent with the dust density in
+the envelope varying as the inverse square of the radial
+distance, implying that the grain formation processes in these
+objects are most probably continuous and not sporadic. It is
+found that the spectroscopic subgroups A and B are
+well separated in the far-infrared two-colour diagram, with
+group B objects having systematically cooler dust envelopes. We
+interpret this as being due to a difference in the nature of
+grains, including the chemical composition, in the two cases.}
+
+\keywords {circumstellar matter -- infrared: stars.}
+
+\maketitle % finish the two spanning material
+
+
+\section{Introduction}
+
+It has been well established that RV Tauri variables
+possess infrared emission far in excess of their expected
+blackbody continuum, arising from their extended cool dust
+envelopes (Gehrz \& Woolf 1970; Gehrz 1972; Gehrz \& Ney 1972).
+Recently, Lloyd Evans (1985) and Goldsmith et~al.\ (1987)
+have given detailed descriptions of the near-infrared
+properties of RV Tauri stars. In this paper we present an
+analysis of the {\it IRAS\/} data of RV Tauri stars with the help
+of the far-infrared two-colour diagram and a grid computed
+using a simple model of the dust envelope. Such two-colour plots
+have already been employed extensively by several investigators
+to study the circumstellar envelopes around oxygen-rich and
+carbon-rich objects which are in the late stages of stellar
+evolution (Hacking et~al.\ 1985; Zuckerman \& Dyck 1986;
+van der Veen \& Habing 1988; Willems \& de Jong 1988).
+
+Table~1 summarizes the basic data on the 17 objects
+detected at 60$\,\umu$m. Apart from the {\it IRAS\/} identification
+and the flux densities at 12-, 25-, 60- and 100-$\umu$m wavebands,
+it gives the spectroscopic groups of Preston et~al.\ (1963),
+the light-curve classes of Kukarkin et~al.\ (1969) and the periods of
+light variation. The list, which
+contains about 20 per cent of all the known RV Tauri stars,
+is essentially the same as that given by Jura (1986). The
+spectroscopic subgroups are from either Preston et~al.\ (1963) or
+Lloyd Evans (1985).
+%
+\begintable*{1}
+\caption{{\bf Table 1.} Data on the RV Tauri stars detected by {\it IRAS}.}
+\halign{%
+\rm#\hfil&\qquad\rm#\hfil&\qquad\rm\hfil#&\qquad\rm\hfil
+#&\qquad\rm\hfil#&\qquad\rm\hfil#&\qquad\rm#\hfil
+&\qquad\rm\hfil#&\qquad\rm#\hfil&\qquad\hfil\rm#\cr
+Name&&\multispan4\hskip23pt\hss Flux density (Jy)$^a$\hss \cr
+Variable&{\it IRAS}&12$\;\umu$m&25$\;\umu$m
+&60$\;\umu$m&100$\;\umu$m&Sp.&Period&Light-&$T_0({\rm K})$\cr
+&&&&&&group&(d)\hfill&curve\cr
+&&&&&&&&type\cr
+\noalign{\vskip 10pt}
+TW Cam&04166$+$5719&8.27&5.62&1.82&$<$1.73&A&85.6&a&555\cr
+RV Tau&04440$+$2605&22.53&18.08&6.40&2.52&A&78.9&b&460\cr
+DY Ori&06034$+$1354&12.44&14.93&4.12&$<$11.22&B&60.3&&295\cr
+CT Ori&06072$+$0953&6.16&5.57&1.22&$<$1.54&B&135.6&&330\cr
+SU Gem&06108$+$2734&7.90&5.69&2.16&$<$11.66&A&50.1&b&575\cr
+UY CMa&06160$-$1701&3.51&2.48&0.57&$<$1.00&B&113.9&a&420\cr
+U Mon&07284$-$0940&124.30&88.43&26.28&9.24&A&92.3&b&480\cr
+AR Pup&08011$-$3627&131.33&94.32&25.81&11.65&B&75.0&b&450\cr
+IW Car&09256$-$6324&101/06&96.24&34.19&13.07&B&67.5&b&395\cr
+GK Car&11118$-$5726&2.87&2.48&0.78&$<$12.13&B&55.6&&405\cr
+RU Cen&12067$-$4508&5.36&11.02&5.57&2.01&B&64.7&&255\cr
+SX Cen&12185$-$4856&5.95&3.62&1.09&$<$1.50&B&32.9&b&590\cr
+AI Sco&17530$-$3348&17.68&11.46&2.88&$<$45.62&A&71.0&b&480\cr
+AC Her&18281$+$2149&41.47&65.33&21.12&7.79&B&75.5&a&260\cr
+R Sct&18448$-$0545&20.88&9.30&8.10&$<$138.78&A&140.2&a\cr
+R Sge&20117$+$1634&10.63&7.57&2.10&$<$1.66&A&70.6&b&455\cr
+V Vul&20343$+$2625&12.39&5.72&1.29&$<$6.96&A&75.7&a&690\cr
+}
+\tabletext{\noindent $^a$Observed by {\it IRAS}.}
+\endtable
+
+
+\section{Description of the envelope model}
+
+If we assume that the dust grains in the envelope are
+predominantly of the same kind and are in thermal equilibrium,
+the luminosity at frequency $\nu$ in the infrared is given by
+$$
+ L(\nu)=\mskip-25mu\int\limits_{\rm envelope}\mskip-25mu
+ \rho(r)Q_{{\rm abs}}
+ (\nu)B[\nu,T_{\rm g}(r)]\exp [-\tau(\nu,r)]\> {\rm d}V, \eqno\stepeq
+$$
+where
+$Q_{{\rm abs}}(\nu)$ is the absorption efficiency at frequency $\nu$,
+$\rho(r)$ is the dust grain density,
+$T_{\rm g}(r)$ is the grain temperature,
+$B[\nu,T_{\rm g}(r)]$ is the Planck function and
+$\tau(\nu,r)$ is the optical depth at distance {\it r\/} from the
+centre of the star.
+
+The temperature $T_{\rm g}(r)$ is determined by the condition of
+energy balance: amount of energy radiated = amount of energy
+absorbed. The amount of energy absorbed at any point is
+proportional to the total available energy at that point, which
+consists of:
+\beginlist
+\item (i) the attenuated and diluted stellar radiation;
+\item (ii) scattered radiation, and
+\item (iii) reradiation from other grains.
+\endlist
+
+Detailed solutions of radiative transfer in circumstellar
+dust shells by Rowan-Robinson \& Harris (1983a,b) indicate that
+the effect of heating by other grains becomes significant only at
+large optical depths at the absorbing frequencies $[\tau({\rm
+UV})\gg 10]$, and at optical depths $\tau({\rm UV})<1$ the grains
+have approximately the same temperature that they would have if
+they were seeing the starlight unattenuated and no other
+radiation.
+
+The Planck mean optical depths of circumstellar envelopes
+around several RV Tauri stars, derived from the ratios of the
+luminosities of the dust shell (at infrared wavelengths) and
+the star, range from 0.07 to 0.63 (Goldsmith et~al.\ 1987).
+There is much uncertainty in the nature of the optical
+properties of dust grains in the envelope. The carbon-rich RV
+Tauri stars are also reported to show the 10-$\umu$m silicate
+emission feature typical of oxygen-rich objects (Gehrz \& Ney
+1972; Olnon \& Raimond 1986). The pure terrestrial silicates or
+lunar silicates are found to be completely unsuitable to account
+for the infrared emission from circumstellar dust shells around
+M-type stars (Rowan-Robinson \& Harris 1983a). We assume that
+the absorption efficiency $Q_{{\rm abs}} (\nu)$ in the infrared
+varies as $\nu^{\gamma}$. ${\gamma}=1$ appears to provide a
+reasonable fit in a variety of sources (Harvey, Thronson \&
+Gatley 1979; Jura 1986). Under these circumstances the
+condition of energy balance implies that the dust temperature
+$T_{\rm g}$ will vary as $r^{\beta}$.
+
+In view of the low value of the observed Planck mean optical
+depth for the stellar radiation and the nature of the assumed
+frequency dependence of the absorption efficiency, the
+extinction of the infrared radiation by the dust envelope can
+be neglected. If we consider the envelope to be spherically
+symmetric, equation (1) reduces to
+$$
+ L(\nu)=\!\!\int_{r_{1}}^{r_{2}}\!\!4\upi r^2\rho(r)\> Q_{{\rm abs}}
+ (\nu)B[\nu,T_{\rm g}(r)]\> {\rm d}r, \eqno\stepeq
+$$
+where $r_1$ and $r_2$ are the inner and outer radii of the
+shell. For a dusty density distribution $\rho(r)\propto
+r^{\alpha}$ and $r_2\gg r_1$, equation (2) reduces to
+$$
+ L(\nu)\propto \nu^{2+\gamma-Q}
+ \int_{X_0}^{\infty}{{x^Q}\over{{\rm e}^x-1}}{\rm d}x, \eqno\stepeq
+$$
+where $Q=-(\alpha+\beta+3)/\beta$ and $X_0=(h\nu /kT_0)$.
+$T_0$ represents the temperature at the inner boundary of the
+dust shell where grains start condensing. In a steady radiation
+pressure driven mass outflow in the optically thin case, values of
+$\alpha$ lie near $-2$ (Gilman 1972). $\gamma$ and $\beta$ are
+related by $\beta=-2/(\gamma+4)$.
+
+In the {\it IRAS\/} Point Source Catalog (PSC, Beichman et~al.\ 1985a),
+the flux densities have been quoted at the effective
+wavelengths 12, 25, 60 and 100$\,\umu$m, assuming a flat energy
+spectrum $[\nu F(\nu)=1]$ for the observed sources. For each model
+given by equation (3), using the relative system response, the
+colour-correction factors (Beichman et~al.\ 1985b) in each
+of the {\it IRAS\/} passbands were calculated and the fluxes
+were converted into flux densities expected for a flat energy
+distribution, as assumed in the {\it IRAS\/} PSC, so that the
+computed colours can be directly compared with the colours
+determined from the catalogue quantities. Such a procedure
+is more appropriate than correcting the {\it IRAS\/}
+colours for the energy distribution given by a particular model
+and then comparing them with those computed by the model.
+
+
+\subsection{Colour--colour diagram}
+
+The IR colour is defined as
+$$
+ [\nu_1]-[\nu_2]=-2.5\log [f(\nu_1)/f(\nu_2)],
+$$
+where $\nu_1$ and $\nu_2$ are any two wavebands and
+$f(\nu_1)$ and $f(\nu_2)$ are the corresponding flux densities
+assuming a flat energy spectrum for the source.
+%
+\beginfigure{1}
+\vskip 91mm
+\caption{{\bf Figure 1.} Plot of [25]--[60] colours of
+RV Tauri stars against their [12]--[25] colours after normalizing
+as indicated in Beichman et~al.\ (1985b). Some of the objects
+are identified by their variable-star names. Typical error bars
+are shown in the bottom right-hand corner. The lines represent
+the loci for constant inner shell temperature and the quantity
+$Q$. Note the separation of group A and B stars at $T_0 \sim$
+460$\,$K. Positions occupied by a sample of carbon and oxygen
+Miras are also shown. The $Q=1.0$ line differs from the
+blackbody line by a maximum of $\sim 0.05$.}
+\endfigure
+
+In Fig.~1, we have plotted the [25]--[60] colours of
+RV Tauri stars against their corresponding [12]--[25] colours
+derived from the {\it IRAS\/} data. Filled circles represent
+stars of group A and open circles stars of group B. The two
+sets of near-parallel lines represent the loci of constant
+inner shell temperature $T_0$ and the quantity $Q$ defined
+above. The models correspond to the case of absorption
+efficiency $Q_{{\rm abs}}(\nu)$ varying as $\nu$ (with
+$\gamma=1$ and hence $\beta=-0.4$). We have omitted R Sct in
+Fig.~1 because it shows a large deviation from the average
+relation shown by all the other objects. R Sct has a
+comparatively large excess at 60$\,\umu$m, but the extent of a
+possible contamination by the infrared cirrus (Low et~al.\ 1984)
+is unknown. Goldsmith et~al.\ (1987) found no
+evidence of the presence of a dust envelope at near-IR
+wavelengths and the spectrum was consistent with a stellar
+continuum. This explains why R Sct lies well below the mean
+relation shown by stars of groups A and C between the
+[3.6]--[11.3] colour excess and the photometrically determined
+(Fe/H) (Dawson 1979). R Sct has the longest period of 140$\,$d
+among the RV Tauri stars detected at far-infrared wavelengths
+and does not have the 10-$\umu$m emission feature seen in other
+objects (Gehrz 1972; Olnon \& Raimond 1986). R Sct is probably
+the most irregular RV Tauri star known (McLaughlin 1932).
+
+The inner shell temperatures $(T_0)$ derived for the various
+objects are also given in Table~1 and we find the majority of
+them to have temperatures in the narrow range 400--600$\,$K. If
+the dependences of $Q_{{\rm abs}}(\nu)$ on $\nu$ and $\rho(r)$ on
+$r$ are similar in all the objects considered, then in the
+colour--colour diagram they all should lie along a line
+corresponding to different values of $T_0$ and in Fig.~1 we find
+that this is essentially the case. In view of the quoted
+uncertainties in the flux measurements, we cannot attach much
+significance to the scatter in Fig.~1.
+%
+\beginfigure*{2}
+\vskip 5.9cm
+\caption{{\bf Figure 2.} Plot of the [60]--[100] colours
+of RV Tauri stars against their [25]--[60] colours after normalizing
+as indicated in Beichman et~al.\ (1985b). The solid lines
+represent the loci for constant inner shell temperature and the
+quantity $Q$. The dashed line shows the locus for a blackbody
+distribution.}
+\endfigure
+
+At 100$\,\umu$m the infrared sky is characterized by emission,
+called infrared cirrus, from interstellar dust on all spatial
+scales (Low et~al.\ 1984), thereby impairing the
+measurements at far-infrared wavelengths. In Fig.~2, we have
+plotted the [60]--[100] colours of the six RV Tauri stars
+detected at 100$\,\umu$m against their [25]--[60] colours, along
+with the grid showing the regions of different values for inner
+shell temperature $T_0$ and the quantity $Q$, as in Fig.~1. The
+results indicated by Fig.~2 are consistent with those derived
+from Fig.~1. AR Pup shows a large excess at 100$\,\umu$m but, in
+view of the large values for the cirrus flags given in the
+catalogue, the intrinsic flux at 100$\,\umu$m is uncertain.
+
+
+\subsection{Radial distribution of dust}
+
+From Fig.~1, it is evident that all RV Tauri stars lie
+between the lines corresponding to $Q=1.5$ and $0.5$. With
+$$
+ \alpha=-(1+Q)\beta-3,
+$$
+these values suggest limits of $r^{-2.0}$ and $r^{-2.4}$
+for the dust density variation, indicating a near-constant
+mass-loss rate. Jura (1986) has suggested that the density in
+the circumstellar envelope around RV Tauri stars varies as
+$r^{-1}$, implying a mass-loss rate that was greater in the
+past than it is currently. By fitting a power law to the
+observed fluxes, such that $f(\nu)$ varies as $\nu^q$, values
+of $q$ determined by him for the various objects given in
+Table~1 lie in the range 0.6--1.2, with a mean $\bar q=0.98$. The
+assumption of a power law corresponds to the case of $X_0=0$ in
+equation (3) and hence we get
+$$
+ q=2+\gamma -Q.
+$$
+Since we assume that $Q_{{\rm abs}}(\nu)$ varies as $\nu$,
+the resulting value for $Q$=2.0. None of the objects is found
+to lie in the corresponding region in the colour--colour
+diagram. Even this extreme value for $Q$ implies a density
+which varies as $r^{-1.8}$.
+
+Goldsmith et~al.\ (1987) have reported that the
+simultaneous optical and near-IR data of AC Her can be fitted
+by a combination of two blackbodies at 5680 and 1800$\,$K,
+representing, respectively, the stellar and dust shell
+temperatures, and suggested that in RV Tauri stars the grain
+formation is a sporadic phenomenon and not a continuous
+process. Apparently, they have been influenced by the remark by
+Gehrz \& Woolf (1970) that their data in the 3.5--11$\,\umu$m
+region of AC Her indicated a dust temperature of $\sim300\,$K. We
+find that the {\it K--L\/} colours given by Gehrz (1972), Lloyd
+Evans (1985) and Goldsmith et~al.\ (1987) are all
+consistent with each other. Surely, hot dust ($\sim 1800\,$K), if
+present at the time of observations by Goldsmith et~al.\ (1987),
+would have affected the {\it K--L\/} colour
+significantly. AC Her, like other members of its class, is
+found to execute elongated loops in the ({\it U--B\/}), ({\it
+B--V\/}) plane (Preston et~al.\ 1963), indicating that
+significant departure of the stellar continuum from the
+blackbody is to be expected. Further, their data show only a
+marginal excess at the near-IR wavelengths. We feel that the
+case for the existence of hot dust around AC Her and hence for
+the sporadic grain formation around RV Tauri stars is not
+strong. In Fig.~3 we find that AC Her and
+RU Cen lie very close to R Sct which, according to Goldsmith
+et~al.\ (1987), shows no evidence for the presence of a hot
+dust envelope.
+
+
+\subsubsection{Comparison with oxygen and carbon Miras}
+
+In Fig.~1 we have also shown the positions of a sample of
+oxygen-rich and carbon-rich Miras. At the low temperatures
+characteristic of the Miras, a part of the emission at 12$\,\umu$m
+comes from the photosphere. For a blackbody at 2000$\,$K, the ratio
+of fluxes at wavelengths of 12 and 2$\,\umu$m $(f_{12}/f_{2})\sim
+0.18$. The Miras shown in Fig.~1 have $(f_{12}/f_{2})$
+ratios larger than twice the above value. It is clear that the
+three groups of objects populate three different regions of the
+diagram. Hacking et~al.\ (1985) have already noticed that
+there are distinct differences between the {\it IRAS\/} colours
+of oxygen-rich and carbon-rich objects. On the basis of an
+analysis, using a bigger sample of bright giant stars in the
+{\it IRAS\/} catalogue, this has been interpreted by Zuckerman \&
+Dyck (1986) as being due to a systematic difference in the dust
+grain emissivity index. U Mon shows the 10-$\umu$m silicate
+emission convincingly and, in most of the other objects for
+which low-resolution spectra in the near-infrared have been
+reported (Gehrz 1972; Olnon \& Raimond 1986), the 10-$\umu$m
+emission may be partly attributed to silicates. Hence it is
+reasonable to expect that, in the envelopes around at least some
+of the RV Tauri stars, the dust grains are predominantly of
+silicates, as in the case of oxygen Miras (Rowan-Robinson \&
+Harris 1983a). The fact that none of the RV Tauri stars is
+found in the region of the two-colour diagram occupied by the
+oxygen Miras indicates that the emissivity indices of the
+silicate grains in the two cases are different. Because of the
+higher temperatures and luminosities, the environment of grain
+formation will be different in RV Tauri stars.
+
+
+\subsubsection{Correlation with subgroups}
+
+Preston et~al.\ (1963) have identified three spectroscopic
+subgroups, which are designated as groups A, B and C. Objects of
+group A are metal-rich; group C are metal-poor; group~B objects are
+also metal-poor, but show carbon enhancements (Preston et~al.\ 1963;
+Lloyd Evans 1974; Dawson 1979; Baird 1981). It is interesting
+to see that Table~1 contains no group C objects and that in Fig.~1
+there is a clear separation of the two spectroscopic subgroups A
+and B, with the demarcation occurring at an inner shell
+temperature of about 450$\,$K, group~B stars having lower
+temperatures than group A. SX Cen is the only exception. Lloyd
+Evans (1974) has reported that metal lines are stronger in SX Cen
+than in other group~B objects. It may be worth noting that SX Cen
+has the shortest period among the 100 or so objects with the RV
+Tauri classification. RU Cen has the coolest inner shell
+temperature, as already suggested by the near-infrared spectrum
+(Gehrz \& Ney 1972).
+%
+\beginfigure{3}
+\vskip 59mm
+\caption{{\bf Figure 3.} Plot of $(K$--$L)$ colours of
+RV Tauri stars detected by {\it IRAS\/} against their corresponding
+$(J$--$K)$ colours. The position of AR Pup is indicated. The three
+objects lying close to the blackbody line are AC Her, RU Cen and R Sct.}
+\endfigure
+
+Group~B objects follow a different mean relationship from those
+of group~A, having systematically larger 11-$\umu$m excess for a
+given excess at 3$\,\umu$m (Lloyd Evans 1985). For a general
+sample of RV Tauri stars, the distinction between the
+oxygen-rich and carbon-rich objects is not that apparent in the
+{\it JHKL\/} bands. In Fig.~3 we have plotted the near-IR
+magnitudes of the objects given in Table~1 (except V Vul which
+has no available measurements) in the {\it J--K, K--L\/} plane.
+The colours, taken from Lloyd Evans (1985) and Goldsmith
+et~al.\ (1987), are averaged if more than one observation
+exists, because the internal agreements are found to be often
+of the order of observational uncertainties, in accordance with
+the earlier finding by Gehrz (1972) that variability has
+relatively little effect on colours. Barring RU Cen and AC Her,
+it is evident that stars belonging to group~B show
+systematically larger excesses at {\it L\/}~band for a given
+excess at {\it K}. The low excesses at near-IR wavelengths for
+AC Her and RU Cen are consistent with the very low dust
+temperatures indicated by the far-infrared colours.
+%
+\ifsinglecol
+ \pageinsert
+ \vfil
+ \centerline{Landscape figure to go here. This figure was not
+ part of the original paper and is inserted here for illustrative
+ purposes.}
+ \centerline{See the author guide for details on how to handle landscape
+ figures or tables, and {\tt mnland.tex}.}
+ \centerline{{\bf Figure 4.}}
+ \vfil
+ \endinsert
+\else
+ \beginfigure*{4}
+ \vbox to 646pt{\vfil
+ \centerline{Landscape figure to go here. This figure was not
+ part of the original paper and is inserted here for illustrative
+ purposes.}
+ \centerline{See the author guide for details on how to handle landscape
+ figures or tables, and {\tt mnland.tex}.}
+ \caption{{\bf Figure 4.}}
+ \vfil}
+ \endfigure
+\fi
+
+It is already well established that from {\it UBV\/} photometry
+one can distinguish between groups A and~B, members of group~A
+being significantly redder than those of group~B (Preston
+et~al.\ 1963). Similarly, Dawson (1979) has found that the two
+spectroscopic groups are well separated in the DDO
+colour--colour diagrams when mean colours are used for the
+individual objects.
+
+The clear separation of the spectroscopic subgroups A and~B in
+the IR two-colour diagram suggests that the natures of dust
+grains in the envelopes in the two cases are not identical.
+This is to be expected because of the differences in the
+physical properties of the stars themselves. The average
+colours of group~B stars are bluer than group A, but the
+envelope dust temperatures of B are cooler than those of~A. The
+near-IR spectra of AC Her and RU Cen are extremely similar
+(Gehrz \& Ney 1972). The striking similarities in the optical
+spectra of AC Her and RU Cen have been pointed out by Bidelman
+(O'Connell 1961). We feel that the physical properties,
+including the chemical composition, of the grains formed in
+the circumstellar envelope strongly depend on those of the
+embedded star. This, probably, explains the diversity of the
+energy distributions of RV Tauri stars in the near-infrared
+found by Gehrz \& Ney (1972). On the basis of the observed
+differences in chemical abundances and space distribution of RV
+Tauri stars, Lloyd Evans (1985) has already pointed out that
+there is no direct evolutionary connection between group~A and
+group~B objects, thus ruling out the possibility that group~B
+objects are the evolutionary successors of group~A, in which
+grain formation has stopped and the cooler temperatures for the
+former are caused by an envelope expansion.
+
+Kukarkin et~al.\ (1969) have subdivided RV Tauri stars
+into two classes, RVa and RVb, on the basis of their light
+curves; the former shows a constant mean brightness, whereas
+the latter shows a cyclically varying mean brightness.
+Extensive observations in the near-infrared show that, on
+average, RVb stars are redder than RVa stars, and Lloyd Evans
+(1985) has suggested that in RVb stars dust shells are denser
+in the inner regions and hence radiate strongly in the
+1--3$\,\umu$m region. Fig.~3 confirms this; RVb objects show
+systematically larger ({\it J--K\/}) and ({\it K--L\/}) colours than RVa
+objects. Apparently, there is no distinction between objects of
+the two light-curve types at far-infrared wavelengths (Fig.~1).
+
+
+\section{Conclusions}
+
+In the [12]--[25], [25]--[60] colour diagram, RV Tauri
+stars populate cooler temperature regions $(T<600\,\rm {K})$,
+distinctly different from those occupied by the oxygen and
+carbon Miras. Using a simple model in which
+\beginlist
+\item (i) the envelope is spherically symmetric,
+\item (ii) the IR-emitting grains are predominantly of the same kind, and
+\item (iii) in the IR the absorption efficiency $Q_{{\rm abs}} (\nu)\propto\nu$,
+\endlist
+we find that the {\it IRAS\/} fluxes
+are consistent with the density in the envelope $\rho(r)\propto
+r^{-2}$, where {\it r\/} is the radial distance. Such a
+dependence for the dust density implies that the mass-loss
+rates in RV Tauri stars have not reduced considerably during
+the recent past, contrary to the suggestion by Jura (1986). In
+the two-colour diagram, the blackbody line and the line
+corresponding to $\rho(r)\propto r^{-2.2}$ nearly overlap and
+the present data are insufficient to resolve between the two
+cases. The latter case is more physically reasonable, however.
+
+The spectroscopic subgroups A and B are well separated in
+the {\it IRAS\/} two-colour diagram, with group B objects having
+systematically cooler dust envelopes. If we consider only the
+objects detected by {\it IRAS}, we find that stars
+belonging to group B show systematically larger excess at {\it
+L\/}~band for a given excess at {\it K}. Apparently, there is no
+correlation between the light-curve types (RVa and RVb) and the
+far-infrared behaviour of these objects. It is fairly certain
+that the physical properties, including the chemical
+composition, of the embedded stars are directly reflected by
+those of the dust grains. Most probably, the grain formation
+process in RV Tauri stars is continuous and not sporadic as
+suggested by Goldsmith et~al.\ (1987).
+
+
+\section*{Acknowledgments}
+
+I thank Professor N. Kameswara Rao for some helpful
+suggestions, Dr H. C. Bhatt for a critical reading of the
+original version of the paper and an anonymous referee for
+very useful comments that improved the presentation of the paper.
+
+
+\section*{References}
+
+\beginrefs
+\bibitem Baird S.R., 1981, ApJ, 245, 208
+\bibitem Beichman C.A., Neugebauer G., Habing H.J., Clegg P.E.,
+ Chester T.J., 1985a, {\it IRAS\/} Point Source Catalog. Jet
+ Propulsion Laboratory, Pasadena
+\bibitem Beichman C.A., Neugebauer G., Habing H.J., Clegg P.E.,
+ Chester T.J., 1985b, {\it IRAS\/} Explanatory Supplement. Jet
+ Propulsion Laboratory, Pasadena
+\bibitem Dawson D.W., 1979, ApJS, 41, 97
+\bibitem Gerhz R.D., 1972, ApJ, 178, 715
+\bibitem Gerhz R.D., Ney E.P., 1972, PASP, 84, 768
+\bibitem Gerhz R.D., Woolf N.J., 1970, ApJ, 161, L213
+\bibitem Gilman R.C., 1972, ApJ, 178, 423
+\bibitem Goldsmith M.J., Evans A., Albinson J.S., Bode M.F., 1987, MNRAS,
+ 227, 143
+\bibitem Hacking P. et al., 1985, PASP, 97, 616
+\bibitem Harvey P.M., Thronson H.A., Gatley I., 1979, ApJ, 231, 115
+\bibitem Jura M., 1986, ApJ, 309, 732
+\bibitem Kukarkin B.V. et al., 1969, General Catalogue of Variable Stars.
+ Moscow
+\bibitem Lloyd Evans T., 1974, MNRAS, 167, 17{\sc p}
+\bibitem Lloyd Evans T., 1985, MNRAS, 217, 493
+\bibitem Low F.J. et al., 1984, ApJ, 278, L19
+\bibitem McLaughlin D.B., 1932, Publ. Univ. Obs. Mich., 4, 135
+\bibitem O'Connell J.K., 1961, Specola Vaticana Ric. Astron., 6, 341
+\bibitem Olnon F.M., Raimond E., 1986, A\&AS, 65, 607
+\bibitem Preston G.W., Krzeminski W., Smak J., Williams J.A.,
+ 1963, ApJ, 137, 401
+\bibitem Rowan-Robinson M., Harris S., 1983a, MNRAS, 202, 767
+\bibitem Rowan-Robinson M., Harris S., 1983b, MNRAS, 202, 797
+\bibitem van der Veen W.E.C.J., Habing H.J., 1988, A\&A, 194, 125
+\bibitem Willems F.J., de Jong T., 1988, A\&A, 196, 173
+\bibitem Zuckerman B., Dyck H.M., 1986, ApJ, 311, 345
+\endrefs
+
+
+\appendix
+
+\section{Large gaps in {$\bf L\lowercase{y}\balpha$} forests
+ due to fluctuations in line distribution}
+
+(This appendix was not part of the original paper by A.V.~Raveendran and is
+included here just for illustrative purposes.)
+
+Spectroscopic\looseness=1\ observations of bright quasars show that the mean number
+density of ${\rm Ly}\alpha$ forest lines, which satisfy certain criteria,
+evolves
+like ${\rm d}N/{\rm d}z=A(1+z)^\gamma$, where $A$ and~$\gamma$ are two
+constants. Given
+the above intrinsic line distribution we examine the probability of finding
+large gaps in the ${\rm Ly}\alpha$ forests. We concentrate here only on
+the statistics and neglect all observational complications such as the line
+blending effect (see Ostriker, Bajtlik \&~Duncan 1988).
+
+Suppose we have observed a ${\rm Ly}\alpha$ forest between redshifts $z_1$
+and~$z_2$
+and found $N-1$ lines. For high-redshift quasars $z_2$~is usually the emission
+redshift $z_{\rm em}$ and $z_1$ is set to $(\lambda_{\rm Ly\beta}/\lambda_{\rm
+Ly\alpha})(1+z_{\rm em})=0.844(1+z_{\rm em})$ to avoid contamination by
+Ly$\beta$ lines. We want to know whether the largest gaps observed in the
+forest are significantly inconsistent with the above line distribution. To do
+this we introduce a new variable~$x$:
+$$
+ x={(1+z)^{\gamma+1}-(1+z_1)^{\gamma+1} \over
+ (1+z_2)^{\gamma+1}-(1+z_1)^{\gamma+1}}. \eqno\stepeq
+$$
+$x$ varies from 0 to 1. We then have ${\rm d}N/{\rm d}x=\lambda$,
+where $\lambda$ is the mean number of lines between $z_1$ and $z_2$ and is
+given by
+$$
+ \lambda\equiv{A[(1+z_2)^{\gamma+1}-(1+z_1)^{\gamma+1}]\over\gamma+1}.
+ \eqno\stepeq
+$$
+This means that the ${\rm Ly}\alpha$ forest lines are uniformly distributed
+in~$x$.
+The probability of finding $N-1$ lines between $z_1$ and~$z_2$, $P_{N-1}$, is
+assumed to be the Poisson distribution.
+%
+\beginfigure{5}
+\vskip 11pc
+\caption{{\bf Figure A1.} $P(>x_{\rm gap})$ as a function of
+$x_{\rm gap}$ for, from left to right, $N=160$, 150, 140, 110, 100, 90, 50,
+45 and~40.}
+\endfigure
+
+\subsection{Subsection title}
+
+We plot in Fig.~A1 $P(>x_{\rm gap})$ for several $N$ values.
+We see that, for $N=100$ and $x_{\rm gap}=0.06$, $P(>0.06)\approx 20$
+per cent. This means that the
+\ifsinglecol\else \vadjust{\vfill\eject}\fi
+probability of finding a gap with a size
+larger than six times the mean separation is not significantly small.
+When the mean number of lines is large, $\lambda\sim N>>1$, our
+$P(>x_{\rm gap})$ approaches the result obtained by Ostriker et~al.\ (1988)
+for small (but still very large if measured in units of the mean separation)
+$x_{\rm gap}$, i.e., $P(>x_{\rm gap})\sim N(1-x_{\rm gap})^{N-1}\sim N
+{\rm exp}(-\lambda x_{\rm gap})$.
+
+
+\bye
+
+% end of mnsample.tex
diff --git a/macros/plain/contrib/mtbe/bookform.tex b/macros/plain/contrib/mtbe/bookform.tex
new file mode 100644
index 0000000000..ca5ca7dcca
--- /dev/null
+++ b/macros/plain/contrib/mtbe/bookform.tex
@@ -0,0 +1,176 @@
+%%% File: BookForm.tex
+%%% From `Mathematical TeX by Example' by Arvind Borde
+%%% (c) 1993, Academic Press.
+%%% Contents: The formatting commands for the `inner' right hand pages
+%%% of some of the Examples in `Mathematical TeX by Example'.
+
+% The commands shown here should suggest how a relatively simple
+% TeX file may be used to create a variety of different output formats:
+% Examples 2--5 were all formatted with the commands given here, yet
+% they each have a different `look'.
+
+\input EightPt % To use small fonts.
+\nopagenumbers % Switch off normal page numbering.
+
+%----------------------------------------------------------------------------
+%%% TYPEFACE NAMES:
+
+\font\Smallcaps=cmcsc10
+\font\Sansserif=cmss10
+
+%---------------------------------------------------------------------------_%
+%%% FOR DISPLAYED FORMULAS:
+
+\newcount\EquationNo \EquationNo=1
+
+% Some convolutions are needed in order to allow the equation number to
+% `leak out' and to make it correctly to the headline:
+
+\def\EqLbl #1{(\the\EquationNo #1)\xdef\Store{.$\>$\the\EquationNo #1}%
+ \global\postdisplaypenalty10000
+ \global\skip0=\belowdisplayskip
+ \global\skip1=\belowdisplayshortskip
+ \global\belowdisplayskip=-.8\baselineskip
+ \global\advance\belowdisplayskip by\skip0
+ \global\belowdisplayshortskip=-.8\baselineskip
+ \global\advance\belowdisplayshortskip by\skip1
+ \aftergroup\PlaceMark
+ \def\AA{#1}\def\BB{}\ifx\AA\BB
+ \global\advance\EquationNo by1 \fi}%
+\def\PlaceMark{\mark{\Store}\par \global\postdisplaypenalty0
+ \global\belowdisplayskip=\skip0
+ \global\belowdisplayshortskip=\skip1
+ \noindent\ignorespaces}%
+\def\FirstEquationOnPage{\edef\Testfm{\firstmark}%
+ \edef\Testtm{\topmark}%
+ \edef\Testbm{\botmark}%
+ \ifx\Testfm\Testtm\else\firstmark\fi}%
+\def\LastEquationOnPage{\edef\Testfm{\firstmark}%
+ \edef\Testtm{\topmark}%
+ \edef\Testbm{\botmark}%
+ \ifx\Testbm\Testtm\else\botmark\fi}%
+\def\PrevEq {{\advance\EquationNo by -1 \the\EquationNo}}
+\def\PrevEqs #1{{\advance\EquationNo by -#1 \the\EquationNo}}
+\def\ShiftEquationNo #1{\advance\EquationNo by #1}
+
+%----------------------------------------------------------------------------
+%%% FOR FOOTNOTES:
+
+\newcount\FootnoteNo \FootnoteNo=1
+\let\OldFootnoteCommand=\footnote
+
+\def\NumberFootnotes{\def\footnote{\OldFootnoteCommand
+ {$^{\the\FootnoteNo}$\aftergroup\global\aftergroup\advance
+ \aftergroup\FootnoteNo\aftergroup b\aftergroup y\aftergroup
+ 1\aftergroup\relax}}}
+\def\DontNumberFootNotes{\def\footnote{\OldFootnoteCommand}}
+\def\FootnoteSize #1{\dimen\footins=#1} % To set maximum vertical size.
+
+%---------------------------------------------------------------------------_%
+%%% FORMATTING CHAPTERS, SECTIONS, SUBSECTIONS:
+
+\newcount\ChapIndicator % New chapter indicator.
+\newcount\ChapNo % Chapter number.
+\newcount\SectNo % Section number.
+\newcount\SubSectNo % Subsection number.
+
+\def\ChapterFonts #1#2{\font\ChpFont=#1
+ \font\ChpNameFont=#2}
+\def\SectionFont #1{\font\SctFont=#1}
+\def\SubSectionFont #1{\font\SbSctFont=#1}
+
+\newskip\StartofChapSkip \StartofChapSkip=.75in
+\newskip\InChapTitleSkip \InChapTitleSkip=3\bigskipamount
+\newskip\AfterChapTitleSkip \AfterChapTitleSkip=2\bigskipamount
+\newskip\BetweenSectionSkip \BetweenSectionSkip=2\bigskipamount
+\newskip\AfterSectionTitleSkip \AfterSectionTitleSkip=\bigskipamount
+\newtoks\ChapName % To store the chapter name.
+\newtoks\SectionName % To store the section name.
+\newtoks\EveryChapter % The end of this file shows the default.
+\newtoks\EverySection % Ditto
+\newtoks\EverySubSection % Ditto
+
+\newif\ifResetSectNo \ResetSectNotrue
+\def\DontResetSectNos{\ResetSectNofalse}
+
+\def\StartBook{\ChapNo=0 \SectNo=0 \SubSectNo=0 \ChapIndicator=0 \pageno=1
+ \ChapName{}\SectionName{}}%
+\def\Chapter #1{\ChapIndicator=1 \ifResetSectNo \SectNo=0 \fi
+ \advance\ChapNo by 1
+ \topglue\StartofChapSkip\relax \ChapName={#1}%
+ \ChPosition{\ChpFont\the\EveryChapter}%
+ \nobreak\vskip\InChapTitleSkip\relax
+ \Position{\ChpNameFont #1}%
+ \nobreak\vskip\AfterChapTitleSkip\relax}%
+\def\Section #1{\goodbreak \vskip\BetweenSectionSkip\relax \SectionName={#1}%
+ \advance\SectNo by1 \EquationNo=1
+ \Position{\SctFont\the\EverySection\ #1}%
+ \nobreak\vskip\AfterSectionTitleSkip\relax}%
+\def\SubSection #1{\goodbreak \vskip\BetweenSectionSkip\relax
+ \advance\SubSectNo by1
+ \Position{\SbSctFont\the\EverySubSection\ #1}%
+ \nobreak\vskip\AfterSectionTitleSkip\relax}%
+\def\SemiLeftTitles {\let\Position=\Leftlines \let\ChPosition=\rightline }
+\def\LeftTitles {\let\Position=\Leftlines \let\ChPosition=\leftline }
+\def\CenteredTitles {\let\Position=\Centerlines \let\ChPosition=\Centerlines }
+\def\Centerlines #1{{\parindent0pt \pretolerance10000
+ \rightskip 0pt plus 1fil \leftskip 0pt plus 1fil
+ \parfillskip 0pt #1 \par}}
+\def\Leftlines #1{{\parindent0pt \pretolerance10000
+ \rightskip0pt plus 1fil \parfillskip 0pt #1 \par}}
+
+%---------------------------------------------------------------------------_%
+%%% FOR THEOREMS, ETC.:
+
+\def\PropositionFonts #1#2{\font\PropLabelFont=#1
+ \font\PropStateFont=#2}
+\def\ProofFont #1{\font\PrfFont=#1}
+\def\Proposition #1.#2\par{\removelastskip \vskip 1.5\bigskipamount
+ \noindent {\PropLabelFont #1.\ } {\PropStateFont #2} \endgraf}
+\def\ProofsEtc #1.{\removelastskip \medskip
+ \noindent {\PrfFont #1.\quad}}
+
+%----------------------------------------------------------------------------
+%%% MISCELLANEOUS:
+
+\def\EndLine{\hfil\break}
+\def\EndPage{\vfil\eject}
+\def\Lcase #1{\lowercase\expandafter{#1}}
+\def\RomanNumeral #1{\uppercase\expandafter{\romannumeral #1}}
+\def\Hfil {\aftergroup\hfil}
+
+%----------------------------------------------------------------------------
+%%% THE HEADLINE, ETC.:
+
+\newtoks\LeftRunningHead
+\newtoks\RightRunningHead
+\def\TopLRPno {\headline{\ifnum\ChapIndicator=1 \hfil
+ \else \ifodd\pageno \the\RightRunningHead\llap{\folio}\else
+ \rlap{\folio}\the\LeftRunningHead\fi \fi}
+ \footline{\ifnum\ChapIndicator=1 \hfil\sevenrm\folio\hfil \else \hfil\fi}}
+
+%----------------------------------------------------------------------------
+%%% THE OUTPUT ROUTINE:
+
+\newdimen\LMarginOdd \LMarginOdd=1 in
+\newdimen\LMarginEven \LMarginEven=1 in
+\output{\ifodd\pageno \hoffset=\LMarginOdd \else \hoffset=\LMarginEven \fi
+ \advance\hoffset by -1in % Because 1in is the Plain TeX left margin.
+ \advance\hoffset by.375in % To conform to the publisher's rules.
+ \plainoutput \global\ChapIndicator=0 }
+
+%----------------------------------------------------------------------------
+%%% DEFAULTS:
+
+\EveryChapter={C$\>$H$\>$A$\>$P$\>$T$\>$E$\>$R\ \ \the\ChapNo}
+\EverySection={\the\ChapNo.\the\SectNo}
+\EverySubSection={\the\ChapNo.\the\SectNo.\the\SubSectNo.}
+\SemiLeftTitles
+\TopLRPno
+\RightRunningHead={\hfil\the\ChapNo.\the\SectNo.\ \the\SectionName\hfil}
+\LeftRunningHead={\hfil\the\ChapNo.\ {\Smallcaps\the\ChapName}\hfil}
+\SectNo=0 \SubSectNo=0
+\OnFootnoterule{.8125in}
+
+%----------------------------------------------------------------------------
+\endinput
diff --git a/macros/plain/contrib/mtbe/eightpt.tex b/macros/plain/contrib/mtbe/eightpt.tex
new file mode 100644
index 0000000000..e277e06b80
--- /dev/null
+++ b/macros/plain/contrib/mtbe/eightpt.tex
@@ -0,0 +1,48 @@
+%%% File: EightPt.tex
+%%% From `Mathematical TeX by Example' by Arvind Borde
+%%% (c) 1993, Academic Press.
+%%% Contents: Provides a command for loading 8-point fonts, provides a
+%%% comprehensive font-switching command, and a command to use 8-point type
+%%% in footnotes.
+
+%----------------------------------------------------------------------------
+
+\def\LoadEight {\font\Eightrm=cmr8 \font\Eightsl=cmsl8
+ \font\Eightit=cmti8 \font\Eightbf=cmbx8
+ \font\Eighttt=cmtt8 \font\Eighti=cmmi8
+ \font\Eightsy=cmsy8
+ \font\Eightcsc=cmcsc8
+ \font\Sixrm=cmr6 \font\Sixbf=cmbx6
+ \font\Sixi=cmmi6 \font\Sixsy=cmsy6
+ \def\LoadEight{}}%
+% Note: The last line above protects against inefficiencies.
+
+\def\Eightpoint {\def\rm{\fam0\Eightrm}%
+ \textfont0=\Eightrm \scriptfont0=\Sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\Eighti \scriptfont1=\Sixi \scriptscriptfont1=\fivei
+ \textfont2=\Eightsy \scriptfont2=\Sixsy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \textfont\itfam=\Eightit \def\it{\fam\itfam\Eightit}%
+ \textfont\slfam=\Eightsl \def\sl{\fam\slfam\Eightsl}%
+ \textfont\ttfam=\Eighttt \def\tt{\fam\ttfam\Eighttt}%
+ \textfont\bffam=\Eightbf \scriptfont\bffam=\Sixbf
+ \scriptfont\bffam=\fivebf \def\bf{\fam\bffam\Eightbf}%
+ \let\Smallcaps=\Eightcsc
+ \let\Smallrm=\Eightrm % This is needed just for the present book.
+ \normalbaselineskip=9pt
+ \setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
+ % Also reset the spacing around displays:
+ \abovedisplayskip 8pt plus2pt minus7pt
+ \abovedisplayshortskip 0pt plus2pt
+ \belowdisplayskip 8pt plus2pt minus7pt
+ \belowdisplayshortskip 5pt plus2pt minus3pt
+ \normalbaselines \rm }
+% For Footnotes:
+\let\FFFFFF=\footstrut % Store the standard `value'.
+\def\SmallFootnotes {\LoadEight
+ \def\footnoterule{}\def\footstrut{\Eightpoint\FFFFFF}}%
+\def\NormalFootnotes{\def\footstrut{\FFFFFF}%
+ \def\footnoterule{\kern-3pt \hrule width2truein height.4pt \kern2.6pt}}%
+%----------------------------------------------------------------------------
+\endinput
+_%%
diff --git a/macros/plain/contrib/mtbe/eulconc.tex b/macros/plain/contrib/mtbe/eulconc.tex
new file mode 100644
index 0000000000..7d58ed845a
--- /dev/null
+++ b/macros/plain/contrib/mtbe/eulconc.tex
@@ -0,0 +1,391 @@
+%%% File: EulConc.tex
+%%%
+%%% Contents:
+%%% Macros that load the `AMS Euler' and `Computer Concrete' classes
+%%% of fonts and switch mathematics and text to these fonts.
+%%%
+%%% This file is a modification by Arvind Borde of Donald Knuth's `gkpmac.tex'
+%%% file; that file contained macros for the book `Concrete Mathematics', and
+%%% all of the really hard work involved in preparing this package was done
+%%% by Donald Knuth there.
+%%%
+%%% WARNING: This is an experimental file; no responsibility
+%%% is assumed for any of its contents.
+
+% First check to see if the file has already been used as input (if it has,
+% then we go no further):
+\ifx\eulconc\fmtversion\endinput\else\let\eulconc=\fmtversion\fi
+
+% A warning:
+\def\error{\message{ WARNING! You've got other fonts in places I want.}}
+
+% Fonts for regular text:
+\font\textrm=ccr10 % roman
+\font\textit=ccti10 % italic
+\font\textsl=ccsl10 % slanted
+\font\textbf=cmbx10 % bold: this is just Computer Modern
+\font\textcsc=cccsc10 % caps and small caps
+\font\oldsty=ccmi10 % for equation numbers
+
+% Fonts for regular math
+
+\font\mathtext=ccr10
+ \font\mathsubtext=ccr7
+ \font\mathsubsubtext=ccr5
+\font\mathlet=eurm10
+ \font\mathsublet=eurm7
+ \font\mathsubsublet=eurm5
+ \skewchar\mathlet='177 \skewchar\mathsublet='177 \skewchar\mathsubsublet='177
+\font\mathsym=cmsy10
+ \font\mathsubsym=cmsy7
+ \font\mathsubsubsym=cmsy5
+ \skewchar\mathsym='60 \skewchar\mathsubsym='60 \skewchar\mathsubsubsym='60
+\font\mathext=cmex10
+ \font\mathsubext=cmex10
+ \font\mathsubsubext=cmex10
+\font\mathscr=eusm10
+ \font\mathsubscr=eusm7
+ \font\mathsubsubscr=eusm5
+ \skewchar\mathscr='60 \skewchar\mathsubscr='60 \skewchar\mathsubsubscr='60
+\font\mathfr=eufm10
+ \font\mathsubfr=eufm7
+ \font\mathsubsubfr=eufm5
+\font\matheuex=euex10
+\font\boldmathlet=eurb10
+ \font\boldmathsublet=eurb7
+ \font\boldmathsubsublet=eurb5
+ \skewchar\boldmathlet='177 \skewchar\boldmathsublet='177
+ \skewchar\boldmathsubsublet='177
+
+% Fonts for small type:
+
+\font\gmathtext=ccr8
+ \font\gmathsubtext=ccr6
+ \font\gmathsubsubtext=ccr5
+\font\gmathlet=eurm8
+ \font\gmathsublet=eurm6
+ \font\gmathsubsublet=eurm5
+ \skewchar\gmathlet='177 \skewchar\gmathsublet='177 \skewchar\gmathsubsublet='177
+\font\gmathsym=cmsy8
+ \font\gmathsubsym=cmsy6
+ \font\gmathsubsubsym=cmsy5
+ \skewchar\gmathsym='60 \skewchar\gmathsubsym='60 \skewchar\gmathsubsubsym='60
+\font\gmathext=cmex8
+ \font\gmathsubext=cmex8
+ \font\gmathsubsubext=cmex8
+\font\gmathscr=eusm8
+ \font\gmathsubscr=eusm6
+ \font\gmathsubsubscr=eusm5
+ \skewchar\gmathscr='60 \skewchar\gmathsubscr='60 \skewchar\gmathsubsubscr='60
+\font\gmathfr=eufm8
+ \font\gmathsubfr=eufm6
+ \font\gmathsubsubfr=eufm5
+\font\gmatheuex=euex8
+
+\font\foliofont=cmr9
+\font\gtfont=cmmi9 % for the \t accent
+
+% Normal text conventions
+
+\catcode`\@=11 % borrow the private macros of Plain.tex (with care)
+\def\wlog#1{} % don't put allocation info into the log
+
+\let\sc=\textcsc
+\let\smc=\sc % For compatibility with AmSTeX.
+\def\textindent#1{\noindent\hbox to\parindent{\bf#1\hfil}\ignorespaces}
+\def\exitem{\hangindent2\parindent \textindent}
+\def\Bf#1{\hbox{\bf#1}} % For bold text in math (not bold math letters).
+
+\textfont0=\mathtext
+ \scriptfont0=\mathsubtext
+ \scriptscriptfont0=\mathsubsubtext
+\textfont1=\mathlet \let\tfont=\teni
+ \scriptfont1=\mathsublet
+ \scriptscriptfont1=\mathsubsublet
+\textfont2=\mathsym
+ \scriptfont2=\mathsubsym
+ \scriptscriptfont2=\mathsubsubsym
+\textfont3=\mathext
+ \scriptfont3=\mathsubext
+ \scriptscriptfont3=\mathsubsubext
+\def\rm{\fam\z@\textrm}
+\def\it{\fam\itfam\textit} % \it is family 4, defined in PLAIN
+\def\sl{\textsl}
+\textfont\itfam=\textit
+\newfam\scrfam \ifnum\scrfam=8\relax\else\error\fi % family 8, script
+\textfont\scrfam=\mathscr
+ \scriptfont\scrfam=\mathsubscr
+ \scriptscriptfont\scrfam=\mathsubsubscr
+\def\scr{\fam8 }
+\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
+\newfam\frfam % family 9, fraktur
+\textfont\frfam=\mathfr
+ \scriptfont\frfam=\mathsubfr
+ \scriptscriptfont\frfam=\mathsubsubfr
+\def\frak{\fam9 }
+\newfam\euexfam % family 10, substitions for euler symbols
+\newfam\boldletfam % family 11, bold math letters
+\textfont\boldletfam=\boldmathlet
+ \scriptfont\boldletfam=\boldmathsublet
+ \scriptscriptfont\boldletfam=\boldmathsubsublet
+\def\bf{\fam11 \textbf} % Therefore different effects in text and math.
+
+\mathchardef\intop="1A52
+\mathchardef\ointop="1A48
+\mathchardef\coprod="1A60
+\mathchardef\prod="1A51
+\mathchardef\sum="1A50
+\mathchardef\braceld="A7A \mathchardef\bracerd="A7B
+\mathchardef\bracelu="A7C \mathchardef\braceru="A7D
+\mathchardef\infty="0A31
+
+\mathchardef\nearrow="3A25
+\mathchardef\searrow="3A26
+\mathchardef\nwarrow="3A2D
+\mathchardef\swarrow="3A2E
+\mathchardef\Leftrightarrow="3A2C
+\mathchardef\Leftarrow="3A28
+\mathchardef\Rightarrow="3A29
+\mathchardef\leftrightarrow="3A24 \mathcode`\^^W="3A24
+\mathchardef\leftarrow="3A20 \let\gets=\leftarrow \mathcode`\^^X="3A20
+\mathchardef\rightarrow="3A21 \let\to=\rightarrow \mathcode`\^^Y"3A21
+\def\uparrow{\delimiter"3A22378 } \mathcode`\^^K="3A22
+\def\downarrow{\delimiter"3A23379 } \mathcode`\^^A="3A23
+\def\updownarrow{\delimiter"3A6C33F }
+\def\Uparrow{\delimiter"3A2A37E }
+\def\Downarrow{\delimiter"3A2B37F }
+\def\Updownarrow{\delimiter"3A6D377 }
+\mathchardef\leftharpoonup="3A18
+\mathchardef\leftharpoondown="3A19
+\mathchardef\rightharpoonup="3A1A
+\mathchardef\rightharpoondown="3A1B
+
+\textfont\euexfam=\matheuex
+\scriptfont\euexfam=\mathsubsym
+% Note: this is OK since we don't use all characters of euex in
+% subscripts/superscripts; otherwise we'd have to make euex7 and euex6.
+\scriptscriptfont\euexfam=\mathsubsym % Only for \mathchoice.
+\mathcode`+="292B
+\mathcode`-="292D
+\mathcode`!="0921
+\mathcode`(="4928 \delcode`(="928300
+\mathcode`)="5929 \delcode`)="929301
+\mathcode`[="495B \delcode`[="95B302
+\mathcode`]="595D \delcode`]="95D303
+\mathcode`=="393D
+\mathchardef\Relbar="303D % We need the old `=' to match \Arrows.
+\mathchardef\Gamma="7100
+\mathchardef\Delta="7101
+\mathchardef\Theta="7102
+\mathchardef\Lambda="7103
+\mathchardef\Xi="7104
+\mathchardef\Pi="7105
+\mathchardef\Sigma="7106
+\mathchardef\Upsilon="7107
+\mathchardef\Phi="7108
+\mathchardef\Psi="7109
+\mathchardef\Omega="710A
+\let\varsigma=\sigma \let\varrho=\rho % Euler doesn't have these.
+\mathchardef\aleph="0840
+\def\rbrace{\delimiter"5867A09 } \let\}=\rbrace
+\def\lbrace{\delimiter"4866A08 } \let\{=\lbrace
+%\mathchardef\equiv="3811 \let\cong=\equiv % lowres bars weren't spaced right
+%\mathchardef\leq="3814 \let\le=\leq % Where are they???
+%\mathchardef\geq="3815 \let\ge=\geq % Where are they???
+\mathchardef\Re="083C
+\mathchardef\Im="083D
+\def\vert{\delimiter"86A30C }
+\def\backslash{\delimiter"86E30F }
+
+\setbox\strutbox=\hbox{\vrule height9pt depth4pt width\z@}%
+\newbox\bigstrutbox \newbox\biggstrutbox
+\setbox\bigstrutbox=\hbox{\vrule height11pt depth4pt width\z@}%
+\def\bigstrut{\relax\ifmmode\copy\bigstrutbox\else\unhcopy\bigstrutbox\fi}
+\setbox\biggstrutbox=\hbox{\vrule height17pt depth10pt width\z@}%
+\def\biggstrut{\relax\ifmmode\copy\biggstrutbox\else\unhcopy\biggstrutbox\fi}
+\baselineskip=13pt\rm
+
+\newmuskip\normalthick \normalthick=5mu plus 5mu
+\newmuskip\normalmedmu \normalmedmu=\medmuskip
+\newmuskip\displaythick \displaythick=10mu minus 3mu
+\everymath{\thickmuskip=\normalthick}
+
+\abovedisplayskip=8pt plus 3pt minus 2pt % there's 2pt more (opened up)
+\belowdisplayskip=10pt plus 3pt minus 2pt
+
+% displays not centered; all have capability of \eqalign
+\outer\def\begindisplay{\obeylines\startdisplay}
+{\obeylines\gdef\startdisplay#1
+ {\catcode`\^^M=5$$%
+ \advance\displayindent\parindent\advance\displaywidth-\parindent%
+ \openup2pt #1\halign\bgroup\span\preamble\cr}}
+\outer\def\enddisplay{\crcr\egroup$$}
+\jot=\z@ % we do our own opening up
+
+\def\displaymath{$\thickmuskip=\displaythick\displaystyle}
+\def\preamble{\hfil\displaymath{##}$&&\displaymath{{}##}$\hfil}
+\def\tablepreamble{\bigstrut\hfil$##$\hfil\ &\vrule##&&\quad\hfil$##$\hfil}
+\def\xbox{\qquad\hbox} % for third column of explanation
+
+\newcount\eqcount
+\def\equ(#1.#2){{\rm({\oldsty#1}.{\oldsty#2})}}
+\def\eq(#1){\equ(\chapno.#1)}
+\def\thiseq{\xdef\next{(\chapno.\number\eqcount)}\expandafter\equ\next}
+\def\eqno{\global\advance\eqcount 1 \global\everycr{\makeeqno\thiseq}}
+\newdimen\backup
+\def\makeeqno#1{\noalign{\global\everycr{}%
+ \advance\displaywidth\displayindent
+ \setbox0=\hbox to\displaywidth{\hfil#1}%
+ \backup=\prevdepth \advance\backup\ht0
+ \setbox0=\vbox{\kern-\backup\box0}\ht0=\z@ \dp0=\z@
+ \setbox0=\vbox{\box0}\unvbox0}} % that puts equation number on prev line!
+
+
+\def\EightpointEC{% set up eightpoint style
+ \baselineskip=9.6pt \lineskip=0pt \lineskiplimit=0pt
+ \mathsurround=1pt
+ \textfont0=\gmathtext
+ \scriptfont0=\gmathsubtext
+ \scriptscriptfont0=\gmathsubsubtext
+ \textfont1=\gmathlet \let\tfont=\gtfont
+ \scriptfont1=\gmathsublet
+ \scriptscriptfont1=\gmathsubsublet
+ \textfont2=\gmathsym
+ \scriptfont2=\gmathsubsym
+ \scriptscriptfont2=\gmathsubsubsym
+ \textfont3=\gmathext
+ \scriptfont3=\gmathsubext
+ \scriptscriptfont3=\gmathsubsubext
+\textfont\scrfam=\gmathscr
+ \scriptfont\scrfam=\gmathsubscr
+ \scriptscriptfont\scrfam=\gmathsubsubscr
+\textfont\frfam=\gmathfr
+ \scriptfont\frfam=\gmathsubfr
+ \scriptscriptfont\frfam=\gmathsubsubfr
+\textfont\euexfam=\gmatheuex
+\scriptfont\euexfam=\gmathsubsym % OK since I don't use all chars in this size
+ \def\rm{\fam\z@\gtext}%
+ \let\oldsty=\gtext
+ \let\big=\ninebig
+ \setbox\strutbox=\hbox{\vrule height7.25pt depth2.75pt width\z@}%
+ \gtext
+ }
+\def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy
+ \left#1\vbox to7.25pt{}\right.\n@space$}}}
+
+% Math operators
+\def\2{\mskip-.5mu2\mskip.5mu}
+\newmuskip\lessfortimes \lessfortimes=-2mu minus -2mu
+\def\cdt{\mskip\lessfortimes\cdot\mskip\lessfortimes}
+\def\nullnum{\phantom{0}}
+\def\twonullnum{\phantom{00}}
+\def\bex{\mskip-2mu}
+\def\twoconditions#1#2{_{\scriptstyle#1\atop\scriptstyle#2}}
+\def\tworestrictions#1#2{\vcenter{\offinterlineskip
+ \halign{\strut\hfil##\hfil\cr#1\cr#2\cr}}}
+\def\dts{\mathinner{\ldotp\ldotp}}
+\def\[#1]{[\hbox{$\mskip1mu\thickmuskip=\thinmuskip#1\mskip1mu$}]}
+\def\bigi[#1\bigr]{\bigl[\hbox{$\thickmuskip=\thinmuskip#1$}\bigr]}
+\def\Bigi[#1\Bigr]{\Bigl[\hbox{$\thickmuskip=\thinmuskip#1$}\Bigr]}
+\def\prp(#1){(\hbox{$\thickmuskip=\thinmuskip#1$})}
+\def\pbigi(#1\bigr){\bigl(\hbox{$\thickmuskip=\thinmuskip#1$}\bigr)}
+\def\_#1{\def\next{#1}%
+ \ifx\next\risingsign\expandafter\rising\else^{\underline{#1}}\fi}
+\def\risingsign{^}
+\def\rising#1{^{\overline{#1}}}
+\def\dotminus{\mathbin{\buildrel{\hbox{\runhead.}}\over{\smash{-}\vphantom{_2}}}}
+\let\divides=\backslash
+\def\edivides{\divides\mskip-4mu\divides}
+\def\ndivides{\mathpalette\notdiv\relax}
+\def\notdiv#1#2{\setbox0=\hbox{$#1\divides$}%
+ \vcenter{\hbox to\wd0{$\hss\scriptscriptstyle/\hss$}}\kern-\wd0
+ \vcenter{\hbox to\wd0{$\hss\kern.5pt\scriptscriptstyle/\hss$}}\kern-\wd0
+ \box0\relax}
+\def\spec{\mathop{\rm Spec}}
+\def\half{{1\over2}}
+\def\rp{\mathchar"323F } % relatively prime
+\def\lcm{\mathop{\rm lcm}}
+\def\And{\quad{\rm and}\quad}
+\let\==\equiv
+\def\tmod#1{(mod~$#1$)}
+\let\implies=\Longrightarrow
+\def\?{\hbox{!`}} % subfactorial
+\def\hyp{\mathop{F{}}\nolimits\hyper}
+\def\tightplus{\medmuskip=1.5mu\relax}
+\def\hyper#1#2#3{\mathchoice{\tightplus
+ \hbox{$\displaystyle\biggl({#1\atop#2}\Big\vert\,{#3}\!\biggr)$}}%
+ {\bigl({#1\atop#2}\vert\mskip2mu#3\bigr)}%
+ {}{}} % used only in D and T styles
+%\def\hypk_#1{\mathop{F{}}_{#1}\nolimits\hyper} % confl with mFn convention
+\def\hypk_#1#2#3#4{\mathop{F{}}\mathchoice{\tightplus
+ \hbox{$\displaystyle\biggl({#2\atop#3}\Big\vert\,{#4}\!\biggr)$}%
+ \lower\fontdimen11\mathsym\hbox{$\scriptstyle\!#1$}}%
+ {\bigl({#2\atop#3}\vert\mskip2mu#4\bigr)\lower\fontdimen12\mathsym
+ \hbox{$\scriptstyle\!#1$}}%
+ {}{}} % used only in D and T styles
+\def\double(#1\choose#2){\mathchoice{\biggl(\!\!{#1\choose#2}\!\!\biggr)}
+ {\bigl(\!{#1\choose#2}\!\bigr)}{}{}} % only D and T styles
+\def\hypstrut{\vphantom{_1\_^k}} % if there's another denominator with \_^k
+\def\deg{\mathop{\rm deg}}
+\def\Bscr{{\scr B}}
+\def\Escr{{\scr E}}
+\def\Fscr{{\scr F}}
+\def\Pscr{{\scr P}}
+\def\adj{\relbar\joinrel\relbar} % adjacent in a graph
+\let\<=\langle \let \>=\rangle
+\def\Pr{\mathop{\rm Pr}\nolimits}
+\def\Mean{\mathop{\rm Mean}\nolimits}
+\def\Var{\mathop{\rm Var}\nolimits}
+\def\between{\big\vert\hbox{\vphantom)}} % \between_a^b
+{\catcode`\'=\active \gdef'{^\bgroup\mskip2mu\prim@s}} % more space before '
+\def\array#1[#2]{\hbox{\tt#1[$#2$]}}
+\def\given{\mskip1mu\vert\mskip1mu}
+\def\euler{\atopwithdelims<>}
+\def\Euler#1#2{\mathchoice{\biggl<\mskip-7mu{#1\euler#2}\mskip-7mu\biggr>}%
+ {\bigl<\!{#1\euler#2}\!\bigr>}{}{}}
+\def\Choose#1#2{\mathchoice{\biggl(\mskip-7mu{#1\euler#2}\mskip-7mu\biggr)}%
+ {\bigl(\!{#1\euler#2}\!\bigr)}{}{}}
+
+\newbox\phihatbox \newbox\scrphihatbox
+\setbox\phihatbox=\hbox{$\phi$} \ht\phihatbox=1ex
+\setbox\scrphihatbox=\hbox{$\scriptstyle\phi$}
+ \ht\scrphihatbox=\fontdimen5\mathsublet
+\setbox\phihatbox=\hbox{$\widehat{\box\phihatbox}$}
+\setbox\scrphihatbox=\hbox{$\hat{\box\scrphihatbox}$}
+\def\phihat{\mathchoice{\copy\phihatbox}{\copy\phihatbox}%
+ {\copy\scrphihatbox}{{\hat\phi}}}
+
+\newbox\mathsizebox
+\def\setmathsize#1{\global\setbox\mathsizebox=\hbox{\displaymath#1$}}
+\def\mathsize#1{\hbox to\wd\mathsizebox{\displaymath#1$\hss}}
+
+\newbox\sqrtstrutbox
+\setbox\sqrtstrutbox=\hbox{\vrule height10.5pt width\z@}
+\def\strutsqrt{\copy\sqrtstrutbox\sqrt}
+
+\newbox\Sqbox % for sum of squares
+\setbox\Sqbox=\vbox{\tenrm\hrule height.6pt\kern-.6pt
+ \hbox to1.5ex{\vrule height1.5ex width.6pt\hss\vrule width.6pt}\kern-.6pt
+ \hrule height.3pt depth.3pt}
+\def\Sq{\mskip1.5mu\copy\Sqbox\mskip1.5mu}
+
+\def\CMtext{% To switch back to Computer Modern text.
+ \let\rm=\tenrm
+ \let\it=\tenit
+ \let\sl=\tensl
+ \let\tt=\tentt
+ \normalbaselineskip=12pt \normallineskip=1pt \normallineskiplimit=0pt
+ \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}%
+ \normalbaselines\rm}
+
+\catcode`@=12
+\endinput
diff --git a/macros/plain/contrib/mtbe/outform.tex b/macros/plain/contrib/mtbe/outform.tex
new file mode 100644
index 0000000000..f70e9d7e8a
--- /dev/null
+++ b/macros/plain/contrib/mtbe/outform.tex
@@ -0,0 +1,149 @@
+%%% File: OutForm.tex
+%%% From `Mathematical TeX by Example' by Arvind Borde
+%%% (c) 1993, Academic Press.
+%%% Contents: The format commands for the `output' pages (i.e., right hand)
+%%% of the Examples in Chapter 2 of `Mathematical TeX by Example'.
+
+\input StdPage % The file containing the standard MTBE page specifications.
+
+%----------------------------------------------------------------------------
+%%% TYPEFACE NAMES:
+
+% Note: most typeface names used in this file have been defined in `StdPage'.
+\font\sevenit=cmti7 % For book titles in the margin.
+\font\ExampleTitleFont=cmbx12 scaled\magstep1 % For Example Titles.
+\font\ExampleTypeFont=cmsl12 scaled \magstep2 % For Example Types.
+\font\ExampleTypeCal=cmsy10 scaled \magstep3 % For `Cal' in Example Types.
+\font\SmExampleTypeCal=cmsy7 scaled \magstep3 % For scriptsize Cal.
+\font\BigEightsy=cmsy8 scaled \magstep3 % For small Cal.
+\def\ExampleTypeFonts{\textfont2=\ExampleTypeCal
+ \scriptfont2=\SmExampleTypeCal
+ \let\Eightsy\BigEightsy \ExampleTypeFont}
+
+%----------------------------------------------------------------------------
+%%% MISCELLANEOUS:
+
+\def\EnoughAlready{$$\vdots$$ \EndPage}
+
+%---------------------------------------------------------------------------_%
+%%% EXAMPLE COMMANDS:
+
+\newtoks\Author % To store the name of the author of the source.
+\newtoks\BookTitle % To store the name of the book/journal.
+\newtoks\PublishInfo % To store publisher information.
+\newtoks\CopyrightDate % To store information about the copyright date.
+\newtoks\Example % To store information about the example.
+\newtoks\ExampleType % To store information about the example type.
+\newcount\ExampleNumber % For the example number.
+\newcount\StartExample % Start-of-example indicator.
+\newdimen\LMarginOdd % Left margin on odd-numbered pages.
+\newdimen\LMarginEven % Left margin on even-numbered pages.
+
+\outer\def\NewExample{\hsize\StdHsize \vsize\StdVsize \parindent\indsize
+ \StartExample=1
+ \LMarginOdd=.625in \LMarginEven=.625in \voffset0in
+ \headline={\hfil}\global\advance\ExampleNumber by1
+ \leftline{\ExampleTypeFonts\the\ExampleType}
+ \vskip2pc\relax
+ \message{+\the\ExampleNumber+}
+ \setbox0=\hbox{\ExampleTitleFont 1}\dimen0=-\ht0
+ \divide\dimen0 by2 \advance\dimen0 by.75pt
+ \dimen1=-\dimen0 \advance\dimen1 by1pt
+ \centerline{\vrule width8pc height\dimen1 depth\dimen0
+ {\ExampleTitleFont \ \ Example \the\ExampleNumber\ \ }\vrule
+ width8pc height\dimen1 depth\dimen0 }
+ \Example={\the\ExampleNumber}%
+ \vskip1pc\relax \noindent
+ From {\tenit \the\BookTitle}
+ \edef\Test{\the\Author}%
+ \ifx\Test\empty \else \EndLine
+ {\spaceskip.3333em\relax
+ \LCSmCaps{\the\Author}} \fi
+ \edef\Test{\the\PublishInfo}%
+ \ifx\Test\empty \else \EndLine {\tenrm\the\PublishInfo}\fi
+ \edef\Test{\the\CopyrightDate}%
+ \ifx\Test\empty \else\unskip{\tenrm,\ \the\CopyrightDate}\fi
+ \vskip1pc\relax \noindent \ignorespaces}
+\def\ShortExample <#1>{\medbreak
+ \line{\vrule width.4pt depth2.6pt height.4pt\hrulefill
+ \vrule width.4pt depth2.6pt height.4pt}\nointerlineskip
+ \leftline{\Eightbf (Page #1)}
+ \nobreak}
+\def\EndShortExample{\nobreak\vskip-1pt
+ \line{\vrule width.4pt depth0pt height3pt\hrulefill
+ \vrule width.4pt depth0pt height3pt}\medbreak}
+\def\NegVspace{\ifvmode\nointerlineskip\fi
+ \nobreak\vskip-3pt\relax} % Reduces space.
+
+%---------------------------------------------------------------------------_%
+%%% TOWARDS THE OUTPUT ROUTINE:
+
+\newdimen\RMargin % The right margin size.
+\newdimen\BotMargin % The bottom margin size.
+\newcount\ChapIndicator % For compatibility with BookForm.tex
+
+\def\Issue{}
+\def\Volume #1,#2(#3){\def\Issue{{\fivebf #1},#2(#3)}}
+\def\lcopyr{\leavevmode\hbox{{\fivesy\char'15}\llap{\fiverm c\kern.3em }}}
+
+\def\StandardPage{\vbox{\makeheadline\pagebody\makefootline
+ \advance\BotMargin by-24pt\vglue\BotMargin}}
+\def\RightMarginStuff{\vbox{\parskip0pt \hsize.75in \advance\hsize by-.4pt
+ \parindent0pt \hbadness5000 \raggedleft \pretolerance10000
+ \vbox to 0pt{\vskip-.5in
+ \rightline{\TopofRMarg{\MarginFont
+ Example~\:\the\Example}}\vss}
+ \dimen0=\vsize \advance\dimen0 by \BotMargin
+ \advance\dimen0 by\voffset
+ \nointerlineskip
+ \vbox to \dimen0{\null \vskip.25in
+ \baselineskip 6 pt \fiverm Source:
+ \smallskip
+ {\sevenit \baselineskip8pt \the\BookTitle
+ \smallskip }
+ \edef\Test{\the\Author}
+ {\ifx\Test\empty \removelastskip \else
+ \spaceskip=.1667em\relax
+ \let\ZZ=\& \def\&{\:\ZZ\:}
+ \uppercase\expandafter{\the\Author} \fi
+ \smallskip}
+ \edef\Test{\the\CopyrightDate}
+ \ifx\Test\empty \else
+ \lcopyr\ \the\CopyrightDate\break \fi
+ \edef\Test{\the\PublishInfo}
+ \ifx\Test\empty \Issue \else
+ \the\PublishInfo \fi
+ \advance\dimen0 by-\StdVsize
+ \vskip\dimen0 \vfill}}}
+\def\AugmentedPage{\vbox{\ifnum\StartExample=1
+ \headline={\hfil}\footline={\hfil\SmallPnoFont\Folio\hfil}%
+ \def\makefootline{\baselineskip36pt \line{\the\footline}}%
+ \StandardPage
+ \else
+ \ifnum\ChapIndicator=1 \else\footline={\hfil}\fi
+ \ifodd\pageno \dimen0=-\LMarginOdd \else \dimen0=-\LMarginEven \fi
+ \advance\dimen0 by6.625in \hbox to \dimen0
+ {\StandardPage \hskip\RMargin \BotCornerVrule \hss
+ \RightMarginStuff }\nointerlineskip
+ {\dimen0=\hsize \advance\dimen0 by\RMargin \advance\dimen0 by.4pt
+ \hbox to \dimen0{\hfil \BotCornerHrule}}
+ \fi}\global\StartExample=0 }% _%
+\def\MarkPageCorner{\def\BotCornerVrule{\vrule height36pt width.4pt depth0pt}
+ \def\BotCornerHrule{\vrule width36.4pt height.4pt depth0pt}}
+\def\DontMarkPageCorner{\def\BotCornerVrule{\hskip-\RMargin}
+ \def\BotCornerHrule{}}
+
+% Here comes a small cheat:
+\def\plainoutput{\ifodd\pageno \RMargin=\LMarginEven \else
+ \RMargin=\LMarginOdd \fi % Assuming mirror symmetry.
+ \shipout\AugmentedPage
+ \advancepageno \global\advance\RealPno by2
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi}%
+
+% Defaults:
+\DontMarkPageCorner
+\BotMargin=0pt
+
+%----------------------------------------------------------------------------
+\catcode`\@=14 % Need this in places.
+\endinput
diff --git a/macros/plain/contrib/mtbe/readme.txt b/macros/plain/contrib/mtbe/readme.txt
new file mode 100644
index 0000000000..a6dd8926de
--- /dev/null
+++ b/macros/plain/contrib/mtbe/readme.txt
@@ -0,0 +1,19 @@
+The six files in the MTBE package (not counting this one)
+are used in the book `Mathematical TeX by Example'
+by Arvind Borde [(c) 1993, Academic Press]. They may be
+copied, distributed and used freely. If they are edited
+in any way, however, they should be renamed first.
+
+The six files are
+
+ bookform.tex
+ eightpt.tex
+ eulconc.tex
+ outform.tex
+ stdpage.tex
+ utility.tex
+
+The first few lines of each file say what it (the file) does.
+
+
+
diff --git a/macros/plain/contrib/mtbe/stdpage.tex b/macros/plain/contrib/mtbe/stdpage.tex
new file mode 100644
index 0000000000..8bf9c5dad0
--- /dev/null
+++ b/macros/plain/contrib/mtbe/stdpage.tex
@@ -0,0 +1,259 @@
+%%% File: StdPage.tex
+%%% From `Mathematical TeX by Example' by Arvind Borde
+%%% (c) 1993, Academic Press.
+%%% Contents: The page layout, standard fonts, etc., used across the board in
+%%% all the files of `Mathematical TeX by Example'.
+
+\input Utility
+
+%----------------------------------------------------------------------------
+%%% TYPEFACE NAMES:
+
+\font\TitleFont=cmb10 scaled 2986 % For chapter titles.
+\def\TitleFonts{\TitleFont} % Needed for redefinition purposes later.
+\font\NumFont=cmb10 scaled 5160 % For the large chapter numbers.
+\font\SubTitleFont=cmbx12 % For subsection titles.
+\font\SubTitlett=cmtt10 scaled 1200 % Also used in section titles.
+\def\SubTitleFonts{\SubTitleFont} % Needed for redefinition purposes later.
+\font\SubSectionTitleFont=cmti10 scaled\magstephalf % For subsection titles.
+\font\Bigsy=cmsy10 scaled 1200 % For `bullets' in subsection titles.
+\font\SmallPnoFont=cmfib8 % For page numbers at the bottom.
+\font\PnoFont=cmfib8 scaled\magstep1 % For page numbers in the margin.
+\font\Smallcaps=cmcsc10 % Small capitals, used in many places.
+\let\sc=\Smallcaps \let\smc=\Smallcaps % For compatibility w/other packages.
+\font\Sansserif=cmss10 % Sans serif, used in many places.
+\let\sf=\Sansserif % For LaTeX compatibility.
+\font\Ninerm=cmr9
+\let\Smallrm=\Ninerm % Used in places to give unobtrusive numerals, etc.
+
+% For section titles in the margins:
+\font\Eightbf=cmbx8
+\font\Eighttt=cmtt8
+\let\MarginFont\Eightbf
+
+% For chapter and section titles that use several fonts:
+\def\UseBigCal{\font\TitleCal=cmbsy10 scaled2986
+ \def\TitleFonts{\textfont2=\TitleCal
+ \exhyphenpenalty10000 \pretolerance10000
+ \hbadness10000 \TitleFont}}
+\def\Trick#1{{\Ninebf\uppercase{#1}}} % Used for the LaTeX logo in titles.
+\def\UseMedCal{\font\SubTitleCalFont=cmbsy10 scaled\magstep1
+ \font\SmSubTitleCalFont=cmbsy9
+ \font\Tenbsy=cmbsy10
+ \font\Ninebf=cmbx9
+ \def\SubTitleFonts{\textfont2=\SubTitleCalFont
+ \scriptfont2=\SmSubTitleCalFont
+ \let\Eightsy\Tenbsy \let\Smallcaps\Trick
+ \SubTitleFont}}
+
+%---------------------------------------------------------------------------_%
+%%% REPRODUCING INPUT:
+
+\let\XXX=\Literal % Temporary assignment.
+\def\Literal {\XXX \cc`\*=12 \losenolines} % Redefine `\Literal' for use here.
+{\cc`\^^M=\active %
+\gdef\losenolines{\cc`\^^M=\active \def^^M{\leavevmode\endgraf}}}
+
+% Use these to display input:
+\def\beginliteral{\penalty1000\vskip3pt plus2pt minus1pt \Literal \cc`\"=12 %
+ \parskip0pt \parindent\indsize \baselineskip2.77ex \thatisit}
+{\cc`\@=0 \cc`\\=12 @cc`@^^M=@active %
+ @gdef@thatisit^^M#1\endliteral{#1@endgroup%
+ @vskip.8@smallskipamount@noindent@ignorespaces}}
+
+%----------------------------------------------------------------------------
+%%% MISCELLANEOUS:
+
+% First, a utility command that gives lowercase small capitals:
+\def\LCSmCaps#1{{\let\ZZ=\&\def\&{{\sevenrm\:\ZZ\:}}\Smallcaps
+ \xspaceskip=.1667em\relax
+ \lowercase\expandafter{#1}}}
+% Next, utilities to save typing; the first of these typesets references
+% in the correct format.
+\def\Ref#1[#2]{\LCSmCaps{#1}{\Smallrm [#2]}}
+\def\[#1]{{\Sansserif #1}}
+
+%----------------------------------------------------------------------------
+%%% CHAPTER AND SECTION FORMATTING:
+
+\newskip\BelowTitleSkip \BelowTitleSkip=4.5pc plus .5pc % Note: 1pc=12pt
+\newcount\StartAnew
+\newtoks\NameofChapter
+\newtoks\SectionLabel
+\newcount\SectionNumber
+\newcount\ChapterNumber
+\newcount\NumberSectionLbl \NumberSectionLbl=1 % An indicator; see below.
+
+\def\NoSections{\NumberSectionLbl=0} % For chapters without sections.
+
+% The command that creates the format for chapter titles:
+\outer\def\Title #1/#2\par{\ChapterNumber=#1
+ {\parindent0pt
+ \ifnum\ChapterNumber>0 {\NumFont\the\ChapterNumber}\medskip\fi
+ \pretolerance1000 \TitleFonts \righthyphenmin=50
+ \raggedright \baselineskip2.75ex #2\par}
+ \NameofChapter={\tensl#2}\StartAnew=1 \SectionNumber=0
+ \SectionLabel={}\mark{}\vskip\BelowTitleSkip\relax
+ \noindent\ignorespaces}% _%
+% The command that follows does several things. It tests the current
+% position on the page by comparing `\pagetotal' and a reduced value of
+% `\pagegoal'. If there is enough space available to start a new section on
+% the current page, the section begins there (after a vertical skip);
+% otherwise, the section begins on the next page. The command also defines
+% what is to go in the `token lists' called `\LMargStuff' and `\RMargStuff'
+% (see the output routine at the end of this file) and it `marks' the material
+% that is to go in the margin. Further, the command typesets the section title
+% and section number.
+\def\NewSection #1\par{\par \dimen0=\pagegoal \advance\dimen0 by-120pt
+ \ifdim\pagetotal>\dimen0
+ \ifdim\pagetotal<\pagegoal \EndPage
+ \else \vskip 24pt plus 10pt minus 6pt \fi
+ \else \vskip 24pt plus 10pt minus 6pt \fi
+ \LMargStuff={\MarginFont
+ \iftrue\firstmark\fi}
+ \RMargStuff={\MarginFont
+ \iftrue\botmark\fi}
+ \global\advance\SectionNumber by1
+ \leftline{\SubTitleFonts \let\tt\SubTitlett
+ \the\ChapterNumber.\the\SectionNumber\ \ #1}
+ \ifnum\NumberSectionLbl=1
+ \SectionLabel={\tenrm \quad
+ \S\:\the\ChapterNumber.\the\SectionNumber}
+ \else
+ \SectionLabel={}
+ \fi
+ \mark{#1\noexpand\else \the\SectionLabel}
+ \vskip 12pt plus2pt minus4pt\noindent\ignorespaces}%
+% The next command is used in starting subsections:
+\def\NewSub #1\par{\par \dimen0=\pagegoal \advance\dimen0 by-40pt
+ \ifdim\pagetotal>\dimen0
+ \ifdim\pagetotal<\pagegoal \EndPage
+ \else \vskip 12pt plus6pt minus4pt\fi
+ \else \vskip 12pt plus6pt minus4pt\fi
+ \leftline{\Bullet\SubSectionTitleFont\ \:#1}
+ \nobreak\vskip6pt plus1pt minus2pt\noindent\ignorespaces}%
+\def\Bullet{\leavevmode\raise.5pt\hbox{\Bigsy\char15 }}% _%
+% The next few commands go towards creating the large, `illuminated'
+% opening letter that starts each chapter. The commands are crude,
+% `one-shot' ones, meant just to serve for this book. But, they may
+% help suggest how more general ones may be constructed.
+
+% The first command, `\Patbox', fills the edges of a box of fixed size
+% with nonletter characters from a given font (the height of each character
+% is first examined, and only ones of height above a certain value are used).
+
+\def\Patbox #1#2{\vbox to 44pt{\hsize42pt \lineskip 0pt
+ \parindent0pt \baselineskip4.75pt \parfillskip0pt \hbadness10000
+ \count255=#2\font\temp=#1 \fontdimen2 \temp=0pt \temp \vfil
+ \def\X{\loop
+ \ifnum\count255=60 \global\count255=63 \fi % Skip <, /, >.
+ \ifnum\count255=65 \global\count255=91 \fi % Skip letters.
+ \ifnum\count255=97 \global\count255=123 \fi % Skip letters.
+ \ifnum\count255=126 \global\count255=0 \fi % Start over.
+ \setbox0=\hbox{\char\count255}\ifdim\ht0<3pt
+ \global\advance\count255 by 1
+ \repeat % Use only the tall guys.
+ \unhbox0 \hskip0pt minus.5pt\global\advance\count255 by 1 }
+ \hfuzz.2pt
+ \line{\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X}
+ \line{\X\hfil\X}\line{\X\hfil\X}\line{\X\hfil\X}
+ \line{\X\hfil\X}\line{\X\hfil\X}\line{\X\hfil\X}\line{\X\hfil\X}
+ \line{\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X\hfil\X}}}
+
+% Next, the font that will be used for the large letter is chosen:
+
+\font\BigFancy=cmr7 scaled 5160
+
+% Finally, the main command is constructed. Its first argument is the
+% font that will be used for the boundary pattern (only 5-point fonts really
+% work well, and then too not all of them); the second, the starting
+% character position in that font; the third, the first letter of the
+% paragraph that is to just open; the fourth and fifth, the first two
+% words of that paragraph (spaces are used to `delimit' these arguments;
+% the words will appear in small capitals.
+
+\def\Fancy #1#2#3#4 #5 {\noindent \hangindent46pt \hangafter-4
+ \llap{\vbox to0pt{\vss
+ \hbox{\Patbox{#1}{#2}\kern-42pt
+ \vbox to44pt{\hsize42pt\vfil
+ \vskip3pt\centerline{\hskip2pt\BigFancy #3}\vfil
+ }}\vskip-3\baselineskip}\hskip4pt}{\Smallcaps #4\ #5\ }}
+
+% FOR EXAMPLE:
+% `\Fancy{cmbsy5}{12} Let us begin with a bang.'
+% This will cause a large `L' to appear, surrounded by the taller characters
+% of the font cmbsy5, starting with character number 12; the first two
+% words will also appear capitalized.
+
+%---------------------------------------------------------------------------_%
+%%% IN THE MARGINS:
+
+\def\TopofRMarg #1{\vtop{\hsize .75in \parindent0pt \parskip0pt
+ \rightskip0pt \leftskip0pt % Just for protection.
+ \line{\vrule width1pt \hfil
+ \dimen0=\hsize \advance\dimen0 by-1pt \dimen1=10pt
+ \vtop to\dimen1{\hsize\dimen0 \rightline{\PnoFont \Folio}\vfil}}
+ \Raggedleft \pretolerance10000 \lefthyphenmin=50 \hbadness10000
+ \vrule height18pt width0pt #1\baselineskip2.7ex}}%
+\def\TopofLMarg #1{\vtop{\hsize .75in \parindent0pt \parskip0pt
+ \rightskip0pt \leftskip0pt % Just for protection.
+ \line{\dimen0=\hsize \advance\dimen0 by-1pt \dimen1=10pt
+ \vtop to\dimen1{\hsize\dimen0
+ \leftline{\PnoFont \Folio}\vfil}\hfil \vrule width1pt}
+ \Raggedright \pretolerance10000 \lefthyphenmin=50 \hbadness10000
+ \vrule height18pt width0pt #1\baselineskip2.7ex}}
+
+%----------------------------------------------------------------------------
+%%% PAGE NUMBERING:
+
+\countdef\RealPno=1 % To be used as the `real' page number for this book.
+ \RealPno=1 % Default starting value
+\def\Folio{\ifnum\RealPno<0 \romannumeral-\RealPno \else \number\RealPno \fi}
+
+%----------------------------------------------------------------------------
+%%% OUTPUT ROUTINE:
+
+\newtoks\LMargStuff
+\newtoks\RMargStuff
+\newdimen\Llmargspace \Llmargspace=.5in
+\newdimen\Rrmargspace \Rrmargspace=.5in
+\newdimen\Lhoffset \Lhoffset=.75in
+\newdimen\Rhoffset \Rhoffset=0in
+
+\def\MTBEoutput {\ifodd\RealPno \hoffset\Rhoffset \else \hoffset\Lhoffset \fi
+ \ifnum\StartAnew=1
+ \headline={\hfil}
+ \footline={\hss\SmallPnoFont\Folio\hss}
+ \else
+ \footline={\hfil}
+ \ifodd\RealPno
+ \headline={\hfil \the\NameofChapter\expandafter\iffalse\botmark\fi
+ \rlap{\hskip\Rrmargspace\TopofRMarg{\the\RMargStuff}}}
+ \else
+ \headline={\llap{\TopofLMarg{\the\LMargStuff}\hskip\Llmargspace
+ }\the\NameofChapter\hfil}
+ \fi
+ \fi
+ \plainoutput \Advancepageno \global\StartAnew=0 }% _%
+\def\UseMTBEoutput{%
+ \gdef\Advancepageno{\ifnum\RealPno<0 \global\advance\RealPno by -1
+ \else\global\advance\RealPno by1 \fi }
+ \gdef\makefootline{\baselineskip36pt \line{\the\footline}}
+ \gdef\makeheadline{\vbox to 0pt{\vskip-.5in
+ \line{\vbox to 8.5pt{}\the\headline}\vss}\nointerlineskip}
+ \output={\MTBEoutput}}
+
+%----------------------------------------------------------------------------
+%%% PARAGRAPH AND PAGE LAYOUT:
+
+\newdimen\indsize \indsize23pt
+\parindent\indsize
+
+\widowpenalty300 \clubpenalty300
+
+\newdimen\StdHsize \StdHsize=4.75 in
+\newdimen\StdVsize \StdVsize=7in
+\hsize\StdHsize \vsize\StdVsize
+
+%----------------------------------------------------------------------------
+\endinput
diff --git a/macros/plain/contrib/mtbe/utility.tex b/macros/plain/contrib/mtbe/utility.tex
new file mode 100644
index 0000000000..d2b9dc69cf
--- /dev/null
+++ b/macros/plain/contrib/mtbe/utility.tex
@@ -0,0 +1,89 @@
+%%% File: Utility.tex
+%%% From `Mathematical TeX by Example' by Arvind Borde
+%%% (c) 1993, Academic Press.
+%%% Contents: Utility commands to allow verbatim reproduction of input, to
+%%% allow `"' to be used as an in-line verbatim quoting mechanism, to produce
+%%% various logos, etc.
+
+%----------------------------------------------------------------------------
+%%% REPRODUCING INPUT:
+
+% The present book is filled with pieces of input files, or even entire input
+% files, that are reproduced verbatim. The commands shown here provide
+% the basis for this reproduction.
+
+\def\cc{\catcode} % Abbreviation used when changing category codes.
+
+% The next command reproduces input verbatim by switching off special
+% category codes and assigning code 12 to all normal command characters:
+
+\def\Literal {\begingroup \cc`\\=12 \cc`\{=12 \cc`\}=12 \cc`\$=12
+ \cc`\&=12 \cc`\#=12 \cc`\%=12 \cc`\~=12 \cc`\_=12 \cc`\^=12
+ \cc`\@=0 \cc`\`=\active \obeyspaces \VFont} % A `space' is now active.
+
+{\obeyspaces\gdef {\hglue.5em\relax}} % Interword spacing.
+
+{\cc`\`=\active \gdef`{\relax\lq}} % To block certain ligatures.
+
+% The next few lines define the role that `"' plays if it is later made
+% active (it will be used to reproduce in-line input):
+
+{\cc`\"=\active
+\gdef"{\Literal \VQuotingFont \com}
+{\cc`\@=0
+@gdef@com#1"{@leavevmode@hbox@bgroup#1@egroup@endgroup}}}
+\def\VQuotingOn{\cc`\"=\active }
+\def\VQuotingOff{\cc`\"=12 }
+
+\let\VFont=\tt % Default; may be changed as desired.
+\let\VQuotingFont=\tt % Ditto.
+
+%---------------------------------------------------------------------------_%
+%%% LOGOS:
+
+\def\cal{\fam2 } % Restore `Plain' definition, in case it has been altered.
+\def\AmS{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em S$}
+\def\AmSTeX{\AmS-\TeX}
+\font\Eightsy=cmsy8 \skewchar\Eightsy='60
+\def\LamSTeX{L\kern-.4em\raise.3ex\hbox{$\scriptstyle\cal
+ A$}\kern-.25em\lower.4ex\hbox{\Eightsy M}\kern-.1em$\cal S$-\TeX}
+\font\LogoTen=logo10
+\def\MF{{\LogoTen META}\-{\LogoTen FONT}}
+\font\LogoTenSl=logosl10
+\def\MFsl{{\LogoTenSl META}\-{\LogoTenSl FONT}}
+\font\Smallcaps=cmcsc10
+\def\LaTeX{L\kern-.36em\raise.35ex\hbox{\Smallcaps a}\kern-.15em\TeX}
+\font\Eightit=cmti8 % The logo below is for use in italics.
+\def\ItLaTeX{L\kern-.32em\raise.32ex\hbox{\Eightit A}\kern-.22em\TeX}
+\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
+\def\PiCTeX{\PiC\kern-.11em\TeX}
+\def\ssfTeX{T\kern-.15em\lower.5ex\hbox{E}\kern0em X} % When using sans-serif.
+% Just to be complete:
+% \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125em X}
+
+%----------------------------------------------------------------------------
+%%% FOOTNOTES:
+
+\def\OnFootnoterule #1{%
+ \def\footnoterule{\kern-3pt \hrule width#1 height.4pt \kern2.6pt }}
+\def\OffFootnoterule{\def\footnoterule{}}
+
+%----------------------------------------------------------------------------
+%%% MISCELLANEOUS:
+
+\def\raggedleft{\leftskip=0pt plus 2em \parfillskip0pt
+ \spaceskip.3333em \xspaceskip=.5em\relax}
+\def\Raggedleft{\leftskip=0pt plus 4em minus.6em \parfillskip0pt
+ \spaceskip.3333em \xspaceskip=.5em\relax}
+\def\Raggedright{\rightskip=0pt plus 4em minus.6em \parfillskip0pt
+ \spaceskip.3333em \xspaceskip=.5em\relax}
+\def\EndPage{\vfil\eject}
+\def\EndLine{\ifhmode \hfil\break \fi}
+\def\:{\thinspace }
+\def\T {\vrule width0pt\kern-.1em} % To occasionally adjust spacing.
+\def\Lcase #1{\lowercase\expandafter{#1}}
+\def\Sn #1.{\S\:#1.}
+
+%----------------------------------------------------------------------------
+\endinput
+_%%
diff --git a/macros/plain/contrib/newsletr/README b/macros/plain/contrib/newsletr/README
new file mode 120000
index 0000000000..3ce516d7db
--- /dev/null
+++ b/macros/plain/contrib/newsletr/README
@@ -0,0 +1 @@
+read.me \ No newline at end of file
diff --git a/macros/plain/contrib/newsletr/italic.tex b/macros/plain/contrib/newsletr/italic.tex
new file mode 100644
index 0000000000..de8459deca
--- /dev/null
+++ b/macros/plain/contrib/newsletr/italic.tex
@@ -0,0 +1,37 @@
+%
+% File: ITALIC.TEX
+%
+% Author: Hunter Goatley
+% goathunter@goatley.com
+%
+% 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/plain/contrib/newsletr/lodriver.tex b/macros/plain/contrib/newsletr/lodriver.tex
new file mode 100644
index 0000000000..9c63879c39
--- /dev/null
+++ b/macros/plain/contrib/newsletr/lodriver.tex
@@ -0,0 +1,56 @@
+%
+% File: LODRIVER.TEX
+%
+% Functional description:
+%
+% This file is the TeX control file for the Robert R. McCammon newsletter
+% published by Hunter Goatley.
+%
+% It depends on the file NEWSLETTER_FORMAT.TEX.
+%
+% Author: Hunter Goatley
+%
+% Date: May 26, 1990
+%
+% Modified by:
+%
+% 01-000 Hunter Goatley 3-JUN-1989 14:56
+% Original version.
+%
+\ifx\undefined\eoa\input newsletr \fi % Include macro definitions if needed
+
+\def\LO{\book{Lights Out!\/}}
+\def\POBox{P.\thinspace O.~Box 1234\relax}
+\def\CityState{Nowhere, NA\relax}
+\def\ZipCode{12345-6789\relax}
+\def\LOAddress{\POBox, \CityState \ZipCode\relax}
+\def\RRM{Robert~R. McCammon\relax}
+\def\RM{Rick McCammon\relax}
+\def\McC{McCammon\relax}
+\newspage
+\begindoublequotes %Handle double-quotes
+
+\say{Producing Robert R. McCammon Newsletter: Vol. 2 No. 1, Issue 5}
+
+\pageheaderlinetrue \pagefooterlinetrue % Do head/foot lines
+\evenpageheader{}{Lights Out!}{} % Header for even pages
+\oddpageheader{}{The Robert R. McCammon Newsletter}{} % Header for odd pages
+\evenpagefooter{Page\ \folio}{}{January 1991} % Footer for even pages
+\oddpagefooter{Vol.\ 2\ \ No.\ 1}{}{Page\ \folio} % Footer for odd pages
+
+%\say{}
+%\say{************* PROOF MODE IS SET ************}
+%\say{}
+
+\ignoreunderfill
+%
+% Normally, I have separate files that I include.
+%
+%\include{TITLE.TEX}
+%\include{EDITORIAL.TEX}
+%\include{KAZUE.TEX}
+%\include{NEXTTIME.TEX}
+
+\include{LOSAMPLE.TEX}
+
+\bye
diff --git a/macros/plain/contrib/newsletr/losample.tex b/macros/plain/contrib/newsletr/losample.tex
new file mode 100644
index 0000000000..a92a7c3af7
--- /dev/null
+++ b/macros/plain/contrib/newsletr/losample.tex
@@ -0,0 +1,379 @@
+%% TITLE.TEX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begingroup
+\font\HUGE=cmss17 %scaled\magstep2
+
+\pageheader{}{}{}
+\pagefooter{}{}{}
+
+\setbox0=\vbox{\hsize=2.25in
+ \vskip4.25in
+ {\baselineskip=21pt
+ \centerline{\HUGE Vol.\ 1\ \ No.\ 4}
+ \centerline{\HUGE June 1990}
+ }
+ }
+
+\vbox to9in{\unvbox0
+
+\vskip 1.75in
+\vfil
+\vbox{\hbox to\hsize{\hfill
+\leftshadowbox{
+ \hsize=6in
+ \vsize=1.75in
+ \vbox to\vsize{
+ \vfil
+ {\baselineskip=19pt
+ \centerline{\HUGE Inside This Issue:}
+ }
+ \vfil
+ \centerline{$\bullet$\ "The State of Where," by \RRM}
+ \centerline{$\bullet$\ An interview with Jeffrey Sackett, by Hunter Goatley}
+ \centerline{$\bullet$\ Interviews with Al Sarrantonio and Kazue Tanaka,
+ by \RRM}
+ \centerline{$\bullet$\ A letters column}
+ \centerline{$\bullet$\ Reports on NECON X and the 1990 WFC}
+ \centerline{$\bullet$\ A Joe R. Lansdale update}
+ \centerline{$\bullet$\ News of \McC's new novel \book{Boy's Life}}
+ \vfil
+ }}
+\hfill}
+\vfil
+}} % End of \vbox
+
+\eject
+\endgroup
+
+%% EDITORIAL.TEX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Lights Out! Vol. 2 No. 1
+% Editorial page
+%
+\newbox\edboxone \newbox\edboxtwo % \newbox\edbox3 \newbox\edbox4
+\newdimen\edcolwidth
+
+%
+%\edcolwidth=\pagewidth
+%\advance\edcolwidth by -\wd\edboxone
+%\advance\edcolwidth by -\columnsep
+%\advance\edcolwidth by -\columnsep
+%
+%\setbox\edboxtwo=\vbox to 9in{\hsize\edcolwidth
+%%{\hsize 4in
+\articletitle{"And Now, the End Is Near\edots"}{A Look at the Future by Hunter
+Goatley}
+
+\begincolumns{2}
+\ninepoint \rm
+
+\noindent
+Well, once again, finally! As you all know, I think,
+this issue has been delayed because my family and I moved again, this
+time from Knoxville to Bowling Green, KY. Again, I appreciate your
+patience and understanding.
+
+Each time I go to press, the issue seems to change from what I originally
+intended. I've been telling you for awhile that this issue would feature a new
+McCammon short story---well, it doesn't. It does, however, have an essay
+entitled "The State of Where," written by \McC\ exclusively for \LO\ \ The
+essay describes where McCammon is in his career, and where he's going. I think
+you'll find it interesting.
+
+Now the bad news. As you probably gathered from the title above, I'm
+extinguishing the lights on \LO\ \ Despite my best efforts, finding the time to
+devote to the newsletter is becoming more and more difficult.
+The fact that I've only been able to do three
+issues in the last 13 months shows that something's not right.
+There are several reasons that I won't be able to keep up \LO:
+
+\beginlist\parindent=18pt
+\item{1.)} Production costs have steadily risen as I've moved around the
+ country. The last issue and this one were more expensive than
+ the previous three issues had been; in fact, much of the
+ subscription renewals went to pay for those issues. I also
+ severely
+ over-estimated the growth of \LO---the renewals since June
+ will not cover the cost of four more issues; more on that in
+ a minute.
+\item{2.)} I \slant{like} my job now. In the beginning, \LO\ was a
+ much-needed diversion from a programming job that had become
+ unbearable---only I didn't realize it at the time. Now that
+ I'm out of the "hell-job," I find myself less willing to spend
+ my free time working on \LO
+\item{3.)} I've been stepping up my writing for the technical journal
+ \book{VAX Professional}. Since 1986 I've written 16 articles
+ for them; this year I'm to start a series of programming
+ articles that will probably be published as a book.
+\item{4.)} I'm going to be teaching some programming classes this fall at
+ Western Kentucky University.
+\item{5.)} And most importantly, my almost-two-year-old daughter Margaret
+ wants---and should have---more
+ time to spend with Daddy. Lately, between work and \LO\ she
+ and Dana have had to spend too much time without me---and vice
+ versa.
+\endlist
+
+Since renewals have been lower than anticipated and new subscriptions have been
+virtually non-existent, I cannot afford to publish four more issues of
+\LO---instead of offering refunds, I've decided that there will be one more
+issue of \LO\ sometime later this year. This special issue will be longer than
+previous issues and will be available to \slant{current subscribers only}.
+Book dealers will not be selling them and I won't have any extra copies for
+sale.
+
+Rick McCammon has been a joy to work with, and when I told him of my plans
+to discontinue \LO\ he offered to help me make the last issue very special
+for you. Therefore, the next and final issue of \LO\ will feature not one,
+but \slant{two} excerpts from abandoned \RRM\ novels!
+
+Though Rick once told me that he would never show \book{The Address} to anyone,
+he has volunteered to let me publish what he had written at the time he shelved
+the book. That's about 50 manuscript pages. Rick is also providing me with the
+beginning of \book{The Midnight Man}, a novel he started last year. In addition,
+the issue will feature a brand-new interview with Rick, where we'll discuss
+\book{Boy's Life} and more about Rick's plans for the future. I'll be driving
+to Birmingham in March or April to sit down and talk with Rick, so if you have
+any questions you want me to ask him, please send them soon.
+
+As you can see, I'm planning for \LO\ to go with a {\ss BANG!} And since the
+next issue is for current subscribers only, there won't be very many copies.
+I've got plenty of back issues of issues 2 and 3 sitting around being a fire
+hazard; if you'd like extra copies of those issues, send \$1 for each copy and
+I'll mail them out immediately. The \$1 will cover postage and the envelope(s).
+There are no limits, except that the offer is available only to current
+subscribers. I still have some of issues 1 and 4, but I'm not sure how many;
+let me know if you want those issues and I'll include them as long as they last.
+Please send all correspondence to the address at the bottom of this page. And
+thanks for your patience---the last issue will be out this summer.
+
+\vskip.5\baselineskip \hrule \vskip.5\baselineskip
+{\eightpoint\ss\noindent
+On the cover: the artwork for McCammon's upcoming novel, \book{Boy's Life},
+and a magazine illustration accompanying a Japanese translation of "The Thang."
+\eoa}
+\endcolumns
+
+
+\vfill
+
+\setbox0=\vbox to 1.25in{\hsize=125pt%
+ \vfil\elevenpoint
+ \centerline{\bf Lights Out!}
+ \vfil\hrule\vfil
+ \centerline{The}
+ \centerline{\RRM}
+ \centerline{Newsletter}
+ \vfil \hrule \vfil\ninepoint
+ \line{Vol.~2\ \ No.~1\hfill February 1991\hskip2pt}
+ \vfil
+ }
+
+\setbox1=\vbox to 1.25in{\hsize=120pt%
+ \vfil\vfil
+ \centerline{\ss Published by:}
+ \centerline{\bf Hunter Goatley}
+ \vfil \hrule \vfil
+ \centerline{\LO}
+ \centerline{\POBox}
+ \centerline{\CityState}
+ \centerline{\ZipCode}
+ \vfil\vfil
+ }
+
+\setbox2=\vbox to 1.25in{\hsize=120pt%
+ \vfil\noindent\eightpoint\ss\parindent=6pt\narrower
+ Thanks to Paddy McKillop, Jodi Strissel, Paul Schulz, Adam Rothberg,
+ \& you.
+ Thanks especially to Jeffrey Sackett, Kazue Tanaka, Al Sarrantonio,
+ Joe Lansdale, and Rick \& Sally McCammon.
+ Incredibly special thanks to Dana \& Margaret Goatley!
+ % for putting up with me!
+ \par
+ \vfil}
+
+\setbox3=\vbox to 1.25in{\hsize=125pt%
+ \vfil\noindent\eightpoint\ss\leftskip=6pt
+ This newsletter was typeset on a Digital VAX 6320, using the \TeX\
+ typesetting system developed by Donald~E. Knuth.
+ \par
+ \vfil \hrule \vfil
+ \noindent\smallcopyright\ 1991 by Hunter Goatley. All rights reserved.
+ Permission to reprint required.\par
+ \vfil}
+
+
+\setbox\edboxone=\vbox{\hbox{\box0\vrule\box1\vrule\box2\vrule\box3}}
+
+\setbox\edboxone=\vbox to1.5in{
+ \boxitspace=6pt
+ \vfill
+ \boxit{\unvbox\edboxone}
+ \vfill
+ }
+
+\box\edboxone
+
+\eject % Force a page break
+
+%% KAZUE.TEX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TeX file: KAZUE.TEX
+%
+% Desc: Interview with Kazue Tanaka, by Robert R. McCammon
+%
+% Interview Date: 03-NOV-1990
+% Transcription Date: 24-NOV-1990
+%
+\articletitle{Interview: Kazue Tanaka}{Conducted by \RRM; transcribed by Hunter Goatley}
+
+\begincolumns{2}
+\definefigs{2} % Define figures for up to 7 pages
+
+%\definefig{2}{2}{top}{\Certo}
+
+%\definefig{3}{2}{middle}{\Quote{%
+% I think it's a challenge to see the world
+% through different eyes. And I think that's what writing, in a way, is
+% all about.\qRM}}
+
+%\handlefigures
+%
+% "RM:" in 10pt roman is 22.xx pts wide, so let's put these things in boxes
+% that size with about 5pts whitespace following them.
+%
+\def\RM:{\vskip6pt\noindent\hbox to27pt{\bf RM:\hfil}}
+\def\KT:{\vskip6pt\noindent\hbox to27pt{\bf KT:\hfil}}
+
+
+\ednote{Ms.~Kazue Tanaka is a Japanese writer/translator who has translated
+\RRM's stories from \book{Night Visions IV} into Japanese. The following
+interview was conducted at the 1990 World Fantasy Convention, where Ms.~Tanaka
+finished up a month-long visit to the United States. Ms.~Tanaka is currently
+at work translating \McC's 1981 vampire epic, \book{They Thirst}.
+%\hfill\break\vskip-12pt
+}
+
+\RM: I'd like to know how you go about translating, say, one of my books.
+Do you read the book first?
+
+\KT: Yes. Usually I read the book a couple of times and then I start
+translating. Maybe you know that we have a completely different grammatical
+diction from English, so we can't put a word in the same order in Japanese.
+Usually I read a sentence and grasp the meaning of it and reconstruct it in
+Japanese.
+
+\RM: I would think that would be very difficult to do.
+
+\KT: It is!
+
+\RM: I'm sure it is, because there's such a great difference in the grammatical
+form. You have to be very careful, I guess, in terms of reading in English and
+translating to Japanese. That seems to me to be very difficult. How did you
+train to do this?
+
+\KT: Usually we have some kind of mentor or teacher.
+
+\RM: Were you like an apprentice, and someone teaches you to do this?
+
+\KT: Yes. We put the original stories [beside] the translations and compare
+the sentences.
+
+\RM: How long would it take you to translate \book{They Thirst}?
+
+\KT: It depends on how long the story is. \book{They Thirst} will take at
+least three months. How long did it take you to write~it?
+
+\RM: Well, it took about six or seven months to write.
+
+\KT: Maybe I'll need that kind of time, too!
+
+\RM: But it's almost like, if you're interpreting, you're almost doing some
+writing yourself. If you're making something more concise, or---do you do that?
+Are you abridging? Do you think anything gets changed in the translation?
+
+\KT: We try not to change, but sometimes a little change is necessary. We
+don't have some things that you have here in America. For instance, some brand
+names. We don't have the culture of your country, and the Japanese readers
+don't know if I translated correctly, but it is impossible for Japanese readers
+to understand that culture. Maybe, in that case, things get changed sometimes.
+
+\RM: Do you feel that you interpret the story more so your countrymen can
+understand what's going on in the book? Do you think you add more of your
+culture to the story?
+
+\KT: Basically, we don't add anything, we don't take away anything. But in
+that case, we explain [the cultural differences] after the story in an
+afterword.
+
+\RM: How many books have you translated?
+
+\KT: Maybe twelve, or something. Among them, \book{Brain Child}, by John Saul,
+and some mysteries. I'm going to translate some stories of Orson Scott Card's.
+
+\RM: I think it would be very interesting, if I could read Japanese, to read my
+book and see what the changes are. Or how it's geared toward that culture.
+
+\KT: Conversation---when people talk---is very difficult to put
+into Japanese. If the character is a woman, a man, a boy, or a girl, Japanese
+has a very distinctive way of speaking. Especially between a man and woman.
+English does not have as much difference.
+
+\RM: Well, that's fascinating. I think it would be a very tough thing to
+do---to translate something into an entirely different culture and still have
+the flavor of the American version, at least. I wouldn't want to do it---I
+don't think I could do it very well.
+
+\KT: Your stories are very American---that may be why they appeal to Japanese
+readers.
+
+\RM: Really? I was going to ask you why my stories appeal---if they do
+appeal---to Japanese readers. Well, first, I didn't know that horror fiction
+was so popular in Japan. Is it? Is it becoming more popular? What do you
+think the situation is?
+
+\KT: Your [novels] have not been translated at all yet. So, apart from you,
+Stephen King and Dean~R. Koontz are very popular---they are as popular as
+other big writers. Other horror writers are not so well-known. Some very keen
+fans like American horror.
+
+\RM: Why do you think that is? King and Koontz are definitely very American
+writers. Do you think that's their appeal---the American style?
+
+\KT: Yes, I do.
+
+\RM: Not necessarily because of the story being told, but because maybe it's
+told in an American voice?
+
+\KT: Yes, sometimes. I'm still trying to [learn] the American voice---it's
+very hard to do.
+
+\RM: Well, I know that's very tough to do, and I'm looking forward to seeing
+the books when they are translated.
+
+\KT: I'm looking forward to it too!\eoa
+
+\endcolumns
+
+%% NEXTTIME.TEX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\vfill
+
+\begingroup
+\font\HUGE=cmss17 %scaled\magstep2
+\setbox0=\vbox{\hsize=5in
+ \twelvepoint\ss\noindent%
+ The final issue of \LO\ will feature excerpts from \RRM's unpublished
+ novels \book{The Address} and \book{The Midnight Man}, a brand-new
+ interview with \McC\ about \book{Boy's Life}, more author
+ interviews, and the latest news! Coming Summer 1991!
+ \vfill%
+ }
+
+\centerline{\shadowbox{\vbox to 1in{%
+ \hsize=6in
+ \vfil
+ \offinterlineskip
+ \noindent\hfil\box0\hfil
+ \vfil
+ }}}
+
+\endgroup
diff --git a/macros/plain/contrib/newsletr/newsletr.tex b/macros/plain/contrib/newsletr/newsletr.tex
new file mode 100644
index 0000000000..c2c012072d
--- /dev/null
+++ b/macros/plain/contrib/newsletr/newsletr.tex
@@ -0,0 +1,1465 @@
+ \def\IDENT{01-016}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Copyright 1989--2004 by Hunter Goatley.
+%
+% Permission is granted to anyone to use this software for any purpose
+% on any computer system, and to redistribute it freely, subject to the
+% following restrictions:
+%
+% 1. This software 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.
+%
+% 2. Altered versions must be plainly marked as such, and must not be
+% misrepresented as being the original software.
+%
+% End
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% File: NEWSLETTER_FORMAT.TEX
+%
+% Abstract:
+%
+% This file defines TeX control sequences required to produce a
+% newsletter. It assumes plain.tex has been loaded.
+%
+% Author: Hunter Goatley
+% E-mail: goathunter@goatley.com
+%
+% Partially based on examples from _The TeXbook_, by
+% Donald E. Knuth, and various other sources. Virtually
+% all of the macros from other sources have been rewritten
+% or at least modified.
+%
+% Date: June 3, 1989
+%
+% Modified by:
+%
+% 01-016 Hunter Goatley 22-JAN-2004 09:23
+% Changed the license for the code to make it truly free.
+%
+% 01-015 Hunter Goatley 28-JAN-2001 15:45
+% I'm back! Eliminate undesired whitespace in header and
+% footer macros.
+%
+% 01-014 Hunter Goatley 21-AUG-1991 10:47
+% Rewrote double-quote macros (they work now!). Cleaned up
+% a little bit. Added \slant and \ital.
+%
+% 01-013 Hunter Goatley 25-JAN-1991 08:23
+% Added \newpage. Added \tt definitions to \*point macros.
+% Fixed problem with \quotee (quotee name was getting split).
+% Added setting of \hyphenpenalty and \emergencystretch to
+% \newspage macro.
+%
+% 01-012 Hunter Goatley 15-JAN-1991 07:03
+% Added macro \round to help with keeping page & figure heights
+% even. It helps some. Re-worked \beginquote and \endquote.
+% Add \Quote and \quotee. Added \listindent and dimens.
+% Modified \coltitle to include \noindent; changed amount of
+% \vglue. Modified \beginlist and \endlist to check for
+% a \parskip of 0pt; if 0, skip .5\baselineskip. Fixed
+% \centerbox (was \vbox, now \hbox).
+%
+% 01-011 Hunter Goatley 5-JAN-1991 23:40
+% Changed \ednote macro so that \sl is redefined as \rm, not \ss.
+% Changed \say macro to look like LaTeX's \typeout macro.
+%
+% 01-010 Hunter Goatley 6-OCT-1990 02:55
+% Commented out \ss calls at end of font macros.
+% Placed newsletter hsize commands in a macro (\newspage)
+% so that NEWTEX can be used like TeX normally is.
+%
+% 01-009 Hunter Goatley 10-MAR-1990 16:05
+% Added \par to the beginning of definition of \endlist.
+%
+% 01-008 Hunter Goatley 7-DEC-1989 22:07
+% Added \farright (place hbox flush right or on next line if it
+% won't fit). Modified definition of \eoa to call \farright.
+% Added \pmb -- "poor man's bold." Added font cmssxb. Added
+% \eldots and \edots.
+%
+% 01-007 Hunter Goatley 1-OCT-1989 03:41
+% Added figure support for multiple column environment.
+% Added \centerbox.
+%
+% 01-006 Hunter Goatley 17-AUG-1989 10:11
+% Modified so that "@" is an active character throughout the
+% format file. Added new header/footer commands that are more
+% flexible. Improved appearance of shadow box created by
+% \leftshadowbox.
+%
+% 01-005 Hunter Goatley 10-AUG-1989 22:09
+% Modified \onepageout output routine so that it does not
+% disable interline skip (commented out \offinterlineskip).
+% This was causing the header and footer to appear flush
+% with the main body of text on the page. Added routine
+% \checkdqbalsub. Modified \include to automatically call
+% \checkdqbalsub after the file has been read in.
+%
+% 01-004 Hunter Goatley 30-JUL-1989 03:10
+% Added macros to handle font size changes. Added code to
+% let " be used.
+%
+% 01-003 Hunter Goatley 29-JUL-1989 19:26
+% Modified double column routines so that the number of columns
+% can be specified. The routines now work for 2 to 6 columns
+% of output.
+%
+% 01-002 Hunter Goatley 23-JUL-1989 22:21
+% Added more comments. Fixed double column routines so that
+% page sizes are handled properly.
+%
+% 01-001 Hunter Goatley 2-JUL-1989 21:28
+% Added macros to handle bibliographies.
+%
+% 01-000 Hunter Goatley 3-JUN-1989 14:56
+% Original version.
+%
+
+\def\say#1{{\let\protect\string\immediate\write10{#1}}}
+
+\say{TeX Input file for Newsletter format - version \IDENT}
+\say{Copyright 1989-2004, Hunter Goatley}
+
+\everyjob{\say{TeX Newsletter version \IDENT. Copyright 1989-2004, Hunter Goatley}}
+
+%
+% The \catcode command below lets us use "@" as a letter. It can therefore
+% be used in command and variable names. PLAIN TeX uses this to avoid
+% conflicts with user code, so we'll do it, too.
+%
+\catcode`@=11 % borrow the private macros of PLAIN (with care)
+
+\say{Loading fonts...}
+%
+% Load fonts and define commands to switch between fonts
+%
+\font\twelverm=cmr12 \font\tenrm=cmr10 \font\ninerm=cmr9 \font\eightrm=cmr8
+\font\twelvei=cmmi12 \font\teni=cmmi10 \font\ninei=cmmi9 \font\eighti=cmmi8
+%\font\twelvesy=cmsy12 \font\tensy=cmsy10 \font\ninesy=cmsy9 \font\eightsy=cmsy8
+\font\twelvebf=cmbx12 \font\tenbf=cmbx10 \font\ninebf=cmbx9 \font\eightbf=cmbx8
+\font\twelvett=cmtt12 \font\tentt=cmtt10 \font\ninett=cmtt9 \font\eighttt=cmtt8
+\font\twelveit=cmti12 \font\tenit=cmti10 \font\nineit=cmti9 \font\eightit=cmti8
+\font\twelvesl=cmsl12 \font\tensl=cmsl10 \font\ninesl=cmsl9 \font\eightsl=cmsl8
+\font\twelvess=cmss12 \font\tenss=cmss10 \font\niness=cmss9 \font\eightss=cmss8
+\font\twelvessi=cmssi12 \font\tenssi=cmssi10 \font\ninessi=cmssi9
+\font\eightssi=cmssi8 \font\tenssb=cmssbx10
+%
+% 11-point font is scaled 10pt
+%
+\font\elevenrm=cmr10 scaled\magstephalf
+\font\eleveni=cmmi10 scaled\magstephalf
+\font\elevenbf=cmbx10 scaled\magstephalf
+\font\eleventt=cmtt10 scaled\magstephalf
+\font\elevenit=cmti10 scaled\magstephalf
+\font\elevensl=cmsl10 scaled\magstephalf
+\font\elevenss=cmss10 scaled\magstephalf
+\font\elevenssi=cmssi10 scaled\magstephalf
+
+\font\seventeenrm=cmr17 \font\seventeenss=cmss17 \font\seventeenssi=cmssi17
+
+\def\seventeenpoint{%
+ \def\sl{\seventeenssi}\def\it{\seventeenssi}\def\bf{\seventeenss}%
+ \def\rm{\seventeenrm}\def\ss{\seventeenss}\def\ssi{\seventeenssi}%
+ \baselineskip=19pt% % Change baselineskip
+ \rm% % By default, use sans serif
+}
+\def\twelvepoint{%
+ \def\sl{\twelvesl}\def\it{\twelveit}\def\bf{\twelvebf}%
+ \def\rm{\twelverm\let\sl=\twelvesl}\def\ss{\twelvess\let\sl=\ssi}%
+ \def\ssi{\twelvessi}\def\tt{\twelvett}%
+ \baselineskip=14pt% % Change baselineskip
+ \rm% % By default, use sans serif
+}
+\def\elevenpoint{%
+ \def\sl{\elevensl}\def\it{\elevenit}\def\bf{\elevenbf}%
+ \def\rm{\elevenrm\let\sl=\elevensl}\def\ss{\elevenss\let\sl=\ssi}%
+ \def\ssi{\elevenssi}%
+ \def\tt{\eleventt}%
+ \baselineskip=13pt% % Change baselineskip
+ \rm% % By default, use sans serif
+}
+\def\tenpoint{%
+ \def\sl{\tensl}\def\it{\tenit}\def\bf{\tenbf}%
+ \def\ssb{\tenssb}%
+ \def\rm{\tenrm\let\sl=\tensl}\def\ss{\tenss\let\sl=\ssi}%
+ \def\ssi{\tenssi}%
+ \def\tt{\tentt}%
+ \baselineskip=12pt% % Change baselineskip
+ \rm% % By default, use sans serif
+}
+\def\ninepoint{%
+ \def\sl{\ninesl}\def\it{\nineit}\def\bf{\ninebf}%
+ \def\rm{\ninerm\let\sl=\ninesl}\def\ss{\niness\let\sl=\ssi}%
+ \def\ssi{\ninessi}%
+ \def\tt{\ninett}%
+ \baselineskip=11pt% % Change baselineskip
+ \rm% % By default, use sans serif
+}
+\def\eightpoint{%
+ \def\sl{\eightsl}\def\it{\eightit}\def\bf{\eightbf}%
+ \def\rm{\eightrm\let\sl=\eightsl}\def\ss{\eightss\let\sl=\ssi}%
+ \def\ssi{\eightssi}%
+ \def\tt{\eighttt}%
+ \baselineskip=10pt% % Change baselineskip
+ \rm% % By default, use sans serif
+}
+
+\font\HUGE=cmr17 %scaled\magstep2
+\font\verysmallrm=cmr5 % Used to make small copyright "C"
+\font\smallsy=cmsy7 % Used to make small copyright circle
+\def\tiny{\eightpoint\ss} % Equate \tiny to \eightpoint
+\let\em=\eightssi
+\font\quotefont=cmss12 at 14.4truept % Quotation font
+\font\quoteefont=cmcsc10 % Font for quotee
+
+\say{Defining macros...}
+
+\newdimen\normalhsize % Create a new dimension
+\newdimen\normalvsize % Create a new dimension
+
+\normalhsize=\hsize
+
+%
+% \newspage
+%
+% Set up the page for a newsletter (7" by 9" of text, higher tolerance).
+%
+\def\newspage{%
+ \global\topskip=0pt % Set 1 inch top margin
+ \global\hoffset=-.25 true in % Move output .25 in to the left
+ \global\pretolerance=1000 % Set tolerance up (before hyphenation)
+ \global\tolerance=1500 % ... (after hyphenation)
+ \global\hyphenpenalty=500 % Discourage hyphenation
+ \global\emergencystretch=30pt
+ \global\normalhsize=7in
+ \global\hsize=\normalhsize % Pages are 7 inches wide
+ \global\vsize=9in % ... and 9 inches tall
+ \global\abovedisplayskip=\baselineskip
+ \global\belowdisplayskip=\baselineskip
+ \global\pagewidth=\hsize
+ \global\pageheight=\vsize
+}
+
+\clubpenalty=500 %-1000 % Set penalties for club and widow lines
+\widowpenalty=1000 % ...
+
+%
+%=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+% Multiple Column Output
+%=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+%
+% Define macros to handle multiple column output
+%
+% These macros support figures, but the figures must be defined inside
+% the multiple-column environment. Each column can have up to 3 figures
+% of varying sizes; the figures are referred to as "top", "middle", and
+% "bottom". Figures are identified via page number, column number, and
+% the position. In addition, two special figures that span all columns
+% can be specified using column 0 with "top" and "bottom".
+%
+% For example, {3}{2}{middle} refers to the middle figure in column 2
+% of output page 3.
+%
+% The figures are stored as temporary inserts (the inserts are freed
+% after \endcolumns). The inserts are treated as an array whose first
+% entry is \c@lfigstart.
+%
+% Note: column figures are not handled on the last page of column output.
+% \balancecolumns does not understand how to deal with them.
+%
+% While in X column mode, the text is arranged as one column
+% \columnwidth wide and \pageheight*X tall. This narrow column is
+% then split into X boxes of equal height.
+%
+%***************************************
+%
+% Allocate a bunch of dimens, boxes, and counts for use in multiple-column
+% macros.
+%
+\newdimen\columnwidth % Width of a column
+\newdimen\columnseprule % Width of rule between columns
+\newdimen\columnsep % Width of whitespace between columns
+\newdimen\pagewidth % Total width of page
+\newdimen\pageheight % Total height of page
+\newdimen\pageheightkeep % Total height of page
+\newdimen\ruleht % Height of \hrules
+\newif\ifcolfigs % Create a new \if (true if figures)
+\newbox\partialpage % Box to hold partial page before cols.
+\newbox\partialpagetop % Box to hold figure for top of page
+\newbox\partialpagebottom % Box to hold figure for bottom of page
+\newcount\mulc@lbegin % Allocate a counter
+\newcount\mulc@lpart % Allocate a counter
+\newcount\numberofcols % Number of columns
+\newcount\c@lpageno % Current page # for column environment
+\newcount\maxcolfigs % Maximum # of figures
+\newcount\c@lfigstart % Starting array slot # for inserts
+\newcount\c@lslot % Work counter to hold current slot #
+\newcount\maxfigp@ges % Maximum # of pages of column output
+\newcount\figsperp@ge % Number of figures on each page
+%
+% Allocate multi-column work counters and dimens.
+%
+\newdimen\tmp@ % Dimen used to calculate pageheights, etc.
+\newdimen\tmp@one % Dimen used to calculate pageheights, etc.
+\newcount\tmp@two % Usually # of cols * 2
+\newcount\tmp@three
+\newcount\tmp@four
+\newcount\tmp@five
+\newcount\tmp@six
+\newcount\tmp@seven
+\newdimen\rtmp@ % Dimen used in rounding
+%
+% Initialize the \column* dimens. If \columnwidth is still 0pt when
+% \begincolumns is called, the correct \columnwidth will be
+% calculated from the current \hsize. This lets the user set a column
+% width, without requiring that it be done.
+%
+\columnsep=20pt % Space between columns
+\columnseprule=.4pt % Width of rule between columns
+\columnwidth=0pt % Initialize columnwidth to 0pt
+%
+% Initialize pagewidth, pageheight, and ruleht
+%
+\pagewidth=\hsize \pageheight=\vsize \ruleht=.5pt
+%
+% Define constant values used to indicate type of figure stored in
+% figure boxes. Probably inefficient to store them as macros, but it's
+% easier that way (and they're not hardcoded in the macros below).
+%
+\def\TopFig@{500} % Figure is at top of page
+\def\BotFig@{600} % Figure is at bottom of page
+\def\RegFig@{321} % Figure is a corner figure
+\def\topc@lpos{1} % The top figure position (1)
+\def\middlec@lpos{2} % The middle figure position (2)
+\def\bottomc@lpos{3} % The bottom figure position (3)
+
+%
+% Macro \onepageout
+%
+% Output routine used to actually shipout pages to the DVI file.
+%
+\def\onepageout#1{\shipout\vbox{ % here we define one page of output
+ {\hsize=\pagewidth\makeheadline} % Do normal width headline
+ %\offinterlineskip % butt the boxes together
+ \vbox to \pageheightkeep{ % Create a vbox big enough
+ \boxmaxdepth=\maxdepth % Set boxmaxdepth
+ #1 % Now insert the information
+ } % \vbox to \pageheight
+ {\hsize=\pagewidth\makefootline} % Do normal width footline
+ } % End of \vbox
+ \advancepageno % Advance current page number
+ } % End of \def\onepageout
+
+%\output{\onepageout{\unvbox255}} % Send out any current output
+
+%
+% When \begincolumns is called:
+%
+% \output is set to perform the following functions:
+% Store the current vbox in the partialpage box (with some vskip)
+% Eject the page (executing \output - page is not really ejected)
+% Set new definition of output:
+% Call \multiplecolumnout to output the columns
+% Set \hsize = \columnwidth
+% Set \vsize = (\pageheight * X) - (\ht\partialpage * X) --- each column will
+% now be just as tall as the space below \partialpage
+%
+% Sometimes the first \output was executed twice in a row, which caused the
+% first \partialpage to be lost. The code below includes a counter that is
+% used to determine if the output routine is called a second time. If it
+% is, the routine ships the previously stored partial page and then creates
+% a new \partialpage.
+%
+% Originally, \begincolumns set \vsize = X * \pageheight (it did not
+% take the height of the \partialpage into account). If the complete text
+% would fit in the full \vsize, the balancing routine would have problems
+% balancing and you'd end up with lots of whitespace on a page and the
+% multiple columns would show up on the next page. Make sense? If not,
+% just trust me; it caused problems.
+%
+% The solution to the problem was to set
+%
+% \vsize = (\pageheight * X) - (\ht\partialpage * X)
+%
+% and then set \vsize back to (X*\pageheight) after the first page had been
+% ejected. This worked fine and dandy except for the fact that grouping was
+% causing the changes to not hold. The solution (and it is a little
+% dangerous) was to use \global\vsize so that the \vsize changes were never
+% local to the group. \endcolumns then resets \vsize = \pageheight.
+% Again, trust me; it seems to work OK.
+%
+\def\begincolumns#1{
+ \ifnum#1<2 \errmessage{Invalid number of columns -- #1; must be 1 < X < 7}\fi
+ \ifnum#1>6 \errmessage{Invalid number of columns -- #1; must be 1 < X < 7}\fi
+ \begingroup % Begin a new group
+ \global\mulc@lbegin=1 % Set "first time" output counter
+ \global\mulc@lpart=1 % Set "first time" outputting dbl cols.
+ \global\pageheightkeep=\vsize % Initialize \pageheight
+ \global\pageheight=\vsize % Initialize \pageheight
+ \round{\pageheight}{\baselineskip}{<} % Round the pageheight down
+ \global\pagewidth=\hsize % Initialize \pagewidth
+ \global\tmp@two=#1 \global\advance\tmp@two by-1
+ \global\numberofcols=#1 % Initialize number of columns
+ % Calculate column width unless user set a value
+ \ifdim\columnwidth=0pt % If user did not set \columnwidth
+ \columnwidth=\hsize % Set columnwidth = normal page width
+ \tmp@=-\columnsep % Copy neg. amount of columnsep to tmp@
+ \multiply\tmp@ by\tmp@two % Multiply by X (total amount of colsep)
+ \advance\columnwidth by\tmp@ % Subtract width space between columns
+ \divide\columnwidth by\numberofcols % Divide by X to get X column output
+ \fi % End of \columnwidth calculation
+ \output={
+ \ifnum\mulc@lbegin=1 % 1st time through?
+ \global\setbox\partialpage=\vbox{\unvbox255\bigskip} % Store partial
+ \global\mulc@lbegin=2 % Increment counter
+ \else % 2nd time through...
+ \onepageout{\vbox{\unvbox\partialpage}} % Ship previous partial
+ \global\setbox\partialpage=\vbox{\unvbox255\bigskip} % Make a new
+ \fi % ... partial
+ }\eject % Force the output routine to execute
+ \output={\multiplecolumnout} % Output X columns
+ \hsize=\columnwidth % Set hsize = col. width
+ % Set \vsize = (\pageheight * X) - (\ht\partialpage * X)
+ \global\vsize=\pageheight % Set \vsize=X*\pageht
+ \global\multiply\vsize by\numberofcols % Multiply by X
+ \tmp@=-\ht\partialpage \multiply\tmp@ by\numberofcols % Subtract (height of
+ \global\advance\vsize by\tmp@ % ... partial page * X)
+ \round{\vsize}{\baselineskip}{>} % Round it up
+ } % End of \begincolumns
+
+%
+% \endcolumns performs the following functions:
+%
+% Sets \output to call \balancecolumns
+% \vfills page and ejects it
+% Terminates the group
+% Resets vsize to original size
+% Resets pagegoal = to original \vsize
+% Skips parskip vertical space
+% Signals that this is a good place for a break, if necessary
+%
+\def\endcolumns{\output={\balancecolumns} \eject
+ \endgroup \global\vsize=\pageheightkeep \pagegoal=\vsize \bigskip \goodbreak}
+%
+% \multiplecolumnout
+%
+% Sets splittopskip = topskip
+% Sets splitmaxdepth = maxdepth
+% Sets TeX register \dimen@ = to height of the page
+% Subtracts the height of the partial page from \dimen@
+% Subtracts the heights of the top & bottom figures from \dimen@
+% Splits up the current output box into X boxes of size \dimen@, handling
+% figures, if present
+% Calls \onepageout to dump the new boxes
+% Resets \vsize = (X * \pageheight) if first time through macro
+% Frees up current output vbox (255)
+%
+\def\multiplecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
+ \advance\dimen@ by-\ht\partialpagetop % Subtract height of top figure
+ \advance\dimen@ by-\ht\partialpagebottom % Subtract height of bottom fig.
+ \tmp@four=\numberofcols \multiply\tmp@four by2 % Calculate upper box #
+ \tmp@five=0 % Start boxes with box 0
+ \ifcolfigs % Are there figures defined?
+ \splitfigc@ls % Yes - go handle text & figures
+ \else % No - split \box255 into X cols
+ %
+ % Split box255 into a box of dimen@ height. Loop until X boxes created.
+ %
+ {\loop
+ \global\setbox\tmp@five=\vsplit255 to\dimen@ \advance\tmp@five by2
+ \ifnum\tmp@five<\tmp@four \repeat} % Loop if not done
+ \fi % \ifcolfigs
+ \onepageout\pagesofar % Send this page to DVI file
+ \ifnum\mulc@lpart=1 % Does vsize need to be reset?
+ \global\mulc@lpart=2 % Yes - change counter
+ \global\vsize=\pageheight % Set \vsize = X * \pageheight
+ \global\multiply\vsize by\numberofcols % ...
+ \fi % ...
+ \ifcolfigs % If figures defined...
+ \global\advance\c@lpageno by\@ne % Bump column output page no.
+ \handlefigures % Handle next page's figures
+ \fi % \ifcolfigs
+ \unvbox255 \penalty\outputpenalty % Free current output vbox
+} % End of \multiplcolumnout
+
+%
+% \splitfigc@ls
+%
+% This macro splits \box255 into X columns, handling the figures.
+%
+% Get figure array slot number for figure 1, column 1 on current page
+% Loop for each column (starting with column in \tmp@five)
+% Make a copy of \dimen@ -> \tmp@
+% If a figure is defined for top of column
+% Decrease \tmp@ by the height of the figure
+% Set box 1 = the figure
+% Else
+% Set box 1 = null vbox
+% Bump figure array slot number - now points to slot for middle figure
+% If a figure is defined for middle of column
+% Decrease \tmp@ by the height of the figure
+% Set box 5 = the figure
+% Else
+% Set box 5 = null vbox
+% Bump figure array slot number - now points to slot for bottom figure
+% If a figure is defined for bottom of column
+% Decrease \tmp@ by the height of the figure
+% Set box 9 = the figure
+% Else
+% Set box 9 = null vbox
+% Bump figure array slot number - now points to slot for next top figure
+% Split \box255 into 1 or 2 pieces (2 if there is a middle figure)
+% Set \box\tmp@five = \box1 + \box3 + \box5 + \box7 + \box9
+% Advance \tmp@five by 2 and loop until X "columns" created
+%
+\def\splitfigc@ls{
+ %
+ % Split box255 into a box of dimen@ height. Loop until X boxes created.
+ %
+ \tmp@two=1 % Figure counter
+ \calcc@lslot{\c@lpageno}{1}{\tmp@two} % Get slot for figure 2 on current page
+ {\loop % Start loop
+ \tmp@=\dimen@ % Make a working copy of dimen@
+ %
+ % Handle top figure
+ %
+ \ifnum\count\c@lslot=\RegFig@ % If this slot holds a single-column fig
+ \advance\tmp@ by-\ht\c@lslot % Subtract figure's height from \tmp@
+ \setbox1=\vbox{\unvbox\c@lslot} % Copy figure to \box1
+\say{Figure \the\tmp@two\space on page \the\c@lpageno, document page \folio}
+ \else \setbox1=\vbox{} % Else set box 1 = null page
+ \fi % \ifnum
+ %
+ % Handle middle figure
+ %
+ \advance\c@lslot by\@ne % Point to next figure
+ \advance\tmp@two by\@ne % Advance figure counter
+ \ifnum\count\c@lslot=\RegFig@ % If this slot holds a single-column fig
+ \advance\tmp@ by-\ht\c@lslot % Subtract figure's height from \tmp@
+ \setbox5=\vbox{\unvbox\c@lslot} % Copy figure to \box3
+\say{Figure \the\tmp@two\space on page \the\c@lpageno, document page \folio}
+ \else \setbox5=\vbox{} % Else set box 3 = null page
+ \fi % \ifnum
+ %
+ % Handle bottom figure
+ %
+ \advance\c@lslot by\@ne % Point to next figure
+ \advance\tmp@two by\@ne % Advance figure counter
+ \ifnum\count\c@lslot=\RegFig@ % If this slot holds a single-column fig
+ \advance\tmp@ by-\ht\c@lslot % Subtract figure's height from \tmp@
+ \setbox9=\vbox{\unvbox\c@lslot} % Copy figure to \box3
+\say{Figure \the\tmp@two\space on page \the\c@lpageno, document page \folio}
+ \else \setbox9=\vbox{} % Else set box 3 = null page
+ \fi % \ifnum
+ \advance\c@lslot by\@ne % Point to next figure in array
+ \advance\tmp@two by\@ne % Advance figure counter
+ %
+ % Here, top figure is in \box1, middle figure is in \box5, and bottom
+ % figure is in \box9.
+ % Split \box255 to fill the remaining column space, splitting in
+ % half if there is a middle figure.
+ % Special case: if height of \box1 = \pageheight, \box\tmp@five=null
+ %
+ \ifdim\ht1=\pageheight % Is top = whole column?
+ \global\setbox3=\vbox{} % Yes - set \box3 to null
+ \global\setbox7=\vbox{} % Yes - set \box7 to null
+ \else % No - go ahead and do split
+ \ifdim\ht5>0pt % Is there a middle figure?
+ \divide\tmp@ by2 % Yes - break text to 2 pieces
+ \global\setbox3=\vsplit255 to\tmp@ % Set \box3 = 1st piece
+ \global\setbox7=\vsplit255 to\tmp@ % Set \box7 = 2nd piece
+ \else % No middle column...
+ \global\setbox3=\vsplit255 to\tmp@ % Put all text in \box3
+ \global\setbox7=\vbox{} % Set \box7 to null
+ \fi % \ifdim\ht5...
+ \fi % \ifdim
+ %
+ % Now put the 5 pieces together as one vbox in \box\tmp@five
+ %
+ \global\setbox\tmp@five=\vbox to\dimen@{\offinterlineskip%
+ \ifdim\ht1=0pt\else\vbox{\unvbox1}\fi
+ \ifdim\ht3=0pt\else\vbox{\unvbox3}\fi
+ \ifdim\ht5=0pt\else\vbox{\unvbox5}\fi
+ \ifdim\ht7=0pt\else\vbox{\unvbox7}\fi
+ \ifdim\ht9=0pt\else\vbox{\unvbox9}\fi
+ \vfil\vfilneg % Cancels spurious vglue ???? (it works)
+ }
+ \advance\tmp@five by2 % Bump column box #
+ \ifnum\tmp@five<\tmp@four \repeat} % Loop if not done
+} % End of \splitc@lfigs
+
+%
+% \pagesofar
+%
+% Releases \partialpage box
+% Sets width of X boxes (from box 0 to box X) = to \columnwidth
+% Creates an hbox = pagewidth that consists of box0 + separator rule + box 2
+% + separator rule + box X
+% This new hbox is \box255 and can be used to \shipout
+%
+\def\pagesofar{\unvbox\partialpage
+ \unvbox\partialpagetop % Include top figure
+ \tmp@four=\numberofcols \multiply\tmp@four by2 % Loop boundary number
+ \tmp@five=0 % Start with box 0
+ %
+ % For each box, set the width equal to the column width
+ %
+ {\loop \wd\tmp@five=\columnwidth \advance\tmp@five by2
+ \ifnum\tmp@five<\tmp@four \repeat} % Loop until X done
+ %
+ % Now put all the boxes together like this:
+ %
+ % box | box | ... | box
+ %
+ \tmp@five=0 % Start with box 0 again
+ \hbox to\pagewidth{\box\tmp@five\advance\tmp@five by2% Do the left column
+ \loop \hfil\vrule width\columnseprule \hfil \box\tmp@five%
+ \advance\tmp@five by2 % Bump box counter
+ \ifnum\tmp@five<\tmp@four \repeat % Loop if not done
+ } % End of hbox
+ \unvbox\partialpagebottom % Include bottom figure
+} % End of \pagesofar
+
+%
+% \balancecolumns - Balance both columns at end of X column page
+%
+% Sets box 0 = current page
+% Sets dimen@ = height of the vbox in box 0
+% Adds topskip value to dimen@
+% Subtracts X * \baselineskip from dimen@
+% Divides dimen@ by X -- dimen@ now has target height of each column
+% Sets splittopskip = to topskip so it can be added to all columns
+% Loops
+% Copies box 0 to box 3
+% Splits box 3 to dimen@ and stores in box 1 & 3
+% Increments dimen@ by 1pt and loops if column in box 3 exceeds dimen@
+% Note: Splitting of box is actually implemented as a loop that creates
+% X boxes
+% Moves columns in odd-numbered boxes to corresponding even-numbered boxes
+% Calls pagesofar to make the hbox for it
+%
+\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen@=\ht0
+ %
+ % Subtract X * \baselineskip from dimen@ and divide dimen@ by X
+ %
+ \tmp@two=\numberofcols \advance\tmp@two by-1
+ \tmp@=-\baselineskip \multiply\tmp@ by\tmp@two \advance\dimen@ by\tmp@
+ \divide\dimen@ by\numberofcols \splittopskip=\topskip % Dimen@/X
+ %
+ % Split the column X times so we have X columns of equal height. If our
+ % last column is > dimen@, bump dimen@ by one and loop.
+ %
+ \tmp@four=\numberofcols \multiply\tmp@four by2 % X * 2
+ \tmp@seven=\tmp@four \advance\tmp@seven by-1 % Work box: (X*2)-1
+ {\vbadness=10000 \loop \global\setbox\tmp@seven=\copy0
+ \tmp@five=0 \tmp@six=1 % Work box starts with 1
+ {\loop % Loop for X boxes
+ \global\setbox\tmp@six=\vsplit\tmp@seven to\dimen@ % Vsplit box
+ \advance\tmp@six by2 % Bump box counter
+ \ifnum\tmp@six<\tmp@seven \repeat} % Loop if not done
+ \ifdim\ht\tmp@seven>\dimen@ \global\advance\dimen@ by1pt \repeat}
+ %
+ % Here we have X columns of equal height. Note that the last column may
+ % not be equal to the others.
+ %
+ % Copy the columns to the even-numbered boxes in preparation for \pagesofar
+ %
+ \tmp@five=0 \tmp@six=1
+ {\loop \global\setbox\tmp@five=\vbox to\dimen@{\unvbox\tmp@six}
+ \advance\tmp@five by2 \advance\tmp@six by2
+ \ifnum\tmp@five<\tmp@four \repeat}
+ \pagesofar} % Call \pagesofar to build page
+%
+% \c@lnewinsert
+%
+% This macro is used to perform a \newinsert for temporary usage (inside a grp)
+%
+\def\c@lnewinsert{\advance\insc@unt by\m@ne % Decrement insert counter
+ \ch@ck0\insc@unt\count % Make sure count is available
+ \ch@ck1\insc@unt\dimen % Make sure dimen is available
+ \ch@ck2\insc@unt\skip % Make sure skip is available
+ \ch@ck4\insc@unt\box % Make sure box is available
+% NEED TO EMPTY BOX!!!
+ \count\insc@unt=0 % Set the count to 0
+ \allocationnumber=\insc@unt % Set the allocation number
+} % End of \c@lnewinsert
+
+%
+% \definefigs
+%
+% This macro is called to establish the figure environment inside of the
+% multiple-column environment. It allocates (until \endcolumns) an array
+% of inserts (boxes, counts, dimens, and skips) to handle all of the
+% figures per page for the given number of pages. When the figures
+% are defined using \definefig, the proper box is filled with the figure.
+%
+% Inputs:
+%
+% #1 - Number of pages of multiple-column output (should be as large
+% as the total number of pages between \begincolumns and
+% \endcolumns)
+%
+\def\definefigs#1{
+ \colfigstrue % Set column figure flag
+ \global\c@lpageno=1 % Get current page number
+ \maxfigp@ges=#1 % Set maximum # of pages with figures
+ \figsperp@ge=\numberofcols % Calculate # of figures per page
+ \multiply\figsperp@ge by3 % Figs/Page = 2 + (3 * number of cols)
+ \advance\figsperp@ge by2 % ...
+ \maxcolfigs=\maxfigp@ges % Figure out how many inserts are needed
+ \multiply\maxcolfigs by\figsperp@ge % ... for all of the figures
+ \tmp@two=\maxcolfigs % Start there and work down to first box
+ \loop \c@lnewinsert \advance\tmp@two by\m@ne
+ \ifnum\tmp@two>0 \repeat
+ \c@lfigstart=\insc@unt % Save starting array slot #
+ % We've allocated all boxes now
+ } % End of \definefigs
+
+%
+% \definefig
+%
+% This macro stores figure information in the appropriate slot in the insert
+% array. After calculating the proper slot number for the figure, it stores
+% the figure in the corresponding box and sets the corresponding \count to
+% a code identifying the box as holding a figure.
+%
+% Inputs:
+%
+% #1 Output page number
+% #2 Column Number
+% #3 Position (top, middle, bottom)
+% #4 The vbox for the figure
+%
+\def\definefig#1#2#3#4{
+ \ifcolfigs % Has \definefigs been called?
+ \else
+ \errmessage{Illegal use of \string\definefig\space before \string\definefigs}
+ \fi % \ifnum
+ \ifnum#2>\numberofcols % Illegal column number?
+ \errmessage{Column number #2 exceeds number of columns}
+ \fi % \ifnum
+ \calcc@lslot{#1}{#2}{\csname #3c@lpos\endcsname} % Calculate slot #
+ \ifcase\csname #3c@lpos\endcsname
+ \or\setbox\c@lslot=\vbox{#4\vskip\belowdisplayskip}
+ \or\setbox\c@lslot=\vbox{\vskip\abovedisplayskip#4%
+ \vskip\belowdisplayskip}
+ \or\setbox\c@lslot=\vbox{\vskip\abovedisplayskip#4}
+ \tmp@=\ht\c@lslot % Round up the size
+ \round{\tmp@}{\baselineskip}{>} % ...
+ \tmp@one=\tmp@ \advance\tmp@one by-\ht\c@lslot
+ \setbox\c@lslot=\vbox to\tmp@{\box\c@lslot}
+ \fi
+ \ifnum#2=0 % If column # is 0, special fig.
+ \ifnum\csname #3c@lpos\endcsname=1\count\c@lslot=\TopFig@
+ \else\count\c@lslot=\BotFig@\fi % Top or Bottom figure that
+ \else % ... spans all columns
+ \count\c@lslot=\RegFig@ % Otherwise, identify the box
+ \fi % ... as containing a figure
+\say{Processed #3 figure for column #2\space on page #1\space
+ - slot \the\c@lslot}
+ \say{The height is \the\ht\c@lslot}
+}
+
+%
+% \calcc@lslot
+%
+% This macro is called to calculate the array slot number for a figure.
+% The formula for normal figures is:
+%
+% ((column# - 1) * 3figs/column) + Position
+%
+% This macro assumes there can be 3 figures per column (top, middle, & bottom)
+%
+% Inputs:
+%
+% #1 - Page number
+% #2 - Column number (0 = special figure that spans all columns)
+% #3 - Figure number (1 = top, 2 = middle, 3 = bottom)
+%
+% Returns:
+%
+% \c@lslot - Slot number for given figure. This slot number
+% identifies the allocated insert for the figure.
+%
+\def\calcc@lslot#1#2#3{
+ \tmp@seven=#1 % Start with page #
+ \advance\tmp@seven by\m@ne % (Page - 1)
+ \multiply\tmp@seven by\figsperp@ge % (Page - 1) * # of figs
+ \ifnum#2=0 % If column is 0, special one
+ \ifnum#3=1\tmp@six=1\else\tmp@six=\figsperp@ge\fi
+ \advance\tmp@six by\m@ne % Decrement for slot #
+ \else
+ \tmp@six=#2 % Column #
+ \advance\tmp@six by\m@ne % (Column# - 1)
+ \multiply\tmp@six by3 % (Column# - 1) * 3
+ \advance\tmp@six by#3 % (Column# - 1) * 3 + Position
+ \fi % Really + 1, but -1 negates it
+ \advance\tmp@seven by\tmp@six % Add figure # to page #
+ \advance\tmp@seven by\c@lfigstart % Figure slot number
+ \global\c@lslot=\tmp@seven % Set the slot number
+ } % End of \calcc@lslot
+%
+% \handlefigures
+%
+% This macro is called to step through all of the figures for the current
+% page and subtract the height of each from the total \vsize.
+%
+% The two special figures (top (1) and bottom (\figsperp@ge)) are handled
+% differently; because each spans all of the columns on the page, the height
+% of each is multiplied by the number of columns before subtracting it from
+% \vsize. The top figure is then placed in \partialpagetop and the bottom
+% figure is placed in \partialpagebottom.
+%
+% Returns: Adjusted \vsize.
+%
+\def\handlefigures{
+ \global\vsize=\pageheight % \vsize to pageheight
+ \global\multiply\vsize by\numberofcols % Multiply by # of columns
+ \tmp@three=\figsperp@ge % Start with figure X
+ \calcc@lslot{\c@lpageno}{0}{3} % Start with last figure box
+ {\loop
+ \ifnum\count\c@lslot=\TopFig@ % If box is top section of page
+ \global\setbox\partialpagetop=\vbox{\unvbox\c@lslot} % Copy it
+ \tmp@=\ht\partialpagetop % Get the height
+ \multiply\tmp@ by\numberofcols % Multiply by number of columns
+ \global\advance\vsize by-\tmp@ % (vsize - figure size)
+ \else % Else
+ \ifnum\count\c@lslot=\BotFig@ % If box is bottom section
+ \global\setbox\partialpagebottom=\vbox{\unvbox\c@lslot}
+ \tmp@=\ht\partialpagebottom
+ \multiply\tmp@ by\numberofcols
+ \global\advance\vsize by-\tmp@ % (vsize - figure size)
+ \else % Else, see if regular figure
+ \ifdim\ht\c@lslot>0pt\all@wfigure{\ht\c@lslot}\fi % \vsize
+ \fi % End \ifnum
+ \fi % End \ifnum
+ \advance\tmp@three by\m@ne % Point to next box
+ \advance\c@lslot by\m@ne % Point to next box
+ \ifnum\tmp@three>0 \repeat} % Loop until done
+ } % End of \handlefigures
+
+\def\all@wfigure#1{
+ \tmp@=#1 % Height of figure
+ \global\advance\vsize by-\tmp@ % Subtract figure size from vsize
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macro: \round#1#2#3
+%
+% Purpose: Round a dimen parameter (#1) to the nearest even multiple of
+% parameter #2. Primarily used to ensure that the page height
+% or a figure height is an even multiple of the baselineskip.
+%
+% NOTE: this macro assumes there is no stretch or shrink to #2.
+%
+% Inputs:
+% #1 Dimen variable to change (e.g., \pageheight)
+% #2 Dimen variable to use as multiple (e.g., \baselineskip)
+% #3 Symbol indicating round up (>) or round down (<)
+% \tmp@ Work dimen (saved and restored)
+%
+% Example:
+% \pageheight=598.213pt \baselineskip=12pt
+% \round{\pageheight}{\baselineskip}{<} %yields \pageheight=588.0pt
+% \round{\pageheight}{\baselineskip}{>} %yields \pageheight=600.0pt
+%
+\def\round#1#2#3{\bgroup% %Keep \tmp@ changes local
+ \rtmp@=0pt %Initialize \tmp@
+ \loop %Begin a loop
+ \advance\rtmp@ by #2 %Bump \tmp@ by #2
+ \ifdim#1>\rtmp@ \repeat %Loop until \tmp@ > #1
+ \ifx<#3 %If #3 = "<" then
+ \advance\rtmp@ by-#2 %... subtract #2 from \tmp@
+ \fi %...
+ \global#1=\rtmp@ %Reset parameter #1
+ \egroup %End the group
+} %End of macro
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Define list macros
+%
+% Dimens:
+%
+% \llistindent - Amount of left indent (0pt by default)
+% \rlistindent - Amount of right indent (0pt by default)
+%
+% Macros:
+%
+% \beginlist - Begin list (skips space, sets indent)
+% \endlist - Terminates a list
+% \beginlistt - Begin list with glue (used for list headers)
+% \endlistt - Terminates a \beginlistt
+% \dotitem - Itemize with a dot "o"
+%
+\newdimen\llistindent \llistindent=0pt
+\newdimen\rlistindent \rlistindent=0pt
+\def\listindent#1{\llistindent=#1\rlistindent=#1}
+
+\def\beginlist{\begingroup%
+ \ifdim\parskip=0pt \vskip.5\baselineskip % Skip 1/2 line
+ \else \vskip\parskip % or the \parskip
+ \fi %
+ \parindent=10pt\parskip=0pt% % Reset parindent
+ \leftskip=\llistindent \rightskip=\rlistindent} % Indent margins
+
+\def\endlist{\par\endgroup%
+ \ifdim\parskip=0pt \vskip.5\baselineskip
+ \else \vskip\parskip\fi}
+
+\def\dotitem#1\par{\item{$\bullet$} #1 \par}
+
+\def\beginlistt#1{#1\vglue0pt\begingroup%
+ \divide\parskip by2\vskip\parskip\parindent=10pt\parskip=0pt%
+ \leftskip=\llistindent \rightskip=\rlistindent}
+\def\endlistt{\par\endgroup} %\vskip\parskip}
+
+%
+% Define a small copyright (for use with 8-point type).
+%
+\def\smallcir{\smallsy\char13}
+\def\smallcopyright{\leavevmode\raise.25ex\hbox{
+ \ooalign{\hfil\raise.03ex\hbox{\kern .16em\verysmallrm C}
+ \hfil\crcr\smallcir}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Define macros to manipulate boxes
+%
+% Dimens:
+%
+% \boxitrule=Xpt - Width of rules used to draw boxes
+% \boxitspace=Xpt - Space between box rules and box contents
+% \boxshadowsize=Xpt - Width of shadow boxes
+%
+% Macros:
+%
+% \articletitle{Title}{byline} - Do article title in double box
+% \coltitle{Title} - Do a title box in a column
+% \shadowbox{some_box} - Draw a shadow box around an hbox or vbox
+% \leftshadowbox{somebox} - Draw a left-hand shadow box around a box
+% \centerbox{somebox} - Center a \vbox on a page
+% \boxit{some_box} - Draw a box around an hbox or vbox
+% \ednote - Do editor's note in a box
+%
+\newdimen\boxitspace \newdimen\boxitrule \newdimen\boxitwidth
+\boxitspace=3pt \boxitrule=1.2pt
+\boxitwidth=\boxitspace \advance\boxitwidth by\boxitspace
+\advance\boxitwidth by\boxitrule \advance\boxitwidth by\boxitrule
+
+%
+% Define macro to write an article title inside a double box
+%
+% Parameters:
+%
+% #1 - Title of article
+% #2 - Byline
+%
+% For both \articletitle and \coltitle, the width of the box(es) must be
+% subtracted from the current hsize in order for centering and justification
+% to work right (otherwise the letters will run into the lines of the box).
+%
+\def\articletitle#1#2{
+ \bestbreak{ % Say that this is best break
+ \advance\hsize by -\boxitwidth % Bring margin in before \center
+ \advance\hsize by -\boxitwidth % Do for both boxes!
+ \vskip 10pt plus 5pt % Skip some space
+ \boxit{ % Box the box
+ \divide\boxitrule by 2 % Make inside box lines thinner
+ \boxit{ % Box the text
+ \vbox{\noindent % Create a box
+ \centerline{\seventeenpoint\ss #1} % Print title of article
+ \centerline{\ninepoint\ss #2} % Print article byline
+ }}}}} % Create the text box
+
+\def\coltitle#1\par{{% % Swallow next paragraph
+ \advance\hsize by -\boxitwidth % Bring margins in
+ \boxit{% % Draw a box around the text
+ \vbox{\ss\noindent #1}}}% % Create a vbox that contains
+ \vglue.5\baselineskip% % Skip some non-breakable space
+ \noindent} % Don't indent next paragraph
+
+\def\ednote#1{{
+ \sl % Switch to slanted font
+ \def\sl{\/\rm} % Redefine \sl
+ \advance\hsize by -\boxitwidth % Bring margins in
+ \boxit{ % Draw a box around the text
+ \vbox{\noindent Editor's note: #1}}} % Create a vbox that contains
+ \vglue 0pt} % Finish it up
+
+\def\boxit#1{\vbox{\tithrule\hbox{\titvrule\kern\boxitspace%
+ \vbox{\kern\boxitspace #1 \kern\boxitspace}%
+ \kern\boxitspace\titvrule}\tithrule}}
+
+\def\tithrule{\hrule height\boxitrule}
+\def\titvrule{\vrule width\boxitrule}
+
+%
+% \centerbox
+%
+% Create a \vbox that contains a centered \hbox. The centering is relative
+% to the current \hsize.
+%
+% Inputs:
+%
+% #1 - \vbox to center -> \centerbox{\shadowbox{...}}
+%
+\def\centerbox#1{\hbox{\hfil#1\hfil}} % Create a \vbox containing a centered
+
+
+\newdimen\oboxht \newdimen\oboxwd \newdimen\boxshadowsize
+\boxshadowsize=4pt % Shadow box size is 4pt
+%
+% Draw a righthand shadow box. This is accomplished by building a vbox
+% containing an hbox that is the boxed text and an hbox that is the right
+% hand shadow. This vbox is then joined with a vbox that forms
+% the bottom shadow.
+%
+\def\shadowbox#1{{
+ \setbox0=\vbox{\boxit{#1}} % Set box after \boxit
+ \oboxht=\ht0 \oboxwd=\wd0 % Store the dimensions
+ \advance\oboxwd by-\boxshadowsize % Subtract shadow size from wd
+ \vbox{ % Put it all in one vbox
+ \offinterlineskip % Butt \vboxes together
+ \vbox{ % Create a vbox of whole thing
+ \hbox{\vbox{\unvbox0} % Create box with text box +
+ \hskip-\fontdimen2\font
+ \lower\boxshadowsize % Draw the right-hand boxshadowsize
+ \hbox{\vrule width\boxshadowsize height\oboxht}} % ... Finish off \hbox
+ } % End of the \vbox
+ \advance\boxshadowsize by\boxitrule
+ \vskip-\boxshadowsize % Back up to bottom of \vbox
+ \vbox{ % Start a new \vbox
+ \hbox{\kern\boxshadowsize\vbox{ % Create \hbox that is shadow
+ \hrule height\boxshadowsize width\oboxwd}} % ...
+ } % End of the \vbox
+ } % End of \vbox
+ }} % End of \shadowbox
+%
+% Draw a lefthand shadow box. This is accomplished by building a lowered
+% vbox containing an hbox that is the left hand shadow and an hbox that
+% contains the boxed text. This vbox is then joined with a vbox that forms
+% the bottom shadow.
+%
+\def\leftshadowbox#1{{
+ \setbox0=\vbox{\boxit{#1}} % Set box after \boxit
+ \oboxht=\ht0 \oboxwd=\wd0 % Store the dimensions
+ \advance\oboxwd by-\boxshadowsize % Subtract shadow size from wd
+ \vbox{
+ \offinterlineskip % Butt \vboxes together
+ \vbox{ % Create a vbox of whole thing
+ \hbox{ % Create an hbox
+ \hskip-\fontdimen2\font % Move left one character width
+ \hskip-\boxshadowsize % Move left = size of shadow box
+ \advance\boxitrule by\boxshadowsize % Make shadow a tad bit wider
+ \lower\boxshadowsize % Move down the same amount
+ \hbox{\vrule width\boxitrule height\oboxht} % Draw the left box
+ } % ... Finish off \hbox
+ \vskip-\oboxht\vskip-\boxshadowsize % Move back up to top of box
+ \hbox{\vbox{\unvbox0} % Create box with text inside it
+ }} % End of vboxes
+ \advance\boxshadowsize by\boxitrule % Make box a little thicker
+ % ... so it overlaps bottom line
+ \vskip-\boxitrule % Move up height of bottom line
+ \vbox{ % Start a new \vbox
+ \hbox{\vbox{ % Create \hbox that is shadow
+ \hrule height\boxshadowsize width\oboxwd}} % ...
+ } % End of the \vbox
+ } % End of \vbox
+ }} % End of \shadowbox
+
+\def\bestbreak{\par\penalty-1000}
+
+%
+% Begin a quotation. The quote is separated from the main text by two
+% hrules and is indented from the normal text.
+%
+\def\beginquote{
+ \begingroup % Define beginning of a group
+ \quotefont\baselineskip=16.8pt
+ \hrule height2pt % Draw a line
+ \parindent 5pt % Indent paragraphs by 5pt
+ \vglue\medskipamount % Use some glue so rule sticks
+ \narrower\narrower % Bring margins in (10pt)
+ \noindent % Don't indent
+ } % End of macro
+%
+% End a quotation.
+%
+\def\endquote{
+ \vglue\medskipamount % Use some glue so rule sticks
+ \hrule height2pt % Draw a line
+ \endgroup % End the quote group
+ }
+
+\def\quotee#1{{\hfill\break\hbox{}\nobreak\hfill\hbox{\quoteefont #1}
+ \finalhyphendemerits=0}}
+\def\Quote#1#2{\vbox{\vskip1.2pt\beginquote #1%
+ \quotee{#2}\endquote\vskip1.20003pt}}
+
+%
+% Insert current month and year
+%
+\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}
+%
+% Include a TeX file.
+%
+\def\include#1{\immediate\write10{Including TeX file #1}
+ \input #1 % Read the file in
+ % Things to do after formatting the file
+ }
+%
+% Separate articles with some vskip and an \hrule
+%
+\def\articlesep{ % Rule to separate articles
+ \vglue 10pt plus2pt minus4pt % Use vglue
+ \hrule %height.4pt % Draw a rule equal to \hsize
+ \vskip 10pt plus2pt minus2pt % Skip some vertical space
+ }
+
+% Put release flush right. If it won't fit, put it on the next line.
+% From TeXbook, Chapter 14.
+\def\farright#1{{\unskip\nobreak\hfill\penalty50\hskip2em
+ \hbox{}\nobreak\hfill \hbox{#1}\finalhyphendemerits=0}}
+
+%
+% Define end-of-article marker.
+%
+\def\eoa{\farright{\vrule height1.5ex width1.5ex depth0pt}}
+%
+% Generate a blank page and a blank line.
+%
+\def\nullpage{\eject\line{}\vfil\eject} % Define an empty page
+\def\nullline{\break\hbox{}\hfil\break} % Define an empty line
+%
+% Start on a new page.
+%
+\def\newpage{\vfill\eject}
+%
+% Get rid of underfill errors
+%
+\def\ignoreunderfill{\vbadness=10000\hbadness=10000\tolerance=2000}
+
+%=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+% Macros for bibliography entries
+%=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+%
+% Sample usage:
+%
+% \beginbibliography
+% \bibbook{The Wolf's Hour}
+% \ENUM New York: Pocket Books, March 1989 (paperback)
+% \endbibliography
+%
+\newcount\enumno % New counter - item #
+%
+% \beginbibliography - Begin a bibliography
+%
+\def\beginbibliography{\begingroup\global\enumno=1
+ \tiny % Use 8pt font
+ \parskip=1pt plus 1pt % Skip up to 2 points
+ } % End of \beginbibliography
+\def\endbibliography{\par\endbiblist\endgroup} % End of bibliography
+%
+% \beginbiblist - Begin a list of bibliographic references
+%
+\def\beginbiblist{\begingroup
+ \vglue0pt\parindent=30pt\parskip=0pt}
+%
+% \beginanotherlist - Begin a list inside a list of bibliographic references
+%
+\def\beginanotherlist{\begingroup
+ \divide\parskip by 2
+ \vglue\parskip\advance\parindent by10pt\parskip=0pt}
+\def\endbiblist{\par\endgroup\vskip4pt}
+
+% ENUM - Number items in a list
+% ENum - No number, but spaced as if number was present
+% NoENUM - Only one reference is present. Start reference where number would
+% normally start (hanging into left column).
+%
+% Examples:
+%
+% \ENUM First one 1. First one
+% \ENUM Second one Yields 2. Second one
+% \ENum Third one Third one
+% \NoENUM Fourth one Fourth one
+%
+\def\ENUM#1\par{\item{\the\enumno.}\advance\enumno by 1 #1 \par }
+\def\ENum#1\par{\item{}\advance\enumno by 1 #1 \par }
+\def\NoENUM#1\par{\advance\enumno by 1\par\hang\hskip-10pt #1 \par }
+%
+% \bibshort, \bibbook, \bibview
+%
+% Macros to begin a new bibliography entry for a short story, a book, and
+% and interviews. These macros will terminate the previous bibliography
+% entry (if there is one) and begin a new entry.
+%
+\def\bibshort#1{\ifnum\enumno>1 \bestbreak\endbiblist\fi % Short story
+ \noindent{\story{#1}}\beginbiblist
+ }
+\def\bibbook#1{\ifnum\enumno>1 \endbiblist\fi % Book
+ \noindent{\sl #1}\beginbiblist
+ }
+\def\bibview#1{\ifnum\enumno>1 \endbiblist\fi % Interview
+ \noindent{#1}\beginbiblist
+ }
+\def\subbib#1{\hskip-20pt #1\hfill} %Subheading for a bib entry
+\def\bibsectitle#1{ %Title of bib section (BOOKS...)
+ \vskip 8pt plus1pt minus1pt % Skip some space
+ \hrule % Draw an hrule
+ {\tenss #1} % Add text in 10pt font
+ \vglue 10pt plus1pt minus1pt % Skip some more space
+ }
+%=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+%
+% File: QUOTE.TEX
+%
+% Author: Hunter Goatley
+%
+% 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
+ }
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Header & Footer Macros
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% These macros implement the headers and footers for the newsletter format.
+% The macros accept three parameters: text that is to appear flush-left on
+% the line, text that should be centered, and text that should be flush-right
+% on the line. Parameters can be omitted by specifying empty braces ({}).
+%
+% The following macros are defined for headers and footers:
+%
+% \evenpageheader{LEFT}{CENTER}{RIGHT}
+% \oddpageheader{LEFT}{CENTER}{RIGHT}
+% \evenpagefooter{LEFT}{CENTER}{RIGHT}
+% \oddpagefooter{LEFT}{CENTER}{RIGHT}
+%
+% If the headers/footers are the same for even & odd pages, the following
+% macros can be used instead of the four above:
+%
+% \pageheader{LEFT}{CENTER}{RIGHT}
+% \pagefooter{LEFT}{CENTER}{RIGHT}
+%
+% Additional header/footer definitions:
+%
+% \pageheaderlinetrue - A line should extend below header text
+% \pageheaderlinefalse - Header does NOT have a line
+% \pagefooterlinetrue - A line should extend above footer text
+% \pagefooterlinefalse - Footer does NOT have a line
+% \headfootrule=Xpt - Thickness of header/footer lines
+% \pageheaderskip=Xpt - \vskip between header and line
+% \pagefooterskip=Xpt - \vskip between footer and line
+% \headfont=\fontname - Font to use for header text
+% \footfont=\fontname - Font to use for footer text
+%
+% Example:
+%
+% \pageheader{}{My Newsletter}{}
+% \pagefooter{October 1989}{}{\pageno}
+%
+\newif\ifpageheaderline \pageheaderlinefalse % By default, no header line
+\newif\ifpagefooterline \pagefooterlinefalse % By default, no footer line
+\newdimen\headfootrule \headfootrule=0.50pt % Height of header & footer rule
+\newdimen\pageheaderskip \pageheaderskip=4pt % Space between header and rule
+\newdimen\pagefooterskip \pagefooterskip=4pt % Space between rule and footer
+
+\let\headfont=\twelverm \let\footfont=\twelverm % Assign fonts for head/foot
+
+\def\@pageheader#1#2#3{%
+ \ifpageheaderline % If headerline
+ \vbox{\hbox to\normalhsize{{\headfont\rlap{#1}\hss{#2}\hss\llap{#3}}}%
+ \vskip\pageheaderskip\hrule height\headfootrule}% Do hbox and hrule
+ \else
+ {\headfont\rlap{#1}\hss{#2}\hss\llap{#3}}%
+ \fi
+ }
+
+\def\@pagefooter#1#2#3{%
+ \ifpagefooterline
+ \vbox{\hrule height\headfootrule\vskip\pagefooterskip
+ \hbox to\normalhsize{\footfont\rlap{#1}\hss{#2}\hss\llap{#3}}}%
+ \else
+ {\footfont\rlap{#1}\hss{#2}\hss\llap{#3}}%
+ \fi
+ }
+%
+% Define default headers and footers - null lines of text
+%
+\def\@oddhead{\nullline} \def\@evenhead{\nullline}
+\def\@oddfoot{\nullline} \def\@evenfoot{\nullline}
+
+\def\@newhead{\headline{\ifodd\pageno\@oddhead\else\@evenhead\fi}}
+\def\@newfoot{\footline{\ifodd\pageno\@oddfoot\else\@evenfoot\fi}}
+
+\def\oddpageheader#1#2#3{\@newhead\def\@oddhead{\@pageheader{#1}{#2}{#3}}}
+\def\evenpageheader#1#2#3{\@newhead\def\@evenhead{\@pageheader{#1}{#2}{#3}}}
+\def\oddpagefooter#1#2#3{\@newfoot\def\@oddfoot{\@pagefooter{#1}{#2}{#3}}}
+\def\evenpagefooter#1#2#3{\@newfoot\def\@evenfoot{\@pagefooter{#1}{#2}{#3}}}
+%
+% If no difference between even and odd pages, just define both to be the same.
+%
+\def\pageheader#1#2#3{\evenpageheader{#1}{#2}{#3}\oddpageheader{#1}{#2}{#3}}
+\def\pagefooter#1#2#3{\evenpagefooter{#1}{#2}{#3}\oddpagefooter{#1}{#2}{#3}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Command for "poor man's bold": \pmb (use sparingly)
+%
+\def\pmb#1{\setbox0=\hbox{#1}% % Copy box to box0
+ \leavevmode\hbox{% % Make an hbox that holds
+ \kern-.025em\copy0\kern-\wd0% % Move left 1/4 em and copy box0
+ \kern.05em\copy0\kern-\wd0% % Move right 1/4 em and copy it
+ \kern-.025em\raise.0433em\box0 }} % Raise a little and copy again
+
+%
+% Define dots for ending sentences (4 dots instead of 3)
+%
+\def\eldots{\mathinner{\ldotp\ldotp\ldotp\ldotp}}
+\def\edots{\relax\ifmmode\eldots\else$\m@th\eldots\,$\fi}
+\def\ellip{\hskip.2em\ifmmode\ldots\else$\ldots$\fi\hskip.25em}
+%
+% Define macros \ital and \slant to switch to italic (\it) and slanted (\sl)
+% respectively. These macros automatically insert the italic correction
+% unless the next character is a period or a comma. 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.
+%
+\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 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
+ }
+
+\def\book#1{\ital{#1}} %For ease, define \book too
+\def\story#1{``#1''} %Short story title (add quotes)
+%
+% Important - make "@" a valid alphanumeric character again
+%
+\catcode`\@=12 % Follow TeX's lead on variable names
+
+\tenpoint % Default point size is 10pt
diff --git a/macros/plain/contrib/newsletr/newsletr.txt b/macros/plain/contrib/newsletr/newsletr.txt
new file mode 100644
index 0000000000..6badec3a08
--- /dev/null
+++ b/macros/plain/contrib/newsletr/newsletr.txt
@@ -0,0 +1,133 @@
+ Help for NEWSLETTER_FORMAT.TEX
+ Hunter Goatley
+ August 21, 1991
+
+\newspage - Sets up larger page for newsletter (taller/wider)
+\DATE - Include current month and year (July 1989)
+\include{file.ext} - Include a .TeX file (prints message)
+\say{Message} - Writes a message to the terminal
+\newpage - Begin a new page
+\nullpage - Creates an empty page with header/footer in place
+\nullline - Creates an empty line
+
+\ignoreunderfill - Avoids undervfill and underhfill messages
+
+\articlesep - Article separator; creates hrule = \hsize
+
+\ital{text} - Set in \it font (with proper italic correction)
+\slant{text} - Set in \sl font (with proper italic correction)
+\book{Title} - Book titles (uses \ital)
+
+\Quote{quote}{quotee} - Insert a quote with the quotee in small caps font
+\beginquote - Begins a quote; draws hrule, indents, larger font
+\endquote - Ends a quote; resets font to original size
+
+\articletitle{Title}{Byline}
+ - Builds an articletitle box (see example)
+\coltitle{Title} - Builds boxed title for use in double-column format
+
+\headfootrule=Xpt - Define height of rule in header & footer
+\columnsep=Xpt - Amount of space between columns in multi-column mode
+\columnwidth=Xpt - Width of a column in multi-column mode (calc. by def.)
+\columnseprule=Xpt - Width of vertical rule between columns (can be 0pt)
+\begincolumns{x} - Begins multiple-column mode (1 < X < 7)
+\endcolumns - Ends multiple-column mode
+
+\definefigs{#ofPages} - Initializes figures for multi-column mode
+\handlefigures - Must be specified right after \definefigs (bug)
+\definefig{Page}{Col}{Pos}{box}
+ - Defines a figure
+\abovedisplayskip - Amount of vskip before middle and bottom figures
+\belowdisplayskip - Amount of vskip below top and middle figures
+
+\shadowbox{some_box} - Draw a shadow box around an hbox or vbox
+\leftshadowbox{somebox} - Draw a left-hand shadow box around an hbox or vbox
+\centerbox{somebox} - Center a \vbox on a page
+\boxshadowsize=Xpt - Width of shadow boxes
+\boxit{some_box} - Draw a box around an hbox or vbox
+\boxitrule=Xpt - Width of rules used to draw boxes
+\boxitspace=Xpt - Space between box rules and box contents
+\bestbreak - Tell TeX that this is a pretty good place to break
+\ednote - Do editor's note in a box
+
+\listindent - Specify the amount to indent lists
+\beginlist - Begin a simple list of dotted items
+\endlist - End item list
+\beginlistt{title} - Begin list with a title (attached with vglue)
+\endlistt - End list with title (ends with \par)
+\dotitem - Item list with a bullet
+
+\beginbibliography - Begin a bibliography - main setup
+\endbibliography - End a bibliography
+\beginbiblist - Begin a list of references
+\beginanotherlist - Begin a dotitem list inside a \beginbiblist
+\endbiblist - End a bibliography list of references
+\ENUM item - Number items in a list
+\ENum item - Don't number, but indent as if number is present
+\NoENUM item - Don't number; start text where number would appear
+\bibshort{Title} - Short story entry
+\bibbook{Title} - Book entry
+\bibview{The...} - Interview entry
+\subbib{Subheading} - Subtitle for an entry
+\bibsectitle{title} - Adds a bibliography section title (BOOKS, etc.)
+
+\begindoublequote - Enable double-quote as a macro
+\enddoublequote - Disable double-quote as a macro
+" - Alternates between `` and ''
+\eoa - End of Article; draws black rectangle at right of line
+\smallcopyright - Insert a small (7pt) copyright character
+\farright{text} - Place text flush against the right-margin, possibly
+ on a new line if it won't fit.
+\ellip - Insert ellipsis with proper spacing (word\ellip word)
+\edots - Insert ellipsis at end of sentence (4 dots)
+
+The font commands below redefine \sl, \it, \bf, \rm, \ss, and \ssi for that font
+
+\twelvepoint - Switch to twelve-point fonts
+\elevenpoint - Switch to eleven-point fonts
+\tenpoint - Switch to ten-point fonts
+\ninepoint - Switch to nine-point fonts
+\eightpoint - Switch to eight-point fonts
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ These macros implement the headers and footers for the newsletter format.
+ The macros accept three parameters: text that is to appear flush-left on
+ the line, text that should be centered, and text that should be flush-right
+ on the line. Parameters can be omitted by specifying empty braces ({}).
+
+ The following macros are defined for headers and footers:
+
+ \evenpageheader{LEFT}{CENTER}{RIGHT}
+ \oddpageheader{LEFT}{CENTER}{RIGHT}
+ \evenpagefooter{LEFT}{CENTER}{RIGHT}
+ \oddpagefooter{LEFT}{CENTER}{RIGHT}
+
+ If the headers/footers are the same for even & odd pages, the following
+ macros can be used instead of the four above:
+
+ \pageheader{LEFT}{CENTER}{RIGHT}
+ \pagefooter{LEFT}{CENTER}{RIGHT}
+
+ Additional header/footer definitions:
+
+ \pageheaderlinetrue - A line should extend below header text
+ \pageheaderlinefalse - Header does NOT have a line
+ \pagefooterlinetrue - A line should extend above footer text
+ \pagefooterlinefalse - Footer does NOT have a line
+ \headfootrule=Xpt - Thickness of header/footer lines
+ \pageheaderskip=Xpt - \vskip between header and line
+ \pagefooterskip=Xpt - \vskip between footer and line
+ \headfont=\fontname - Font to use for header text
+ \footfont=\fontname - Font to use for footer text
+
+ Example:
+
+ \pageheader{}{My Newsletter}{}
+ \pagefooter{#1}{}{\pageno}
+
+ Defaults:
+
+ \pageheaderlinefalse \pagefooterlinefalse
+ \pageheaderskip=4pt \pageheaderskip=4pt
+ \pageheader{}{}{} \pagefooter{}{}{}
+
diff --git a/macros/plain/contrib/newsletr/newssamp.dvi b/macros/plain/contrib/newsletr/newssamp.dvi
new file mode 100644
index 0000000000..ffe973b213
--- /dev/null
+++ b/macros/plain/contrib/newsletr/newssamp.dvi
Binary files differ
diff --git a/macros/plain/contrib/newsletr/newssamp.pdf b/macros/plain/contrib/newsletr/newssamp.pdf
new file mode 100644
index 0000000000..f7ab43a34b
--- /dev/null
+++ b/macros/plain/contrib/newsletr/newssamp.pdf
Binary files differ
diff --git a/macros/plain/contrib/newsletr/newssamp.tex b/macros/plain/contrib/newsletr/newssamp.tex
new file mode 100644
index 0000000000..e0af4e8250
--- /dev/null
+++ b/macros/plain/contrib/newsletr/newssamp.tex
@@ -0,0 +1,266 @@
+%
+% File: NEWSLETTER_SAMPLE.TEX
+%
+% Functional description:
+%
+% This file is a sample TeX file to demonstrate the functionality of the
+% NEWSLETTER_FORMAT macros.
+%
+% It depends on the file NEWSLETTER_FORMAT.TEX.
+%
+% Author: Hunter Goatley
+%
+% Date: August 15, 1991
+%
+\ifx\undefined\eoa\input newsletr \fi % Include macro definitions
+\say{Producing sample newsletter}
+%
+% Define the page headers and footers. Different for even/odd pages.
+%
+\pageheaderlinetrue \pagefooterlinetrue
+\evenpageheader{}{Goat Droppings!}{}
+\oddpageheader{}{My Newsletter}{}
+\evenpagefooter{August\ 1991}{}{Page\ \folio}
+\oddpagefooter{Page \folio}{}{Vol.\ 1\ \ No.\ 1}
+
+\begindoublequotes % Handle double quotes
+
+\ignoreunderfill % Ignore undervfill errors
+\parskip=0pt % Don't skip between paragraphs
+\parindent=18pt % Indent paragraphs 18pt
+\rm % Use tenpoint roman
+
+%
+% Define a few commands to make typing easier.
+%
+\def\RRM{Robert~R. McCammon}
+\edef\TeX{\TeX\null}
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\quoteefont a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+%
+% Now define a short verbatim, which can be used for short strings:
+%
+\def\cmd#1{{\tt\string#1}}
+
+%
+% Setup for newsletter page (a little taller and wider, with increased
+% \tolerance, etc.)
+%
+\newspage
+
+%\nullpage % Null page w/ head/foot
+
+%
+% Now start the first article. Do the article in double-column format.
+%
+% The title and by-line are written in a double-box.
+%
+\articletitle{Using \TeX\ to Do A Newsletter}{By Hunter Goatley}
+
+\begincolumns{2} % Begin double-columns
+
+%
+% Reserve boxes for up to 3 pages of figures.
+%
+\definefigs{3}
+
+%
+% Define a quote as a figure in the middle of column 2 on page 1 of this
+% article.
+%
+\definefig{1}{2}{middle}{\Quote{%
+ Nothing beats \TeX\null. Nothing.}{Hunter Goatley}}
+%
+% Now do one that extends across the whole page.
+%
+\definefig{2}{0}{top}{\hsize=\normalhsize%
+\vbox{\centerline{\shadowbox{%
+ \hsize=5in
+ \vsize=.5in
+ \vbox to\vsize{
+ \vfill
+ \centerline{This is inside a \cmd{\shadowbox}.}
+ \vfill
+ } %End vbox
+ } %End shadowbox
+ }} %End vbox
+ \vskip12pt
+ \centerline{This is a figure across the whole page.}
+ } %End definefig
+
+\handlefigures % Necessary, but shouldn't be.
+\noindent
+This document attempts to describe how my plain \TeX\ newsletter format works.
+The documentation is sparse, but I hope to let it speak for itself through
+the use of examples. Will they be meaningful examples? Probably not. But,
+hey, I'll give it a shot.
+
+I started producing {\it Lights Out!---The \RRM\ Newsletter\/}
+in June 1989. For those who don't know, \RRM\ is a very popular author whose
+books have primarily been categorized in the horror genr\'e. His latest,
+\book{Boy's Life}, was published in hardcover by Pocket Books in August 1991.
+\book{Boy's Life} is {\sl not\/} horror---it's a wonderful tale of how 1964
+looked to a 12-year-old boy. There's a mystery, but the book is primarily
+about remembering life when you were young. I urge you to find the book and
+give it a try. Here are quotes from a couple of reviews of McCammon's previous
+novel, \book{Mine}:
+
+%
+% A sample \dotitem'ed list.
+%
+\bgroup % Start a new group to keep \listindent local
+\listindent{10pt}\beginlist
+\dotitem "\book{Mine} grips you tightly by the throat, right at the
+ start, and squeezes\edots" \farright{---\book{The New York Daily
+ News}}
+\dotitem "McCammon at his very best\ \dots\ and then some."
+ \farright{---\book{The Birmingham News}}%
+\endlist
+\egroup
+
+\noindent % Don't indent the paragraph after the quotes.
+Well, enough about \RRM. Even if you don't like horror, I think you'll like
+McCammon's work. Other titles include \book{Swan Song}, \book{Blue World},
+and \book{Mystery Walk}.
+
+I'll now break and we'll start a new sub-article under this main
+article. I used this approach in a regular column entitled "Things Unearthed,"
+which consisted of various news items about new book releases and other
+news items.
+
+%
+% Begin a new sub-article. \coltitle draws a box around the title. This
+% one has two centered lines, with a box around it.
+%
+\articlesep
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\coltitle{\centerline{Why I Chose \TeX\ Over}\break
+ \centerline{Ventura and PageMaker}}
+
+When I decided I was going to start producing a newsletter, I started looking
+at the options I had available to me. Because I'm a VAX systems programmer,
+I preferred to use something on the VAX. I had had some exposure to \TeX\ and
+knew that it would do the job, but I thought I'd look at PC-based choices.
+
+I played around with PageMaker some, and read about Ventura---and decided that
+they were way too clumsy to do what I wanted. I liked the fact that \TeX\ used
+regular text files with embedded commands---I could use the editor I was
+accustomed to, \TeX\ was available for a variety of platforms, and \TeX\ was
+incredibly flexible.
+
+So I decided on \TeX, I had to decide if I was going to use \TeX\ or \LaTeX.
+But that's another sub-article.
+
+\articlesep % Line to separate arts
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\coltitle{\centerline{Why I Chose Plain \TeX}\break % Column title box
+ \centerline{Instead of \LaTeX}}
+
+I had originally intended to use \LaTeX, because that's what the technical
+writing group of my employer-at-the-time was using to produce their manuals.
+I knew that I wanted multiple columns and to be able to switch back and forth
+between single- and double-columns on the same page at will. After trying
+many variations of the \LaTeX\ double-column style, I finally decided I
+couldn't easily do it. (This was before Frank Mittelbach's \LaTeX\ macros
+appeared in {\it The TUGboat\/}.)
+
+So, once I decided on \TeX, I decided I better learn about \TeX\ so I could
+write my own macros. Two years later, I still modify the file some, but it
+has been lots of fun and I learned a whole lot about \TeX.
+
+I've since learned that, apparently, not many people use plain \TeX.
+Personally, I don't know why everybody flocks to \LaTeX---plain \TeX\ is
+so much more flexible. It is true that you need a default set of macros
+to get you going, but once they're there, I believe \TeX\ is actually
+easier to use than \LaTeX.
+
+An aside here: if you haven't seen \book{\TeX\ for the Impatient}, by Paul~W.
+Abrahams, I strongly recommend a copy. It's a great reference book for
+plain \TeX, and his {\tt eplain.tex} (Extended Plain \TeX) provides some
+very useful macros. It was published last year by Addison-Wesley.
+
+\articlesep
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\coltitle{\centerline{Some of the Highlights}\break
+ \centerline{of the Newsletter Format}}
+
+There are variety of commands provided by my newsletter format. Because
+{\it Lights Out!\/} covered a horror author, some of the commands are
+specifically designed to handle books and interviews. While I was developing
+the format, I tried to make sure that I kept things as generic as possible
+so that it could be used to generate other newsletters. It remains to be
+seen if whether or not I was successful.
+
+%The next page features a list of some of the commands that are available
+%and how they're used.
+
+I've included the commands \cmd{\twelvepoint}, \cmd{\elevenpoint},
+\dots, \cmd{\eightpoint} to change font sizes. I didn't do these
+the "official" \TeX\ way (font families) out of laziness. To get the
+eight-point font {\tt cmss8} you simply type: \cmd{\eightpoint\string\ss},
+probably within a group.
+
+My multiple columns command supports up to 6 columns on a page. When you
+increase the number of columns on a page, you usually need to change
+the font size (for three columns, I switched to the {\tt cmss8} font---it
+seemed to work out OK because the sans serif font helped differentiate
+between the "Letters" column and the rest of the newsletter).
+
+One of the things that seems to be hardest in \TeX---especially when multiple
+columns are involved---is the insertion of figures. I like things to be
+very structured---the mathematical side of me, I guess---so when I added
+figure support to my macros, I did it by setting up my multiple column
+output routine to place figures in certain locations on a page. You can
+specify that a figure is inserted across the entire page at the top and
+bottom of the page, or at the top, middle, or bottom of each column.
+Here comes the really kludgy part of my format.
+
+The macro \cmd{\definefigs} must be executed to tell \TeX\ how many pages
+are following that may contain figures. What happens is that a large block
+of boxes is allocated. I tried various combinations to make it more dynamic,
+but had little luck. Because of time constraints, I went with the way that
+worked. This shouldn't really cause a problem, because you define figures
+within an article, and most articles aren't so long that you exceed the number
+of boxes \TeX\ has. The command to define a figure is:
+\vskip\baselineskip
+\centerline{\cmd{\definefig\string{Page\string}\string{Column\string}%
+ \string{Position\string}\string{Box\string}}}
+\vskip\baselineskip
+where \cmd{Box} is a \cmd{\vbox} containing your figure. This can be an empty
+\cmd{\vbox} \cmd{\vfill}'ed to the correct size for later pasting. The quote
+on the previous page was inserted with a \cmd{\Quote} as the argument to
+the \cmd{\definefig} command.
+
+That's all I'm going to say about the commands for now. Notice that when
+you end the double columns, they are automatically balanced.\eoa
+
+\endcolumns % End of double columns
+
+
+\articlesep % Separate the articles w/ rule
+
+%
+% Now do another article in single column format.
+%
+\articletitle{This Is Another Article}{By Me, Of Course}
+
+\begincolumns{3}
+
+This is more just to show that you can also do three-columns on the same page
+with single- and double-column formats without \TeX\ complaining about it.
+I hope this example has been of some use to you.
+
+Note that balancing these columns still has a few glitches---but nothing adding
+or subtracting a few words won't fix. I've been using this format to generate
+five newsletters so far.
+
+\endcolumns
+
+\articlesep
+
+This is more just to show that you can keep both single-, double-, and
+triple-column formats on the same page. \TeX\ won't complain about it
+at all (usually).\eoa
+
+
+\bye
diff --git a/macros/plain/contrib/newsletr/quote.tex b/macros/plain/contrib/newsletr/quote.tex
new file mode 100644
index 0000000000..79aa2a5430
--- /dev/null
+++ b/macros/plain/contrib/newsletr/quote.tex
@@ -0,0 +1,118 @@
+%
+% File: QUOTE.TEX
+%
+% Author: Hunter Goatley
+% goathunter@goatley.com
+%
+% 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/plain/contrib/newsletr/read.me b/macros/plain/contrib/newsletr/read.me
new file mode 100644
index 0000000000..b500c4741d
--- /dev/null
+++ b/macros/plain/contrib/newsletr/read.me
@@ -0,0 +1,85 @@
+ NEWSLETR - A newsletter format for Plain TeX
+ Hunter Goatley
+ January 22, 2004
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Copyright 1989--2004 by Hunter Goatley.
+%
+% Permission is granted to anyone to use this software for any purpose
+% on any computer system, and to redistribute it freely, subject to the
+% following restrictions:
+%
+% 1. This software 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.
+%
+% 2. Altered versions must be plainly marked as such, and must not be
+% misrepresented as being the original software.
+%
+% End
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+NEWSLETR is a file of plain TeX macros that I wrote to publish a printed
+newsletter about author Robert McCammon. Most of the macros are original,
+but some came from _The TeXbook_ and other sources; most of these have been
+either rewritten or modified. The following files should be found here (and
+the names are short for people using MS-DOS):
+
+ READ.ME This file
+ NEWSLETR.TEX The newsletter format
+ NEWSLETR.TXT List of commands in newsletter format
+ NEWSSAMP.TEX Sample newsletter file
+ LODRIVER.TEX Sample newsletter driver (part of a real newsletter)
+ LOSAMPLE.TEX Sample newsletter title page, articles, etc.
+
+The format is for plain TeX, not LaTeX---real TeXies don't use LaTeX! 8-)
+Seriously, I developed my newsletter format because LaTeX wasn't flexible
+enough for the stuff I wanted to do---namely multiple columns (1--6 columns),
+switching columns on the same page, and including figures.
+
+When you see it, some of the stuff will look kludged---but it sounds like
+what some of you are using now was kludged, so it shouldn't be much worse!
+
+Because the format file (NEWSLETR.TEX) is pretty big, I'd suggest that you
+create a new TeX format file that contains it. Under VMS using DECUS TeX,
+the command would be:
+
+ $ TEX/INIT/NOFORMAT "&plain \input newsletr \dump"
+ $ TEX/FORMAT=newsletr
+
+NEWSLETR is set up so that it can be used as an extended plain TeX (you have
+access to the macros, with all of TeX's default settings). When building
+a newsletter, you can execute \newspage to use pages that are a little taller
+and wider (7" x 9") and to change some of TeX's penalties, etc.
+
+Finally, I would like to point out a couple of features that I think would be
+useful for anybody who uses TeX for any reason. I've extracted these two
+pieces into separate files so that you can easily include them in other
+documents.
+
+As you all know, TeX requires that you use `` and '' instead of " to get
+proper double-quotes. I have written a macro that will let the double-quote
+character (") work like `` and ''. It assumes that they come in pairs, except
+that a " as the first character of a paragraph is treated as ``. To enable
+the double-quote recognition, simply add \begindoublequotes to your file.
+(You can disable it using \enddoublequotes.) Proper spacing after '' is
+maintained. (QUOTE.TEX)
+
+I've also included macros \ital and \slant for typesetting text in the
+italic (\it) and slanted (\sl) fonts, respectively. A lot of people don't
+seem to know about---or forget to use---the italic correction (\/) when
+switching among fonts. The \ital and \slant macros look at the next character
+following the parameter and add the italic correction unless the next character
+is a period or a comma, as recommended on page 14 of _The TeXbook_. Using
+these macros, you should never need to type \/ again. (ITALIC.TEX)
+
+I would appreciate being kept informed of bug fixes or improvements you make to
+the file. I can't promise support, but I use these macros too, and I'm willing
+to help whenever/wherever I can.
+
+Questions, comments, or suggestions are welcome.
+
+Hunter
+------
+Hunter Goatley, Process Software, http://www.process.com/
+<goathunter@GOATLEY.COM> http://www.goatley.com/hunter/
diff --git a/macros/plain/contrib/newsletr/sample.dvi b/macros/plain/contrib/newsletr/sample.dvi
new file mode 100644
index 0000000000..f350c3f447
--- /dev/null
+++ b/macros/plain/contrib/newsletr/sample.dvi
Binary files differ
diff --git a/macros/plain/contrib/newsletr/sample.pdf b/macros/plain/contrib/newsletr/sample.pdf
new file mode 100644
index 0000000000..455a95ba27
--- /dev/null
+++ b/macros/plain/contrib/newsletr/sample.pdf
Binary files differ
diff --git a/macros/plain/contrib/pdcmac/00readme.txt b/macros/plain/contrib/pdcmac/00readme.txt
new file mode 100644
index 0000000000..4fe90bd3fd
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/00readme.txt
@@ -0,0 +1,21 @@
+00readme.txt -*-text-*- Time-stamp: <pdc 1995-03-20>
+
+ PDCMAC, a collection of macros for plain TeX documents.
+ Release 1.0 -- Spring 1995
+
+This is collection of TeX definition files which may be useful for
+setting documents using plain TeX (as opposed to more complex formats
+like LaTeX). See "install.txt" for installation hints.
+
+This software may be used and distributed without fee under certain
+conditions. While I would like it to be useful, I cannot offer any
+guarantee or warranty. See "pdcguide.tex" for more information.
+
+Please send reports of problems, comments and suggestions to the address
+below. If you find pdcmac useful or amusing, please send me a pretty
+postcard.
+
+P. Damian Cugley * * * * * * * * * * * * * * * <damian.cugley@comlab.ox.ac.uk>
+Oxford University Computing Laboratory, Parks Road, Oxford OX1 3QD, UK
+Alleged Literature, c/o Damian Cugley, 255B Banbury Road, Oxford OX2 7HN, UK
+http://boothp1.ecs.ox.ac.uk:5705/people/pdc.html * My other computer is a Linux
diff --git a/macros/plain/contrib/pdcmac/README b/macros/plain/contrib/pdcmac/README
new file mode 120000
index 0000000000..5d84037450
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/README
@@ -0,0 +1 @@
+00readme.txt \ No newline at end of file
diff --git a/macros/plain/contrib/pdcmac/changes.txt b/macros/plain/contrib/pdcmac/changes.txt
new file mode 100644
index 0000000000..165139bdc5
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/changes.txt
@@ -0,0 +1,239 @@
+Thu Apr 6 12:32:28 1995 Damian Cugley <pdc@booth35.ecs>
+
+ * pdcguide.tex: Added dtxtags to file lists and TAGS to Makefile
+ targets. Shortened a couple of table entries by a word each so
+ that the GPL doesn't overflow onto the next page.
+
+ * maamac.dtx (\toksa): Added definition of toksa
+
+ * pdcfmt2.dtx (\alphabetletter): Added missing backslash.
+
+ * pdcoput5.dtx (section{Routines for balanced columns}): Removed
+ spurious space from \makepartialpage
+
+ * dtxtags: New shellscript, generates an etags-format tags file.
+ * makefile.in (mostlyclean): Added support for dtxtags.
+
+
+Thu Mar 30 17:16:01 1995 Damian Cugley <pdc@booth10.ecs>
+
+ * Release 1.1
+
+ * makefile.in (dist): Made version.txt format prettier.
+
+ * Changed all header comments to say doc/plain/pdcmac for the sake
+ of TWG-TDS 0.61.
+
+Tue Mar 28 13:18:47 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdccode.dtx: Recognizes the "locker" field of RCS id.
+ Puts line numbers in headline.
+
+ * pdcfsel.dtx: Tidied documentation. Changed \fsel_... to \FSEL...
+
+Fri Mar 24 17:08:36 1995 Damian Cugley <pdc@boothp1.ecs>
+
+
+ * pinstall: Created a shellscript `pinstall' to replace `install'
+ command on systems without GNU `install'. Trying to keep track of
+ all the stupid variants of `install' is pointlessly difficult.
+ * configure: uses 'pinstall' script if not gnu 'install'.
+ * makefile.in (install): much simplified by assuming either GNU
+ "install" or my "pinstall". Changed "mkdirhier" ro "pmkdir" at
+ the same time. Added manpages for the three shellscripts included
+ with the package.
+
+ * pdcmisc.dtx (section{PDCIMTH}): Added version ID \message.
+
+ * makefile.in: Added new target, version.txt, which is the version
+ IDs of all the DTX files. Checked all the DTX files in to RCS (at
+ long last).
+
+Thu Mar 16 12:52:02 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdccode.dtx: notepars now allow \rightskip to shrink.
+
+ * pdcfmt2.dtx: chased down some overfull hboxes
+
+ * pdcsty.dtx (section{Starting up}): Changed name of pdcmasub to
+ the more sensible pdccmsub.
+
+Tue Mar 14 12:58:09 1995 Damian Cugley <pdc@booth8.ecs>
+
+ * pdcadobe.dtx: Corrected definition or rbrace.
+
+Thu Mar 9 16:42:07 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcmisc.dtx (pdccmsub.dtx): new name for pdcmasub.dtx.
+ \currency, \orda, \ordo, \florin, \brdecimal, \permille.
+
+Wed Mar 8 16:53:36 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcsty.dtx (\abstract): Stop from generating underfull
+ hbox.
+
+ * pdcadobe.dtx (\brdecimal): Removed spurious redefinition.
+
+ * pdcguide.tex: Added list of file suffixes. Added
+ pdcadobe.{dtx,tex} and pdcl1maa.{dtx,tex} to lists of files.
+ Added PostScript title for when POstScript fonts available.
+
+Mon Mar 6 16:54:15 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcl1maa.dtx: New file
+
+ * pdcsty.dtx: Chased down some overful hboxes.
+
+Fri Mar 3 18:12:02 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcfmt2.dtx (verbatim): added \ttminus, so that PostScript fonts
+ used as typewriter fonts can change hyphens to minus signs.
+
+ * pdcsty.dtx: Added use of \asyfam, etc.
+
+ * pdcadobe.dtx: Tested with pdcguide and tested ISO Latin-1
+ support, found several bugs.
+
+Thu Mar 2 18:08:48 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcsty.dtx: Added rudimentary support for PostScript fonts.
+
+ * pdcadobe.dtx: New file!!
+
+Tue Feb 28 10:17:40 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcsty.dtx: Removed attempts to make a Concrete style; there
+ really doesn't seem to be much point. Put more of the common code
+ in pdc{lft,doc}1.tex.
+
+ * pdcguide.tex: reorganized sections, expanded user guide and
+ installation sections.
+
+Mon Feb 27 14:43:43 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcguide.tex: Made it into a "doc" not a "lft"; expanded
+ installation section (unfinished)
+
+ * pdccode.dtx: Added summary to end of file, and some backgorund
+ info at the start.
+ (section{Layout}): CHanged width to 72 \tentt characters not 36
+ \tenrm ems.
+
+Fri Feb 24 18:55:30 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcguide.tex: Removed use of PostScript fonts -- now does a
+ title using the circlew10 font!
+
+Thu Feb 23 16:50:33 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * install.txt: new file
+
+ * configure (INSTALL): sets INSTALL and INSTALL_DATA to "cp
+ -p" and puts package name at end of "$docdir".
+
+ * magrman.tex (\twocolgr): adjusted to use new \rigidbalance syntax
+
+ * pdcoput5.dtx (section{Making a page vbox}): adjust colht by
+
+ (section{Routines for balanced coumns}): \rigidpalane no longer
+ takes an argukent for the width of the completed columns; instead
+ one should enclose \rigidbalance in \hbox to ...{...}. Eliminated
+ some variables (\RGDfirstcol etc.).
+
+ *depth* of topbox and partialpage as well as height.
+
+ * pdccode.dtx: New file, which generates tmp.tex (the Makefile
+ checks it isn't truncated before renaming it to pdccode.tex).
+ (section{Code sections}): added \~ for a tilde in expanded lines.
+
+ Changed text width and suppressed parindent at start of sections.
+ Copied verbatim text from pdcfmt2.dtx. Added \filelocker; this is
+ empty if the file has been checked in.
+
+Wed Feb 22 15:46:06 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcoput5.dtx: Added section headings and brief comments on the
+ rest of the file. Seached out overfull hboxes in the text so
+ far.
+
+ (section{Routines for balanced coumns}): Added
+ \rigidbalancedpartialpage.
+
+Thu Feb 16 18:04:55 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcfmt2.dtx: Adjusted a little so that it now TeXs without hbox
+ warnings.
+
+ * pdccode.tex: Changed to allow ragged-right printing inside
+ footnotes. Added \title and \author commands, and set \everycode
+ and \evercodeline so that some common code at the start of DTX
+ files is factored out.
+
+Wed Feb 15 15:45:30 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcsty.dtx (section{Starting up}): pdcoput->pdcoput5
+
+ * configure (cfgdate): Configuration shellscript, made by cutting
+ down the pdctt configure script.
+
+ * pdcoput5.dtx: Changed name to prevent conflict with old version
+ of pdcoput (since the calling interface is changing).
+
+Tue Feb 14 12:20:41 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcoput.dtx (section{How to make one column}): Change to just
+ use vertical mode material to do illustrations insteasd of
+ separate <dimen> and caption arguments. Added \topillustration
+ and \botillustration commands.
+
+ * pdcsty.dtx (section{Layout}): foomarge->foomg to match pdcoput.dtx
+
+ * config.status.sh: placeholder for configuration script.
+
+Mon Feb 13 14:23:50 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcoput.dtx: New file, made from pdcoput.tex 4.1.7.
+
+Fri Feb 10 13:46:10 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdcguide.tex: Added a copy of the GNU GPL to the end.
+
+ * copying.tex: new file -- a formatted copy of copying.txt, which
+ is the GNU General Public License.
+
+ * *.dtx: Updated header comments to include GPL.
+
+Thu Feb 9 10:38:59 1995 Damian Cugley <pdc@boothp1.ecs>
+
+ * pdccode2.tex: a new version of pdccode that allows multiple
+ files to be generated.
+
+ * pdcsty.dtx: replaces ma55doc.dtx, pdccm*.dtx. Uses pdccode2 to
+ generate multiple files. Sectioning commands go in pdcdoc1.tex
+ and pdclft1.tex.
+
+ * pdcguide.tex: new file
+
+Sat Dec 3 16:26:00 1994 P. Damian Cugley (pdc@alleged)
+
+ * pdccode.tex:
+ Set the vertical margins so that files may be printed on American
+ paper without losing any of the print.
+
+ * pdcfsel.dtx:
+ Added a title line on the first page. Removed the dependency of
+ the code file on pdcutil.tex by adding definitions for \expcs and
+ \noexpcs.
+
+Fri Dec 2 00:55:38 1994 P. Damian Cugley (pdc@alleged)
+
+ * pdccode.tex:
+ Changed \rcs...\end to \rcs...\endrcs for consistency with other
+ macros that go \foo...\endfoo.
+
+ * pdcfsel.dtx: Removed spurious definiton of \n. Changed
+ \rcs...\end to \rcs...\endrcs. Changed name of \ldfont to
+ \loadfont. Removed \setmag. Now produces pdcfsel.tex not xx.tex.
+
+ * pdccode.tex: checked in with -k by pdc at 1994/12/02 00:50:24
+
diff --git a/macros/plain/contrib/pdcmac/configure b/macros/plain/contrib/pdcmac/configure
new file mode 100644
index 0000000000..6f6000e251
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/configure
@@ -0,0 +1,302 @@
+#!/bin/sh
+
+# Mini-configure script for PDCMAC for the benefit of UNIX users
+
+version="1.0 Time-stamp: <pdc 1995-03-24>"
+
+# Takes arguments a bit like the GNU autoconf, but only uses them to
+# try to guess the TeX root directory
+
+package=pdcmac
+date=`date +19%y-%m-%d`
+files=makefile
+unique=pdcmisc.dtx
+cmd="$0 $@"
+me=`basename $0`
+
+# The flag used with "test" to see if a directory is writable.
+# For debugging, I sometimes set writable to -d so that
+# the searches will pretend that I have write-access to system
+# directories (so I can simulate running the script as root)
+writable=-w
+
+echo "This is configure for $package $version $cfgdate"
+
+tmp=${TMPDIR-/tmp}/cfg$$
+trap 'rm -f $tmp; exit 1' 1 2 15
+
+while test $# -gt 0; do
+ case $1 in
+ -n*|--n*)
+ nocreate=t ;;
+ -v*|--v*)
+ echo "configure for $package $version <$cfgauthor $cfgdate>" 1>&2
+ exit 0 ;;
+ -h*|--h*)
+ cat 1>&2 <<@EOF
+USAGE: configure [ option ]...
+
+Running this script creates config.status and optionally
+$files.
+
+Options:
+ -h, -help, --help, -v, -version, --version
+ print a message and exit
+
+ -p DIR, -prefix DIR, --prefix=DIR
+ prefix for installed file names, for example /usr/local
+
+ -e DIR, -exec_prefix DIR, --exec_prefix=DIR
+ ignored
+
+ -t DIR, -texmf DIR, --texmf=DIR
+ prefix for all TeX-related installed file names, for
+ example /usr/texmf or /usr/local/lib/tex
+
+ -w tds, -with tds, --with-tds
+ Assume a TDS-like directory tree
+@EOF
+ exit 0 ;;
+ --p*=*)
+ prefix=`expr $1 : '--p.*=\(.*\)'` ;;
+ -p|-prefix|--p*)
+ prefix=$2; shift ;;
+ -p*)
+ prefix=`expr $1 : '-p\(.*\)$'` ;;
+ --s*=*)
+ srcdir=`expr $1 : '--s.*=\(.*\)'` ;;
+ -s|-srcdir|--s*)
+ srcdir=$2; shift ;;
+ -s*)
+ srcdir=`expr $1 : '-s\(.*\)$'` ;;
+ --t*=*)
+ texmf=`expr $1 : '--t.*=\(.*\)'` ;;
+ -t|-texmf|--t*)
+ texmf=$2; shift ;;
+ -t*)
+ texmf=`expr $1 : '-t\(.*\)$'` ;;
+ --f*=*)
+ fonts=`expr $1 : '--f.*=\(.*\)'` ;;
+ -f|-fonts|--f*)
+ fonts=$2; shift ;;
+ -f*)
+ fonts=`expr $1 : '-f\(.*\)$'` ;;
+ --w*-*)
+ with=$with/`expr $1 : '--w.*-\(.*\)'`/ ;;
+ -w|-with|--w*)
+ with=$with/$2/; shift ;;
+ -w*)
+ with=$with/`expr $1 : '-w\(.*\)$'`/ ;;
+ -e*|--e*=*)
+ ;;
+ -e|--e*)
+ shift ;;
+ *)
+ echo $me: ignoring $1 1>&2
+ ;;
+ esac
+ shift
+done
+
+# Check for the "with" keywords we're interested in:
+case $with in */tds/*) tds=t ;; esac
+# case $with in */bigendian/*) bigendian=t ;; esac
+ # endianness doesn't matter because no fonts in this package
+
+
+# Find out how to print a dot with no newline
+n=-n c=
+echo $n x$c > $tmp
+case "`cat $tmp`" in
+ -n*)
+ n= c='\\c' ;;
+esac
+dot="$n .$c"
+
+
+# INSTALL -- oh, I can't be bothered trying to be clever.
+if install --version 2>&1 | grep GNU >/dev/null; then
+ INSTALL="install"
+else
+ INSTALL='$(srcdir)/pinstall'
+fi
+INSTALL_DATA='$(INSTALL) --mode=644'
+echo $me: install files with $INSTALL
+
+
+# find srcdir
+if test -z "$srcdir" ; then
+ echo $n "$me: searching for srcdir (package directory)..$c"
+ for d in . `dirname $0` ..; do
+ echo $dot
+ if test -f $d/$unique; then
+ echo srcdir=$d
+ srcdir=$d
+ break
+ fi
+ done
+fi
+
+if test -z "$srcdir"; then
+ echo ""
+ echo $me: fatal error: could not find sourcdir
+ exit 1
+fi
+
+# User might use --prefix to give the TeX prefix:
+
+if test -z "$texmf"; then
+ case "$prefix" in
+ */texmf|*/tex)
+ texmf=$prefix ;;
+ esac
+fi
+
+# If $texmf is not set, then search for it
+# We look in all sorts of prefixes like /usr/local (with or without extra
+# lib), using all sorts of directiry names like "tex"
+#
+
+if test -z "$texmf"; then
+ prefixes="$prefix
+ `echo $TEXINPUTS:$TEXFONTS | tr : \\\\12 |
+ sed -n -e 's,/[Tt]e[Xx].*,,p' -e 's,/font.*,,p' | uniq`
+ / /usr /usr/local /opts /p /packages /package
+ /pd /usr/pd /usr/local/pd /usr/contrib /usr/TeX
+ $HOME"
+ echo $n $me: searching for \$texmf..$c
+ for d in texmf tex TeX tex3.14 tex3 tex82; do
+ for p in $prefixes; do
+ echo $dot
+ if test -d $p/$d -a $writable $p/$d; then
+ echo texmf=$p/$d
+ texmf=$p/$d
+ break 2
+ fi
+ if test -d $p/lib/$d -a $writable $p/lib/$d; then
+ echo texmf=$p/lib/$d
+ texmf=$p/lib/$d
+ break 2
+ fi
+ done
+ done
+fi
+if test -z "$texmf"; then
+ echo ""
+ echo $me: fatal error: could not guess a texmf directory 1>&2
+ exit 1
+fi
+if test ! -d "$texmf" -o ! -w "$texmf"; then
+ echo $me: warning: $texmf needs to be a writable directory 1>&2
+fi
+
+
+# If --with-tds not set, try to guess whether we have found
+# a TDS directory or not:
+if test -n "$tds" || test -d $texmf/tex/plain; then
+ tds=t
+ echo "$me: using TWG-TDS 0.61 directory structure"
+else
+ echo "$me: using old-style directory structure :-("
+fi
+
+
+# Start making the config.status file
+
+f=config.status
+
+# Special care is taken with the -n option
+# -- -n is not to be included by default when configure is run with
+# "config.status -r", so it must be removed from $cmd
+# -- -n (or other options) may be included on the command line
+# of "config.status -r" and will be passed to configure
+cmd2=`echo $cmd | sed 's/ --*n[a-z-]*//g'`
+cat >$f <<@EOF
+# config.status -- configuration status file
+# creator: configure for $package $version <$cfgauthor $cfgdate>
+# created: $date
+# command: $cmd
+
+case "\$1" in
+ -r*|--r*)
+ shift
+ echo \$0: rerunning $cmd2 1>&2
+ exec sh $cmd2 \$* ;;
+esac
+
+echo This is config.status, generated by configure for $package on $date
+
+srcdir=$srcdir
+date=`date +19%y-%m-%d`
+files="\${*-$files}"
+sedscript='
+ s,@package@,$package,
+ s,@srcdir@,$srcdir,
+ s,@texmf@,$texmf,
+ s,@configure@,$0,
+ s,@INSTALL@,$INSTALL,
+ s,@INSTALL_DATA@,$INSTALL_DATA,
+@EOF
+
+if test -n "$tds"; then
+ echo >>$f " s,@texdir@,\$(texmf)/tex/plain/\$(package),"
+ echo >>$f " s,@docdir@,\$(texmf)/doc/plain/\$(package),"
+else
+ echo $n $me: searching for TeX macro dir..$c; found=
+ for d in inputs macros; do
+ echo $dot
+ if test -d $texmf/$d -a $writable $texmf/$d; then
+ echo $texmf/$d
+ echo >>$f " s,@texdir@,$texmf/$d,"
+ found=t
+ break
+ fi
+ done
+ if test -z "$found"; then
+ echo ""
+ echo $0: fatal error: TeX macro dir NOT FOUND 1>&2
+ exit 1
+ fi
+
+ # now same again for a documentation directory
+ echo $n $me: searching for documentation dir..$c; found=
+ for p in $texmf $fonts $prefixes; do
+ for d in doc doc/tex docs docs/tex ; do
+ echo $dot
+ if test -d $p/$d -a $writable $p/$d; then
+ echo $p/$d/$package
+ echo >>$f " s,@docdir@,$p/$d/\$(package),"
+ found=t
+ break 2
+ fi
+ done
+ done
+ if test -z "$found"; then
+ echo ""
+ echo $0: warning: documentation dir NOT FOUND 1>&2
+ fi
+fi
+
+
+# Finish off the config.status file:
+
+cat >>$f <<'@EOF'
+'
+
+for file in $files; do
+ echo $0: writing $file... 1>&2
+ sed -e 's,Template for configure,Generated from '$file'.in on '$date' by '$0, \
+ -e "$sedscript" $srcdir/$file.in > $file || exit 1
+done
+
+exit 0
+@EOF
+
+echo $me: configuration status written on config.status
+
+if test -z "$nocreate"; then
+ sh config.status
+fi
+
+rm -f $tmp
+exit 0
diff --git a/macros/plain/contrib/pdcmac/contents.txt b/macros/plain/contrib/pdcmac/contents.txt
new file mode 100644
index 0000000000..b32f5df179
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/contents.txt
@@ -0,0 +1,40 @@
+total 498
+-rw-r--r-- 1 pdc mc86 1006 Mar 20 14:23 00readme.txt
+-rw-r--r-- 1 pdc mc86 7984 Apr 6 16:10 changes.txt
+-rwxr-xr-x 1 pdc mc86 6910 Mar 24 18:56 configure
+-rw-r--r-- 1 pdc mc86 0 Apr 6 16:10 contents.txt
+-rw-r--r-- 1 pdc mc86 19466 Mar 8 18:16 copying.tex
+-rw-r--r-- 1 pdc mc86 19038 Feb 10 11:02 copying.txt
+-rwxr-xr-x 1 pdc mc86 1282 Apr 6 14:38 dtxtags
+-rw-r--r-- 1 pdc mc86 4267 Apr 6 12:19 dtxtags.1
+-rwxr-xr-x 1 pdc mc86 787 Mar 24 18:34 fig2epsf
+-rw-r--r-- 1 pdc mc86 1101 Mar 27 16:56 fig2epsf.1
+-rw-r--r-- 1 pdc mc86 3196 Feb 23 18:51 install.txt
+-r--r--r-- 1 pdc mc86 21818 Apr 6 14:34 maamac.dtx
+-r--r--r-- 1 pdc mc86 7785 Mar 29 17:32 magrmac.dtx
+-rw-r--r-- 1 pdc mc86 21216 Feb 23 17:39 magrman.tex
+-rw-r--r-- 1 pdc mc86 4854 Apr 6 12:43 makefile.in
+-rw-r--r-- 1 pdc mc86 387 Apr 6 14:38 news.txt
+-rw-r--r-- 1 pdc mc86 10187 Apr 6 12:42 oput01.eps
+-rw-r--r-- 1 pdc mc86 8784 Feb 13 17:07 oput01.fig
+-rw-r--r-- 1 pdc mc86 12285 Apr 6 12:42 oput02.eps
+-rw-r--r-- 1 pdc mc86 8032 Feb 13 15:34 oput02.fig
+-r--r--r-- 1 pdc mc86 20544 Mar 30 17:07 pdcadobe.dtx
+-r--r--r-- 1 pdc mc86 29428 Mar 30 17:08 pdccode.dtx
+-rw-r--r-- 1 pdc mc86 8194 Apr 6 12:44 pdccode.tex
+-rw-r--r-- 1 pdc mc86 7961 Mar 3 15:41 pdccode2.tex
+-r--r--r-- 1 pdc mc86 38300 Apr 6 12:55 pdcfmt2.dtx
+-r--r--r-- 1 pdc mc86 23174 Mar 28 20:06 pdcfsel.dtx
+-rw-r--r-- 1 pdc mc86 61708 Apr 6 16:04 pdcguide.dvi
+-rw-r--r-- 1 pdc mc86 31674 Apr 6 16:04 pdcguide.tex
+-r--r--r-- 1 pdc mc86 8670 Mar 30 17:10 pdcl1maa.dtx
+-rw-r--r-- 1 pdc mc86 27 Apr 6 12:20 pdcmacvn.tex
+-r--r--r-- 1 pdc mc86 18597 Mar 30 17:13 pdcmisc.dtx
+-rw-r--r-- 1 pdc mc86 5207 Mar 29 15:54 pdcmondo.tex
+-r--r--r-- 1 pdc mc86 32746 Apr 6 12:51 pdcoput5.dtx
+-r--r--r-- 1 pdc mc86 37441 Mar 30 17:12 pdcsty.dtx
+-rwxr-xr-x 1 pdc mc86 1695 Mar 24 19:10 pinstall
+-rw-r--r-- 1 pdc mc86 1744 Mar 27 15:47 pinstall.1
+-rwxr-xr-x 1 pdc mc86 1876 Mar 27 14:22 pmkdir
+-rw-r--r-- 1 pdc mc86 1538 Mar 27 16:49 pmkdir.1
+-rw-r--r-- 1 pdc mc86 789 Apr 6 14:38 version.txt
diff --git a/macros/plain/contrib/pdcmac/copying.tex b/macros/plain/contrib/pdcmac/copying.tex
new file mode 100644
index 0000000000..a08f1d0dee
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/copying.tex
@@ -0,0 +1,373 @@
+\section{GNU General Public License\ifnum\pageno>0 \note{This licence is reproduced
+ verbatim, therefore the American spelling is used.}\fi}
+ Version 2, June 1991
+
+\noindent
+ Copyright \copyright~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.
+
+
+\noindent{\bf Preamble}\quad
+ 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.
+
+\bigskip
+\noindent{\bf TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
+ MODIFICATION\advance\rightskip0pt plus 1em \par}
+\medskip
+
+ 1. 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.
+
+ 2. 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.
+
+ 3. 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:
+
+\numbered
+ \\You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ \\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.
+
+ \\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.)
+\endnumbered
+
+ 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.
+
+ 4. 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:
+
+\numbered
+ \\ 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,
+
+ \\ 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,
+
+ \\ 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.)
+\endnumbered
+
+ 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.
+
+ 5. 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.
+
+ 6. 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.
+
+ 7. 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.
+
+ 8. 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.
+
+ 9. 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.
+
+ 10. 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.
+
+ 11. 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.
+
+\medbreak\centerline{\bf NO WARRANTY}\nobreak\smallskip\nobreak
+\begingroup\tolerance=3000 \advance\rightskip 0pt plus 1em
+
+ 12. 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.
+
+ 13. 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.
+
+\endgroup
+\bigskip \centerline{\bf END OF TERMS AND CONDITIONS}\medbreak
+
+\noindent{\bf How to Apply These Terms to Your New Programs}\quad
+ 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.
+
+\quotation
+ {\it one line to give the program's name and a brief idea of what it does}
+
+ Copyright (C) 19{\it yy} {\it name of author}
+\smallskip
+ 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.
+\smallskip
+ 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.
+\smallskip
+ 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.
+\endquotation
+
+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:
+
+\quotation
+ 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.
+\endquotation
+
+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:
+
+\quotation
+ 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
+\endquotation
+
+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.
+
+
+%Local Variables:
+%tex-mother-file: "pdcguide.tex"
+%End:
diff --git a/macros/plain/contrib/pdcmac/copying.txt b/macros/plain/contrib/pdcmac/copying.txt
new file mode 100644
index 0000000000..90e4c02453
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/copying.txt
@@ -0,0 +1,358 @@
+ 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.
+
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 1. 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.
+
+ 2. 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.
+
+ 3. 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.
+
+ 4. 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.
+
+ 5. 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.
+
+ 6. 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.
+
+ 7. 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.
+
+ 8. 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.
+
+ 9. 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.
+
+ 10. 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.
+
+ 11. 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
+
+ 12. 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.
+
+ 13. 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
+
+
+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/plain/contrib/pdcmac/dtxtags b/macros/plain/contrib/pdcmac/dtxtags
new file mode 100644
index 0000000000..97c5949c6f
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/dtxtags
@@ -0,0 +1,67 @@
+#! /bin/sh
+
+# dtxtags -- getenerate a TAGS file for the DTX files
+version="1.1 Time-stamp: <pdc 1995-04-06>"
+
+# The grep line produces LINE:BYTE:PATTERN
+# the sed converts this to LINE:BYTE:PATTERN:TAG
+
+tmp=${TMP-/tmp}/mktags$$
+trap 'rm -f $tmp*' 0
+
+me=`basename $0`
+outfile=TAGS
+
+touch $tmp
+while test $# -gt 0; do
+ case $1 in
+ --o*=*)
+ outfile=`expr $1 : '.*=\(.*\)$'` ;;
+ -o|--o*)
+ outfile=$2; shift ;;
+ -o*)
+ outfile=`expr $1 : '-.\(.*\)$'` ;;
+ -h|--h*)
+ cat <<@EOF
+$me: construct an etags-style tags file from DTX files.
+
+USAGE:
+ $me [ --output=OUTFILE ] [ INFILE... ]
+ $me --help | --version
+@EOF
+ exit 0 ;;
+ -V|--v*)
+ echo This is $me $version
+ exit 0 ;;
+ -*)
+ echo >&2 $me: $1: not understood, try $me --help
+ exit 2 ;;
+ *)
+ i=$1
+ echo >&2 $1:
+ egrep -nb '^[ ]\|[ ]*\\([a-z]*def|new)' <$1 |
+ sed '
+ s/\([ ]*|\\[a-z]*\\[A-Za-z]*\).*$/\1/
+ t finish
+ s/\([ ]*|\\[a-z]*\\.\).*$/\1/
+ t finish
+ s/\([ ]*|\\[a-z]*[^a-z]\).*$/\1/
+ : finish
+ s/\([0-9]*\):\([0-9]*\):\(.*\)/\3\1,\2/
+ ' > $tmp.a
+ wc $tmp.a
+ echo ' ' >> $tmp
+ echo $1,`wc -c <$tmp.a` >>$tmp
+ cat $tmp.a >> $tmp
+ ;;
+ esac
+ shift
+
+done
+
+mv 2>/dev/null $outfile $outfile.bak &&
+echo >&2 backup written to $outfile.bak
+
+mv $tmp $outfile
+
+exit 0
diff --git a/macros/plain/contrib/pdcmac/dtxtags.1 b/macros/plain/contrib/pdcmac/dtxtags.1
new file mode 100644
index 0000000000..66ec2a8b6a
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/dtxtags.1
@@ -0,0 +1,207 @@
+.TH DTXTAGS 1 "Time-stamp: <pdc 1995-04-06>" "PDCMAC 1.0" "CONTRIBUTED SOFTWARE"
+.SH NAME
+dtxtags \- generate an Emacs tags (etags) file from DTX files
+.SH SYNOPSIS
+.na
+.B dtxtags
+[
+.BI \-\-output= outfile
+] [
+.I infile
+]\|.\|.\|.
+.br
+.B dtxtags
+.B \-\-help
+|
+.B \-\-version
+.SH DESCRIPTION
+.na
+This is a shellscript that looks for definitions in
+.B dtx
+files
+(Documented TeX Macros, as used in the
+.SM PDCMAC
+package), and generates a tags file in
+.IR etags (1)
+format. The tags file will be called
+.SM
+.B TAGS
+by default.
+Any old tags file will be written to
+.BR TAGS.bak .
+.SH OPTIONS
+.TP
+.BI \-\-output= outfile, " \-o " outfile
+Write tags to
+.I outfile
+instead of the default.
+Any existing file with that name will be renamed
+.IB outfile .bak
+first.
+.TP
+.BR \-\-help ", " \-h
+Print a summary of options and exit.
+.TP
+.BR \-\-version ", " \-V
+Print version identification and exit.
+.SH "INPUT SYNTAX"
+This section describes the constructs in the
+.B dtx
+that will be recognized as tags. You should already be acquainted with
+TeX terminology like `control sequence'.
+.PP
+A
+.I keyword
+is (1)\ a TeX control sequence
+.I containing
+.RB ` def ',
+such as
+.B \edef
+or
+.B \edefverbatim
+or
+.BR \emathchardef ,
+or (2)\ a control sequence
+.I starting
+with
+.RB ` \enew ',
+like
+.B \enewif
+and
+.BR \enewcount .
+Keywords define the
+.I tag
+(a control sequence or single character) immediately following.
+.PP
+Keywords are recognized only if immediately following a
+.RB ` | '
+at the start of a line, the code used to introduce macro code in
+.B dtx
+files.
+.PP
+There may be whitespace between the start of the line and the
+vertical bar, and between the vertical bar and the keyword (this means a
+few definitions appearing within definitions are spuriously tagged, but
+this should be harmless).
+.SH "OUTPUT FORMAT"
+This section sumarizes the syntax of the tag file that is generated,
+because the documentation for
+.IR etags (1)
+omits it. Since this syntax description was made by reverse-engineering
+.I etags
+output, it should not be taken as definitive!
+.PP
+A tags file is composed of
+.I sections
+catenated together,
+each section made of a
+.I header
+followed by the
+.IR body .
+All numbers are expressed in ASCII in decimal notation.
+.PP
+The header consists of a form feed, a newline, the name of the file the
+tags are found in, a comma, and the size in bytes of the body and a
+newline.
+.PP
+The body consists of
+.I entries
+which may be in
+old format or new format.
+Old format entries are of the form
+.IP "" 4n
+.I fragment
+.B \e177
+.IB line ,
+.I byte
+.SM NL
+.PP
+where
+.I fragment
+is a fragment from the file containing the tag (where the start of the
+fragment is at the beginning of a line in the file),
+.B \e177
+is a
+.SM DEL
+character (character 127),
+.I line
+is the number of the line in which the fragment appears,
+.I byte
+is the position of the start of the fragment in bytes from the
+start of the file,
+and
+.SM NL
+is a newline (character 10).
+.PP
+New format entries are of the form
+.IP "" 4n
+.I fragment
+.B \e177
+.IB line ,
+.IB byte ,
+.B \e001
+.I tag
+[
+.B \e001
+.I tag
+]\|.\|.\|.
+.SM NL
+.PP
+(two commas) where
+.B \e001
+is a
+.SM SOH
+character (character 1), and
+.I tag
+is the exact tag (necessary for C++, where the entire tag is not
+necessarily found on the definition line). The brackets and ellipsis
+indicate that there may be one or more tags in the entry.
+.PP
+Real tags files may also have references to other tag files, but I don't
+use this feature.
+.SH ENVIRONMENT
+.TP
+.SM TMP
+Name of directory for temporary files.
+Default is
+.BR /tmp .
+.SH FILES
+.TP
+.SB TAGS
+Default output file name.
+.TP
+.B /tmp/mktags\(**
+Temporary files.
+.SH AUTHOR
+P. Damian Cugley
+.RI ( damian.cugley@comlab.ox.ac.uk ).
+.SH "SEE ALSO"
+etags(1), emacs(1)
+.PP
+The file
+.B etc/etags.notes
+in the Emacs distribution.
+.PP
+Richard Stallman,
+.I Emacs Reference Manual
+(or the corresponding Info file).
+.PP
+P. Damian Cugley,
+.I PDCMAC User Guide
+(file
+.B pdcguide.tex
+in the
+.SM PDCMAC
+distribution),
+for information about
+.B dtx
+files.
+.SH BUGS
+This is just a shellscript emulating a subset of
+.IR etags 's
+functionality.
+.PP
+Despite the name, this program does not work with the
+.B dtx
+files used in LaTeX 2e distributions, which have a completely different
+format (and their own indexing scheme).
diff --git a/macros/plain/contrib/pdcmac/fig2epsf b/macros/plain/contrib/pdcmac/fig2epsf
new file mode 100644
index 0000000000..18b7ab5298
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/fig2epsf
@@ -0,0 +1,36 @@
+#! /bin/sh
+
+# Convert Fig files to conformant EPSF-3.0 files
+# Fig's PostScript translation creates EPSF files that cause
+# many laser printers to abort in mid-document.
+# This script attempts to remedy this.
+
+version="1.0 Time-stamp: <pdc 1995-03-24>"
+
+# Usage fig2epsf [ -m MAG ] [ -f FONT ] [ -s FSIZE ] [
+
+case $1 in
+ -V|--version)
+ echo 'This is fig2epsf $version, using fig2dev from'
+ fig2dev -V
+ exit 0
+esac
+
+fig2dev -Lps $* | sed '
+ s/^%!$/%!PS-Adobe-3.0 EPSF-3.0/
+ s/^%!PS-Adobe-2.0 EPSF-2.0/%!PS-Adobe-3.0 EPSF-3.0/
+ s/%%Pages: 0/%%Pages: 1/
+ /\/\$F2psDict/d
+ /\$F2psDict begin/d
+ / end/d
+ /\/\$F2psBegin/d
+ /\/\$F2psEnd/d
+ /\$F2psBegin/d
+ /\/col-1/d
+ s/col-1//g
+ s,\$F2psDict /mtrx matrix put,/mtrx matrix def,
+ s/\$F2psEnd/showpage/
+ /%%EndProlog/a\
+\
+%%Page: 1 1
+'
diff --git a/macros/plain/contrib/pdcmac/fig2epsf.1 b/macros/plain/contrib/pdcmac/fig2epsf.1
new file mode 100644
index 0000000000..6f68076bf4
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/fig2epsf.1
@@ -0,0 +1,46 @@
+.TH FIG2EPSF 1 "Time-stamp: <pdc 1995-03-27>" "PDCMAC 1.0" "CONTRIBUTED SOFTWARE"
+.SH NAME
+fig2epsf \- convert Fig picture files into Encapsulate PostScript format
+.SH SYNOPSIS
+.na
+.B fig2epsf
+[
+.I fig2dev options
+]
+.I figfile
+.B >
+.I epsffile
+.SH DESCRIPTION
+.na
+This is a shellscript that uses the
+.IR fig2dev (1)
+program to convert files in Fig's format
+(see
+.IR fig (1)
+or
+.IR xfig (1))
+into Encapsulated PostScript Format compliant with version 3.0 of the
+.SM EPSF
+guidelines. The
+.SM EPSF
+file is printed on the standard output stream.
+.PP
+This shellscript cleans up some of the redundant PostScript code that
+.I fig2dev
+2.1.4.1 produces, so that the resulting files may be printed on a
+tiny-brained LaserWriter, and corrects the header comments so that it
+may be previewed with
+.IR ghostview (1).
+.SH AUTHOR
+P. Damian Cugley
+.SH "SEE ALSO"
+fig2dev(1)
+.PP
+.I
+PostScript Language Reference Manual
+Second Edition
+(Addison\-Wesley, 1990),
+Appendix E.
+.SH BUGS
+It is possible that later versions of TransFig will produce less buggy
+PostScript files, and that these will break this shellscript.
diff --git a/macros/plain/contrib/pdcmac/install.txt b/macros/plain/contrib/pdcmac/install.txt
new file mode 100644
index 0000000000..5713d2fbde
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/install.txt
@@ -0,0 +1,91 @@
+install.txt -*-text-*- Time-stamp: <pdc 1995-02-23>
+
+ INSTALLING PDCMAC
+
+1. GNERIC INSTALLATION
+
+ The file "contents.txt" gives a list of all the files (except
+ itself) with their sizes in bytes.
+
+ The macro files are packaged with their documentation in "dtx"
+ files (the LaTeX 2e distribution uses files with the same suffix
+ for a similar purpose).
+
+ You do not need Docstrip or LaTeX to unpack these files; all you
+ need is a copy of "pdccode.tex". Just run plain TeX on the
+ "dtx" files to generate the macro files and the printed
+ documentation all at the same time.
+
+ Then put the macro files somewhere where TeX can find them. For
+ systems with the new TeX Directory Structure this directory
+ might be "$texmf/tex/plain/pdcmac/"; for UNIXTeX 6.1 it might be
+ "$texmf/tex/plain/"; for older TeX it might be "$tex/inputs" or
+ "$tex/macros".
+
+ You may want to put the DVI files and the DTX files together in
+ a documentation directory if you have one. On TDS systems this
+ might be "$texmf/doc/pdcmac/".
+
+
+2. UNIX SYSTEMS
+
+ For the benefit of people on UNIX systems I can supply a
+ Makefile template and a configuration script. The conventions
+ for the config scriopt are based on the GNU Coding Standards.
+
+(1) Configuration. Run the command "./configure" (you may need to say
+ "sh configure"); this is a shell script that attempts to guess
+ sensible values for things like "texdir" (the directory to put
+ TeX macro files). It generates a shellscript "config.status"
+ which records the current configuration; running it recreates
+ the "Makefile".
+
+ The "configure" script understands the following options.
+ *You should not need to specify any of these.*
+
+ -n, -nocreate, --nocreate
+ Make "config.status" but don't run it to generate "Makefile".
+
+ -h, -help, --help
+ Print a summary of options.
+
+ -pDIR, -prefix DIR, --prefix=DIR
+ Set the "prefix" for directory names. FOr example, "-p/usr"
+ indcates that TeX files are under "/usr/texmf" or "/usr/tex" or
+ somesuch.
+
+ -sDIR, -srcdir DIR, --srcdir=DIR
+ Tell "configure" where the source files are. This is used when
+ building the package in a different directory. Normally even
+ in this case "configure" can guess the cirrect dierctory by
+ examining $0.
+
+ -tDIR, -texdir DIR, --texdir=DIR
+ Tell "configure" where TeX files are (this makes -p redundant).
+ For example "-t/usr/texmf".
+
+ -wtds, -with tds, --with-tds
+ Tell "configure" you have a new-style TeX Directory Structure.
+ Usually "configure" can guess correctly.
+
+ Other options are ignored.
+
+(2) Run "make". The makefile generated by "configure" is tested with
+ GNU "make". The makefile understands the following conventional
+ targets:
+
+ "make"
+ Generates all the "tex" macro files, and runs TeX on the other
+ documentation files.
+
+ "make install"
+ Copies the macro files into TeX's macros directory, and the DVI
+ files into the $docdir.
+
+ "make uninstall"
+ Deletes the files that would be created by "make install".
+
+ "make mostlyclean|clean|distclean|realclean"
+ Delete files made from source files. "mostlyclean" removes the
+ ones that are generated most often; "realclean" removes even
+ those that are rarely deleted.
diff --git a/macros/plain/contrib/pdcmac/maamac.dtx b/macros/plain/contrib/pdcmac/maamac.dtx
new file mode 100644
index 0000000000..9ddde3ee83
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/maamac.dtx
@@ -0,0 +1,627 @@
+% maamac.dtx -- documentation & source for maamac.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "MAAMAC -- Malvern A Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/maamac.dtx",
+%%% version = "$Revision: 1.5 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/04/06 13:33:44 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file maamac.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% 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.",
+%%% notice = "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.",
+%%% notice = "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.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ maamac
+%{{{ preamble
+
+\relax
+\input pdccode
+
+\document
+\rcs$Id: maamac.dtx,v 1.5 1995/04/06 13:33:44 pdc Exp $\endrcs
+
+\newcount\chcda \newcount\chcdc \newcount\chcdn
+\def\changecodes#1#2#3#4{%
+ \chcda#2\relax \chcdc#3\relax \chcdn#4\relax
+ \loop \ifnum\chcdn>0
+ #1\chcda\chcdc
+ \advance\chcda1 \advance\chcdc1 \advance\chcdn-1
+ \repeat
+}
+\changecodes\mathcode{`a}{"7461}{26}
+
+\codefile{maamac.tex}
+%}}} preamble
+%{{{ introduction
+
+\author{P. Damian Cugley}
+\title{MAAMAC---Malvern A Macros}
+\advance\seccount-1
+\section{Introduction}
+
+ This document describes |maamac.tex|, a collection of formatting
+ macros for plain \TeX\ documents using fonts with the Malvern~A
+ encoding. For example, it defines commands for making composite
+ letters and special symbols.
+
+\subsec{About this document}
+
+ The definitions file and this printed documentation are both in
+ |maamac.dtx|, a `documented \TeX\ macros' file\footnote*{The
+ \LaTeX~2e distribution uses files with the `|dtx|' suffix for
+ similar purposes.} which, when processed by plain \TeX,
+ generates a fresh copy of |maamac.tex| in the current directory
+ in addition to the |dvi| file. This ensures that the printed
+ documentation and the code it describes are identical. The
+ |dtx| file uses the macros in |pdccode.tex|.
+
+\subsec{What is in MAAMAC?}
+
+ The definitions in |maamac.tex| fall into three sections:
+\smallskip
+\item{\S1} Building {\it composite letters} like `\'e' from {\it
+ marks} like `\'{}' and {\it base letters} like `e'. This gives
+ new definitions for commands like |\'| and |\"|.
+\item{\S2} Symbols and special letters: replacements for existing
+ commands like |\P| (\P) and |\ae| (\ae), and new commands like
+ |\registered| and |\pounds|.
+\item{\S3} Switching between alphabets. The Malvern~A encoding includes
+ separate small capital and medium capital alphabets in addition
+ to the usual capitals and lower case. This section defines
+ commands for transliterating a list of tokens from one alphabet
+ to another.
+
+\smallskip\noindent
+ The first two sections make changes to commands described in
+ {\it\TeX book} Chapter~9 (and a few maths symbols from
+ Chapter~16) and defined in Appendix~B.
+
+%}}} introduction
+%{{{ File identification
+\subsec{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file.
+
+\code
+ \|\% maamac.tex \fileversion~\filedate~-- Malvern A Macros
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/maamac.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Macros for using the Malvern-A font coding
+ |%%% scheme in plain TeX documents.
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+
+%}}}
+%{{{ building composite letters
+\section{Building composite letters}
+
+ THis section redefines commands listed at the start of Chapter~9
+ of the {\it\TeX book}: |\'|, |\"|, etc. The main difference is
+ that these now use `medium capitals' and differently-drawn marks
+ to make composite capital letters.
+
+ I~also define \<chardef tokens> called |\acuteglyph|,
+ |\twodotsglyph| which may be used to print these marks in a
+ document: `the acute mark ``\'{}''\dots' might be typeset with
+ `|the acute mark ``\acuteglyph''|\dots'. Also, if you don't
+ like the way my macros look, you can say `|\accent\acuteglyph
+ E|' rather than having to look up its glyph number.
+
+%{{{ utility macros
+
+\subsec{Utility macros}
+
+ First some nicknames for scratch registers.
+\code
+ |\dimendef\dimena0 \dimendef\dimenb2
+ |\toksdef\toksa0
+ |\countdef\counta255
+ |\ifx\countb\UNDEFINED \csname newcount\endcsname\countb \fi
+ |\ifx\countc\UNDEFINED \csname newcount\endcsname\countc \fi
+\endcode
+
+ A macro to find the code in \TeX's internal encoding for a
+ character. The character might be represented by (1)~a
+ character with category code~11 or~12, (2)~a token defined with
+ |\chardef|, or (3)~the token |\char| followed by a \<number>.
+\code
+ |\def\code#1{%
+ | \ifcat#1a%
+ | `#1
+ | \else\ifcat#1+%
+ | `#1
+ | \else\ifx\char#1
+\endcode
+\hbox{\hskip6\fontdimen6\tentt
+ \% If the first token is |\char| the rest is the
+ \<number> we want.}
+\code
+ | \else
+ | #1%
+ | \fi\fi\fi
+ |}
+\endcode
+
+ So as to make conditional macros that can be skipped over if
+ they appear nested inside another conditional, we make include
+ the token |\then| amongst the arguments, making this the `if-'
+ token to match the |\else| and |\fi| following it. This way we
+ write, for example
+$$\hbox{|\ifcap|\<character> |\then| \<true text>
+ |\else| \<false text> |\fi|}$$
+\code
+ |\let\then=\iffalse
+\smallbreak
+ |\def\ifcap#1\then{\expandafter\ifcapnum\code{#1}\then}
+ |\def\ifcapnum#1\then{\ifnum\lccode#1=#1}
+\smallbreak
+ |\def\iflower#1\then{\expandafter\iflowernum\code{#1}\then}
+ |\def\iflowernum#1\then{\ifnum\uccode#1=#1}
+\endcode
+
+ A macro to extract the slant-per-point parameter of a font in
+ toe form of a \TeX\ \<factor>.
+\code
+ |\def\fontslant#1{\expandafter\stripPT\the\fontdimen1#1}
+\smallbreak
+ |\begingroup \uccode`2=`p \uccode`3=`t \uppercase{\toksa{\endgroup
+ | \def\\#123{#1}
+ |}} \the\toksa
+ |\let\stripPT=\\
+\endcode
+%}}} utility macros
+%{{{ macros for placing marks
+
+\subsec{Macros for placing marks}
+
+ This simple macro places the text |#3| at displaced
+ $(\hbox{|#1|},\hbox{|#2|})$ from current position:
+\code
+ |\def\putxy#1#2#3{\leavevmode\rlap{\hskip#1\raise#2\hbox{#3}}}
+\endcode
+
+ Now we have a generic mark-placement macro. It is similar to
+ the |\accent| primitive, but takes two extra parameters:
+$$
+ \hbox{|\putmarkxy|\arg{$xf$}\arg{$dy$}\arg{$mark$}\arg{$base$}}
+$$
+ The horizontal position $xf$ of the optical centre of the base
+ letter (ignoring slant) is expressed as a \<factor> (i.e.,
+ decimal fraction of the width of the base glyph). The vertical
+ displacement $dy$ is expressed as a fragment of \TeX\ code that
+ will calculate $dy$. The code is expanded after setting box~0
+ to contain the base glyph, and must put the result in |\dimena|.
+ For example, we could define
+$$
+ \hbox{|\def\fakeaccent{\putmarkxy{0.5}{\dimena\ht0
+ \advance\dimena-1ex }}|}
+$$
+ This produces an approximation to the primitive |\accent|
+ command.
+
+ Given the $x$-factor $xf$, a base glyph with width $wd$, a font
+ with slant $s$, the horizontal displacement $dx$ is given by
+$$
+ dx = xf \times wd + s \times dy\quad.
+$$
+ In this macro it is stored in |\dimenb|.
+\code
+ |\def\putmarkxy#1#2#3#4{{%
+ | \setbox0=\hbox{#4}#2\relax
+ | \dimenb#1\wd0 \advance\dimenb\fontslant\font\dimena
+ | \leavevmode
+ | \putxy{\dimenb}{\dimena}{\hbox to 0pt{\hss\char#3\hss}}%
+ | \box0
+ |}}
+\smallbreak
+ |\def\putmarky{\putmarkxy{0.5}}
+\endcode
+%}}} macros for placing marks
+%{{{ type I marks
+
+\subsec{Type~I Marks}
+
+ A Type~I mark is one which does not have any scope for being
+ `squashed' to go over capital letters---for example, the
+ two-dots mark `\"{}' and macron `\={}'.
+
+ Here's a macro for placing a Type~I mark given by |#1| (a
+ \<number>) over base glyph |#2| (which is anything that |\code|
+ understands). The difference between this macro and simply
+ using |\accent| is (1)~if presented with a capital letter it
+ will use the corresponding medium capital letter and (2)~the the
+ mark is raised by an amount intended to centre it vertically
+ between the top of the base letter and the top of the
+ body-height---assuming it was original centered between
+ body-height and $x$-height.
+
+ If $H$ is the body height, $h$ the height of the base glyph,
+$$ \mathcode`/="202F
+ \eqalign{dy &= { H + h \over 2 } - { H + 1\,{\rm
+ ex} \over 2}\cr
+ &= \textstyle { 1\over2}h - {1\over2}\,{\rm ex}\cr}
+$$
+\code
+ |\def\typeImark#1#2{{%
+ | \setbox2=\hbox{#2}%
+ | \ifdim \ht2=1ex
+ | \accent#1\relax#2%
+ | \else
+ | \counta\code{#2}%
+ | \ifnum\counta>64 \ifnum\counta<96
+ | \advance\counta 128
+ | \fi \fi
+ | \putmarky{\dimena0.5\ht0 \advance\dimena-0.5ex }
+ | {#1}{\char\counta}%
+ | \fi
+ |}}
+\endcode
+
+ Finally we define the composite-letter-building commands.
+\code
+ |\chardef\dotglyph22 \def\.{\typeImark\dotglyph}
+ |\chardef\twodotsglyph23 \def\"{\typeImark\twodotsglyph}
+ |\chardef\macronglyph150 \def\={\typeImark\macronglyph}
+ |\chardef\longmacronglyph151
+ | \def\longmacronmark{\typeImark\longmacronglyph}
+\endcode
+%}}} type I marks
+%{{{ type II marks
+
+\subsec{Type~II Marks}
+
+ These marks have an alternative glyph for use of capital and
+ medium capital letters. As with |\typeImark|, |#1| is a
+ \<number> and |#2| is anything understood by |\code|.
+\code
+ |\def\typeIImark#1#2{{%
+ | \counta#1\relax \countb\code{#2}%
+ | \ifcap{#2}\then
+ | \ifnum \counta<128 \advance\counta 128 \fi
+ | \ifnum \countb<128 \advance\countb 128 \fi
+ | \fi
+ | \accent\counta \char\countb
+ |}}
+\smallbreak
+ |\chardef\acuteglyph8 \def\'{\typeIImark\acuteglyph}
+ |\chardef\graveglyph9 \def\`{\typeIImark\graveglyph}
+ |\chardef\circumglyph10 \def\^{\typeIImark\circumglyph}
+ |\chardef\tildeglyph11 \def\~{\typeIImark\tildeglyph}
+ |\chardef\ringglyph12 \def\ringmark{\typeIImark\ringglyph}
+ |\chardef\caronglyph13 \def\v{\typeIImark\caronglyph}
+ |\chardef\breveglyph14 \def\u{\typeIImark\breveglyph}
+ |\chardef\hungarglyph15 \def\H{\typeIImark\hungarglyph}
+\endcode
+ I have abbreviated `circumflex' as `circum' (consistent with
+ Adobe's `|asciicircum|'). I~have called the hook `\v{}'
+ `|caron|' because that is its name as used by ISO and Adobe.
+ I~have called the long Hungarian umlaut `\H{}' `|hungar|' for
+ want of a better name (it's shorter than |hungarumlaut|)..
+%}}} type II marks
+%{{{ cedilla ogonek
+
+\subsec{Cedilla and ogonek}
+
+ The cedilla and ogonek each have a variant intended for capital
+ letters (in this case the variant is larger not smaller).
+\code
+ |\def\cedillalike#1#2#3{{%
+ | \setbox0=\hbox{#3}%
+ | \ifdim\ht0>1ex
+ | \ooalign{\hidewidth\char#2\relax\hidewidth\crcr\unhbox0 }%
+ | \else
+ | \accent#1 #3%
+ | \fi
+ |}}
+\smallbreak
+ |\chardef\cedillaglyph6 \chardef\Cedillaglyph134
+ |\def\c{\cedillalike\cedillaglyph\Cedillaglyph}
+\smallbreak
+ |\chardef\ogonekglyph7 \chardef\Ogonekglyph135
+ |\def\k{\cedillalike\ogonekglyph\Ogonekglyph}
+\endcode
+%}}} cedilla ogonek
+%}}}
+%{{{ symbols
+\section{Symbols and special letters}
+%{{{ special letters
+
+\subsec{Special letters}
+
+ The letters defined here that are not included in Chapter~9 of
+ the {\it\TeX book} are the Icelandic thorn (|\TH|, |\th|) and
+ eth\footnote*{Also called `edh'.} (|\DH|, |\dh|), the Polish
+ {\it a} and {\it e} with ogonek (|\A|, |\a|, |\E|, |\e|), and
+ the Sami eng\footnote\dag{Also called `ing' or `ng'.} (|\NG|,
+ |\ng|).
+
+ We also give replacements for {\it d}, {\it t} and {\it l} with
+ hook (which are usually drawn with a apostrophe-like mark), and
+ the Esperanto letter {\it hho} (\^h).
+\code
+ |\chardef\TH"00 \chardef\th"10 \chardef\DH"04 \chardef\dh"14
+ |\chardef\A "01 \chardef\a "11 \chardef\E "05 \chardef\e "15
+ |\chardef\NG"02 \chardef\ng"12 \chardef\L "03 \chardef\l "13
+ |\chardef\AE"5E \chardef\ae"7E \chardef\OE"5F \chardef\oe"7F
+ |\chardef\O "5C \chardef\o "7C
+\smallbreak
+ |\chardef\vd"9C \chardef\vt"9D \chardef\h "9E \chardef\vl"9F
+ |\chardef\ss"18 \chardef\i "19 \chardef\j "1A
+\smallbreak
+ |\def\aa{\ringmark a} \def\AA{\ringmark A}
+\endcode
+
+\code
+\smallbreak
+ |\chardef\orda"98 \chardef\ordo"99 \def\No{N\ordo} \def\no{n\ordo}
+ |\chardef\csuperior"98 \def\Mc{M\csuperior}
+\endcode
+ The command |\Mc| is used for forming names like
+ M\flushtop{\the\scriptfont\fam \b c}Donald.
+%}}} special letters
+%{{{ text syms
+
+\subsec{Other symbols used in text}
+
+ There are several new symbols here. Note that |\trademark| is
+ what you will get if you use the ASCII double quote character
+ `|"|' in your manuscript.
+\code
+ |\chardef\trademark "22
+ |\chardef\copyright "FB \chardef\registered"FD
+ |\chardef\careof "9A \chardef\Box "A0
+ |\chardef\cents "A2 \chardef\pounds "A3
+ |\chardef\currency "A4 \chardef\permille "A5
+ |\chardef\yen "A8 \chardef\florin "A9
+ |\chardef\dag "AA \chardef\ddag "AB
+ |\chardef\gbdecimal "AE \chardef\minus "AF
+ |\chardef\S "BA \chardef\P "BB
+ |\chardef\degrees "C0
+ |\chardef\lguillemet"BC \chardef\rguillemet"BE
+\endcode
+ The |\careof| sign ($\rm ^c\!/\!_o$) is an abbreviation for
+ `care of' in English-language addresses (actually, Australians
+ traditionally write `$\rm ^c\!/\!_-$'). The raised dot
+ |\gbdecimal| is the British decimal point (I~usually do
+ |\mathcode`.=\gbdecimal| and let maths mode do all the work).
+ The |\degrees| sign replaces \TeX's |$^\circ$|.
+
+ The guillemets can also be obtained with the ligatures |<<| and
+ |>>|.
+
+
+%}}} text syms
+%{{{ maths syms
+
+\subsec{Symbols used in maths}
+
+ I have stuck with the plain \TeX\ conventions as much as
+ possible---even though |\bullet| is more often used in text than
+ maths.
+\code
+ |\mathcode`\,"602C \mathcode`\-"20AF
+ |\mathcode`\."002E \mathcode`\/"002F
+\smallbreak
+ |\mathchardef\bullet "2020 \mathchardef\times "20A6
+ |\mathchardef\backslash"005B \mathchardef\setminus "205B
+ |\mathchardef\cdot "20AE \mathchardef\cdotp "60AE
+\smallbreak
+ |\def\langle{\delimiter"40DB30A } \delcode`\<"0DB30A
+ |\def\rangle{\delimiter"50DD30B } \delcode`\>"0DD30B
+ |\def\lbrace{\delimiter"407B308 } \let\{\lbrace \mathcode`\{"407B
+ |\def\rbrace{\delimiter"507D309 } \let\}\rbrace \mathcode`\}"407D
+\endcode
+
+%}}} maths syms
+%}}} symbols
+%{{{ switching alphabets
+\section{Switching between alphabets}
+
+ This is one of the strange ideas that went into the design of
+ the Malvern font---I wanted to have small capitals and medium
+ capitals treated as separate alphabets rather than as a
+ different style, just as I treat old-style and ranging numerals
+ as separate symbols. These extra alphabets are present in all
+ Malvern~A encodings\footnote*{Fonts with the Malvern~A encoding
+ but made from normal PostScript fonts will have medium capitals
+ replaced with full capitals, and old-style numerals replaced
+ with ranging numerals.}
+
+ These extra alphabets are obtained by transliterating a sequence
+ of letters using the |\uppercase| and |\lowercase|
+ commands.\footnote\dag{Alas! this task would be so much easier
+ and more efficient if it were possible to declare new
+ alphabet-switching tables styled after the |\uccode| and
+ |\lccode| tables which make |\uppercase| and |\lowercase| work.
+ Then all this nonsense could happen in \TeX's mouth, which has
+ some advantages. I~can imagine commands |\newchartable| (used
+ to create a token which can be used in the same way as
+ |\uccode|) and |\usechartable| (used to defined macros that work
+ like |\uppercase|). E\TeX\ hackers take note!} For example, to
+ transliterate capitals into small capitals (the |\sc| command),
+ we first make assignments so that, for example, |\lccode`a| is
+ set to the code for small-capital $\scriptstyle A$, then apply
+ |\lowercase| to the token list.
+
+\subsec{Setting upper and lower case codes for special letters}
+
+ These entries in the |\uucode| and |\lccode| tables are used by
+ the composite-letter-building commands rather then the
+ alphabet-switchign commands, but they are included here to be
+ near the other code-hackery.
+
+\code
+ |\uccode\th\TH \lccode\TH\th \uccode\TH\TH \lccode\th\th
+ |\uccode\a \A \lccode\A \a \uccode\A \A \lccode\a \a
+ |\uccode\ng\NG \lccode\NG\ng \uccode\NG\NG \lccode\ng\ng
+ |\uccode\l \L \lccode\L \l \uccode\L \L \lccode\l \l
+ |\uccode\dh\DH \lccode\DH\dh \uccode\DH\DH \lccode\dh\dh
+ |\uccode\e \E \lccode\E \e \uccode\E \E \lccode\e \e
+ |\uccode\o \O \lccode\O \o \uccode\O \O \lccode\o \o
+ |\uccode\ae\AE \lccode\AE\ae \uccode\AE\AE \lccode\ae\ae
+ |\uccode\oe\OE \lccode\OE\oe \uccode\OE\OE \lccode\oe\oe
+\smallbreak
+ |\uccode\i`I \uccode\j`J \lccode\i\i \lccode\j\j
+ |\uccode\csuperior`C
+\endcode
+
+
+\subsec{A macro for changing character codes}
+
+ The |\changecodes| command is used to change those segments of
+ character tables that are contiguous and map onto a contiguous
+ segment in the range. It is invoked as
+$$
+ \hbox{\it |\changecodes| command x y n}
+$$
+ (where $\it command$ is a token like |\uccode| or |\mathcode|
+ and $x$, $y$, and $n$ are \<number>s), and does the equivalent
+ of
+$$
+ {\it command}\;i\mathrel{\hbox{\tt=}}
+ j\qquad \hbox{for all $\cases{x \le i < x + n\cr
+ y \le j < y + n\cr}$}
+$$
+
+\code
+ |\def\changecodes#1#2#3#4{%
+ | \counta#2\relax \countb#3\relax \countc#4\relax
+ | \loop
+ | \ifnum\countc>0
+ | #1\counta\countb
+ | \advance\counta 1
+ | \advance\countb 1
+ | \advance\countc-1
+ | \repeat
+ |}
+\endcode
+
+ We can use this immediately to arrange that lowercasing medium caps
+ makes lower case, and uppercasing small caps makes full caps:
+\code
+ |\changecodes\uccode{"E1}{`A}{26}
+ |\changecodes\uccode{"C1}{"C1}{26}
+ |\changecodes\lccode{"E1}{"E1}{26}
+ |\changecodes\lccode{"C1}{`a}{26}
+\endcode
+
+ We also make old-style numerals behave as lower case for ranging
+ numerals, and also arrange that maths mode uses ranging figures.
+\code
+ |\changecodes\lccode{"B0}{`0}{10}
+ |\changecodes\uccode{`0}{"B0}{10}
+\endcode
+
+ In maths mode (1)~we use text italic for letters, since CM MAth
+ Italic will not match the body text and (2)~we use ranging
+ figures.
+\code
+ |\changecodes\mathcode{`a}{"7461}{26}
+ |\changecodes\mathcode{`A}{"7441}{26}
+ |\changecodes\mathcode{`0}{"70B0}{10}
+\endcode
+
+\subsec{Changing the alphabet for special letters got with commands}
+
+ When applying |\uppercase| or |\lowercase| to a token list,
+ macros will be unaffected (|\ae| will still generate `ae'). To
+ get around this we define macros that redefine these control
+ sequences. They each take as parameters hex digits used to make
+ character codes.
+\code
+ |\def\capspecials#1#2{%
+ | \chardef\TH"#10 \chardef\A "#11 \chardef\NG"#12
+ | \chardef\L "#13 \chardef\DH"#14 \chardef\E "#15
+ | \chardef\O "#2C \chardef\AE"#2E \chardef\OE"#2F
+ |}
+\smallbreak
+ |\def\lcspecials#1#2#3{%
+ | \chardef\th"#10 \chardef\a "#11 \chardef\ng"#12
+ | \chardef\l "#13 \chardef\dh"#14 \chardef\e "#15
+ | \chardef\o "#2C \chardef\ae"#2E \chardef\oe"#2F
+ | \def\ss{\char"#23 \char"#23 }\chardef\i"#39 \chardef\j"#3A
+ |}
+\endcode
+\subsec{Pulling it all together}
+ Now we can define the user macros that do the work. These take
+ one argument, a piece of text to transliterate: |\sc{OX1~3QD}|
+ produces a small-capital `${\rm\scriptstyle OX}{\mit 1\
+ 3}{\rm\scriptstyle QD}$';
+ |\csc{ABCdef}| produces caps and small caps
+ `ABC{\the\scriptfont0 DEF}'.
+\code
+ |\def\sc#1{{%
+ | \changecodes\lccode{`A}{"E1}{26}\capspecials9F\lowercase{#1}%
+ |}}
+\smallbreak
+ |\def\mc#1{{%
+ | \changecodes\lccode{`A}{"C1}{26}\capspecials8D\lowercase{#1}%
+ |}}
+\smallbreak
+ |\def\csc#1{{%
+ | \changecodes\uccode{`a}{"E1}{26}\lcspecials9FE\uppercase{#1}%
+ |}}
+\smallbreak
+ |\def\allcaps#1{{%
+ | \lcspecials054\uppercase{#1}%
+ |}}
+\smallbreak
+ |\def\alllc#1{{%
+ | \capspecials17\lowercase{#1}%
+ |}}
+\endcode
+%}}} switching alphabets
+\endcodefile
+\enddocument
+\bye
+%}}} maamac
+
+
+% Local variables:
+% fold-folded-p: t
+% fill-prefix: "\t"
+% End:
diff --git a/macros/plain/contrib/pdcmac/magrmac.dtx b/macros/plain/contrib/pdcmac/magrmac.dtx
new file mode 100644
index 0000000000..7dc1d017b0
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/magrmac.dtx
@@ -0,0 +1,231 @@
+% magrmac.dtx -- documentation and source for magrmac.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "MAGRMAC.TEX -- Malvern Greek Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/magrmac.dtx",
+%%% version = "$Revision: 1.3 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/29 16:32:24 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file magrmac.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% 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.",
+%%% notice = "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.",
+%%% notice = "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.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ magrmac.dtx
+%{{{ preamble
+
+\relax
+\input pdccode
+
+\document
+\rcs$Id: magrmac.dtx,v 1.3 1995/03/29 16:32:24 pdc Exp $\endrcs
+
+\codefile{magrmac.tex}
+
+%}}} preamble
+%{{{ introduction
+\author{P. Dmaian Cugley}
+\title{MAGRMAC---Malvern Greek Macros}
+
+\section{Introduction}
+
+ This document describes |magrmac.tex|, a small file of macros
+ for setting Greek with Malvern~G fonts. `Malvern~G' is the name
+ of an encoding for typesetting Greek texts. Malvern
+ release~$1{\cdot}2$ has a collection of fonts ({\tt
+ ma$XX$g$YY$}) which use this encoding. The Levy and Dryllerakis
+ fonts should work to an extent.
+
+ The conventions for Malvern Greek text files are intended to be
+ similar to those for K.~J.\ Dryllerakis's Greek\TeX\ (the
+ `|kd|-' fonts), and will be most useful on computers where the
+ operating system uses latin letters (as opposed to those which
+ can display Greek letters on the screen).
+
+ There is a brief guide for |magrmac.tex| called |magrman.tex|.
+\notepar
+ These macros are not necessarily in final form and are not
+ intended to be supported. Use them at your own risk.
+\endnotepar
+
+ The document you are reading is a plain \TeX\ file called
+ |magrmac.dtx|. This `documented \TeX\ macros'\footnote*{The
+ suffix |dtx| is the same as files used to simlar effect in the
+ \LaTeX~2e distribution.} file produces the file `|magrmac.tex|'
+ in the current directory, in addition to the usual |dvi| file.
+ The code lines in the printed documentation are identical to
+ those in the macros file.
+
+%}}} introduction
+%{{{ file identification
+\section{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file, for the benefit of people wondering what the file is for.
+
+\code
+ \|\% magrmac.tex \fileversion~\filedate~-- Malvern Greek Macros
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/magrmac.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, Malvern, Greek, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Macros for using Malvern Greek fonts.
+ |%%% This file was generated by running
+ |%%% plain TeX on magrmac.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ |%%% Distribute magrmac.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%%}
+ |
+ \|\\message\{\fileversion~\filedate\}
+ |
+\endcode
+%}}} file identification
+%{{{ greek mode
+\section{Greek Mode}
+
+ The Greek Mode is started with |\begingreek| for compatibility
+ with the precedent of Greek\TeX\ and Levy's original Greek
+ macros.\footnote*{The conventions of PDCFMT2 would suggest
+ |\greek|\dots|\endgreek| but (besides being incompatible with
+ existing Greek macros) it is probable that the hyphenation table
+ code (|\language| code) for Greek would be called |\greek|,
+ based on the names I~have seen used.}
+
+ The token register |\everygreek| is expanded each time we enter
+ Greek mode. At a minimum it should contain a command to select
+ an appropriate Greek font.
+\code
+ |\newtoks\everygreek
+ |\chardef\other=12
+\smallbreak
+ |\def\begingreek{%
+ | \begingroup
+ | \catcode`\~\other \catcode`\|\other \catcode`\"\other
+ | \the\everygreek
+ |}
+\smallbreak
+ |\let\endgreek=\endgroup
+\endcode
+%}}} greek mode
+\section{Customization}
+%{{{ lunate sigma, curly phi
+
+\subsec{Lunate sigma}
+
+ The macro |\grlunatesigma| belongs in |\everygreek|. It makes
+ |s| an active char expanding to |c|. A certain amount of
+ jiggery-pokery is required because making |s| active makes it
+ impossible to use the name |\grlunatesigma|!
+
+\code
+ |\toksdef\toksa=0
+\smallbreak
+ |\begingroup \let\\=\toksa \catcode`\s=13 \catcode`\S=13 \\={\endgroup
+ | \def\tmp{%
+ | \catcode`\s\active \chardef s`c
+ | \catcode`\S\active \chardef S`C
+ | }
+ |}\the\\
+ |\let\grlunatesigma=\tmp
+\endcode
+
+\subsec{Variant phi}
+
+ In the end I~make the two-stroke phi $\phi$ the default one,
+ with $\varphi$ as the `variant', for compatibility with plain
+ \TeX.
+\code
+ |\chardef\ninetytwo=92
+\smallbreak
+ |\begingroup \uccode`\~=`f \uppercase{\toksa={\endgroup
+ | \def\grvarphi{%
+ | \catcode`\f\active \chardef~\ninetytwo
+ | }
+ |}} \the\toksa
+\endcode
+%}}} lunate sigma
+%{{{ accent
+
+\subsec{One-accent Greek}
+
+ The |\monotonik| macro makes all the accent characters generate
+ the modern symmetrical accent, while the breathings and iota
+ subscript do nothing.
+\code
+ |\begingroup \catcode`\<=\active \catcode`\>=\active
+ | \catcode`\'=\active \catcode`\`=\active \toksa={\endgroup
+ | \def\monotoniko{%
+ | \catcode\lq\'\active \chardef'3
+ | \catcode\lq\`\active \chardef`3
+ | \catcode\lq\~\active \chardef~3
+ | \catcode\lq\<\active \let<\relax
+ | \catcode\lq\>\active \let>\relax
+ | \catcode\lq\|\active \let|\relax
+ | }
+ |}\the\toksa
+\smallbreak
+ |\def\plutoniko{%
+ | \catcode`\'\other \catcode`\`\other \catcode`\~\other
+ | \catcode`\<\other \catcode`\>\other \catcode`\|\other
+ |}
+\endcode
+%}}} accent
+%{{{ define delims
+
+\subsec{Choose shorthand delimiters for Greek Mode}
+
+ Define |#1| to be a `greek shift' in the way |$| is a maths
+ shift. Like |$|, |#1| will stand for either |\begingreek| or
+ |\endgreek| as required. |#1| must be a one-character control
+ sequence (as might be used after |`|).
+\code
+ |\def\grdelimiter#1{
+ | \begingroup \uccode`~=`#1 \uppercase{\toksa={\endgroup
+ | \def~{\begingreek \let~\endgreek}
+ | }} \the\toksa
+ |}
+\endcode
+
+%}}} define delims
+\endcodefile
+\enddocument
+\bye
+%}}} macros for greek
+
+% Local variables:
+% fold-folded-p: t
+% tex-macros-p: t
+% End:
diff --git a/macros/plain/contrib/pdcmac/magrman.tex b/macros/plain/contrib/pdcmac/magrman.tex
new file mode 100644
index 0000000000..82748646a9
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/magrman.tex
@@ -0,0 +1,604 @@
+% magman.tex -- info about Malvern Greek.
+%{{{ Malvern Greek manual
+%{{{ preamble
+
+\errorcontextlines=1000
+\input pdccmlft
+\input magrmac
+
+\font\notegr=ma55g9
+\font\bodygr=ma55g11
+\font\biggr=ma55g24 % used in sample
+\font\gri=ma56g11 % used in sample
+
+\toksa=\expandafter{\STYbodyT}
+\edef\STYbodyT{\the\toksa\noexpand\f{gr}{ma55g}}
+
+\bodyfonts
+
+\everygreek{\gr \baselineskip=14pt}
+
+\grdelimiter\* % * is already an active char
++\defverbatim\_+ % | is often used in examples
+
+\majorheadline{Typesetting Greek using Malvern fonts}
+
+%{{{ font tables
+
+%% Code to typeset a font table -- lifted from my testfont.tex
+
+\newcount\tableN
+\newcount\hexcount
+\def\hexdigit#1{\ifcase#1\relax 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}
+
+\def\ntablecr
+{%
+ \cr
+ \noalign{\nointerlineskip}
+ \multispan2\hfill &\multispan{33}\hrulefill
+}
+\def\ntable
+{
+ \medskip
+ \begingroup \openup1\jot
+ \def\\{\char\tableN \global\advance\tableN 1}
+ \def\0##1{&\omit&\sevenrm##1}
+ \halign to \hsize
+ {%
+ \chartstrut\hss##\tabskip=0pt plus 10pt &
+ &\hss##\hss&##\vrule\cr
+ \lower 6.5pt\null
+ &\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F
+ \ntablecr
+ \global\tableN=0
+ \ntablelines
+ \crcr
+ }
+ \medbreak
+ \endgroup
+}
+
+\def\ntablelines
+{%
+ \ifnum\tableN<256
+ \let\next\ntablecontinuation
+ \else
+ \let\next\relax
+ \fi
+ \next
+}
+
+\newcount\ntabtmp
+
+\def\ntablecontinuation
+{%
+ % Find out if none of this row are defined by making a horizontal
+ % list of all of them preceeded by a penalty of 1; if any of them
+ % are defined then \lastpenalty will be something other than 1:
+ \setbox0=\hbox{\penalty1
+ \def~{\char\tableN \advance\tableN 1}%
+ ~~~~~~~~~~~~~~~~\global\ntabtmp=\lastpenalty}%
+ % Now set the row in the table iff ntabtmp # 1:
+ \ifnum\ntabtmp=1
+ \global\advance\tableN 16 \let\next=\ntablelines
+ \else
+ \let\next=\ntablecontinuationcontinuation
+ \fi
+ \next
+}
+
+\def\ntablecontinuationcontinuation
+{%
+ \cr
+ \noalign{\nointerlineskip \penalty5000 }
+ & \hexcount=\tableN \divide\hexcount16 \sevenrm\hexdigit\hexcount
+ &&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&
+ \ntablecr
+ \ntablelines
+}
+
+\def\chartstrut{\lower 0.25\baselineskip \vbox to \baselineskip{}}
+
+%}}} font tables
+%{{{ two-column quotations
+
+\def\twocolgr{
+ \smallskip
+ \beginthe{twocolgr}
+ \setbox0=\vbox\bgroup
+ \hsize=\bodywd \advance\hsize-\colsep \divide\hsize by 2
+ \begingreek \strut \ignorespaces
+}
+\def\endtwocolgr{%
+ \par\endgreek \egroup
+ \moveleft\leftmargin\vbox{
+ \hrule\smallskip
+ \hbox to \bodywd{\rigidbalance{0}{2}{\ht\strutbox}{\hfil}}
+ \smallskip\hrule
+ }
+ \smallbreak
+ \endthe{twocolgr}
+}
+%}}} two-column quotations
+%}}} preamble
+%{{{ bibliography
+
+\def\TB{{\it TUGboat}}
+
+\counta=0
+\newtoks\bibliography
+\newcount\bibcount
+
+\def\FAQnote
+{%
+ \par {\bf Note on FAQs}\quad An FAQ is an electronic document, posted
+ regularly to a USENET newsgroup, usually in the form of a list of
+ answers to frequently asked questions. Many FAQs are available on
+ the archive site |pit-manager.mit.edu| (alias |rtfm.mit.edu|)
+ [18.172.1.27] in the directory |pub/usenet/news.answers|. The
+ reference gives the name of the compiler, the title, the
+ last-modified date (in lieu of an edition or version number) and
+ name under which the FAQ is archived appears in parentheses.
+ \par
+}
+
+\def\bibdef#1#2%
+{
+ \expcs\edef{cite#1}%
+ {%
+ \noexpand\docite\noexpcs{cite#1}\noexpcs{refer#1}%
+ }
+ \toks0={#2}
+ \expcs\edef{refer#1}{\noexpand\bibitem{\expcs\noexpand{cite#1}}
+ \the\toks0}
+}
+\def\docite#1#2%
+{%
+ \global\advance\bibcount1
+ \global\bibliography=\expandafter
+ {\the\bibliography #2}%
+ \global\edef#1%
+ {[\the\bibcount]}#1%
+}
+
+\bibdef{Allen}
+{
+ W. Sidney Allen, {\it Vox Graeca: A Guide to Pronunciation of Classical
+ Greek}, 3rd Ed.\ (Cambridge University Press, 1987),
+ pp.\thinspace177--179.
+}
+
+\bibdef{KD}
+{
+ K.~J. Dryllerakis (|kd@doc.ic.ac.uk|), {\it Typesetting Greek Texts with
+ Greek\TeX}, Greek\TeX~3.1 (also known as KDGreek) (CTAN
+ |fonts/greek/kd|).
+}
+
+\bibdef{FAQ}
+{
+ Nikolaos Fotis (ed.), {\it soc.culture.greek} FAQ --
+ Linguistics ({\tt greek-\penalty\exhyphenpenalty faq\slash
+ linguistics}, 1993/03/06).
+}
+
+\bibdef{Yannis}
+{
+ Yannis Haralambous and Klaus Thull, Typesetting Modern Greek with 128
+ Character Codes, \TB\/ 10 (1989), pp.\thinspace354--359 (CTAN
+ |fonts/greek/yannis|).
+}
+
+\bibdef{Harts}
+{
+ Horace Hart, {\it Hart's Rules for Compositors and Readers at the
+ University Press, Oxford}, 39th Edition, revised (Oxford
+ University Press, 1989), pp.\thinspace111--116.
+}
+
+\bibdef{Levy}
+{
+ Silvio Levy, Using Greek Fonts with \TeX, \TB\/ 9 (1988),
+ pp.\thinspace20--24 (CTAN |fonts/greek/levy|).
+}
+
+\bibdef{COD}
+{
+ {\it The Concise Oxford Dictionary of Current English}, 8th Ed.
+ (Oxford University Press, 1990), p.\thinspace1453.
+}
+
+\def\bibitem#1%
+{%
+ \smallskip
+ \indent \llap{#1\hskip1pc}\ignorespaces
+}
+
+
+%}}} bibliography
+
+\twosidedtrue
+
+\noheadlinetrue
+\majorheadline{Typesetting Greek using Malvern fonts}
+\leftline{\headingfonts \the\majorheadline}
+\bigskip
+\leftline{P. Damian Cugley}
+\leftline{Oxford University Computing Laboratory}
+\leftline{(|Damian.Cugley@comlab.ox.ac.uk|)}
+\leftline{April 1993}
+\bigskip
+
+\noindent
+ Malvern is a sanserif font family, implemented in \MF. This
+ document describes Malvern encoding~G (the Greek alphabet).
+
+\section{Using Malvern G}
+
+ Because most latin-alphabet languages require additional composite
+ letter glyphs to be properly typeset by \TeX, most Malvern fonts
+ will be used as the raw material for composite fonts. In contrast,
+ the Malvern Greek font can be used directly to typeset Greek, both
+ with the old accent-and-breathing systems and the newer (post-1974)
+ one-accent system. It follows the conventions of Silvio Levy's
+ original |gr| family \citeLevy\ and K.~J. Dryllerakis's Greek\TeX\
+ (|kd| fonts) \citeKD. It is almost compatible with the reduced
+ Greek fonts (|rgr| and |mrgr| families) described by Yannis
+ Haralambous and Karl Thull \citeYannis.
+
+%{{{ typesetting
+
+\section{Macro file}
+
+ The file |magrmac.tex| has some macros for setting texts in plain
+ \TeX. A future production release may instead work as an option or
+ extension of Greek\TeX, with the objective of making it possible to
+ switch an existing document to Malvern without much editing.
+
+ Greek text is set within a \dfn{Greek mode}, delimited by macros
+ |\begingreek| and |\endgreek|. Each time Greek mode is entered, the
+ contents of the token register |\everygreek| is scanned first.
+ Since |magrmac| does {\it not} load a particular font by default, a
+ manuscript using |magrmac| will want to include an assignment like
+\display
+ |\everygreek={\greekfont}|\cr
+ |\catcode`\*=\active \grdelimiter\*|
+\enddisplay
+ where |\greekfont| has been bound to some Greek font or another such
+ as |ma55g12|. The macro |\grdelimiter| takes one parameter, an
+ active character (represented by a one-character control sequence),
+ and makes that character into a self-matching delimiter for Greek
+ mode (like |$|--|$| works for mathematics mode). Thus, `|*This is
+ Greek*|' produces `*This is Greek*'.
+
+\section{The alphabet}
+
+ The letters are transliterated as
+ follows:
+\table \hfil#\hfil&&\enspace\hfil#\hfil\cr
+ \gr a&\gr b&\gr g&\gr d&\gr e&\gr z&\gr h&\gr j&\gr i&\gr k&\gr
+ l&\gr m&\gr n&\gr x&\gr o&\gr p&\gr r&\gr ss&\gr c&\gr t&\gr
+ u&\gr f&\gr v& \gr q&\gr y&\gr w\cr
+ \tt a&\tt b&\tt g&\tt d&\tt e&\tt z&\tt h&\tt j&\tt i&\tt k&\tt
+ l&\tt m&\tt n&\tt x&\tt o&\tt p&\tt r&\tt s&\tt c&\tt t&\tt u&\tt
+ f&\tt v& \tt q&\tt y&\tt w\cr
+\noalign{\smallskip}%
+ \gr A&\gr B&\gr G&\gr D&\gr E&\gr Z&\gr H&\gr J&\gr I&\gr K&\gr
+ L&\gr M&\gr N&\gr X&\gr O&\gr P&\gr R&\gr S&\gr C&\gr T&\gr
+ U&\gr F&\gr V& \gr Q&\gr Y&\gr W\cr
+ \tt A&\tt B&\tt G&\tt D&\tt E&\tt Z&\tt H&\tt J&\tt I&\tt K&\tt
+ L&\tt M&\tt N&\tt X&\tt O&\tt P&\tt R&\tt S&\tt C&\tt T&\tt U&\tt
+ F&\tt V& \tt Q&\tt Y&\tt W\cr
+\endtable
+ The letter *C c* is \dfn{lunate sigma} (see below). The letter *V v*
+ is \dfn{digamma} (wau). I~put it next to *f* because I~don't know
+ where it belongs in the alphabet.
+
+ A lower case sigma `*s@*' at the end of a word (or followed by
+ punctuation) is automatically changed to the final form `*s*'
+ through \TeX's ligature mechanism.\note{Occasionally \TeX's notion
+ of word boundaries causes the wrong glyph to appear. There are two
+ special invisible glyphs that can be used to control this in obscure
+ circumstances. The so-called \dfn{compound word mark} (or cwm) acts
+ as a word-boundary in the middle of a word. It has code~32, so
+ `|as^^`a|' produces `*as^^`a*', for example. The \dfn{null glyph}
+ is invisible, but, because it is not a boundary character, it can be
+ used to prevent a ligature with a following word boundary. It has
+ code 64, so `|as@|' produces `*as@*'.}
+
+\section{Composite letters}
+
+ The marks that go above the letters are obtained with the
+ following characters, which go before the letter:
+\table \gr#\hfil&\quad#\hfil&\quad #\hfil& \quad *#*\hfil\cr
+\noalign{\hrule height 1pt \vskip1\jot}%
+ \omit Mark\hfil&\omit\quad Char\hfil&
+ Name&\omit\quad Name in \citeYannis\hfil\cr
+\noalign{\vskip\jot \hrule \vskip\jot}
+ <@& |<|& asper (rough, = h)& dase'ia\cr
+ >@& |>|& lenis (smooth)& yil'h\cr
+ "@& |"| (double quote)&
+ diaeresis& dialutik'a\cr
+ '@& |'| (quote)&
+ acute accent& >oxe'ia\cr
+ `@& |`|& grave accent& bare'ia\cr
+ \char126 @& |~|& circumflex& perispwm'enh\cr
+\noalign{\vskip1\jot \hrule height 1pt\smallskip}%
+\endtable
+ A breathing or diaeresis can be combined with an accent, thus
+ `|<~a|' for *<~a*, `|>'e|' for *>'e*.
+
+
+ The vowels *a*, *h* and *w* may have an iota beneath them, called
+ `subscript': *a|*, *h|*, *w|*. These are produced with a vertical
+ bar `_|_' after the letter in Greek mode: `_a|_' makes
+ *a|*, `_<a|_' makes `*<a|*', and so on.
+
+
+ As an example: `*>en >arq~h| >~hn <o l'ogos*' is generated with `_>en
+ >arq~h| >~hn <o l'ogos_'.
+
+% In old-style Greek, all vowels beginning a word require a breathing
+% -- but *u* may only have an asper (rough). In diphthongs (*ai*,
+% *ei*, *oi*, *ui*, *au*, *eu*, *hu*, *ou*, *wu*), breathings and
+% accents stand over the second letter: *a<i*, *o>u*. Double *rr*
+% used to be written *>r<r*.
+
+%\section{Apostrophe (sign of elision)}
+
+% The lenis is also used like an apostrophe, to mark the elision of
+% vowels at the end of a word when the next word starts with a vowel.
+% The Malvern-G fonts, like the Levy-derived fonts, also has a
+% separate apostrophe glyph, which can be set with `|''|' (two quote
+% characters) or `|'|' (one quote) at the end of a word. Thus you
+% have a choice of `|d>|' or `|d'|' (*d>* or *d'*).
+
+
+\section{Punctuation}
+
+ Here's a table of correspondences for punctuation:
+\table \hfil#\hfil&&\enspace\hfil#\hfil\cr
+ *.*&*,*&*;*&*:*&*!*&*?*&*''*&*((*&*))*\cr
+ |.|&|,|&|;|&|:|&|!|&|?|&|''|&|((|&|))|\cr
+\endtable
+ The apostrophe is also generated by a single single-quote at the end
+ of a word: `*d'*' can be generated by `|d'|'. There are also
+ digits, parentheses, brackets, hyphen, dashes, slash, per cent sign,
+ asterisk, plus and equals signs.
+
+\section{One-accent Greek}
+
+ The easiest way to write modern Greek is simply to use |'| for the
+ accent and otherwise to use |\begingreek|--|\endgreek| as before:
+ `*en arq'h hn o l'ogos*' is generated with `|en arq'h hn o l'ogos|'.
+
+ Malvern also has glyphs for a symmetrical accent (*\char3*) and
+ composite letters (such as *\char3 a*, *"\char3u*). The macro
+ |\monotoniko|\note{This macro is so named for compatibility with the
+ |rgr|/|mrgr| macros \citeYannis. It might usefully go in
+ |\everygreek|.} in Greek mode makes |'| an active character,
+ expanding to the symmetrical accent. Then `|En'w|' produces
+ `*En\char3w*'. In fact, the other accent characters |`| and |~| are
+ also made to substitute `*\char3*', and |<|, |>| and _|_ expand to
+ the null glyph, so that a text with all the breathings and accents
+ and be hacked into almost-correct one-accent Greek.\note{Again, for
+ compatibility with the |rgr|/|mrgr| macros. Because monosyllables
+ should not have accents at all in one-accent Greek, a complete
+ conversion from old-style to new-style requires changes to the
+ manuscript anyway, so the usefulness of this feature is debatable!}
+ For example, `_>En~w|_' becomes `*\monotoniko >En~w|*'.
+
+\section{Variant glyphs}
+
+ Sigma has a variant called lunate sigma, written *Cc*. These
+ letters can be obtained directly (produced by the character `|c|' in
+ the manuscript). So that a given text can be switched between the
+ two styles, there is also a macro |\grlunatesigma|, which redefines
+ `|s|' is as active character equivalent to `|c|'. Obviously this is
+ only useful when Greek mode is only used for plain texts, since it
+ prevents `|s|' from being used in control sequence names.
+
+ Similarly, there are two ways to write lower case phi: *f* and
+ *\char92 * (`|f|' and glyph~92). There is no difference in meaning
+ between *f* and *\char92 *; the choice of one or the other is only
+ made on aesthetic grounds. The macro |\grvarphi| redefines `|f|' as
+ an active character equivalent to `*\char92 *', in effect replacing
+ *f* with *\char92 *.
+
+ Normally these macros, if used, will go in |\everygreek|.
+
+%}}} typesetting
+\iffalse
+%{{{ background
+\section{Background}
+
+ This section is optional reading.
+
+\subsection{Development of the Levy-derived font families}
+
+ Silvio Levy's |gr| fonts \citeLevy\ used the \TeX~2 ligature system
+ to make *s* become *s@* when followed by a letter, and had glyphs
+ for almost all the composite letters.
+
+ Yannis Haralambous and Klaus Thull created a set of reduced
+ (128-glyph) fonts, for \TeX\ systems still unable to manage
+ 256-glyph fonts \citeYannis. These fonts (the |rgr| and |mrgr|
+ families) still used Levy's character programs. Because they could
+ not include glyphs for all the composite letters, many composite
+ letters had to be obtained with macros rather than ligatures. The
+ |mrgr| family is for new-style (one-accent) Greek.
+
+ Finally K.~J. Dryllerakis's Greek\TeX\ package (also called KDGreek)
+ \citeKD\ uses the Levy character programs again, but takes advantage
+ of the new ligature features of \TeX~3 to make *s@* become *s*
+ (without needing compound glyphs for every combination of *s@* with
+ a letter). The fonts are given names starting with |kd|.
+ Greek\TeX\ also includes format files for plain \TeX\ and \LaTeX,
+ transliteration programs and other useful things.
+
+\subsection{Designing Greek letters for Malvern}
+
+ My Malvern-G encoding is intended to be `ligature-compatible' with
+ Levy's and Dryllerakis's, meaning that `|<'a|||' will produce
+ `*<'a|*' in each of them, even though this is glyph~141 in
+ |grreg10|, 201 in |kdgr10| and some random number in |ma55g10|. The
+ punctuation characters have the same encoding.
+
+ Designing a sanserif Greek lower case alphabet (*alfabet*?) is tricky
+ because the lower case letters have a very cursive style, as if
+ hand-drawn with a brush by a scribe in a hurry -- which is pretty
+ much the opposite of most sanserif styles. I~made sketches (on
+ paper) of Greek letters forced into the same sorts of shapes as
+ other Malvern letters, and the results were uniformly horrid. The
+ original idea of Malvern was to make a humanist/geometric hybrid, so
+ I tried approaching it from the from the humanist end this time.
+
+%}}} background
+\fi
+%{{{ references
+
+\section{References}
+
+ Since I don't speak a word of Greek -- the only word I know is
+ *barbaroi* and I don't know how to spell it -- I have relied on
+ reading between the lines of the documentation for other systems for
+ typesetting Greek, including Hart's Rules \citeHarts.
+
+ CTAN is the Comprehensive \TeX\ Archive Network, a collection of FTP
+ sites (such as |ftp.tex.ac.uk|, under directory |tex-archive|).
+
+\beginthe{bib} \parskip=0pt \parindent=0pt
+ \the\bibliography
+ \par
+\endthe{bib}
+
+%}}} postamble
+
+%{{{ samples
+
+\section{Examples of text in Malvern 55 and 56}
+
+\iffalse
+ This quotation is used by Haralambous and Thull \citeYannis\ as an
+ example of the old-style accent-and-breathing system:
+%{{{ Popess Johanna
+
+\begin twocolgr
+ >En~w| <esp'eran tin`a >exantl'hsas t`a murol'ogi'a tou
+ >ekoim~ato <o Froum'entios >ep`i t~hs >'ammou t~hs paral'ias,
+ katab`as >ex o>uran~wn <o >ap'ostolos >eke~inos t~wn Sax'onwn
+ >'hnoixe di`a maqa'iras t`a st'hjh to~u koimwm'enou,
+ e>is'hgage to`us <iero`us dakt'ulous tou e>is t`hn >op`hn kai
+ >exag`wn t`hn kard`ian >eb'ujisen a>ut'hn e>is l'akkon pl'hrh
+ <'udatos, <'oper <hg'iasen prohgoum'enws. <H fl'egousa
+ >eke'inh kard'ia >'efrizen e>is t`o <'udwr <ws smap`is >ent`os
+ to~u thgan'iou, >afo~u d`e >ekr'uwsen, >'ejese p'alin a>ut`hn
+ <o <'agios e<is t`on t'opon ths ka`i kle'isas t`hn plhg`hn
+ >ep'estreyen e>is t`on >idik'on tou.
+
+ >'Etuq'e pote, >anagn~wst'a mou, n`a >apokoimhj~h|s m`e
+ >anup'oforon b~hqa, koim'wmenos n`a <idr'wsh|s ka`i >exupn'hsas
+ n`a e<urej~h|s >iatreum'enos? >Agn~wn <'oti e>~isai
+ kal`a >ano'igeis mhqanik~ws t`o st'oma, <'ina plhr'wsh|s e>is
+ t`on >epikat'araton b~hqa t`on sun'hjh f'oron. >All`a
+ p'oshn a>isj'anesai qar'an, m`h e<ur'iskwn e>is t`on l'arugga
+ t`o >oqlhp`on jhr'ion! O<'utw <'ama >'hnoixe ka`i <o
+ Froum'entios to`us >ofjalmo'us, <htoim'asjn n`a prosf'erh|
+ e>is t`hn >aq'ariston >Iw'annan t`hn sun'hjh dakr'uwn
+ spond'hn, >all`a par`a p~asan prosdok'ian o<i >ofjalmo'i
+ tou e<ur'ejhsan xhro`i ka'i n`a progeumat'ish| m~allon >`h
+ n`a kla'ush| >h|sj'aneto >'orexin met`a polu'hmeron nhste'ian
+ <o kal`os Benedekt~inos.
+\end twocolgr
+\rightline{\csc{Emmanouil Ro\"{\i}dis}, `The Popess Johanna (1896)'}
+\vskip 0pt plus \baselineskip
+
+%}}} Popess Johanna
+\fi
+
+ The following paragraph is set in 11-point Malvern~55 (11-point
+ Malvern has comprable x-height to 12-point Computer Modern). This
+ quotation is used as one of the examples in Levy's article
+ \citeLevy:
+\twocolgr
+ >All' >ako'usontai, >enper e>~u dok~h|s l'egein. t'ode d'e sou
+ >ene'ohsa <'ama l'egontos, ka`i pr`os >emaut`on skop~w; e>i <'oti
+ m'alist'a me E>uj'ufrwn did'axeien, <ws o<i jeo`i <'apantes t`on
+ toio~uton j'anaton <hgo~untai >'adikon e>~inai, t'i m~allon >eg`w
+ mem'ajhka par' E>uj'ufronos, t'i pot' >est`in t`o <'osi'on te ka`i
+ t`o >an'osion? jeomis`es m`en g`ar to~uto t`o >'epgon, <ws
+ >'eoiken, e>'in >'an; >all`a g`ar o>u to'utw| >ef'anh >'arti
+ <wrism'ena t`o <'osion ka`i m'h; t`o g`ar jeomis`es >`on ka`i
+ jeofil`es >ef'anh. <wste to'utou m`en >af'ihm'i se, >~w E>uj'ufron;
+ e>i bo'ulei, p'antes a>ut`o <hge'isjwn jeo`i >'adikon ka`i p'antes
+ miso'untwn. >all' >~ara to~uto n~un >epanorj'wmeja >en t~w| l'ogw|,
+ <ws <`o m`en p'antes o<i jeo`i mis~wsin, >an'osi'on >estin, <`o d'
+ >`an fil~wsin, <`osion; <`o d' >`an o<i m`en fil~wsin, o<i d`e
+ mis~wsin, o>ud'etera >`h amf'otera? >~ar' o<'utw bo'ulei <hm~in
+ <wr'isjai n~un per`i to~u <os'iou ka`i to~u >anos'iou?
+\endtwocolgr
+ \rightline{Plato, `Euthyphro'}
+\vskip 1\medskipamount plus \baselineskip
+
+
+ This quotation (similarly stolen) is in Malvern~56 and has
+ |\grvarphi| and |\grlunatesigma| in effect:
+
+\twocolgr \gri \grvarphi \grlunatesigma
+ T`h stigm`h to'uth ni'wjw p'oso bar'u ''nai t`o must'hrio t~hs
+ xomol'oghshs. <Ws t'wra, kane`is d`en x'erei p~ws p'erasa t`a du`o
+ qr'onia mou st`o <'Agion >'Oros. O<i f'iloi mou jarro~un p`ws p~hga
+ n`a d~w buzantin`a kon'ismata >`h >ap`o mustikop'ajeia n`a z'hsw
+ mi`a perasm'enh >epoq'h. Ka`i t'wra, n'a, ntr'epomai n`a mil'hsw.
+
+ P~ws n`a t`o p~w? Jumo~umai <'ena >anoixi'atiko deilin'o, po`u
+ kat'ebaina t`on Ta"'ugeto, mi`a xafnik`h j'uella m`e k'uklwse kont`a
+ sto'us Pentaulo'us. T'oso fober`os >anemos'ifounas, po`u >'epesa
+ katag~hs gi`a n`a m`hn gkremist~w. O<i >astrap`es m' >'exwsan
+ <olo~uje ki >'ekleisa t`a m'atia m`hn tuflwj~w, ka`i kat'aqama,
+ p'istoma, per'imena. <'Olo t`o pan'uyhlo boun`o >'etreme, ka`i du`o
+ >'elata d'ipla mou tsak'isthkan >ap' t`h m'esh ka`i br'onthxan
+ q'amou. >'Eniwja t`o jei'afi to~u kerauno~u st`on >a'era, ka`i
+ xafnik`a x'espase <h mp'ora, >'epesen <o >'anemos, ka`i qontr'es,
+ jerm'es st'ales broq`h qt'uphsan t`a dentr`a ka`i t`o q~wma. T`o
+ jum'ari, <h jro'umpa, t`o fask'omhlo, t`o flisko'uni, qtuphm'ena
+ >ap' t`o ner'o, t'inaxan t`is murwdi'es tous ki <'olh <h g~hs
+ m'urise.
+\endtwocolgr
+\rightline{\csc{Kazantzakis}, `Symposium'}
+\vskip 0pt plus \baselineskip
+
+%}}} samples
+\iffalse
+%{{{ table
+
+*\ntable*
+\smallskip \noindent
+ This is a working encoding, and will likely be different in future
+ versions.
+%}}} table
+\fi
+%{{{ 24-pt sample
+
+\bigbreak
+\moveleft\leftmargin \vbox{ \hsize=\bodywd
+\hrule height 1pt \bigskip
+\begingreek \biggr\baselineskip=30pt
+\centerline{((ABGDEZHJIKLMNXOPRSCTUFVQYW))}
+\centerline{](abgdezhjiklmnxoprss^^`ctuf\char92 vqyw)[}
+\centerline{=0123456789---\%\char42 +/--''!,:;?.-}
+\centerline{\char3 '@ `@ ~@ <@ <'@ <`@ <~@ >@ >'@ >`@ >~@ "@ "'@ "`@ "~@
+ "\char3 @}
+\endgreek
+\medskip\hrule height 1pt
+}
+%}}} 24-pt sample
+\bye
+%}}} Malvern Greek manual
+
+% Local variables:
+% fill-prefix: "\t"
+% fill-column: 76
+% fold-folded-p: t
+% End:
diff --git a/macros/plain/contrib/pdcmac/makefile.in b/macros/plain/contrib/pdcmac/makefile.in
new file mode 100644
index 0000000000..35bdae1907
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/makefile.in
@@ -0,0 +1,160 @@
+# Makefile for the PDCMAC package
+# Template for configure
+
+package = @package@
+
+# directory source code is in:
+srcdir = @srcdir@
+
+# directory for TeX macro files:
+texmf = @texmf@
+texdir = @texdir@
+docdir = @docdir@
+
+# End of configuration section
+########################################################################
+
+TEX = tex </dev/null
+DVIPS = dvips
+FIG2EPSF = $(srcdir)/fig2epsf
+ETAGS = $(srcdir)/dtxtags
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKDIR = $(srcdir)/pmkdir $(MKDIRFLAGS)
+MKDIRFLAGS = --mode=755
+
+code_files = pdccode.tex pdccode2.tex
+
+# The macro files are divided according to whether they have their own
+# DTX file, or come from pdcmisc.dtx or pdcsty.dtx
+self_files = pdcfmt2.dtx pdcfsel.dtx magrmac.dtx pdcoput5.dtx \
+ pdcadobe.dtx pdcl1maa.dtx maamac.dtx
+misc_files = pdcmigr.tex pdcimth.tex pdchyex.tex pdccmsub.tex
+sty_files = ma55lft.tex ma55doc.tex pdccmlft.tex pdccmdoc.tex\
+ pdcpsdoc.tex pdcpslft.tex pdcdoc.def pdclft.def
+macro_files = $(self_files:.dtx=.tex) $(misc_files) $(sty_files)
+
+misc_dtx = pdcmisc.dtx
+sty_dtx = pdcsty.dtx
+dtxfiles = $(self_files) $(sty_dtx) $(misc_dtx) pdccode.dtx
+dvifiles = $(dtxfiles:.dtx=.dvi) pdcguide.dvi
+
+figures = oput01.eps oput02.eps
+documents = pdcguide.tex magrman.tex copying.tex pdcmacvn.tex
+config_files = makefile.in configure
+miscscript = fig2epsf pmkdir pinstall dtxtags
+miscdoc = 00readme.txt install.txt copying.txt version.txt
+
+distfiles = $(miscdoc) pdcguide.dvi pdcmondo.tex \
+ $(code_files) $(dtxfiles) $(documents) $(config_files) \
+ $(figures) $(figures:.eps=.fig) \
+ $(miscscript) $(miscscript:=.1)
+
+########################################################################
+# Standard targets
+
+all: pdcguide.dvi $(macro_files)
+
+# Note. This target assumes either I can use GNU "install", or
+# an "install" compatible with it, or the "pinstall" shellscript supplied.
+install: all pdccode.dvi
+ test -d $(texdir) || $(MKDIR) $(texdir)
+ $(INSTALL_DATA) $(macro_files) $(texdir)
+ -test -d $(docdir) || $(MKDIR) $(docdir)
+ -$(INSTALL_DATA) $(dvifiles) $(figures) $(miscdoc) $(docdir)
+ -test -r news.txt && $(INSTALL_DATA) news.txt $(docdir)
+
+uninstall:
+ cd $(texdir); rm -f $(macro_files)
+ cd $(docdir) && rm -f $(dvifiles) $(figures) $(miscdoc)
+
+mostlyclean:
+ rm -f *.log *.ilg *.toc *.bak
+clean: mostlyclean
+ rm -f *.dvi *.aux *.idx $(macro_files) .misc.flag .sty.flag
+distclean: clean
+ rm -f makefile config.status TAGS
+realclean: distclean
+ rm -f *.ind $(figures) version.txt
+
+dist: $(distfiles)
+ sed -n '/pdcmacv/s/.*[^0-9.]\([0-9.]*\)[^0-9.].*$$/$(package)-\1/p' \
+ pdcmacvn.tex > .fn
+ rm -rf `cat .fn`
+ mkdir `cat .fn`
+ cp -p $(distfiles) `cat .fn`
+ -cp -p ChangeLog `cat .fn`/changes.txt
+ -cp -p news.txt `cat .fn`/news.txt
+ cd `cat .fn`; ls -Rl > contents.txt
+ tar -cf `cat .fn`.tar `cat .fn` && gzip -v9f `cat .fn`.tar
+ cd `cat .fn`; zip -9qrl ../`cat ../.fn`.zip *
+ rm -rf `cat .fn` .fn
+
+version.txt: $(dtxfiles) $(miscscript) pdcmacvn.tex
+ sed -e 's/\\def\\pdcmacversion{\([0-9]*\.[0-9]*\)}/* $(package) release \1 */' \
+ -e 's/\\def\\pdcmacversion{\([0-9]*\.[0-9]*\)\.\([0-9]*\)}/* $(package) release \1, patch level \2 */' \
+ pdcmacvn.tex > version.txt
+ date '+Version ID list generated %Y-%m-%d' >> version.txt
+ echo >> version.txt
+ ( grep -h 'rcs\$$Id' $(dtxfiles) | \
+ sed -e 's/^.*: \(.*\) \$$.*$$/\1/' -e 's/,v/ =/' | sort; echo; \
+ grep version= $(miscscript) configure | \
+ sed -e 's/:version=/ = /' -e 's/"//g' | sort ) | \
+ align_equals >> version.txt
+
+tagfiles = $(dtxfiles)
+TAGS: $(tagfiles) $(srcdir)/dtxtags
+ $(ETAGS) $(ETAGSFLAGS) $(tagfiles)
+
+########################################################################
+# Individual targets
+
+$(self_files) $(miscfiles): pdccode.tex
+$(sty_files): pdccode2.tex
+
+pdcguide.dvi magrman.dvi: $(macro_files)
+pdcguide.dvi: copying.tex pdcmacvn.tex
+
+pdcoput5.dvi pdcoput5.tex: $(figures)
+
+$(misc_files): .misc.flag
+.misc.flag: $(misc_dtx)
+ $(TEX) $(misc_dtx) && touch .misc.flag
+
+$(sty_files): .sty.flag
+.sty.flag: $(sty_dtx)
+ $(TEX) $(sty_dtx) && touch .sty.flag
+
+pdccode.dvi pdccode.tex: pdccode.dtx
+ $(TEX) pdccode.dtx
+ grep endinput tmp.tex && mv tmp.tex pdccode.tex
+
+pdcguide.ps: pdcguide.tex copying.tex $(macro_files)
+ echo '\let\usepsfonts! \input pdcguide' > tmp.tex
+ $(TEX) tmp
+ rm -f tmp.tex
+ $(DVIPS) $(DVIPSFLAGS) -o $@ tmp
+
+# A scratch file for doing tests:
+tryit.dvi: tryit.tex ma55lft.tex pdcl1maa.tex
+ $(TEX) tryit
+
+
+# rules for the configuration itself
+makefile: makefile.in config.status
+ sh config.status makefile
+config.status: $(srcdir)/configure
+ sh config.status --recheck --nocreate
+
+########################################################################
+# Implicit rules
+
+.SUFFIXES: .dtx .tex .dvi .ps .eps .fig
+.dtx.tex:
+ $(TEX) $<
+.tex.dvi:
+ $(TEX) $<
+.dvi.ps:
+ $(DVIPS) $(DVIPSFLAGS) $< -o $@
+.fig.eps:
+ $(FIG2EPSF) $< > $@
diff --git a/macros/plain/contrib/pdcmac/news.txt b/macros/plain/contrib/pdcmac/news.txt
new file mode 100644
index 0000000000..e6963fc96a
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/news.txt
@@ -0,0 +1,14 @@
+news.txt -*-text-*- Time-stamp: <pdc 1995-04-06>
+
+
+Changes to the PDCMAC package since Release 1.0
+
+* Support for Emacs tags added
+
+The shellscript "dtxtags" generates a tags file in the style of etags(1).
+
+* Bug fixes
+
+** Nested numbered lists will work beyond (e)
+** partial pages don't have spurious space added
+** Maamac.tex can be used on its own (it lacked a definition of \toksa)
diff --git a/macros/plain/contrib/pdcmac/oput01.eps b/macros/plain/contrib/pdcmac/oput01.eps
new file mode 100644
index 0000000000..c789902881
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/oput01.eps
@@ -0,0 +1,423 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: oput01.fig
+%%Creator: fig2dev
+%%CreationDate: Thu Apr 6 12:42:28 1995
+%%For: pdc@booth35.ecs (Damian Cugley,MC86,S.E.H.,N)
+%%BoundingBox: 0 0 424 499
+%%Pages: 1
+%%EndComments
+/mtrx matrix def
+/l {lineto} bind def
+/m {moveto} bind def
+/s {stroke} bind def
+/n {newpath} bind def
+/gs {gsave} bind def
+/gr {grestore} bind def
+/clp {closepath} bind def
+/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+4 -2 roll mul setrgbcolor} bind def
+/col0 {0 0 0 setrgbcolor} bind def
+/col1 {0 0 1 setrgbcolor} bind def
+/col2 {0 1 0 setrgbcolor} bind def
+/col3 {0 1 1 setrgbcolor} bind def
+/col4 {1 0 0 setrgbcolor} bind def
+/col5 {1 0 1 setrgbcolor} bind def
+/col6 {1 1 0 setrgbcolor} bind def
+/col7 {1 1 1 setrgbcolor} bind def
+%%EndProlog
+
+%%Page: 1 1
+
+0 setlinecap 0 setlinejoin
+-8 27 translate
+0.0 499.0 translate 0.900 -0.900 scale
+0.500 setlinewidth
+% Polyline
+n 89 329 m 224 329 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 329 m 224 317 l 89 317 l 89 329 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 299 m 224 299 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 299 m 224 287 l 89 287 l 89 299 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 284 m 224 284 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 284 m 224 272 l 89 272 l 89 284 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 269 m 224 269 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 269 m 224 257 l 89 257 l 89 269 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 254 m 224 254 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 254 m 224 242 l 89 242 l 89 254 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 239 m 224 239 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 239 m 224 227 l 89 227 l 89 239 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 224 m 224 224 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 224 m 224 212 l 89 212 l 89 224 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 209 m 224 209 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 209 m 224 197 l 89 197 l 89 209 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 194 m 224 194 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 194 m 224 182 l 89 182 l 89 194 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 179 m 224 179 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 179 m 224 167 l 89 167 l 89 179 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 164 m 224 164 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 164 m 224 152 l 89 152 l 89 164 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 149 m 224 149 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 149 m 224 137 l 89 137 l 89 149 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 134 m 224 134 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 134 m 224 122 l 89 122 l 89 134 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 119 m 224 119 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 119 m 224 107 l 89 107 l 89 119 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 104 m 224 104 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 104 m 224 92 l 89 92 l 89 104 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 89 89 m 224 89 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 224 89 m 224 77 l 89 77 l 89 89 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 149 m 374 149 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 149 m 374 137 l 239 137 l 239 149 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 134 m 374 134 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 134 m 374 122 l 239 122 l 239 134 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 119 m 374 119 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 119 m 374 107 l 239 107 l 239 119 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 104 m 374 104 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 104 m 374 92 l 239 92 l 239 104 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 89 m 374 89 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 89 m 374 77 l 239 77 l 239 89 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 224 m 374 224 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 224 m 374 212 l 239 212 l 239 224 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 209 m 374 209 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 209 m 374 197 l 239 197 l 239 209 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 194 m 374 194 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 194 m 374 182 l 239 182 l 239 194 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 179 m 374 179 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 179 m 374 167 l 239 167 l 239 179 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 164 m 374 164 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 164 m 374 152 l 239 152 l 239 164 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 299 m 374 299 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 299 m 374 287 l 239 287 l 239 299 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 284 m 374 284 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 284 m 374 272 l 239 272 l 239 284 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 269 m 374 269 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 269 m 374 257 l 239 257 l 239 269 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 254 m 374 254 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 254 m 374 242 l 239 242 l 239 254 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 239 m 374 239 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 239 m 374 227 l 239 227 l 239 239 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 374 m 374 374 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 374 m 374 362 l 239 362 l 239 374 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 359 m 374 359 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 359 m 374 347 l 239 347 l 239 359 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 344 m 374 344 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 344 m 374 332 l 239 332 l 239 344 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 329 m 374 329 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 329 m 374 317 l 239 317 l 239 329 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 314 m 374 314 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 314 m 374 302 l 239 302 l 239 314 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 449 m 374 449 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 449 m 374 437 l 239 437 l 239 449 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 434 m 374 434 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 434 m 374 422 l 239 422 l 239 434 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 419 m 374 419 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 419 m 374 407 l 239 407 l 239 419 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 404 m 374 404 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 404 m 374 392 l 239 392 l 239 404 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 389 m 374 389 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 389 m 374 377 l 239 377 l 239 389 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 494 m 374 494 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 494 m 374 482 l 239 482 l 239 494 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 479 m 374 479 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 479 m 374 467 l 239 467 l 239 479 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 239 464 m 374 464 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 374 464 m 374 452 l 239 452 l 239 464 l
+ clp gs 0.85 setgray fill gr
+% Polyline
+n 449 59 m 449 47 l 89 47 l 89 59 l
+ clp gs 0.80 setgray fill gr
+% Polyline
+n 449 524 m 449 512 l 89 512 l 89 524 l
+ clp gs 0.80 setgray fill gr
+0.500 setlinewidth
+n 254 344 m 254 344 l gs s gr
+ [4.000000] 0 setdash
+% Polyline
+n 449 494 m 449 77 l 389 77 l 389 494 l
+ clp gs s gr
+ [] 0 setdash
+ [4.000000] 0 setdash
+% Polyline
+n 299 494 m 299 77 l 239 77 l 239 494 l
+ clp gs s gr
+ [] 0 setdash
+ [4.000000] 0 setdash
+% Polyline
+n 149 494 m 149 77 l 89 77 l 89 494 l
+ clp gs s gr
+ [] 0 setdash
+ [4.000000] 0 setdash
+% Polyline
+n 374 494 m 374 77 l 314 77 l 314 494 l
+ clp gs s gr
+ [] 0 setdash
+ [4.000000] 0 setdash
+% Polyline
+n 224 494 m 224 77 l 164 77 l 164 494 l
+ clp gs s gr
+ [] 0 setdash
+% Polyline
+n 308 569 m 317 581 l 320 581 l gs s gr
+1.000 setlinewidth
+% Polyline
+n 479 554 m 479 29 l 59 29 l 59 554 l
+ clp gs s gr
+% Polyline
+n 89 308 m 224 308 l gs s gr
+0.500 setlinewidth
+% Polyline
+n 89 59 m 449 59 l gs s gr
+% Polyline
+n 29 344 m 83 308 l gs s gr
+n 75.234 310.774 m 83.000 308.000 l 77.453 314.102 l gs 2 setlinejoin s gr
+% Polyline
+n 269 563 m 269 569 l 344 569 l 344 563 l gs s gr
+% Polyline
+n 89 524 m 449 524 l gs s gr
+/Times-Roman findfont 12.00 scalefont setfont
+113 326 m
+gs 1 -1 scale (caption) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+146 215 m
+gs 1 -1 scale (column 0) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+311 218 m
+gs 1 -1 scale (column 1) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+275 53 m
+gs 1 -1 scale (headline) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+359 515 m
+gs 1 -1 scale (footline) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+323 584 m
+gs 1 -1 scale (grid cell) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+8 371 m
+gs 1 -1 scale (separator) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+8 359 m
+gs 1 -1 scale (caption) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+104 419 m
+gs 1 -1 scale (illustration) show gr
+/Times-Roman findfont 12.00 scalefont setfont
+419 404 m
+gs 1 -1 scale 90.0 rotate (illustration) show gr
+showpage
diff --git a/macros/plain/contrib/pdcmac/oput01.fig b/macros/plain/contrib/pdcmac/oput01.fig
new file mode 100644
index 0000000000..0f265533c4
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/oput01.fig
@@ -0,0 +1,323 @@
+#FIG 2.1
+80 2
+6 89 317 224 329
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 329 224 329 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 329 224 317 89 317 89 329 224 329 9999 9999
+-6
+6 89 227 224 299
+6 89 287 224 299
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 299 224 299 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 299 224 287 89 287 89 299 224 299 9999 9999
+-6
+6 89 272 224 284
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 284 224 284 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 284 224 272 89 272 89 284 224 284 9999 9999
+-6
+6 89 257 224 269
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 269 224 269 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 269 224 257 89 257 89 269 224 269 9999 9999
+-6
+6 89 242 224 254
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 254 224 254 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 254 224 242 89 242 89 254 224 254 9999 9999
+-6
+6 89 227 224 239
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 239 224 239 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 239 224 227 89 227 89 239 224 239 9999 9999
+-6
+-6
+6 89 152 224 224
+6 89 212 224 224
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 224 224 224 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 224 224 212 89 212 89 224 224 224 9999 9999
+-6
+6 89 197 224 209
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 209 224 209 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 209 224 197 89 197 89 209 224 209 9999 9999
+-6
+6 89 182 224 194
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 194 224 194 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 194 224 182 89 182 89 194 224 194 9999 9999
+-6
+6 89 167 224 179
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 179 224 179 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 179 224 167 89 167 89 179 224 179 9999 9999
+-6
+6 89 152 224 164
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 164 224 164 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 164 224 152 89 152 89 164 224 164 9999 9999
+-6
+-6
+6 89 77 224 149
+6 89 137 224 149
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 149 224 149 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 149 224 137 89 137 89 149 224 149 9999 9999
+-6
+6 89 122 224 134
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 134 224 134 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 134 224 122 89 122 89 134 224 134 9999 9999
+-6
+6 89 107 224 119
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 119 224 119 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 119 224 107 89 107 89 119 224 119 9999 9999
+-6
+6 89 92 224 104
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 104 224 104 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 104 224 92 89 92 89 104 224 104 9999 9999
+-6
+6 89 77 224 89
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 89 89 224 89 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 224 89 224 77 89 77 89 89 224 89 9999 9999
+-6
+-6
+6 239 77 374 149
+6 239 137 374 149
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 149 374 149 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 149 374 137 239 137 239 149 374 149 9999 9999
+-6
+6 239 122 374 134
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 134 374 134 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 134 374 122 239 122 239 134 374 134 9999 9999
+-6
+6 239 107 374 119
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 119 374 119 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 119 374 107 239 107 239 119 374 119 9999 9999
+-6
+6 239 92 374 104
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 104 374 104 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 104 374 92 239 92 239 104 374 104 9999 9999
+-6
+6 239 77 374 89
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 89 374 89 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 89 374 77 239 77 239 89 374 89 9999 9999
+-6
+-6
+6 239 152 374 224
+6 239 212 374 224
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 224 374 224 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 224 374 212 239 212 239 224 374 224 9999 9999
+-6
+6 239 197 374 209
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 209 374 209 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 209 374 197 239 197 239 209 374 209 9999 9999
+-6
+6 239 182 374 194
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 194 374 194 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 194 374 182 239 182 239 194 374 194 9999 9999
+-6
+6 239 167 374 179
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 179 374 179 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 179 374 167 239 167 239 179 374 179 9999 9999
+-6
+6 239 152 374 164
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 164 374 164 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 164 374 152 239 152 239 164 374 164 9999 9999
+-6
+-6
+6 239 227 374 299
+6 239 287 374 299
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 299 374 299 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 299 374 287 239 287 239 299 374 299 9999 9999
+-6
+6 239 272 374 284
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 284 374 284 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 284 374 272 239 272 239 284 374 284 9999 9999
+-6
+6 239 257 374 269
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 269 374 269 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 269 374 257 239 257 239 269 374 269 9999 9999
+-6
+6 239 242 374 254
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 254 374 254 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 254 374 242 239 242 239 254 374 254 9999 9999
+-6
+6 239 227 374 239
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 239 374 239 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 239 374 227 239 227 239 239 374 239 9999 9999
+-6
+-6
+6 239 302 374 374
+6 239 362 374 374
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 374 374 374 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 374 374 362 239 362 239 374 374 374 9999 9999
+-6
+6 239 347 374 359
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 359 374 359 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 359 374 347 239 347 239 359 374 359 9999 9999
+-6
+6 239 332 374 344
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 344 374 344 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 344 374 332 239 332 239 344 374 344 9999 9999
+-6
+6 239 317 374 329
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 329 374 329 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 329 374 317 239 317 239 329 374 329 9999 9999
+-6
+6 239 302 374 314
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 314 374 314 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 314 374 302 239 302 239 314 374 314 9999 9999
+-6
+-6
+6 239 377 374 449
+6 239 437 374 449
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 449 374 449 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 449 374 437 239 437 239 449 374 449 9999 9999
+-6
+6 239 422 374 434
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 434 374 434 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 434 374 422 239 422 239 434 374 434 9999 9999
+-6
+6 239 407 374 419
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 419 374 419 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 419 374 407 239 407 239 419 374 419 9999 9999
+-6
+6 239 392 374 404
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 404 374 404 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 404 374 392 239 392 239 404 374 404 9999 9999
+-6
+6 239 377 374 389
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 389 374 389 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 389 374 377 239 377 239 389 374 389 9999 9999
+-6
+-6
+6 239 482 374 494
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 494 374 494 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 494 374 482 239 482 239 494 374 494 9999 9999
+-6
+6 239 467 374 479
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 479 374 479 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 479 374 467 239 467 239 479 374 479 9999 9999
+-6
+6 239 452 374 464
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 239 464 374 464 9999 9999
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 374 464 374 452 239 452 239 464 374 464 9999 9999
+-6
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 89 59 449 59 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 89 524 449 524 9999 9999
+2 2 0 2 -1 0 0 0 0.000 0 0 0
+ 479 554 479 29 59 29 59 554 479 554 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 254 344 9999 9999
+2 1 0 2 -1 0 0 0 0.000 -1 0 0
+ 89 308 224 308 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 269 563 269 569 344 569 344 563 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 308 569 317 581 320 581 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 29 344 83 308 9999 9999
+2 2 1 1 -1 5 0 0 4.000 0 0 0
+ 224 494 224 77 164 77 164 494 224 494 9999 9999
+2 2 1 1 -1 5 0 0 4.000 0 0 0
+ 299 494 299 77 239 77 239 494 299 494 9999 9999
+2 2 1 1 -1 5 0 0 4.000 0 0 0
+ 374 494 374 77 314 77 314 494 374 494 9999 9999
+2 2 0 0 -1 10 0 5 0.000 0 0 0
+ 449 59 449 47 89 47 89 59 449 59 9999 9999
+2 2 0 0 -1 10 0 5 0.000 0 0 0
+ 449 524 449 512 89 512 89 524 449 524 9999 9999
+2 2 1 1 -1 5 0 0 4.000 0 0 0
+ 449 494 449 77 389 77 389 494 449 494 9999 9999
+2 2 1 1 -1 5 0 0 4.000 0 0 0
+ 149 494 149 77 89 77 89 494 149 494 9999 9999
+4 0 0 12 0 -1 0 0.00000 4 15 36 113 326 caption
+4 0 0 12 0 -1 0 0.00000 4 15 44 146 215 column 0
+4 0 0 12 0 -1 0 0.00000 4 15 44 311 218 column 1
+4 0 0 12 0 -1 0 0.00000 4 15 42 275 53 headline
+4 0 0 12 0 -1 0 0.00000 4 15 37 359 515 footline
+4 0 0 12 0 -1 0 0.00000 4 15 39 323 584 grid cell
+4 0 0 12 0 -1 0 0.00000 4 15 48 8 371 separator
+4 0 0 12 0 -1 0 0.00000 4 15 36 8 359 caption
+4 0 0 12 0 -1 0 0.00000 4 15 54 104 419 illustration
+4 0 0 12 0 -1 0 1.57080 4 15 54 419 404 illustration
diff --git a/macros/plain/contrib/pdcmac/oput02.eps b/macros/plain/contrib/pdcmac/oput02.eps
new file mode 100644
index 0000000000..0de9a38e5e
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/oput02.eps
@@ -0,0 +1,404 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: oput02.fig
+%%Creator: fig2dev
+%%CreationDate: Thu Apr 6 12:42:30 1995
+%%For: pdc@booth35.ecs (Damian Cugley,MC86,S.E.H.,N)
+%%BoundingBox: 0 0 443 499
+%%Pages: 1
+%%EndComments
+/mtrx matrix def
+/l {lineto} bind def
+/m {moveto} bind def
+/s {stroke} bind def
+/n {newpath} bind def
+/gs {gsave} bind def
+/gr {grestore} bind def
+/clp {closepath} bind def
+/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+4 -2 roll mul setrgbcolor} bind def
+/col0 {0 0 0 setrgbcolor} bind def
+/col1 {0 0 1 setrgbcolor} bind def
+/col2 {0 1 0 setrgbcolor} bind def
+/col3 {0 1 1 setrgbcolor} bind def
+/col4 {1 0 0 setrgbcolor} bind def
+/col5 {1 0 1 setrgbcolor} bind def
+/col6 {1 1 0 setrgbcolor} bind def
+/col7 {1 1 1 setrgbcolor} bind def
+%%EndProlog
+
+%%Page: 1 1
+
+0 setlinecap 0 setlinejoin
+-54 27 translate
+0.0 499.0 translate 0.900 -0.900 scale
+0.000 setlinewidth
+% Polyline
+n 254 329 m 254 317 l 179 317 l 179 329 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 329 m 254 329 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 344 m 254 332 l 179 332 l 179 344 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 344 m 254 344 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 299 m 254 287 l 179 287 l 179 299 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 299 m 254 299 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 284 m 254 272 l 179 272 l 179 284 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 284 m 254 284 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 269 m 254 257 l 179 257 l 179 269 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 269 m 254 269 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 254 m 254 242 l 179 242 l 179 254 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 254 m 254 254 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 239 m 254 227 l 179 227 l 179 239 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 239 m 254 239 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 224 m 254 212 l 179 212 l 179 224 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 224 m 254 224 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 209 m 254 197 l 179 197 l 179 209 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 209 m 254 209 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 194 m 254 182 l 179 182 l 179 194 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 194 m 254 194 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 254 179 m 254 167 l 179 167 l 179 179 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 179 179 m 254 179 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 359 m 344 347 l 269 347 l 269 359 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 359 m 344 359 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 329 m 344 317 l 269 317 l 269 329 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 329 m 344 329 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 344 m 344 332 l 269 332 l 269 344 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 344 m 344 344 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 299 m 344 287 l 269 287 l 269 299 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 299 m 344 299 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 284 m 344 272 l 269 272 l 269 284 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 284 m 344 284 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 269 m 344 257 l 269 257 l 269 269 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 269 m 344 269 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 254 m 344 242 l 269 242 l 269 254 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 254 m 344 254 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 239 m 344 227 l 269 227 l 269 239 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 239 m 344 239 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 224 m 344 212 l 269 212 l 269 224 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 224 m 344 224 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 209 m 344 197 l 269 197 l 269 209 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 209 m 344 209 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 194 m 344 182 l 269 182 l 269 194 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 194 m 344 194 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 179 m 344 167 l 269 167 l 269 179 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 179 m 344 179 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 374 m 344 362 l 269 362 l 269 374 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 374 m 344 374 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 389 m 344 377 l 269 377 l 269 389 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 389 m 344 389 l gs s gr
+0.000 setlinewidth
+% Polyline
+n 344 314 m 344 302 l 269 302 l 269 314 l
+ clp gs 0.85 setgray fill gr
+0.500 setlinewidth
+% Polyline
+n 269 314 m 344 314 l gs s gr
+% Polyline
+n 254 389 m 254 164 l 179 164 l 179 389 l
+ clp gs s gr
+ [4.000000] 0 setdash
+% Polyline
+n 164 389 m 164 164 l 89 164 l 89 389 l
+ clp gs s gr
+ [] 0 setdash
+% Polyline
+n 344 389 m 344 164 l 269 164 l 269 389 l
+ clp gs s gr
+ [4.000000] 0 setdash
+% Polyline
+n 434 164 m 434 74 l 89 74 l 89 164 l
+ clp gs s gr
+ [] 0 setdash
+0.000 setlinewidth
+% Polyline
+n 434 59 m 434 47 l 89 47 l 89 59 l
+ clp gs 0.80 setgray fill gr
+% Polyline
+n 434 524 m 434 512 l 89 512 l 89 524 l
+ clp gs 0.80 setgray fill gr
+0.500 setlinewidth
+ [4.000000] 0 setdash
+% Polyline
+n 434 389 m 434 164 l 359 164 l 359 389 l
+ clp gs s gr
+ [] 0 setdash
+n 97.000 571.000 m 89.000 569.000 l 97.000 567.000 l gs 2 setlinejoin s gr
+% Polyline
+n 89 569 m 434 569 l gs s gr
+n 426.000 567.000 m 434.000 569.000 l 426.000 571.000 l gs 2 setlinejoin s gr
+n 522.000 502.000 m 524.000 494.000 l 526.000 502.000 l gs 2 setlinejoin s gr
+% Polyline
+n 524 494 m 524 554 l gs s gr
+n 526.000 546.000 m 524.000 554.000 l 522.000 546.000 l gs 2 setlinejoin s gr
+n 537.000 37.000 m 539.000 29.000 l 541.000 37.000 l gs 2 setlinejoin s gr
+% Polyline
+n 539 29 m 539 554 l gs s gr
+n 541.000 546.000 m 539.000 554.000 l 537.000 546.000 l gs 2 setlinejoin s gr
+n 67.000 586.000 m 59.000 584.000 l 67.000 582.000 l gs 2 setlinejoin s gr
+% Polyline
+n 59 584 m 479 584 l gs s gr
+n 471.000 582.000 m 479.000 584.000 l 471.000 586.000 l gs 2 setlinejoin s gr
+n 522.000 37.000 m 524.000 29.000 l 526.000 37.000 l gs 2 setlinejoin s gr
+% Polyline
+n 524 29 m 524 74 l gs s gr
+n 526.000 66.000 m 524.000 74.000 l 522.000 66.000 l gs 2 setlinejoin s gr
+ [4.000000] 0 setdash
+% Polyline
+n 425 89 m 515 89 l gs s gr
+ [] 0 setdash
+% Polyline
+n 449 59 m 449 74 l gs s gr
+n 451.000 66.000 m 449.000 74.000 l 447.000 66.000 l gs 2 setlinejoin s gr
+% Polyline
+n 449 104 m 449 89 l gs s gr
+n 447.000 97.000 m 449.000 89.000 l 451.000 97.000 l gs 2 setlinejoin s gr
+% Polyline
+n 329 158 m 344 158 l gs s gr
+n 336.000 156.000 m 344.000 158.000 l 336.000 160.000 l gs 2 setlinejoin s gr
+% Polyline
+n 374 158 m 359 158 l gs s gr
+n 367.000 160.000 m 359.000 158.000 l 367.000 156.000 l gs 2 setlinejoin s gr
+n 507.000 67.000 m 509.000 59.000 l 511.000 67.000 l gs 2 setlinejoin s gr
+% Polyline
+n 509 59 m 509 89 l gs s gr
+n 511.000 81.000 m 509.000 89.000 l 507.000 81.000 l gs 2 setlinejoin s gr
+n 492.000 502.000 m 494.000 494.000 l 496.000 502.000 l gs 2 setlinejoin s gr
+% Polyline
+n 494 494 m 494 527 l gs s gr
+n 496.000 519.000 m 494.000 527.000 l 492.000 519.000 l gs 2 setlinejoin s gr
+ [4.000000] 0 setdash
+% Polyline
+n 431 59 m 515 59 l gs s gr
+ [] 0 setdash
+n 492.000 82.000 m 494.000 74.000 l 496.000 82.000 l gs 2 setlinejoin s gr
+% Polyline
+n 494 74 m 494 494 l gs s gr
+n 496.000 486.000 m 494.000 494.000 l 492.000 486.000 l gs 2 setlinejoin s gr
+% Polyline
+n 89 524 m 434 524 l gs s gr
+% Polyline
+n 89 59 m 434 59 l gs s gr
+1.000 setlinewidth
+% Polyline
+n 479 554 m 479 29 l 59 29 l 59 554 l
+ clp gs s gr
+0.500 setlinewidth
+% Polyline
+n 155 284 m 155 299 l gs s gr
+n 157.000 291.000 m 155.000 299.000 l 153.000 291.000 l gs 2 setlinejoin s gr
+% Polyline
+n 155 329 m 155 314 l gs s gr
+n 153.000 322.000 m 155.000 314.000 l 157.000 322.000 l gs 2 setlinejoin s gr
+n 187.000 160.000 m 179.000 158.000 l 187.000 156.000 l gs 2 setlinejoin s gr
+% Polyline
+n 179 158 m 254 158 l gs s gr
+n 246.000 156.000 m 254.000 158.000 l 246.000 160.000 l gs 2 setlinejoin s gr
+n 363.000 172.000 m 365.000 164.000 l 367.000 172.000 l gs 2 setlinejoin s gr
+% Polyline
+n 365 164 m 365 389 l gs s gr
+n 367.000 381.000 m 365.000 389.000 l 363.000 381.000 l gs 2 setlinejoin s gr
+1.000 setlinewidth
+% Polyline
+n 170 164 m 170 389 l gs s gr
+% Polyline
+n 179 308 m 254 308 l gs s gr
+% Polyline
+n 260 164 m 260 389 l gs s gr
+% Polyline
+n 350 164 m 350 389 l gs s gr
+0.500 setlinewidth
+ [4.000000] 0 setdash
+% Polyline
+n 89 389 m 89 494 l 434 494 l 434 389 l
+ clp gs s gr
+ [] 0 setdash
+/Times-Italic findfont 10.00 scalefont setfont
+269 566 m
+gs 1 -1 scale (bodywd) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+269 581 m
+gs 1 -1 scale (paperwd) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+521 524 m
+gs 1 -1 scale 90.0 rotate (botmg) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+491 509 m
+gs 1 -1 scale 90.0 rotate (footlineskip) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+491 284 m
+gs 1 -1 scale 90.0 rotate (bodyht) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+536 284 m
+gs 1 -1 scale 90.0 rotate (paperht) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+506 74 m
+gs 1 -1 scale 90.0 rotate (headlineskip) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+521 53 m
+gs 1 -1 scale 90.0 rotate (topmg) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+449 86 m
+gs 1 -1 scale (topskip) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+350 155 m
+gs 1 -1 scale (colsep) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+269 119 m
+gs 1 -1 scale (topbox) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+269 464 m
+gs 1 -1 scale (botbox) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+269 518 m
+gs 1 -1 scale (footline) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+254 56 m
+gs 1 -1 scale (headline) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+218 266 m
+gs 1 -1 scale (column 0) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+305 266 m
+gs 1 -1 scale (column 1) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+125 221 m
+gs 1 -1 scale (leftbox) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+218 338 m
+gs 1 -1 scale (caption) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+215 374 m
+gs 1 -1 scale (illo) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+215 152 m
+gs 1 -1 scale (colwd) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+374 284 m
+gs 1 -1 scale 90.0 rotate (colht) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+407 251 m
+gs 1 -1 scale (rightbox) dup stringwidth pop 2 div neg 0 rmoveto show gr
+/Times-Italic findfont 10.00 scalefont setfont
+152 308 m
+gs 1 -1 scale 90.0 rotate (capsep) dup stringwidth pop 2 div neg 0 rmoveto show gr
+showpage
diff --git a/macros/plain/contrib/pdcmac/oput02.fig b/macros/plain/contrib/pdcmac/oput02.fig
new file mode 100644
index 0000000000..6f34c0811b
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/oput02.fig
@@ -0,0 +1,273 @@
+#FIG 2.1
+80 2
+6 179 317 254 329
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 329 254 317 179 317 179 329 254 329 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 329 254 329 9999 9999
+-6
+6 179 332 254 344
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 344 254 332 179 332 179 344 254 344 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 344 254 344 9999 9999
+-6
+6 179 287 254 299
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 299 254 287 179 287 179 299 254 299 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 299 254 299 9999 9999
+-6
+6 179 272 254 284
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 284 254 272 179 272 179 284 254 284 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 284 254 284 9999 9999
+-6
+6 179 257 254 269
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 269 254 257 179 257 179 269 254 269 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 269 254 269 9999 9999
+-6
+6 179 242 254 254
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 254 254 242 179 242 179 254 254 254 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 254 254 254 9999 9999
+-6
+6 179 227 254 239
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 239 254 227 179 227 179 239 254 239 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 239 254 239 9999 9999
+-6
+6 179 212 254 224
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 224 254 212 179 212 179 224 254 224 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 224 254 224 9999 9999
+-6
+6 179 197 254 209
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 209 254 197 179 197 179 209 254 209 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 209 254 209 9999 9999
+-6
+6 179 182 254 194
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 194 254 182 179 182 179 194 254 194 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 194 254 194 9999 9999
+-6
+6 179 167 254 179
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 254 179 254 167 179 167 179 179 254 179 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 179 179 254 179 9999 9999
+-6
+6 269 347 344 359
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 359 344 347 269 347 269 359 344 359 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 359 344 359 9999 9999
+-6
+6 269 317 344 329
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 329 344 317 269 317 269 329 344 329 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 329 344 329 9999 9999
+-6
+6 269 332 344 344
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 344 344 332 269 332 269 344 344 344 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 344 344 344 9999 9999
+-6
+6 269 287 344 299
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 299 344 287 269 287 269 299 344 299 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 299 344 299 9999 9999
+-6
+6 269 272 344 284
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 284 344 272 269 272 269 284 344 284 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 284 344 284 9999 9999
+-6
+6 269 257 344 269
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 269 344 257 269 257 269 269 344 269 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 269 344 269 9999 9999
+-6
+6 269 242 344 254
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 254 344 242 269 242 269 254 344 254 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 254 344 254 9999 9999
+-6
+6 269 227 344 239
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 239 344 227 269 227 269 239 344 239 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 239 344 239 9999 9999
+-6
+6 269 212 344 224
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 224 344 212 269 212 269 224 344 224 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 224 344 224 9999 9999
+-6
+6 269 197 344 209
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 209 344 197 269 197 269 209 344 209 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 209 344 209 9999 9999
+-6
+6 269 182 344 194
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 194 344 182 269 182 269 194 344 194 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 194 344 194 9999 9999
+-6
+6 269 167 344 179
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 179 344 167 269 167 269 179 344 179 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 179 344 179 9999 9999
+-6
+6 269 362 344 374
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 374 344 362 269 362 269 374 344 374 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 374 344 374 9999 9999
+-6
+6 269 377 344 389
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 389 344 377 269 377 269 389 344 389 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 389 344 389 9999 9999
+-6
+6 269 302 344 314
+2 2 0 0 -1 10 0 4 0.000 0 0 0
+ 344 314 344 302 269 302 269 314 344 314 9999 9999
+2 1 0 1 -1 10 0 0 0.000 -1 0 0
+ 269 314 344 314 9999 9999
+-6
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 89 59 434 59 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 0 0
+ 89 524 434 524 9999 9999
+2 2 0 2 -1 0 0 0 0.000 0 0 0
+ 479 554 479 29 59 29 59 554 479 554 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 494 74 494 494 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 494 494 494 527 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 509 59 509 89 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 524 29 524 74 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 524 494 524 554 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 539 29 539 554 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 89 569 434 569 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 59 584 479 584 9999 9999
+2 1 1 1 -1 0 0 0 4.000 -1 0 0
+ 425 89 515 89 9999 9999
+2 1 1 1 -1 0 0 0 4.000 -1 0 0
+ 431 59 515 59 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 449 59 449 74 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 449 104 449 89 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 329 158 344 158 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 374 158 359 158 9999 9999
+2 2 0 0 -1 10 0 5 0.000 0 0 0
+ 434 524 434 512 89 512 89 524 434 524 9999 9999
+2 2 0 0 -1 10 0 5 0.000 0 0 0
+ 434 59 434 47 89 47 89 59 434 59 9999 9999
+2 2 1 1 -1 10 0 0 4.000 0 0 0
+ 434 164 434 74 89 74 89 164 434 164 9999 9999
+2 2 1 1 -1 10 0 0 4.000 0 0 0
+ 434 389 434 164 359 164 359 389 434 389 9999 9999
+2 2 1 1 -1 10 0 0 4.000 0 0 0
+ 164 389 164 164 89 164 89 389 164 389 9999 9999
+2 2 0 1 -1 10 0 0 0.000 0 0 0
+ 254 389 254 164 179 164 179 389 254 389 9999 9999
+2 2 0 1 -1 10 0 0 0.000 0 0 0
+ 344 389 344 164 269 164 269 389 344 389 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 155 284 155 299 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 0
+ 0 0 1.000 4.000 8.000
+ 155 329 155 314 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 179 158 254 158 9999 9999
+2 1 0 1 -1 0 0 0 0.000 -1 1 1
+ 0 0 1.000 4.000 8.000
+ 0 0 1.000 4.000 8.000
+ 365 164 365 389 9999 9999
+2 1 0 2 -1 0 0 0 0.000 -1 0 0
+ 170 164 170 389 9999 9999
+2 1 0 2 -1 0 0 0 0.000 -1 0 0
+ 179 308 254 308 9999 9999
+2 1 0 2 -1 0 0 0 0.000 -1 0 0
+ 260 164 260 389 9999 9999
+2 1 0 2 -1 0 0 0 0.000 -1 0 0
+ 350 164 350 389 9999 9999
+2 2 1 1 -1 0 0 0 4.000 0 0 0
+ 89 389 89 494 434 494 434 389 89 389 9999 9999
+4 1 1 10 0 -1 0 0.00000 4 13 32 269 566 bodywd
+4 1 1 10 0 -1 0 0.00000 4 13 36 269 581 paperwd
+4 1 1 10 0 -1 0 1.57080 4 13 24 521 524 botmg
+4 1 1 10 0 -1 0 1.57080 4 13 49 491 509 footlineskip
+4 1 1 10 0 -1 0 1.57080 4 13 28 491 284 bodyht
+4 1 1 10 0 -1 0 1.57080 4 13 32 536 284 paperht
+4 1 1 10 0 -1 0 1.57080 4 13 53 506 74 headlineskip
+4 1 1 10 0 -1 0 1.57080 4 13 24 521 53 topmg
+4 1 1 10 0 -1 0 0.00000 4 13 30 449 86 topskip
+4 1 1 10 0 -1 0 0.00000 4 13 27 350 155 colsep
+4 1 1 10 0 -1 0 0.00000 4 13 27 269 119 topbox
+4 1 1 10 0 -1 0 0.00000 4 13 27 269 464 botbox
+4 1 1 10 0 -1 0 0.00000 4 13 32 269 518 footline
+4 1 1 10 0 -1 0 0.00000 4 13 36 254 56 headline
+4 1 1 10 0 -1 0 0.00000 4 13 37 218 266 column 0
+4 1 1 10 0 -1 0 0.00000 4 13 37 305 266 column 1
+4 1 1 10 0 -1 0 0.00000 4 13 28 125 221 leftbox
+4 1 1 10 0 -1 0 0.00000 4 13 31 218 338 caption
+4 1 1 10 0 -1 0 0.00000 4 13 14 215 374 illo
+4 1 1 10 0 -1 0 0.00000 4 13 25 215 152 colwd
+4 1 1 10 0 -1 0 1.57080 4 13 21 374 284 colht
+4 1 1 10 0 -1 0 0.00000 4 13 33 407 251 rightbox
+4 1 1 10 0 -1 0 1.57080 4 13 29 152 308 capsep
diff --git a/macros/plain/contrib/pdcmac/pdcadobe.dtx b/macros/plain/contrib/pdcmac/pdcadobe.dtx
new file mode 100644
index 0000000000..693838a000
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcadobe.dtx
@@ -0,0 +1,609 @@
+% pdcadobe.dtx -- documentation & source for pdcadobe.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCADOBE -- Formatting Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcadobe.dtx",
+%%% version = "$Revision: 1.3 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/30 16:07:31 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file pdcadobe.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1995 P. Damian Cugley",
+%%% 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.",
+%%% notice = "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.",
+%%% notice = "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.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcadobe
+%{{{ preamble
+\relax
+\input pdccode
+
+\document
+\rcs$Id: pdcadobe.dtx,v 1.3 1995/03/30 16:07:31 pdc Exp $\endrcs
+
+\codefile{pdcadobe.tex}
+%}}} preamble
+%{{{ introduction
+
+\author{P. Damian Cugley}
+\title{PDCAdobe---Macros for using Adobe fonts}
+\section{Introduction}
+
+ This document describes |pdcadobe.tex|, a collection of macros
+ for using Adobe's Standard Roman character set, via DVIPS's
+ variation on the \TeX\ Text encoding.
+
+\notepar
+ You will need to use a different strategy if your PostScript
+ fonts adhere strictly to the \TeX\ Text conventions (the
+ conventions of Computer Modern Roman, described in {\it\TeX
+ book}\/ Appendix~F, and called OT1 by the \LaTeX~3 team), such
+ as the fonts generated with Fontinst.
+\endnotepar
+
+\subsec{New text symbols}
+
+ The new characters now available in text are:
+$$\halign{\indent\tt\char`\\#1\hfil&\quad#\hfil\cr
+ quotesingle& typewriter-style apostrophe ({\tt\char"0D })\cr
+ quotedouble& typewriter-style double apostrophe ({\tt"})\cr
+ asciicircum& ASCII circumflex\cr
+ asciitilde& ASCII tilde\cr
+}$$
+
+
+\subsec{Use of the Symbol font}
+
+ The assumption is that one of the resons for using PostScript
+ fonts is that, if you stick to the `Adobe~35', the resulting
+ PostScript files are much smaller because no font bitmaps need
+ to be downloaded. On this assumption, Adobe's Symbol font is
+ used whenever possible, even when the Computer Modern symbol is
+ arguably prettier.
+
+ The Symbol font will need to have its own maths family, which by
+ convention this file expects to find defined as |\asyfam|.
+
+\subsec{Composite letters}
+
+\setbox0=\hbox{accent}
+\edef\\{\vrule height\the\ht0 depth\the\dp0 width\the\wd0 \relax }
+
+ Composite letters are those made from some base letter and a
+ {\it mark}, for example {\it\'e}, {\it\"u}.\footnote*{`Composite
+ letters' is a euphemism for what English speakers usually refer
+ to as `\\ed letters', since the word `\\' tends to provoke
+ lectures to the effect that composite letters are not considered
+ to be `\\ed' in many of the lanuages in which they are used.}
+ In the Adobe Standard Roman character set, and hence in
+ |afm2tfm|'s encoding, the composite letters of ISO 8859--1 are
+ included as separate glyphs. These glyphs are accessed using
+ ligatures between mark glyphs and base letters (so that |^^13e|
+ in the manuscript file produces `\'e'). Unfortunately,
+ exploiting this is tricky if we also want to allow for composite
+ glyphs {\it not} included in the PostScript fonts.
+
+ The approach taken in these definitions is that \TeX's composite
+ letter commands (|\'|, |\"|, and friends) are left unchanged, so
+ that `|\'e|' works through \TeX's |\|\\ command. The magic
+ glyphs are available as commands with names like |\acuteglyph|
+ or via the Latin-1 special symbols, so that `|\acuteglyph e|' or
+ `|^^b4e|' (which might liik like `{\tt\char"13 e}' on the screen
+ if your computer uses Latin-1) produces `\'e' as a single glyph
+ (which might mean tha mark is better aligned). Finally, the
+ Latin-1 composite letters generate the single glyphs vial
+ ligatures, so that `|^^e9|' (which may well look like `{\tt\'e}'
+ on the screen) expands to `|\acuteglyph e|' and hence `\'e'.
+
+\subsec{About this document}
+
+ The definitions file and the printed documentation are both in
+ |pdcadobe.dtx|, a `documented \TeX\ macros' file\footnote*{The
+ \LaTeX~2e distribution uses files with the `|dtx|' suffix for
+ similar purposes.} which, when processed by plain \TeX,
+ generates a fresh copy of |pdcadobe.tex| in the current directory
+ in addition to the |dvi| file. This ensures that the printed
+ documentation and the code it describes are identical. The
+ |dtx| file uses the macros in |pdccode.tex|.
+
+%}}} introduction
+%{{{ File identification
+\section{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file.
+
+\code
+ \|\% pdcadobe.tex \fileversion~\filedate~-- macros for Adobe style fonts
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcadobe.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Formatting macros for Adobe-style fonts.
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+%}}} file id
+%{{{ chardefs
+\section{Characters available in all styles}
+
+ The following characters are in the fonts generated by
+ |afm2tfm|, so are available in all styles.
+\code
+ |\chardef\quotesingle="0D
+ |\chardef\quotedouble="22
+ |\chardef\_="5F
+ |\chardef\asciicircum="80
+ |\chardef\asciitilde="81
+ |\chardef\cents="A2
+ |\chardef\pounds="A3
+ |\chardef\fractionslash="A4
+ |\chardef\yen="A5
+ |\chardef\florin="A6
+ |\chardef\S="A7
+ |\chardef\currency="A8
+ |\chardef\lguillemet="AB
+ |\chardef\dag="B2
+ |\chardef\ddag="B3
+ |\chardef\gbdecimal="B4
+ |\chardef\P="B6
+ |\chardef\bullet="B7
+ |\chardef\quotesinglebase="B8
+ |\chardef\quotedblbase="B9
+ |\chardef\rguillemet="BB
+ |\chardef\ellipsis="BC \def\dots{\ellipsis\thinspace}
+ |\chardef\permille="BD
+ |\chardef\orda="E3
+ |\chardef\ordo="EB
+\endcode
+ Some glyphs, like |\fractionslash| and |\gbdecimal| may well be
+ used in maths mode, but are defined using |\chardef| to allow
+ them to be used in text as well.
+
+ The definition of |\dots| adds the thin space that is included
+ in plain \TeX's |\dots|, so that `|\dots,|' will have a thin
+ space between the third full stop and the comma.
+
+\subsec{Maths stuff}
+
+ These symbols are available in maths mode, coming from the |\rm|
+ font (fam~0).
+\code
+ |\mathchardef\backslash="205C
+ |\edef\lbrace{\delimiter"407B308} \let\{=\lbrace \mathcode`\{="407B
+ |\mathcode`\|="707C \mathchardef\mid="307C
+ |\edef\rbrace{\delimiter"507D309} \let\}=\rbrace \mathcode`\}="507D
+ |\mathchardef\sim="3081
+ |\mathchardef\cdot="20B4
+ |\mathchardef\bullet="20B7
+ |\mathchardef\ldots="60BC
+\endcode
+ There {\it are} extensible braces in the Adobe Symbol font,
+ which I~would have used for the |\lbrace| and |\rbrace|
+ commands. Unfortunately, the TFM file generated with |afm2tfm|
+ seems to lack the special information that makes extensible
+ characters work, so the |cmex10| glyphs must be used instead.
+
+\subsec{Marks for composite letters}
+
+ Some common accented letters can be got by printing the accent
+ glyph before the letter glyph. However not all combinations
+ will work, so I~have left plain \TeX's definitions in place.
+
+ For later reference, the glyphs used for the accents are given
+ names.
+\code
+ |\chardef\graveglyph="12
+ |\chardef\acuteglyph="13
+ |\chardef\hookglyph="14
+ |\chardef\breveglyph="15
+ |\chardef\macronglyph="16
+ |\chardef\ringglyph="17
+ |\chardef\cedillaglyph="18
+ |\chardef\circumglyph="5E
+ |\chardef\tildeglyph="7E
+ |\chardef\twodotsglyph="7F
+ |\chardef\dotglyph="C7
+ |\chardef\hungarianglyph="CD
+ |\chardef\ogonekglyph="CE
+\endcode
+
+
+ Some special letters and marks have been moved to new slots.
+\code
+ |\chardef\AA="C8 \chardef\aa="98
+ |\chardef\L="E8 \chardef\l="F8
+ |\def\.#1{\accent\dotglyph #1}
+ |\def\H#1{\accent\hungarianglyph"CD #1}
+\endcode
+
+%}}} chardefs
+%{{{ adobe sy
+\section{Adobe Symbol font characters}
+
+ Most of Adobe's Symbol font's glyphs exist already in one of the
+ maths fonts. Nevertheless I~think it makes sense to use them
+ whenever possible, because if it so happens that none of the
+ glyphs in the maths fonts are used, the bitmaps for the fonts
+ may be omitted from the PostScript file, making it much smaller.
+ For these definitions to work, there must be a family |\asyfam|
+ and font nickname |\asy|.
+
+\code
+ |\ifx\asyfam\UNDEFINED
+ | \newfam\asyfam
+ |\fi
+\endcode
+
+\subsec{Extracting the fam name}
+
+\code
+ |\edef\\{\ifcase\asyfam 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
+ |}
+\endcode
+
+ Where plain \TeX's definition uses glyphs from the roman font,
+ I~have let the definition stand.
+\code
+ |\mathchardef\forall="0\\22
+ |\mathchardef\exists="0\\24
+ |\mathchardef\suchthat="0\\27
+ |\mathcode`*="2\\2A
+ |\mathcode`,="6\\2C
+ |\mathcode`-="2\\2D
+ |\mathcode`.="2\\2E
+ |\mathcode`/="2\\2F
+ |\mathcode`<="3\\3C
+ |\mathcode`>="3\\3E
+\smallbreak
+ |\mathchardef\cong="3\\40
+ |\mathchardef\Alpha="0\\41
+ |\mathchardef\Beta="0\\42
+ |\mathchardef\Chi="0\\43
+ |\mathchardef\Delta="0\\44
+ |\mathchardef\Epsilon="0\\45
+ |\mathchardef\Phi="0\\46
+ |\mathchardef\Gamma="0\\47
+ |\mathchardef\Eta="0\\48
+ |\mathchardef\Iota="0\\49
+ |\mathchardef\vartheta="0\\4A
+ |\mathchardef\Kappa="0\\4B
+ |\mathchardef\Lambda="0\\4C
+ |\mathchardef\Mu="0\\4D
+ |\mathchardef\Ni="0\\4E
+ |\mathchardef\Omicron="0\\4F
+\smallbreak
+ |\mathchardef\Pi="0\\50
+ |\mathchardef\Theta="0\\51
+ |\mathchardef\Rho="0\\52
+ |\mathchardef\Sigma="0\\53
+ |\mathchardef\Tau="0\\54
+ |\mathchardef\varUpsilon="0\\55
+ |\mathchardef\varsigma="0\\56
+ |\mathchardef\Omega="0\\57
+ |\mathchardef\Xi="0\\58
+ |\mathchardef\Psi="0\\59
+ |\mathchardef\Zeta="0\\5A
+%
+ |\mathchardef\therefore="3\\5C
+%
+ |\mathchardef\perp="3\\5E
+%
+\smallbreak
+%
+ |\mathchardef\alpha="0\\61
+ |\mathchardef\beta="0\\62
+ |\mathchardef\chi="0\\63
+ |\mathchardef\delta="0\\64
+ |\mathchardef\epsilon="0\\65
+ |\mathchardef\phi="0\\66
+ |\mathchardef\gamma="0\\67
+ |\mathchardef\eta="0\\68
+ |\mathchardef\iota="0\\69
+ |\mathchardef\varphi="0\\6A
+ |\mathchardef\kappa="0\\6B
+ |\mathchardef\lambda="0\\6C
+ |\mathchardef\mu="0\\6D
+ |\mathchardef\ni="0\\6E
+ |\mathchardef\omicron="0\\6F
+\smallbreak
+ |\mathchardef\pi="0\\70
+ |\mathchardef\theta="0\\71
+ |\mathchardef\rho="0\\72
+ |\mathchardef\sigma="0\\73
+ |\mathchardef\tau="0\\74
+ |\mathchardef\upsilon="0\\75
+ |\mathchardef\varpi="0\\76
+ |\mathchardef\omega="0\\77
+ |\mathchardef\xi="0\\78
+ |\mathchardef\psi="0\\79
+ |\mathchardef\zeta="0\\7A
+ |\mathchardef\sim="3\\7E
+%
+\smallbreak
+ |\mathchardef\Upsilon="0\\A1
+ |\mathcode`'="0\\A2 \mathchardef\minutes="0\\A2
+ |\mathchardef\leq="3\\A3 \let\le=\leq
+ |\mathchardef\fractionslash="0\\A4
+ |\mathchardef\infinity="0\\A5
+%
+ |\mathchardef\clubsuit="0\\A7
+ |\mathchardef\diamondsuit="0\\A8
+ |\mathchardef\heartsuit="0\\A9
+ |\mathchardef\spadesuit="0\\AA
+ |\mathchardef\leftrightarrow="3\\AB
+ |\mathchardef\leftarrow="3\\AC \let\gets=\rightarrow
+ |\mathchardef\uparrow="3\\AD
+ |\mathchardef\rightarrow="3\\AE \let\to=\rightarrow
+ |\mathchardef\downarrow="3\\AF
+\smallskip
+ |\mathchardef\degrees="0\\B0
+ |\mathchardef\pm="2\\B1
+ |\mathchardef\seconds="0\\B2
+ |\mathchardef\geq="3\\B3 \let\ge=\geq
+ |\mathchardef\times="2\\B4
+ |\mathchardef\propto="3\\B5
+ |\mathchardef\partial="0\\B6
+%
+ |\mathchardef\div="2\\B8
+ |\mathchardef\neq="3\\B9 \let\ne=\neq
+ |\mathchardef\equiv="3\\BA
+ |\mathchardef\approx="3\\BB
+ |\mathchardef\ldots="6\\BC
+ |\edef\arrowvert{\delimiter"0\\BD33C }
+ |\mathchardef\relbar"3\\BE
+ |\edef\crlf{\noexpand\mathexbox\\BF}
+\smallbreak
+ |\mathchardef\aleph="0\\C0
+ |\mathchardef\Im="0\\C1
+ |\mathchardef\Re="0\\C2
+ |\mathchardef\wp="0\\C3
+ |\mathchardef\otimes="2\\C4
+ |\mathchardef\oplus="2\\C5
+ |\mathchardef\emptyset="0\\C6
+ |\mathchardef\cap="2\\C7
+ |\mathchardef\cup="2\\C8
+ |\mathchardef\supset="3\\C9
+ |\mathchardef\supseteq="3\\CA
+ |\mathchardef\nsubset="3\\CB
+ |\mathchardef\subset="3\\CC
+ |\mathchardef\subseteq="3\\CD
+ |\mathchardef\in="3\\CE
+ |\mathchardef\nin="3\\CF
+\smallbreak
+ |\mathchardef\angle="0\\D0
+ |\mathchardef\nabla="0\\D1
+ |\edef\registered{\noexpand\mathhexbox\\D2}
+ |\edef\copyright{\noexpand\mathhexbox\\D3}
+ |\edef\trademark{\noexpand\mathhexbox\\D4}
+ |\mathchardef\prod="1\\D5
+ |\edef\sqrt{\radical"\\D6370 }
+ |\mathchardef\cdot="2\\D7
+ |\mathchardef\neg="0\\D8 \let\lnot=\neg
+ |\mathchardef\wedge="3\\D9 \let\land=\wedge
+ |\mathchardef\vee="3\\DA \let\lor=\vee
+ |\mathchardef\Leftrightarrow="3\\DB
+ |\mathchardef\Leftarrow="3\\DC
+ |\mathchardef\Uparrow="3\\DD
+ |\mathchardef\Rightarrow="3\\DE
+ |\mathchardef\Downarrow="3\\DF
+\smallbreak
+ |\mathchardef\diamond="3\\E0
+ |\edef\langle{\delimiter"4\\E130A }
+ |\mathchardef\sum="1\\E5
+ |\edef\rangle{\delimiter"5\\F130B }
+\endcode
+ (I haven't bothered redefining those delimiters based on parts of
+ large delimiters.)
+
+%}}} adobe sy
+%{{{ ISO 8859-1 support
+\section{ISO 8859--1 input}
+
+ ISO~8859--1 (Latin-1) is the de facto standard character
+ encoding in a large numebr of countries, and so we shall try to
+ make a reasonable number of Latin-1 characters available.
+
+\subsec{Symbols}
+
+ Those characters whose code is the same as the code of the
+ corresponding glyph are left alone (with catcode~12). For
+ example, |^^a3| (pounds sterling) is left alone.
+
+ Those that have an equivalent |\chardef| (or |\mathchardef|)
+ name are defined with |\let| (for example, |^^a4| is |\let| to
+ |\currency|). Those with an equivalent standard ligature use
+ that ligature. These conventions hopefully insulate these
+ definitions against changes in the encoding.
+
+ The characters that represent marks for composite
+ letters\footnote*{This phrase is used on the grounds that the
+ word {\it accent} tends to provoke lectures on ways in which
+ many composite letters do {\it not} represent accents in the
+ languages in which they are used.} will form ligatures with the
+ following letter---one may write `{\tt\char"7F u\char"18 c}' to
+ get `\"u\c c'.
+
+ I don't use |\declareactivechar| on these because they would not
+ work properly in verbatim text with catcode~12. (Extending
+ verbatim text to include Latin-1 will take a few definitions
+ along the same lines as |\ttlq| etc.).
+\code
+ |\catcode`^^a0\active \let^^a0=~
+ |\catcode`^^a1\active \def^^a1{!`}
+% A2
+% A3
+ |\catcode`^^a4\active \let^^a4=\currency
+% A5
+% A6 XXX
+% A7
+ |\catcode`^^a8\active \let^^a8=\twodotsglyph
+ |\catcode`^^a9\active \let^^a9=\copyright
+ |\catcode`^^aa\active \let^^aa=\orda
+% AB
+ |\catcode`^^ac\active \let^^ac=\lnot
+ |\catcode`^^ad\active \let^^ad=\-
+ |\catcode`^^ae\active \let^^ae=\registered
+ |\catcode`^^af\active \let^^af=\macronglyph
+\smallbreak
+ |\catcode`^^b0\active \let^^b0=\degrees
+ |\catcode`^^b1\active \let^^b1=\pm
+ |\catcode`^^b2\active \def^^b2{^2}
+ |\catcode`^^b3\active \def^^b3{^3}
+ |\catcode`^^b4\active \let^^b4=\acuteglyph
+ |\catcode`^^b5\active \let^^b5=\mu
+% B6
+ |\catcode`^^b7\active \let^^b7=\gbdecimal
+ |\catcode`^^b8\active \let^^b8=\cedillaglyph
+ |\catcode`^^b9\active \def^^b9{^1}
+ |\catcode`^^ba\active \let^^ba=\ordo
+% BB
+ |\catcode`^^bc\active \def^^bc{\frac14}
+ |\catcode`^^bd\active \def^^bd{\frac12}
+ |\catcode`^^be\active \def^^be{\frac34}
+ |\catcode`^^bf\active \def^^bf{?`}
+\smallbreak
+ |\catcode`^^d7\active \let^^d7=\times
+ |\catcode`^^f7\active \let^^f7=\div
+\endcode
+
+\subsec{Composite letters}
+
+ The composite letters acer accessed via ligatures so that they
+ are immune to some possible changes in encoding.
+\code
+ |\catcode`^^c0\active \def^^c0{\graveglyph A}
+ |\catcode`^^c1\active \def^^c1{\acuteglyph A}
+ |\catcode`^^c2\active \def^^c2{\circumglyph A}
+ |\catcode`^^c3\active \def^^c3{\tildeglyph A}
+ |\catcode`^^c4\active \def^^c4{\twodotsglyph A}
+ |\catcode`^^c5\active \def^^c5{\ringglyph A}
+ |\catcode`^^c6\active \let^^c6=\AE
+ |\catcode`^^c7\active \def^^c7{\cedillaglyph C}
+ |\catcode`^^c8\active \def^^c8{\graveglyph E}
+ |\catcode`^^c9\active \def^^c9{\acuteglyph E}
+ |\catcode`^^ca\active \def^^ca{\circumglyph E}
+ |\catcode`^^cb\active \def^^cb{\twodotsglyph E}
+ |\catcode`^^cc\active \def^^cc{\graveglyph I}
+ |\catcode`^^cd\active \def^^cd{\acuteglyph I}
+ |\catcode`^^ce\active \def^^ce{\circumglyph I}
+ |\catcode`^^cf\active \def^^cf{\twodotsglyph I}
+\smallbreak
+% |\catcode`^^d0\active \chardef^^d0="?? % DH
+ |\catcode`^^d1\active \def^^d1{\tildeglyph N}
+ |\catcode`^^d2\active \def^^d2{\graveglyph O}
+ |\catcode`^^d3\active \def^^d3{\acuteglyph O}
+ |\catcode`^^d4\active \def^^d4{\circumglyph O}
+ |\catcode`^^d5\active \def^^d5{\tildeglyph O}
+ |\catcode`^^d6\active \def^^d6{\twodotsglyph O}
+ |\catcode`^^d8\active \let^^d8=\O
+ |\catcode`^^d9\active \def^^d9{\graveglyph U}
+ |\catcode`^^da\active \def^^da{\acuteglyph U}
+ |\catcode`^^db\active \def^^db{\circumglyph U}
+ |\catcode`^^dc\active \def^^dc{\twodotsglyph U}
+ |\catcode`^^dd\active \def^^dd{\acuteglyph Y}
+% |\catcode`^^de\active \def^^de{TH}
+ |\catcode`^^df\active \let^^df=\ss
+\smallbreak
+ |\catcode`^^e0\active \def^^e0{\acuteglyph a}
+ |\catcode`^^e1\active \def^^e1{\graveglyph a}
+ |\catcode`^^e2\active \def^^e2{\circumglyph a}
+ |\catcode`^^e3\active \def^^e3{\tildeglyph a}
+ |\catcode`^^e4\active \def^^e4{\twodotsglyph a}
+ |\catcode`^^e5\active \def^^e5{\ringglyph a}
+ |\catcode`^^e6\active \let^^e6=\ae
+ |\catcode`^^e7\active \def^^e7{\cedillaglyph c}
+ |\catcode`^^e8\active \def^^e8{\graveglyph e}
+ |\catcode`^^e9\active \def^^e9{\acuteglyph e}
+ |\catcode`^^ea\active \def^^ea{\circumglyph e}
+ |\catcode`^^eb\active \def^^eb{\twodotsglyph e}
+ |\catcode`^^ec\active \def^^ec{\graveglyph i}
+ |\catcode`^^ed\active \def^^ed{\acuteglyph i}
+ |\catcode`^^ee\active \def^^ee{\circumglyph i}
+ |\catcode`^^ef\active \def^^ef{\twodotsglyph i}
+\smallbreak
+% |\catcode`^^f0\active \def^^f0{dh}
+ |\catcode`^^f1\active \def^^f1{\tildeglyph n}
+ |\catcode`^^f2\active \def^^f2{\graveglyph o}
+ |\catcode`^^f3\active \def^^f3{\acuteglyph o}
+ |\catcode`^^f4\active \def^^f4{\circumglyph o}
+ |\catcode`^^f5\active \def^^f5{\tildeglyph o}
+ |\catcode`^^f6\active \def^^f6{\twodotsglyph o}
+ |\catcode`^^f8\active \let^^f8=\o
+ |\catcode`^^f9\active \def^^f9{\graveglyph u}
+ |\catcode`^^fa\active \def^^fa{\acuteglyph u}
+ |\catcode`^^fb\active \def^^fb{\circumglyph u}
+ |\catcode`^^fc\active \def^^fc{\twodotsglyph u}
+ |\catcode`^^fd\active \def^^fd{\acuteglyph y}
+% |\catcode`^^fe\active \def^^fe{th}
+ |\catcode`^^ff\active \def^^ff{\twodotsglyph y}
+\endcode
+
+%}}} ISO 8859-1 support
+%{{{ other hacks
+\section{Modifications to other PDCMAC macros}
+
+
+ For typewriter text, less drastic revision of the string is
+ necessary.
+\code
+ |\def\ttminus{--{}}
+ |\let\ttcircum=\asciicircum
+ |\let\tttilde=\asciitilde
+\endcode
+ Note that ASCII quote and backquote characters are still got
+ from accents because a `neutral' quotation mark is not adequate
+ for computer listings where both sorts of `quote mark' might be
+ appear, with different meanings.
+
+
+%}}} other hacks
+\endcodefile
+\enddocument
+\bye
+%}}} pdcadobe.dtx
+
+%Local variables:
+%fill-prefix: "\t"
+%fold-folded-p: t
+%End:
+
diff --git a/macros/plain/contrib/pdcmac/pdccode.dtx b/macros/plain/contrib/pdcmac/pdccode.dtx
new file mode 100644
index 0000000000..e9b996dba6
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdccode.dtx
@@ -0,0 +1,881 @@
+% pdccode.dtx -- documentation & source for pdccode.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCCODE -- Documented TeX Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/pdccode.dtx",
+%%% version = "$Revision: 1.6 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/30 16:08:32 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file pdccode.tex.
+%%% Running plain TeX on this file produces both a copy of the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% 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.",
+%%% notice = "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.",
+%%% notice = "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.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdccode
+%{{{ preamble
+
+\relax
+\input pdccode
+\document
+\rcs$Id: pdccode.dtx,v 1.6 1995/03/30 16:08:32 pdc Exp $\endrcs
+
+\codefile{tmp.tex}
+
+\defverbatim\"
+
+%}}} preamble
+%{{{ introduction
+
+\author{P. Damian Cugley}
+\title{PDCCODE---Documented \TeX\ Macros}
+\section{Introduction}
+
+ PDCCODE is a simpler and less featureful system than the
+ \LaTeX~2e Docstrip package, but uses the same file suffix
+ `|dtx|'. Lines between |\code| and |\endcode| markers are
+ written to a file (set with the |\codefile| command), as well as
+ being printed `verbatim' in document. Thus one \TeX\ pass
+ generates both the macro file(s) and a |dvi| file.
+
+ This document---generated from |pdccode.dtx|---is a |dtx| file
+ for PDCCODE itself, the file of macros used by my |dtx| files.
+ It cannot be used to generate |pdccode.tex| directly (\TeX\
+ might choke halfway through overwriting |pdccode.tex| with a new
+ version, leaving no |pdccode.tex| to generate |pdccode.tex|
+ with). Instead it produces its copy as `|tmp.tex|', and
+ `|tmp.tex|' can be compared to the supplied |pdccode.tex|.
+
+\subsec{How to read this document}
+
+ The |dtx| files are programs (in \TeX's macro language) that
+ generate new programs (the macro files that will be used in
+ documents). The macros described in {\it this} file are used
+ when generating macro files. So, for example, the |\rcs| and
+ |\fileversion| macros used to extract identification information
+ from the |dtx| file are not defined in any of the generated
+ macro files.
+
+\subsec{Background}
+
+ For some time I~have been using a collection of macro files to
+ typeset various types of document with \TeX. After using them
+ in Malvern\footnote*{Malvern is a sanserif font family
+ implemented in METAFONT. The current version is release $1.2$.}
+ releases I have discovered that they had been merged with the
+ Unix\TeX\ macros directory. Originally I~had never intended
+ that these files be used by anyone but me---they were full of
+ hacks and messy code and definitions I~don't use anymore. Since
+ then I~thought of tidying up the macros enough that I'm not
+ embarassed by them, but the task of doing this {\it and}
+ documenting their use was daunting.
+
+ After installing \LaTeX~2e on my new computer, I~decided to have
+ a go at adapting the idea of `documented \TeX\ macros' files to
+ plain \TeX. This way I~could clean up the macros and document
+ them in a systematic fashion.
+
+ The \LaTeX\ Docstrip/Doc-option approach evolved through several
+ different models and so is a complex format. Docstrip (a
+ program written in \TeX's macro language) was used to strip
+ comments from |doc| files making |sty| files, and the \LaTeX\
+ Doc-option separately extracted \LaTeX\ code from comments in
+ |doc| files to make printed documentation. Both Doc and
+ Docstrip required the user to type in file names whenever they
+ ran---which made them useless for batch processing. So separate
+ driver files (with suffixes |drv| and |ins|) were added to
+ distributions. Finally, the |doc| files, which used to be
+ usable as |sty| files (just a little slower because of the
+ comments) were have been changed to be documents instead (making
+ |drv| files redundant, once the |ltxdoc.cfg| configuration file
+ was added to the conventions) and given a new suffix |dtx|.
+
+ The system I~use---called PDCCODE---is simpler and faster, but
+ omits indexes, special change-log commands, and all the features
+ that come with \LaTeX\ formatting. It doesn't have Docstrip's
+ {\it options}\/ feature, which allows several largely-similar
+ files to be generated from the same source.\footnote\dag{I do
+ have an experimental version |pdccode2.tex| which does this but
+ I~am not particularly happy with it yet.} It doesn't print
+ statistics at the end, or do checksums, or even print comforting
+ lines of asterisks and percent signs in the log file.
+
+ My |dtx| files use a single macro file |pdccode.tex| which
+ defines a `code mode' where lines are written to the macro file
+ as well as appearing in the printed documentation. One pass
+ generates both the macro file and the documentation in |dvi|
+ form. The |pdccode.tex| file also includes enough layout
+ commands to typeset the comments.
+%}}}
+%{{{ using pdccode
+\section{Summary of using PDCCODE}
+
+ These commands are explained in more detail below.
+
+\subsec{A skeleton code file}
+
+ A code file using |pdccode.tex| will look something like this:
+$$\it
+\halign{\indent#\hfil\cr
+ "%" name "--" one line description\cr
+\noalign{\smallskip}
+ "%%%@TeX-document-file {"\cr
+ header comments for the document\cr
+ "%%%}"\cr
+\noalign{\smallskip}
+ "\relax"\cr
+ "\input pdccode"\cr
+ "\document"\cr
+ "\rcs$" RCS identification string "$\endrcs"\cr
+ "\codefile{" file name "}"\cr
+ "\author{" author name "}"\cr
+ "\title{" title for the document "}"\cr
+\noalign{\smallbreak}
+ "\section{Introduction}"\cr
+ introduction\cr
+\noalign{\smallbreak}
+ "\section{File identification}"\cr
+ "\code"\cr
+ " \|\% " file name "\fileversion~\filedate~--" one line desc\cr
+ " |"\cr
+ " |%%%@TeX-definition-file {"\cr
+ " " header comments for macro file\cr
+ " |%%%}"\cr
+ " |"\cr
+ " \|\\message\{\fileversion~<\fileauthor~\filedate>\}"\cr
+ " |"\cr
+ "\endcode"\cr
+\noalign{\smallbreak}%
+ definitions and commentary\cr
+\noalign{\smallbreak}%
+ "\endcodefile"\cr
+ "\enddocument"\cr
+ "\bye"\cr
+}$$
+
+\subsec{Commands in code sections}
+
+ Code sections start with |\code| and end with |\endcode|. Before
+ the first |\code| you must do |\codefile{|\<file name>|}| to
+ specify the file.
+
+ Vertical mode material may be used between lines (e.g.,
+ |\smallbreaks|). Unexpanded code lines are introduced with "|",
+ expanded lines with "\|". In expanded lines, use "\{", "\}",
+ "\\", "\%", "\~" for those characters, "~" for a single space.
+
+\subsec{Commands in commentary}
+
+ Most of the commentary will be typeset using the conventions of
+ plain \TeX.
+
+ |\author{|\<text>|}| (must precede |\title|)
+
+ |\title{|\<heading>|}|
+
+ |\section{|\<heading>|}|
+
+ |\subsec{|\<heading>|}|
+
+ |\noindenttrue|
+
+ |\footnote|
+
+ |\defverbatim|\<one-character control sequence>
+
+ |$|\<number>|\mm$| |$|\<number>|\em$| |$|\<number>|\pt$|
+ |$|\<number>|\inch$|
+
+ |\<|\<name>|>| |\cs{|\<name>|}|
+ |\arg{|\<argument name>|}|
+
+ |\TeX| |\LaTeX| |\LaTeX~2e|
+
+ |\notepar| \<paragraph> |\endnotepar|
+
+
+%}}} using pdccode
+%{{{ file identification
+\section{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file.
+\code \catcode`\"=12
+ \|\% pdccode.tex \fileversion~\filedate~-- self-documenting TeX macros
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdccode.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Macros for documented TeX macros (DTX files).
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+%}}} file id
+
+\bigskip\noindent
+ We start by making a nickname for a scratch register. This is
+ |\toks@| in plain \TeX; this definition gives it a name I~can
+ use without catcode hackery.
+\code
+ |\toksdef\toksa=0
+\endcode
+
+%{{{ rcs support
+
+\section{RCS Support}
+
+ RCS (Revision Control System) is a free source code control
+ system which is available from the Free Software Foundation.
+ It inserts keyword-value pairs enclosed in dollar signs into the
+ source code. This command extracts the file's version, date,
+ author and locker (if there is one). It is used like this:
+$$\centerline{\vbox{\tt\def~{\char32 \ignorespaces}
+ \halign{#\hfil\cr
+ \cs{rcs}\$Id:~\<name>,v~\<version>~\<date>~\<ignored>\quad\cr
+ \hfill~\<author>~\<ignored>~{\rm[}\<locker>~{\rm]}\$\cs{endrcs}\cr
+}}} $$
+ The \<locker> field is non-empty iff the file is `locked'
+ (meaning it has been edited and the changes are not checked in
+ yet). The |\filename| macro is defined, even though it will
+ almost certainly be identical to |\jobname|.
+\code
+ |\def\rcs#1: #2,v #3 #4 #5 #6 #7 #8$#9\endrcs{
+ | \def\filename{#2}
+ | \def\fileversion{#3}
+ | \def\filedate{#4}
+ | \def\fileauthor{#6}
+ | \def\filelocker{#8}
+ |}
+\endcode
+
+%}}} rcs support
+%{{{ verbatim text
+\section{Verbatim text}
+
+ Verbatim text is text that is printed identically to the
+ characters in the manuscript file. In the code sections, a
+ vertical bar is used to make lines for the code file. In the
+ documentation, the vertical bar is used as a self-matching
+ verbatim mode character.
+
+ These definitions should be the same as the corresponding code
+ in |pdcfmt2.dtx|.
+
+\subsec{Lists of active characters}
+
+ The verbatim text macros need to know if any characters have
+ been made special apart from the usual ones. This command tells
+ the verbatim macros that |#1| is an active char; in addition to
+ setting its catcode, this makes sure that the character will be
+ re-catcoded appropriately when in verbatim mode. |#1| should be
+ a something that will work after `|`|'; usually this means a
+ one-character control sequence.
+\code
+ |\def\declareactivechar#1{%
+ | \toksa\expandafter{\verbatimplains\do#1}%
+ | \edef\verbatimplains{\the\toksa }%
+ | \catcode`#1\active
+ |}
+\endcode
+
+ Two list macros in the style of |\dospecials| are defined. The
+ first is for characters that must be set to catcode~12, such as
+ `|\|', `|{|', `|}|', `|_|', `|$|', `|#|', `|&|', and `|%|'. The
+ other is for a few characters that are given catcode~13, such as
+ `|`|', `|'|', `|~|', `|^|' and SP.
+\code
+ |\def\verbatimplains{\do\\\do\{\do\}\do\_\do\$\do\#\do\&\do\%}
+ |\def\verbatimactives{\do\`\do\'\do\~\do\^\do\ }
+\smallbreak
+ |\chardef\other=12
+\endcode
+
+\subsec{Setting up verbatim mode}
+
+ This is a macro common to various verbatim text modes. The
+ default spacing of whatever font is used, without any
+ adjustments of spacefactor for punctuation. The characters
+ `|`|', `|'|', `|~|', and `|^|' produce slightly lowered glyphs.
+\code
+ |\newtoks\everyverbatim
+\smallbreak
+ |\bgroup \catcode`\^=13 \catcode`\'=13 \catcode`\`=13 \toksa={\egroup
+ | \def\setupverbatim{%
+ | \frenchspacing
+ | \spaceskip0pt \xspaceskip0pt % use spacing of font
+ | \def\do##1{\catcode\lq##112 }\verbatimplains
+ | \def\do##1{\catcode\lq##1\active }\verbatimactives
+ | \let`\ttlq \let'\ttrq
+ | \let~\tttilde \let^\ttcircum
+ | \the\everyverbatim
+ | }
+ |}\the\toksa
+\endcode
+
+ Here are the definitions for the munged glyphs. These are only
+ necessary in CM-Typewriter-like fonts; using something
+ like Courier, these definitions could probably be omitted.
+
+ The names `rq' and `lq' are based on the use of |\lq| and |\rq|
+ in plain \TeX. An alternative definition for |\ttrq| would be
+ |\chardef\ttrq=13|, producing `{\tt\char13 }'.
+\code
+ |\def\ttlq{\lower0.125ex \hbox{\char18 }}
+ |\def\ttrq{\lower0.125ex \hbox{\char19 }}
+ |\def\tttilde{\lower0.5ex \hbox{\char`\~ }}
+ |\def\ttcircum{\lower0.5ex \hbox{\char`\^ }}
+\endcode
+ This makes the difference between |`'^~| and
+ {\tt`'\char`\^\char`\~}.\footnote*{It turns out that on some
+ \TeX\ systems, the CMTT font has been hacked to have an
+ ASCII-style reverse-apostrohe-cum-grave-accent as character~96
+ and a matching apostrophe-cum-acute-accent as charcter~39,
+ thereby correcting the defects that my definitions of |\ttlq|
+ and |\ttrq| address. But such modified fonts are
+ nonstandard---they should {\it not} be called CMTT---and should
+ be replaced.}
+
+\subsec{Defining a self-matching character for verbatim text}
+
+ A macro for defining a self-matching verbatim character (I~got
+ the idea of a macro for declaring verbatim characters from the
+ \LaTeX~2e documentation macros). |#1| must be a one-character
+ control sequence. If it isn't active already, then
+ |\declareactivechar| is applied to it first.
+\code
+ |\def\defverbatim#1{%
+ | \ifcat\noexpand#1\noexpand~\else \declareactivechar#1 \fi
+ | \begingroup \uccode`\~=`#1 \uppercase{\toksa={\endgroup
+ | \def~{%
+ | \leavevmode
+ | \begingroup \tt \setupverbatim
+ | \catcode`#1\active \let~\endgroup
+ | }%
+ | }}\the\toksa
+ |}
+\endcode
+ Note that there must be a font called |\tt| for it to switch to.
+ (The catcode of |#1| is set to 13 after calling |\setupverbatim|
+ because |#1| will be included in |\verbatimplains|.)
+
+ Finally, we define vertical bar as the conventional
+ self-matching verbatim-mode character.
+\code
+ |\defverbatim\|
+\smallbreak
+ |\hyphenchar\tentt=-1
+\endcode
+ Both |\defverbatim| and |\defineactivechar| have local scope.
+
+%}}} verbatim text
+%{{{ code sections
+%{{{ intro
+\section{Code sections}
+
+ The markers |\code| \dots |\endcode| mark code to be written to
+ the definition file. Each line starts with either "|" or "\|"
+ and finishes with the end of the line in the manuscript file.
+
+ Lines that start with "|" are written out as-is; no macro
+ expansion is allowed. This is how the vast majority of lines
+ are done.
+
+ Lines starting "\|" are expanded. This is so that things like
+ the current version ID (extracted from the RCS identification
+ line or set with |\def|) may be included in the code file.
+ Within such an expanded line, the following macros are defined:
+ $$\halign{\indent#\hfil&&\quad#\hfil\cr
+ |\%|& |%|& per cent sign&
+ |\{|& |{|& left brace&
+ |\}|& |}|& right brace\cr
+ |\\|& |\|& backslash&
+ |~|& \tt\char32 & space&
+ |\~|& |~|& tilde\cr
+ }
+ $$
+ (This list is probably incomplete.)
+%}}} intro
+%{{{ code file name
+
+\subsec{Setting the codefile name}
+
+ Before the first code section, the |\codefile{|\<file name>|}|
+ command specifies the code file. The last code section should
+ be followed by |\endcodefile|. Only one code file may be open
+ at a time.
+\code
+ |\newwrite\CODEwrite
+\smallbreak
+ |\def\codefile#1{
+ | \ifeof\CODEwrite\else \endcodefile \fi
+ | \def\thecodefile{#1} \openout\CODEwrite=#1
+ |}
+\smallbreak
+ |\def\endcodefile{
+ | \message{Code written on \thecodefile.}
+ | \closeout\CODEwrite
+ |}
+\endcode
+%}}} code file name
+%{{{ code sections
+
+\subsec{Code sections}
+
+ Switching to `code mode' is easy, because most of the work is
+ really done by the "|" and "\|" commands.
+
+\code
+ |\def\code{
+ | \smallskip
+ | \begingroup
+ | \let|\CODEline \let\|\CODElinex
+ | \let\{=\CODElb \let\}=\CODErb \let\\=\CODEbslash
+ | \def~{ } \let\~\CODEtilde
+ | \the\everycode
+ | \obeylines
+ |}
+\smallbreak
+ |\def\endcode{
+ | \smallbreak
+ | \endgroup
+ |}
+\endcode
+%}}} code sections
+%{{{ code lines
+\subsec{Code lines}
+
+ This is the definition for unexpanded code lines.
+\code
+ |\def\CODEline{%
+ | \begingroup % matched by \CODElinei
+ | \setupverbatim \catcode`\|\other
+ | \CODElinei
+ |}
+\endcode
+
+ In |\CODElinei|, We must redefine the characters (such as |`|)
+ that are active within verbatim text to expand to their
+ catcode-12 equivalents when they are written to the code file
+ currectly.
+
+ Since one of these is |^|, we temporarily give |@| the meaning
+ of |^| so that we may safely change the catcode of |^|.
+\code
+ |\begingroup\catcode`\'=\active \catcode`\`=\active
+ | \catcode\lq\@=\catcode\lq\^ \catcode\lq\^=\active
+ | \catcode\lq\@@M=\active \toksa={\endgroup %
+ | \def\CODElinei#1@@M{%
+ | \begingroup\let`\lq \let'\rq %
+ | \let^\CODEcircum \let~ \CODEtilde%
+ | \edef\tmp{#1}%
+ | \write\CODEwrite\expandafter{\tmp}%
+ | \endgroup %
+ | \indent\the\everycodeline #1\par %
+ | \endgroup % matches \CODEline
+ | }%
+ |}\the\toksa
+\endcode
+
+ The definition for |\CODElinex| (expanded code lines) is much
+ simpler:
+\code
+ |\begingroup\catcode`\^^M=13 \toksa={\endgroup %
+ | \def\CODElinex#1^^M{%
+ | \edef\tmp{\write\CODEwrite{#1}}\tmp %
+ | {\indent\the\everycodeline #1\par}%
+ | }%
+ |} \the\toksa
+\endcode
+%}}} code lines
+%{{{ catcode hacks
+\subsec{Macros for making category-12 characters}
+
+ For characters that are active in verbatim mode (like |`|), or
+ which must be specially generated in expanded code lines (such
+ as braces generated with {\tt\cs{\char123 }}), we have a
+ `|\CODE|-' macro that generates an explicit character token with
+ catcode~12.
+
+\code
+ |\begingroup\catcode`\/=0 \catcode`\\=\other /toksa={/endgroup
+ | /def/CODEbslash{\}
+ |}/the/toksa
+\smallbreak
+ |\begingroup\catcode`\^=\other \toksa={\endgroup
+ | \def\CODEcircum{^}
+ |}\the\toksa
+\smallbreak
+ |\begingroup\catcode`\~=\other \toksa={\endgroup
+ | \def\CODEtilde{~}
+ |}\the\toksa
+\smallbreak
+ |\begingroup\catcode`\%=\other \toksa={\endgroup
+ | \def\%{%}
+ |}\the\toksa
+\smallbreak
+ |\begingroup\catcode`\~=\other \toksa={\endgroup
+ | \def\CODEtilde{~}
+ |}\the\toksa
+\smallbreak
+ |\begingroup\catcode`\[=1 \catcode`\]=2
+ | \catcode`\{=\other \catcode`\}=\other
+ | \toksa=[\endgroup
+ | \def\CODElb[{] \def\CODErb[}]
+ |]\the\toksa
+\endcode
+%}}} catcode hacks
+%{{{ customization
+\subsec{Customization}
+
+ The token list register |\everycode| is expanded at the start of
+ every code section, the token list register |\everycodeline| at
+ the start of every code line. The default definitions select
+ typewriter font for the code listings, with each line numbered.
+\code
+ |\newtoks\everycode
+ |\newtoks\everycodeline
+\smallbreak
+ |\everycode{\tt \baselineskip=0.8\baselineskip \lineskiplimit=0pt }
+\smallbreak
+ |\newcount\lineno
+ |\everycodeline{\llap{$ \global\advance\lineno1
+ | \scriptstyle\the\lineno $\enspace}%
+ | \mark\expandafter{\the\lineno}}
+\endcode
+%}}} customization
+%}}} code sections
+%{{{ formating
+%{{{ intro
+\section{Layout}
+
+ The PDCCODE macros include enough basic formatting commands to
+ make a simple document---since this file needs to be
+ self-contained. The formatting is fairly primitive, so that
+ |pdccode.tex| will not be excessively long.
+
+ The text is set in the default plain \TeX\ fonts: 10-point
+ Computer Modern Roman. Titles are in CM Sans Serif Bold
+ Extended, headings in CMSS Demibold Condensed, and subheadings
+ in CMSS Italic: all of these are standard fonts which should be
+ available on all \TeX\ systems.
+
+ The line width is wide enough that code lines do not need to be
+ printed in a reduced font (which looks silly).
+
+ the first tokenm of a document is |\relax| and everything except
+ the initial |\input| and final |\bye| in the document is
+ enclosed in |\document|\dots|\enddocument|. This is so that
+ documents using the PDCCODE conventions can be embedded within a
+ another document which by redefining these tokens.
+\code
+ |\let\document\relax \let\enddocument\relax
+\endcode
+
+ I have to set some \TeX~3 parameters because we don't seem to
+ have definitions for them in the local version of |plain.tex|.
+\code
+ |\lefthyphenmin=3 \righthyphenmin=2 \errorcontextlines10000
+\endcode
+
+%}}} intro
+%{{{ layout
+\subsec{Layout}
+
+ The text width is wide enough for 72-character code lines.
+\code
+ |\parindent=2em \hsize=36\fontdimen6\tentt \advance\hsize\parindent
+\endcode
+ A largish left margin is used set---perhaps readers will find it
+ useful for writing comments.
+\code
+ |\hoffset=210mm \advance\hoffset-\hsize \advance\hoffset-25mm
+ |\newdimen\leftmargin \leftmargin=\hoffset \advance\leftmargin-25mm
+ |\advance\hoffset-1in
+\endcode
+
+ The vertical margins are set so that if the file is formatted
+ for A4 ($297\mm$) paper and fed into a driver which thinks it is
+ formatted for American Letter ($11\inch$) paper no information
+ will be lost. We allow for $7\mm$ unprintable area at the edges
+ of paper (this is reasonable for a laser printer), and for the
+ headline being $24\pt + 6\pt - 10\pt = 20\pt$ above the top of
+ the text. (The $6\pt$ allows for the height of the headline,
+ which is in 7-pt type.)
+\code
+ |\voffset=297mm \advance\voffset-11in
+ |\advance\voffset7mm \advance\voffset20pt
+ |\vsize=297mm \advance\vsize-2\voffset \advance\vsize-2\baselineskip
+ |\advance\voffset-1in
+\endcode
+
+ We use ragged-right (ranged-left) printing. (Readability
+ studies have indicated that ragged-right printing is, if
+ anything, easier to read than with both sides aligned.) To do
+ this we remove the stretch and shrink components of the font we
+ use, and make the right margin stretchable.
+\code
+ |\def\do#1{\fontdimen3#1=0pt \fontdimen4#1=0pt }
+ |\do\tenrm \do\tenit \do\tenbf
+\smallbreak
+ |\rightskip=0pt plus 2em minus 2pt \adjdemerits=0 \tolerance=500
+ |\parfillskip=0pt plus 0.8\hsize
+\endcode
+%}}} layout
+%{{{ title and headline
+\subsec{Title and headline}
+
+ The author and title info are printed at the top of the first
+ page---in lieu of a separate title page---and the title goes in
+ the headline of subsequent pages, followed by the version ID and
+ date as extracted from the RCS identification string. If the
+ file locker is non-empty (i.e., the file is being edited), an
+ `e' is appended to the version ID in the headline.
+\code
+ |\def\author#1{\def\theauthor{#1}} \author{P. Damian Cugley}
+\smallbreak
+ |\font\titlefont=cmssbx10 scaled \magstep3
+\smallbreak
+ |\def\title#1{
+ | \vglue2\baselineskip
+ | \begingroup \parindent-\leftmargin \hyphenpenalty10000 \titlefont
+ | #1\smallskip
+ | \endgroup
+ | \leftline{Version \fileversion,
+ | last changed \fileauthor\space \mungedate\filedate}
+ | \ifx\filelocker\empty\else
+ | \leftline{Edited by \filelocker\unskip\ \today}
+ | \fi
+ | \medskip
+ | \hrule \vskip1pt \hrule \vskip1pt \hrule \vskip1pt \hrule
+ | \medskip
+ | \rightline{\theauthor}
+ | \bigskip
+ | \headline{\hfil\global\headline{%
+ | \sevenbf \hskip-\leftmargin \themarks \hfil #1
+ | \fileversion
+ | \ifx\filelocker\empty
+ | \space\mungedate\filedate
+ | \else
+ | e\space\today
+ | \fi
+ | }}
+ |}
+\smallbreak
+ |\def\themarks{%
+ | \ifx\firstmark\empty\else
+ | \firstmark
+ | \ifx\firstmark\botmark \else --\botmark \fi
+ | \fi
+ |}
+\endcode
+
+ Some macros for printing the date. The |\mungedate| macro
+ converts from RCS's format (using slashes) to ISO format (using
+ short dashes).
+\code
+ |\def\today{\mungedate{\number\year/\twodigits\month/\twodigits\day}}
+ |\def\twodigits#1{\ifnum#1<10 0\fi \number#1}
+ |\def\mungedate#1{$ \textfont0=\font \mathcode`/="7B #1 $}
+\endcode
+
+%}}} title and author
+%{{{ sectioning
+\subsec{Sectioning}
+
+ The sectioning commands do no more than generate numbered
+ headings---there are no tables of contents or marks required.
+\code
+ |\font\secfont=cmssdc10 at 12pt
+ |\font\subsecfont=cmssi10
+\smallbreak
+ |\newcount\seccount
+ |\newcount\subseccount
+\smallbreak
+ |\def\section#1{%
+ | \advance\seccount1 \subseccount=0
+ | \bigbreak
+ | \begingroup
+ | \secfont \hyphenpenalty=10000 \tolerance=1000
+ | \rightskip=0pt plus 2em
+ | \noindent\llap{\number\seccount.\enspace}#1
+ | \medskip
+ | \endgroup
+ | \noindenttrue
+ |}
+\smallbreak
+ |\def\subsec#1{%
+ | \advance\subseccount1
+ | \medbreak
+ | \begingroup
+ | \subsecfont \hyphenpenalty=10000 \tolerance=1000
+ | \rightskip=0pt plus 2em
+ | \noindent\llap{\number\seccount.%
+ | \number\subseccount.\enspace}#1
+ | \nobreak\smallskip
+ | \endgroup
+ | \noindenttrue
+ |}
+\endcode
+
+ Here's a simple hack to remove the indentation of the first
+ paragraph following a section heading.
+\code
+ |\newif\ifnoindent
+\smallbreak
+ |\everypar{%
+ | \ifnoindent
+ | {\setbox0=\lastbox}\global\noindentfalse
+ | \fi
+ |}
+\endcode
+
+%}}} sectioning
+%{{{ footnotes
+\subsec{Footnotes}
+
+ Plain \TeX's footnote command is adjusted to use a new parameter
+ to specify the value of |\rightskip| in footnotes.\footnote*{The
+ default definition sets |\rightskip| to $0\pt$, which is
+ moderately disastrous given that spaces cannot stretch or
+ shrink.} It was the trickiness involved in changing definitions
+ like this that persuaded me to not use `|@|' characters in macro
+ files.
+\code
+ |\newskip\footnoterightskip \footnoterightskip=\rightskip
+\smallbreak
+ |\catcode`@=11
+ |\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\footnoterightskip
+ | \spaceskip\z@skip \xspaceskip\z@skip \rm
+ | \textindent{#1}\footstrut\futurelet\next\fo@t}
+ |\catcode`@=11
+\endcode
+ This definition is a drop-in replacement for the one in {\it\TeX
+ book} Appendix~B (p.\thinspace363 in my copy).
+
+%}}} footnotes
+%{{{ abbrevs
+\subsec{Miscellaneous abbreviations}
+
+ The |\<| macro for writing the names of syntactic entities (as
+ \<foo>) is like in {\it\TeX book} Appendix~E. The |\cs| macro
+ prints a control sequence name; I use this where the easier
+ dodge of writing "|\foo|" won't work (e.g., in the argument to
+ another macro). Similarly |\arg| places its argument in
+ typewriter-style braces. The |\pt| macro works in maths mode.
+\code
+ |\def\<#1>{\leavevmode\hbox{$\langle$\it#1\/$\rangle$}}
+ |\def\cs#1{\leavevmode\hbox{\tt\char`\\#1}}
+ |\def\arg#1{\leavevmode\hbox{{\tt\char`\{}#1{\tt\char`\}}}}
+ |\def\pt{\,{\rm pt}} \def\em{\,{\rm em}} \def\mm{\,{\rm mm}}
+ |\def\inch{''}
+\endcode
+
+ To make a version of the \LaTeX\ logo that should work
+ acceptably with a range of fonts ({\it\LaTeX}, {\bf\LaTeX},
+ {\subsecfont\LaTeX}), I~first define a macro for raising letters
+ until they are flush with the prevailing cap height. I also
+ loosen up the `{\it\TeX}\/' logo (so that it also works with
+ sanserif fonts) and make it set the spacefactor to 1000 (to
+ override \TeX's assumption that a full stop following a capital
+ $X$ isn't the end of a sentence).
+\code
+ |\def\flushtop#1{%
+ | \leavevmode
+ | \begingroup
+ | \setbox0=\hbox{#1}\setbox2=\hbox{X}%
+ | \dimen0=\ht2 \advance\dimen0-\ht0
+ | \raise\dimen0 \box0
+ | \endgroup
+ |}
+\smallbreak
+ |\def\TeX{T\kern-0.1em \lower0.5ex \hbox{E}X\spacefactor1000 }
+ |\def\LaTeX{L\kern-0.1em \flushtop{a}\TeX}
+\endcode
+
+ Occasional paragraphs are written in italics and marked with
+ `note'.
+\notepar
+ The command says `notepar' not just `note' because in my macro
+ files I~use \/|\note| for numbered footnotes (\/{\rm \TeX book},
+ Exercise~15.12).\footnote*{Footnotes in |dtx| files are produced
+ with the plain |\footnote| command.}
+
+ Notes may occasionally be more than one paragraph long.
+\endnotepar
+\code
+ |\def\notepar{
+ | \smallskip
+ | \begingroup
+ | \leftskip2\parindent \advance\rightskip\parindent minus \parindent
+ | \noindent\kern-\parindent{\bf Note}\quad\it
+ | \ignorespaces
+ |}
+\smallbreak
+ |\def\endnotepar{
+ | \smallbreak
+ | \endgroup
+ |}
+\endcode
+%}}} abbrevs
+%}}} formatting
+
+\bigskip\noindent
+ The file is finished with an |\endinput| command; this can be
+ used by other prgorams to check that this file hasn't been
+ truncated by \TeX\ coming to a halt part-way through processing
+ the |dtx| file.
+\code
+ |\endinput
+\endcode
+\endcodefile
+\enddocument
+\bye
+%}}} pdccode
+
+%Local variables:
+%fill-prefix: " "
+%fold-folded-p: t
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdccode.tex b/macros/plain/contrib/pdcmac/pdccode.tex
new file mode 100644
index 0000000000..0f6ecc8fa2
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdccode.tex
@@ -0,0 +1,263 @@
+% pdccode.tex 1.6 1995/03/30 -- self-documenting TeX macros
+
+%%%@TeX-definition-file {
+%%% filename = "$texmf/tex/plain/pdcmac/pdccode.tex",
+%%% version = "1.6",
+%%% date = "1995/03/30",
+%%% package = "pdcmac 1.0",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% codetable = "USASCII",
+%%% keywords = "TeX, plain TeX, macros",
+%%% supported = "Maybe",
+%%% abstract = "Macros for documented TeX macros (DTX files).
+%%% This file was generated by running
+%%% plain TeX on pdccode.dtx",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+%%% Distribute pdccode.dtx only as part of the
+%%% package it came in.",
+%%% dependencies = "",
+%%% }
+
+\message{1.6 <pdc 1995/03/30>}
+
+\toksdef\toksa=0
+\def\rcs#1: #2,v #3 #4 #5 #6 #7 #8$#9\endrcs{
+ \def\filename{#2}
+ \def\fileversion{#3}
+ \def\filedate{#4}
+ \def\fileauthor{#6}
+ \def\filelocker{#8}
+}
+\def\declareactivechar#1{%
+ \toksa\expandafter{\verbatimplains\do#1}%
+ \edef\verbatimplains{\the\toksa }%
+ \catcode`#1\active
+}
+\def\verbatimplains{\do\\\do\{\do\}\do\_\do\$\do\#\do\&\do\%}
+\def\verbatimactives{\do\`\do\'\do\~\do\^\do\ }
+\chardef\other=12
+\newtoks\everyverbatim
+\bgroup \catcode`\^=13 \catcode`\'=13 \catcode`\`=13 \toksa={\egroup
+ \def\setupverbatim{%
+ \frenchspacing
+ \spaceskip0pt \xspaceskip0pt % use spacing of font
+ \def\do##1{\catcode\lq##112 }\verbatimplains
+ \def\do##1{\catcode\lq##1\active }\verbatimactives
+ \let`\ttlq \let'\ttrq
+ \let~\tttilde \let^\ttcircum
+ \the\everyverbatim
+ }
+}\the\toksa
+\def\ttlq{\lower0.125ex \hbox{\char18 }}
+\def\ttrq{\lower0.125ex \hbox{\char19 }}
+\def\tttilde{\lower0.5ex \hbox{\char`\~ }}
+\def\ttcircum{\lower0.5ex \hbox{\char`\^ }}
+\def\defverbatim#1{%
+ \ifcat\noexpand#1\noexpand~\else \declareactivechar#1 \fi
+ \begingroup \uccode`\~=`#1 \uppercase{\toksa={\endgroup
+ \def~{%
+ \leavevmode
+ \begingroup \tt \setupverbatim
+ \catcode`#1\active \let~\endgroup
+ }%
+ }}\the\toksa
+}
+\defverbatim\|
+\hyphenchar\tentt=-1
+\newwrite\CODEwrite
+\def\codefile#1{
+ \ifeof\CODEwrite\else \endcodefile \fi
+ \def\thecodefile{#1} \openout\CODEwrite=#1
+}
+\def\endcodefile{
+ \message{Code written on \thecodefile.}
+ \closeout\CODEwrite
+}
+\def\code{
+ \smallskip
+ \begingroup
+ \let|\CODEline \let\|\CODElinex
+ \let\{=\CODElb \let\}=\CODErb \let\\=\CODEbslash
+ \def~{ } \let\~\CODEtilde
+ \the\everycode
+ \obeylines
+}
+\def\endcode{
+ \smallbreak
+ \endgroup
+}
+\def\CODEline{%
+ \begingroup % matched by \CODElinei
+ \setupverbatim \catcode`\|\other
+ \CODElinei
+}
+\begingroup\catcode`\'=\active \catcode`\`=\active
+ \catcode\lq\@=\catcode\lq\^ \catcode\lq\^=\active
+ \catcode\lq\@@M=\active \toksa={\endgroup %
+ \def\CODElinei#1@@M{%
+ \begingroup\let`\lq \let'\rq %
+ \let^\CODEcircum \let~ \CODEtilde%
+ \edef\tmp{#1}%
+ \write\CODEwrite\expandafter{\tmp}%
+ \endgroup %
+ \indent\the\everycodeline #1\par %
+ \endgroup % matches \CODEline
+ }%
+}\the\toksa
+\begingroup\catcode`\^^M=13 \toksa={\endgroup %
+ \def\CODElinex#1^^M{%
+ \edef\tmp{\write\CODEwrite{#1}}\tmp %
+ {\indent\the\everycodeline #1\par}%
+ }%
+} \the\toksa
+\begingroup\catcode`\/=0 \catcode`\\=\other /toksa={/endgroup
+ /def/CODEbslash{\}
+}/the/toksa
+\begingroup\catcode`\^=\other \toksa={\endgroup
+ \def\CODEcircum{^}
+}\the\toksa
+\begingroup\catcode`\~=\other \toksa={\endgroup
+ \def\CODEtilde{~}
+}\the\toksa
+\begingroup\catcode`\%=\other \toksa={\endgroup
+ \def\%{%}
+}\the\toksa
+\begingroup\catcode`\~=\other \toksa={\endgroup
+ \def\CODEtilde{~}
+}\the\toksa
+\begingroup\catcode`\[=1 \catcode`\]=2
+ \catcode`\{=\other \catcode`\}=\other
+ \toksa=[\endgroup
+ \def\CODElb[{] \def\CODErb[}]
+]\the\toksa
+\newtoks\everycode
+\newtoks\everycodeline
+\everycode{\tt \baselineskip=0.8\baselineskip \lineskiplimit=0pt }
+\newcount\lineno
+\everycodeline{\llap{$ \global\advance\lineno1
+ \scriptstyle\the\lineno $\enspace}%
+ \mark\expandafter{\the\lineno}}
+\let\document\relax \let\enddocument\relax
+\lefthyphenmin=3 \righthyphenmin=2 \errorcontextlines10000
+\parindent=2em \hsize=36\fontdimen6\tentt \advance\hsize\parindent
+\hoffset=210mm \advance\hoffset-\hsize \advance\hoffset-25mm
+\newdimen\leftmargin \leftmargin=\hoffset \advance\leftmargin-25mm
+\advance\hoffset-1in
+\voffset=297mm \advance\voffset-11in
+\advance\voffset7mm \advance\voffset20pt
+\vsize=297mm \advance\vsize-2\voffset \advance\vsize-2\baselineskip
+\advance\voffset-1in
+\def\do#1{\fontdimen3#1=0pt \fontdimen4#1=0pt }
+\do\tenrm \do\tenit \do\tenbf
+\rightskip=0pt plus 2em minus 2pt \adjdemerits=0 \tolerance=500
+\parfillskip=0pt plus 0.8\hsize
+\def\author#1{\def\theauthor{#1}} \author{P. Damian Cugley}
+\font\titlefont=cmssbx10 scaled \magstep3
+\def\title#1{
+ \vglue2\baselineskip
+ \begingroup \parindent-\leftmargin \hyphenpenalty10000 \titlefont
+ #1\smallskip
+ \endgroup
+ \leftline{Version \fileversion,
+ last changed \fileauthor\space \mungedate\filedate}
+ \ifx\filelocker\empty\else
+ \leftline{Edited by \filelocker\unskip\ \today}
+ \fi
+ \medskip
+ \hrule \vskip1pt \hrule \vskip1pt \hrule \vskip1pt \hrule
+ \medskip
+ \rightline{\theauthor}
+ \bigskip
+ \headline{\hfil\global\headline{%
+ \sevenbf \hskip-\leftmargin \themarks \hfil #1
+ \fileversion
+ \ifx\filelocker\empty
+ \space\mungedate\filedate
+ \else
+ e\space\today
+ \fi
+ }}
+}
+\def\themarks{%
+ \ifx\firstmark\empty\else
+ \firstmark
+ \ifx\firstmark\botmark \else --\botmark \fi
+ \fi
+}
+\def\today{\mungedate{\number\year/\twodigits\month/\twodigits\day}}
+\def\twodigits#1{\ifnum#1<10 0\fi \number#1}
+\def\mungedate#1{$ \textfont0=\font \mathcode`/="7B #1 $}
+\font\secfont=cmssdc10 at 12pt
+\font\subsecfont=cmssi10
+\newcount\seccount
+\newcount\subseccount
+\def\section#1{%
+ \advance\seccount1 \subseccount=0
+ \bigbreak
+ \begingroup
+ \secfont \hyphenpenalty=10000 \tolerance=1000
+ \rightskip=0pt plus 2em
+ \noindent\llap{\number\seccount.\enspace}#1
+ \medskip
+ \endgroup
+ \noindenttrue
+}
+\def\subsec#1{%
+ \advance\subseccount1
+ \medbreak
+ \begingroup
+ \subsecfont \hyphenpenalty=10000 \tolerance=1000
+ \rightskip=0pt plus 2em
+ \noindent\llap{\number\seccount.%
+ \number\subseccount.\enspace}#1
+ \nobreak\smallskip
+ \endgroup
+ \noindenttrue
+}
+\newif\ifnoindent
+\everypar{%
+ \ifnoindent
+ {\setbox0=\lastbox}\global\noindentfalse
+ \fi
+}
+\newskip\footnoterightskip \footnoterightskip=\rightskip
+\catcode`@=11
+\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\footnoterightskip
+ \spaceskip\z@skip \xspaceskip\z@skip \rm
+ \textindent{#1}\footstrut\futurelet\next\fo@t}
+\catcode`@=11
+\def\<#1>{\leavevmode\hbox{$\langle$\it#1\/$\rangle$}}
+\def\cs#1{\leavevmode\hbox{\tt\char`\\#1}}
+\def\arg#1{\leavevmode\hbox{{\tt\char`\{}#1{\tt\char`\}}}}
+\def\pt{\,{\rm pt}} \def\em{\,{\rm em}} \def\mm{\,{\rm mm}}
+\def\inch{''}
+\def\flushtop#1{%
+ \leavevmode
+ \begingroup
+ \setbox0=\hbox{#1}\setbox2=\hbox{X}%
+ \dimen0=\ht2 \advance\dimen0-\ht0
+ \raise\dimen0 \box0
+ \endgroup
+}
+\def\TeX{T\kern-0.1em \lower0.5ex \hbox{E}X\spacefactor1000 }
+\def\LaTeX{L\kern-0.1em \flushtop{a}\TeX}
+\def\notepar{
+ \smallskip
+ \begingroup
+ \leftskip2\parindent \advance\rightskip\parindent minus \parindent
+ \noindent\kern-\parindent{\bf Note}\quad\it
+ \ignorespaces
+}
+\def\endnotepar{
+ \smallbreak
+ \endgroup
+}
+\endinput
diff --git a/macros/plain/contrib/pdcmac/pdccode2.tex b/macros/plain/contrib/pdcmac/pdccode2.tex
new file mode 100644
index 0000000000..513600e9cd
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdccode2.tex
@@ -0,0 +1,292 @@
+%{{{ pdccode.tex -- used to make self-documenting TeX code
+%{{{ rcs
+
+%%% version: $Revision: 1.2 $
+
+% A simpler and less featureful system than the LaTeX "doc" package is used.
+% Lines between \code and \endcode are printed to a file
+% set with the \codefile{xx} command. They are also listed
+% "verbatim"
+
+\def\rcs#1: #2,v #3 #4 #5 #6 #7\endrcs{
+ \def\filename{#2}
+ \def\fileversion{#3}
+ \def\filedate{#4}
+ \def\fileauthor{#6}
+}
+
+\rcs$Id: pdccode.tex,v 1.2 1994/12/03 16:26:00 pdc Exp pdc $\endrcs
+\message{\fileversion\space<\fileauthor\space\filedate>}
+%}}} rcs
+%{{{ misc macros
+
+\errorcontextlines10000
+\def\expcs#1#2{\expandafter#1\csname#2\endcsname}
+\def\noexpcs{\expcs\noexpand}
+
+%}}} misc macros
+%{{{ verbatim text
+
+%% Define verbatim text using |...|
+% This is used in the commentary
+
+% Tell the verbatim macros that #1 is an active char; this
+% makes sure that the character will be catcoded appropriately
+% when in verbatim mode. #1 should be a somethign that will
+% wortk after "`".
+\def\declareactivechar#1{%
+ \toks0=\expandafter{\verbatimplains\do#1}%
+ \edef\verbatimplains{\the\toks0 }%
+ \catcode`#1=13
+}
+
+\def\verbatimplains{\do\\\do\{\do\}\do\_\do\$\do\#\do\&\do\%} % \{}_$#&%
+\def\verbatimactives{\do\`\do\'\do\~\do\^\do\ } % `'~^<space>
+
+% \setupverbatim -- makes almost all special characters catcode 12
+% except for ` ' ~ ^, which produce slightly lowered glyphs
+\bgroup \catcode`\^=13 \catcode`\'=13 \catcode`\`=13 \toks0={\egroup
+ \def\setupverbatim{%
+ \frenchspacing
+ \spaceskip0pt \xspaceskip0pt % use spacing of font
+ \def\do##1{\catcode\lq##1=12 }\verbatimplains
+ \def\do##1{\catcode\lq##1=13 }\verbatimactives
+ \let`=\ttlq \let'=\ttrq
+ \let~=\tttilde \let^=\ttcircum
+ \the\everyverbatim
+ \hyphenchar\font=-1
+ }
+}\the\toks0
+
+\def\ttlq{\lower0.125ex \hbox{\char18 }}
+\def\ttrq{\lower0.125ex \hbox{\char19 }}
+\def\tttilde{\lower0.5ex \hbox{\char`\~ }}
+\def\ttcircum{\lower0.5ex \hbox{\char`\^ }}
+
+\newtoks\everyverbatim % expanded at start of every verbatim text
+
+
+% Define #1 as a self-matching verbatim character.
+% #1 must be a one-char control-sequence
+\def\defverbatim#1{%
+ \declareactivechar#1
+ \begingroup \uccode`\~=`#1 \uppercase{\toks0={\endgroup
+ \def~{%
+ \leavevmode
+ \begingroup % matched by closing char
+ \tt
+ \setupverbatim
+ \catcode`#1=13 \let~=\endgroup
+ }%
+ }}\the\toks0
+}
+
+\declareactivechar\| \defverbatim\|
+%}}} verbatim text
+%{{{ writing code sections
+
+% \docodefiles is \do{xx}\do{yy} for a set of file identifiers
+% Each file identifier xx has \ifxx, \xxfalse, \xxtrue, \xxwrite
+% I am greatly hampered by the fact that \newwrite and \newif are \outer!
+\def\docodefiles{}
+
+\def\codefile#1#2{
+ \toks0=\expandafter{\docodefiles\do{#1}}
+ \edef\docodefiles{\the\toks0 }
+ \expcs\CODEnewwrite{#1write}
+ \CODEnewif{#1} \csname#1true\endcsname
+ \expcs\openout{#1write}=#2
+ \expcs\def{filename#1}{#2}
+}
+\catcode`@=11
+\def\CODEnewwrite#1{\alloc@7\write\chardef\sixt@@n #1}
+\catcode`@=12
+\def\CODEnewif#1{%
+ \expcs\edef{#1true}{\let\noexpcs{if#1}\noexpand\iftrue}
+ \expcs\edef{#1false}{\let\noexpcs{if#1}\noexpand\iffalse}
+ \csname#1false\endcsname
+}
+
+\def\allfilesfalse{\begingroup
+ \def\do##1{\global\csname##1false\endcsname}\docodefiles
+ \endgroup
+}
+\def\allfilestrue{\begingroup
+ \def\do##1{\global\csname##1true\endcsname}\docodefiles
+ \endgroup
+}
+
+
+\def\endcodefile#1{
+ \expcs\closeout{#1write}
+ \csname #1false\endcsname
+ \message{Code written to \csname filename#1\endcsname.}
+}
+
+\def\code{
+ \smallskip
+ \begingroup
+ \let|\CODEline % code line without expansion
+ \let\|\CODElinex % code line with expansion
+ \let\{=\CODElb \let\}=\CODErb \let\\=\CODEbslash \def~{ }
+ \the\everycode
+ \obeylines
+}
+\def\endcode{
+ \smallbreak
+ \endgroup
+}
+\def\CODEline{%
+ \begingroup
+ \setupverbatim
+ \catcode`\|=12
+ \CODElinei
+}
+
+
+% In \CODFElinei, We must redefine the characters that are active
+% within verbatim text to expand to their catcode-12 equivalents when
+% they are written to the code file. Since one of these is ^, we
+% temporarily give @ the meaning of ^ so that we may safely munge the
+% catcode of ^.
+
+\begingroup \catcode`\'=13 \catcode`\`=13
+ \catcode\lq\@=\catcode\lq\^ \catcode\lq\^=13
+ \catcode\lq\@@M=13 \toks0={\endgroup%
+ \def\CODElinei#1@@M{%
+ \begingroup\let`\lq \let'\rq \let^\CODEcircum \let~\CODEtilde %
+ \edef\tmp{{#1}}%
+ \def\do##1{\csname if##1\endcsname %
+ \expcs\write{##1write}\tmp \fi %
+ }\docodefiles %
+ \endgroup
+ \indent\the\everycodeline #1\par %
+ \endgroup %
+ }%
+ \def\CODElinex#1@@M{%
+ \def\do##1{\csname if##1\endcsname %
+ \edef\filename{\csname filename##1\endcsname} %
+ \edef\tmp{{#1}} %
+ \expcs\write{##1write}\tmp \fi %
+ }\docodefiles %
+ \def\filename{\<filename>}%
+ {\indent\the\everycodeline #1\par}%
+ }%
+}\the\toks0
+
+% Make macros which expand to various special characters, with catcode 12:
+\begingroup\catcode`\/=0 \catcode`\\=12 /toks0={/endgroup
+ /def/CODEbslash{\}
+}/the/toks0
+\begingroup\catcode`\^=12 \toks0={\endgroup
+ \def\CODEcircum{^}
+}\the\toks0
+\begingroup\catcode`\~=12 \toks0={\endgroup
+ \def\CODEtilde{~}
+}\the\toks0
+\begingroup\catcode`\%=12 \toks0={\endgroup
+ \def\%{%}
+}\the\toks0
+\begingroup\catcode`\[=1 \catcode`\]=2 \catcode`\{=12 \catcode`\}=12 \toks0=[\endgroup
+ \def\CODElb[{] \def\CODErb[}]
+]\the\toks0
+\newtoks\everycode
+\newtoks\everycodeline
+
+\def\filenamesanssuffix{\expandafter\CODEsanssuffix\filename.\CODEsanssuffix}
+\def\CODEsanssuffix#1.#2\CODEsanssuffix{#1}
+%}}} writing code sections
+%{{{ layout
+
+
+\newcount\seccount
+\newcount\subseccount
+\font\secfont=cmssdc10 at 12pt
+\font\subsecfont=cmssi10
+
+\def\section#1{%
+ \advance\seccount1 \subseccount=0
+ \bigbreak
+ \begingroup
+ \secfont \hyphenpenalty=10000 \tolerance=1000
+ \parskip=0pt \parindent=0pt \rightskip=0pt plus 2em
+ \number\seccount. #1
+ \medskip
+ \endgroup
+}
+
+\def\subsec#1{%
+ \advance\subseccount1
+ \medbreak
+ \begingroup
+ \subsecfont \hyphenpenalty=10000 \tolerance=1000
+ \parskip=0pt \parindent=0pt \rightskip=0pt plus 2em
+ \number\seccount.\number\subseccount. #1
+ \nobreak\smallskip
+ \endgroup
+}
+
+\def\notepar{
+ \smallskip
+ \begingroup
+ \narrower\noindent\hang
+ {\bf Note}\quad\it
+ \ignorespaces
+}
+\def\endnotepar{
+ \smallbreak
+ \endgroup
+}
+
+% Leave a largish right margin; eventually marginalia will go
+% there. Allow enough line length for 80-character code lines. This
+% makes the text lines a bit longer than I'd like but I don't want to
+% have to resort to having code lines in a smaller font.
+\hsize=40em \advance\hsize\parindent
+
+% (297mm-11in) is the strip of paper lost if printed on USA
+% letter paper; allow another bit for some laserprinters that
+% can't print to the edge of the paper.
+\voffset=297mm \advance\voffset by -11in \advance\voffset by 0.25in
+\vsize=297mm \advance\vsize-2\voffset \advance\vsize-2\baselineskip
+\advance\voffset-1in
+
+\def\do#1{\fontdimen3#1=0pt \fontdimen4#1=0pt }
+\do\tenrm \do\tenit \do\tenbf
+
+\rightskip=0pt plus 2em minus 2pt
+\tolerance=500
+\lefthyphenmin=3 \righthyphenmin=2
+
+%}}} layout
+%{{{ abbrevs
+
+\def\<#1>{\leavevmode\hbox{$\langle$\it#1\/$\rangle$}}
+\def\cs#1{\leavevmode\hbox{\tt\char`\\#1}}
+\def\arg#1{\leavevmode\hbox{{\tt\char`\{}#1{\tt\char`\}}}}
+\def\pt{\,{\rm pt}}
+\def\flushtop#1{%
+ \leavevmode
+ {%
+ \setbox0=\hbox{#1}\setbox2=\hbox{X}%
+ \dimen0=\ht2 \advance\dimen0-\ht0
+ \raise\dimen0 \box0
+ }%
+}
+\def\TeX{T\kern-0.1em\lower0.5ex\hbox{E}X}
+\def\LaTeX{L\kern-0.167em\flushtop{a}\TeX}
+
+%}}} abbrev
+\newskip\footnoterightskip \footnoterightskip=\rightskip
+\catcode`@=11
+\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\footnoterightskip
+ \spaceskip\z@skip \xspaceskip\z@skip \rm
+ \textindent{#1}\footstrut\futurelet\next\fo@t}
+\catcode`@=11
+
+
+%}}} pdccode.tex
diff --git a/macros/plain/contrib/pdcmac/pdcfmt2.dtx b/macros/plain/contrib/pdcmac/pdcfmt2.dtx
new file mode 100644
index 0000000000..918a960d64
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcfmt2.dtx
@@ -0,0 +1,1194 @@
+% pdcfmt2.dtx -- documentation & source for pdcfmt2.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCFMT2 -- Formatting Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcfmt2.dtx",
+%%% version = "$Revision: 2.4 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/04/06 11:55:16 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file pdcfmt2.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% 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.",
+%%% notice = "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.",
+%%% notice = "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.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcfmt2
+%{{{ preamble
+
+\relax
+\input pdccode
+\document
+\rcs$Id: pdcfmt2.dtx,v 2.4 1995/04/06 11:55:16 pdc Exp $\endrcs
+
+\def\example{
+ \smallskip\hrule\nobreak\smallskip
+ \dimen0=\hsize \advance\dimen0-1pc \divide\dimen0 2
+ \halign to \hsize\bgroup\vtop{\tt\def~{\hfil\break} \def\\{\char`\\\relax} \hsize=\dimen0 ##}\tabskip=0pt plus 1fil&
+ \vtop{\hsize=\dimen0 ##}\tabskip=0pt\cr
+}
+\def\endexample{
+ \crcr\egroup
+ \nobreak\smallskip\hrule\smallskip
+}
+
+\codefile{pdcfmt2.tex}
+%}}} preamble
+%{{{ introduction
+
+\author{P. Damian Cugley}
+\title{PDCFMT2---Formatting Macros}
+\section{Introduction}
+
+ This document describes |pdcfmt2.tex|, a collection of
+ formatting macros for plain \TeX\ documents. For example, it
+ defines commands for making bulleted lists, verbatim text, and
+ generic headings. For longer documents, a higher-level `style
+ file' like |pdccmdoc.tex| will define commands to start sections
+ and generate a table of contents and so on.
+
+ The definitions file and the printed documentation are both in
+ |pdcfmt2.dtx|, a `documented \TeX\ macros' file\footnote*{The
+ \LaTeX~2e distribution uses files with the `|dtx|' suffix for
+ similar purposes.} which, when processed by plain \TeX,
+ generates a fresh copy of |pdcfmt2.tex| in the current directory
+ in addition to the |dvi| file. This ensures that the printed
+ documentation and the code it describes are identical. The
+ |dtx| file uses the macros in |pdccode.tex|.
+
+ The name of the macros file ends in `-|2|' to prevent confusion
+ with |pdcfmt.tex| version 1.1.10, with which it is slightly
+ incompatible.
+
+%}}} introduction
+%{{{ File identification
+\section{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file.
+
+\code
+ \|\% pdcfmt2.tex \fileversion~\filedate~-- macros for formatting
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcfmt2.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Formatting macros for plain TeX documents.
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+
+%}}} getting started
+%{{{ internal
+
+\section{Internal definitions}
+
+ Most internal control sequence names will start with `|FMT|'.
+ Here are a few miscellaneous definitions used to save a token
+ here or there.
+
+ I will often use |\toksa| to create definitions containing
+ characters with unusual catcodes. The idiom is
+$$\halign{\indent#\hfil\cr
+ |\begingroup| \<assignments> |\toksa={\endgroup|\cr
+ \quad\<definitions>\cr
+ |} \the\toksa|\cr
+}$$
+ When |\toksa| is expanded, it closes the group (undoing the
+ \<assignments>) but then scans the \<definition> using the
+ catcodes set by \<assignments>. (In extreme cases, the
+ definition of |\toksa| might be enclosed in |\uppercase|, to get
+ strange characters into a definiton.)
+
+ The advantage of this idiom over using |\gdef| in a group is
+ that the definitions need not be global. Avoiding global
+ assignments makes it more likely that the document will be
+ embeddable in other documents.
+
+ Using |\toksa| instead of |\toks0| is more robust when using
+ |\uppercase|, because digits are be given |\uccode| values by
+ |maamac.tex|.
+\code
+ |\toksdef\toksa=0
+ |\chardef\other=12
+\endcode
+
+%}}} internal
+%{{{ verbatim text
+
+\section{Verbatim text}
+
+ `Verbatim' text means text designed to match the ASCII
+ characters in the manuscript file as closely as possible. It
+ kis most often used in computer manuals, where commands typed to
+ a computer or the contents of text files are to be presented.
+ Within verbatim text, most of \TeX's special characters are
+ temporarily disabled.
+
+\subsec{Lists of active chararcters}
+
+ The verbatim text macros need to know if any characters have
+ been made special apart from the usual ones. This command tells
+ the verbatim macros that |#1| is an active char; in addition to
+ setting its catcode, this makes sure that the character will be
+ re-catcoded appropriately when in verbatim mode. |#1| should be
+ a something that will work after `|`|'; usually this means a
+ one-character control sequence.
+\code
+ |\def\declareactivechar#1{%
+ | \toksa\expandafter{\verbatimplains\do#1}%
+ | \edef\verbatimplains{\the\toksa }%
+ | \catcode`#1\active
+ |}
+\endcode
+
+ Two list macros in the style of |\dospecials| are defined. The
+ first is for characters that must be set to catcode~12, such as
+ `|\|', `|{|', `|}|', `|_|', `|$|', `|#|', `|&|', and `|%|'. The
+ other is for a few characters that are given catcode~13, such as
+ `|`|', `|'|', `|~|', `|^|' and SP.
+\code
+ |\def\verbatimplains{\do\\\do\{\do\}\do\_\do\$\do\#\do\&\do\%}
+ |\def\verbatimactives{\do\-\do\`\do\'\do\~\do\^\do\ }
+\smallbreak
+ |\chardef\other=12
+\endcode
+
+\subsec{Setting up verbatim mode}
+
+ This is a macro common to various verbatim text modes. The
+ default spacing of whatever font is used, without any
+ adjustments of spacefactor for punctuation. The characters
+ `|`|', `|'|', `|~|', and `|^|' are produce slightly lowered
+ glyphs.
+\code
+ |\newtoks\everyverbatim
+\smallbreak
+ |\bgroup \catcode`\-=13\catcode`\^=13 \catcode`\'=13 \catcode`\`=13 \toksa={\egroup
+ | \def\setupverbatim{%
+ | \frenchspacing
+ | \spaceskip0pt \xspaceskip0pt % use spacing of font
+ | \def\do##1{\catcode\lq##112 }\verbatimplains
+ | \def\do##1{\catcode\lq##1\active }\verbatimactives
+ | \let`\ttlq \let'\ttrq
+ | \let~\tttilde \let^\ttcircum \let-\ttminus
+ | \the\everyverbatim
+ | }
+ |}\the\toksa
+\endcode
+
+ Here are the definitions for the munged glyphs. These are only
+ necessary in CM Typewriter; when using a PostScript font,
+ different definitions would be necessary.
+
+ The names `rq' and `lq' are based on the use of |\lq| and |\rq|
+ in plain \TeX. An alternative definition for |\ttrq| would be
+ |\chardef\ttrq="0D|, producing `{\tt\char"0D }'.
+\code
+ |\def\ttlq{\lower0.125ex \hbox{\char18 }}
+ |\def\ttrq{\lower0.125ex \hbox{\char19 }}
+ |\def\tttilde{\lower0.5ex \hbox{\char`\~ }}
+ |\def\ttcircum{\lower0.5ex \hbox{\char`\^ }}
+ |\def\ttminus{-}
+\endcode
+ This makes the difference between |`'^~| and
+ {\tt`'\char`\^\char`\~}.
+
+ The macro |\ttminus| is included because it is needed for
+ PostScript font support.
+
+\subsec{Defining a self-matching character for verbatim text}
+
+ A macro for defining a self-matching verbatim character (I~got
+ the idea of a macro for declaring verbatim characters from the
+ \LaTeX~2e documentation macros). |#1| must be a one-character
+ control sequence. If it isn't active already, then
+ |\declareactivechar| is applied to it first.
+\code
+ |\def\defverbatim#1{%
+ | \ifcat\noexpand#1\noexpand~\else \declareactivechar#1 \fi
+ | \begingroup \uccode`\~=`#1 \uppercase{\toksa={\endgroup
+ | \def~{%
+ | \leavevmode
+ | \begingroup \tt \setupverbatim
+ | \catcode`#1\active \let~\endgroup
+ | }%
+ | }}\the\toksa
+ |}
+\endcode
+ Note that there must be a font called |\tt| for it to switch to.
+ (The catcode of |#1| is set to 13 after calling |\setupverbatim|
+ because |#1| will be included in |\verbatimplains|.)
+
+ Finally, we define vertical bar as the conventional
+ self-matching verbatim-mode character.
+\code
+ |\defverbatim\|
+\endcode
+ Both |\defverbatim| and |\defineactivechar| have local scope.
+
+\subsec{List a file verbatim}
+
+ This does something similar to the |lines| environment (see
+ below), except here an external file is read in verbatim (see
+ {\it\TeX book} Appendix~D, Section~3). The
+ |\startlinenumbering| macro may be put in the |\everylisting|
+ token register to create a listing with numbered lines.
+\code
+ |\newtoks\everylisting
+\smallbreak
+ |\def\listfile#1{
+ | \medskip
+ | \begingroup
+ | \parindent=0pt \parskip=0pt
+ | \def\par{\null\endgraf}\obeylines
+ | \setupverbatim \maketabstab
+ | \tt \the\everylisting
+ | \input#1
+ | \endgroup
+ | \medskip\noindent\ignorespaces
+ |}
+\endcode
+ This macro redefines character |^^I| (horizontal tab) to produce
+ the equivalent of eight spaces. This isn't quite the same as
+ what HTs are used for with UNIX files, but it works adequately
+ if all your tabs are at the start of the line (i.e., if tabs are
+ used only for indentation, not to make tables).
+\code
+ |{\catcode`\^^I=\active
+ | \gdef\maketabstab{\catcode`\^^I\active \def^^I{\hskip 4em}}
+ |}
+\endcode
+
+%}}} verbatim text
+%{{{ everypar
+
+\section{Everypar hacks}
+
+\subsec{Parameters}
+
+ The following may be set by higher-level macros to change the
+ apearance of the next paragraph.
+
+ If the flag |\ifnoindent| is set, then the indentation of the
+ next paragraph will be removed (by deleting the box added by
+ \TeX's |\indent| primitive). Thus |\noindenttrue| works like
+ |\noindent|, except that there may be blank lines between
+ |\noindenttrue| and the paragraph it affects.
+\code
+ |\newif\ifnoindent
+\endcode
+ This flag is reset globally once it has had its effect.
+
+ If the box |\parbox| is non-void, then its value is typeset in
+ the left margin of the next paragraph. (At present this does an
+ implicit |\noindenttrue| but later versions may allow the next
+ paragraph to be indented.) The righthand edge of the parbox
+ will be distance |\parboxsep| from the left edge of the text
+ area.
+\code
+ |\newbox\parbox
+ |\newdimen\parboxsep \parboxsep=1pc
+\endcode
+
+\subsec{Setting \cs{everypar}}
+\code
+ |\everypar={%
+ | \ifvoid\parbox
+ | \ifnoindent {\setbox0=\lastbox}\global\noindentfalse \fi
+ | \else
+ | {\setbox0=\lastbox}\global\noindentfalse
+ | \dp\parbox=0pt
+ | \hbox to 0pt{\hss \box\parbox \hskip\parboxsep}%
+ | \fi
+ |}
+\endcode
+%}}} everypar
+%{{{ environment intrinsics
+
+\section{Environment infrastructure}
+
+ An environment is a structure used to typeset textual elements
+ consisting of several \TeX\ paragraphs (usually embedded within
+ one conceptual paragraph). It is a concept like \LaTeX\
+ environments, but with the syntax changed to be more
+ plain-\TeX-like.
+
+ Since environments have one argument that may span many lines in
+ the file we use more verbose brackets than |{|--|}| to make it
+ easier to spot where they begin and end. This is a structure in
+ a document looking like this:
+ $$
+\vbox{\halign{#\hfil\cr
+ |\|\<name>\<args>\cr
+ \quad\dots\cr
+ |\end|\<name>\cr
+}}
+ $$
+
+ A new environment is defined by defining macros called
+ |\|\<name> and |\end|\<name>. Within the |\|\<name> and
+ |\end|\<name> macros, calls to |\beginthe| and |\endthe| are
+ used to check that environments are nested properly.
+\code
+ |\def\beginthe#1{%
+ | \begingroup\def\PDCFMTblockname{#1}%
+ |}
+\smallbreak
+ |\def\endthe#1{%
+ | \def\tmp{#1}%
+ | \ifx\tmp\PDCFMTblockname
+ | \endgroup
+ | \else
+ | \errmessage{You should have said \string\endthe{\blockname}}%
+ | \fi
+ |}
+\endcode
+
+\subsec{A generic end-of-environment macro}
+
+ This macro does a |\smallskip| (if there is not already a larger
+ skip on the current list), and sets the `noindent' flag so that
+ the following \TeX\ paragraph is not indented.
+\code
+ |\def\PDCFMTendenv#1{
+ | \smallskip
+ | \endthe{#1}
+ | \global\noindenttrue
+ |}
+\endcode
+
+ Where an environment describes text that should be indented,
+ usually |\parindent| should be used (for consistency). If
+ |\parindent| is zero we still want to indent the text, and we
+ use |\envindent| to describe how much to indent it by.
+\code
+ |\newdimen\envindent \envindent=1pc
+\smallskip
+ |\def\PDCFMTindent{%
+ | \ifdim\parindent>0pt
+ | \parindent
+ | \else
+ | \envindent
+ | \fi
+ |}
+\endcode
+
+%}}} environment intrinsics
+%{{{ quotations
+
+\section{Quotations}
+
+ This is a simple environment, with the left margin indented and
+ the first paragraph in the quotetd text not indented.
+\example
+ It is ... who said~
+ \\quotation~
+ \indent Shookum hip rallo dyne.~
+ \\endquotation~
+ Indeed, it burgle gurgler.
+&
+ It is interesting to remember the words of
+ Spencone Tipeth, who said
+ \smallskip\leftskip\parindent \noindent
+ Shookum hip rallo
+ dyne.\smallskip\leftskip0pt \noindent Indeed, it burgle gurgler.
+\endexample
+The token
+ register |\everyquotation| might be used to arrange for all
+ quotations to be in smaller type with
+ $$\hbox{|\everyquotation={\smallfonts}|}$$
+\code
+ |\newtoks\everyquotation
+\smallbreak
+ |\def\quotation{
+ | \smallskip
+ | \beginthe{quotation}
+ | \advance\leftskip\PDCFMTindent
+ | \noindenttrue
+ | \the\everyquotation
+ |}
+\smallbreak
+ |\def\endquotation{\PDCFMTendenv{quotation}}
+\endcode
+ The differences from using |{\narrower|\dots|\par}| (apart from
+ how it looks in the source file) include (a)~the right margin
+ isn't indented; (b)~it indents by |\envindent| if there is no
+ |\parindent| and (c)~it is preceeded and followed by a
+ smallskip.
+%}}} quotations
+%{{{ textlists (bullets + numbered)
+
+\section{Textlists---bulleted or numbered lists}
+
+ Here's a generic list-of-items environment, used to implemented
+ bulleted and numbered lists. Each item is started with the
+ convenient |\\| macro (and so may contain more than one
+ paragraph). It is called a `textlist' to distinguish it from
+ other meanings of the word `list'. Usually textlists will be
+ generated with higher-level macros like |\bullets| and
+ |\numbered|.
+
+\subsec{A generic textlist environment}
+
+ The token register |\everytextlist| is expanded at the start
+ of every textlist. The level of nesting is recorded in
+ |\textlistdepth| (a to-level list is depth~0, a list inside
+ that is depth~1, and so on). The flag |\ifnumbered| controls
+ whether items are numbered (using |\numberfordepth|) or
+ bulleted (using |\bulletfordepth|).
+\code
+ |\newtoks\everytextlist
+ |\newif\ifnumbered
+ |\newcount\textlistdepth \textlistdepth=-1
+ |\newcount\textlistcount
+\smallbreak
+ |\def\textlist{%
+ | \par
+ | \beginthe{textlist}
+ | \advance\textlistdepth 1
+ | \textlistcount0
+ | \def\\{
+ | \smallskip\noindent
+ | \advance\textlistcount1
+ | \llap{%
+ | \ifnumbered
+ | \numberfordepth\textlistdepth\textlistcount
+ | \else
+ | \bulletfordepth\textlistdepth
+ | \fi\enspace}%
+ | \ignorespaces
+ | }
+ | \advance\leftskip\PDCFMTindent
+ | \the\everytextlist
+ |}
+\smallbreak
+ |\def\endtextlist{\PDCFMTendenv{textlist}}
+\endcode
+
+\subsec{Bulleted lists}
+
+ This describes a bulleted list, where each paragraph is indented
+ and preceeded by a mark in the margin.
+\example
+ I would like to make...~\\bullets~\\\\ this point; and~\\\\ that
+ point~\\endbullets~And so on and so forth.
+& I would like to make the following very important and relevant
+ itemized points:\smallskip\item{$\bullet$}this point;
+ and\smallskip\item{$\bullet$}that
+ point\smallskip\noindent And so on and so forth.
+\endexample
+Bullets environments may
+ be nested, in which case different marks are used. The sign is
+ chosen with |\bulletfordepth|.
+\code
+ |\newtoks\everybullets
+\smallbreak
+ |\def\bullets{\textlist \numberedfalse \the\everybullets}
+ |\let\endbullets=\endtextlist
+\smallbreak
+ |\def\bulletfordepth#1{%
+ | \ifcase#1 $\bullet$\or --\or $\circ$\else $\cdot$\fi
+ |}
+\endcode
+
+
+\subsec{Numbered lists}
+
+ The numbered list is similar. The style of numbering changes
+ with the listing depth; you can change this by redefining
+ |\numberfordepth|.
+ $$
+\centerline{\vbox{\halign{#\hfil&\qquad\hfil# &&\hfil# \cr
+ Depth 0&1.&2.&3.&\dots\cr
+ Depth 1&(1)&(2)&(3)&\dots\cr
+ Depth 2&({\it a\/})&({\it b\/})&({\it c\/})&\dots\cr
+ Depth 3+&(i)&(ii)&(iii)&\dots\cr
+}}}
+ $$
+ There is also a token regieter |\everynumbered| for any extra
+ customization. This is read after |\everytextlist|.
+\code
+ |\newtoks\everynumbered
+\smallbreak
+ |\def\numbered{\textlist \numberedtrue \the\everynumbered}
+ |\let\endnumbered=\endtextlist
+\smallbreak
+ |\def\numberfordepth#1#2{%
+ | \ifcase#1 \n{\number#2}.\or (\n{\number#2})\or
+ | ({\it\alphabetletter#2\/})\else (\romannumeral#2)\fi
+ |}
+\endcode
+ It turns out that sometimes it is useful to be able to impose a
+ format on numbers generated by formatting macros. For example,
+ I~occasionally find it useful to force all numbers to be
+ generated in maths mode. To do this, all numbers generated by
+ macros are enclosed in |\n{|--|}|. By default, |\n| is
+ equivalent to |\relax|.
+\code
+ |\let\n\relax
+\endcode
+
+\subsec{Picking a letter of the alphabet}
+
+ This macro behaves as much like the primitives |\number| and
+ |\romannumeral| as it can: it expands entirely within \TeX's
+ mouth, and so may be used in |\edef|s and the like. It produces
+ |???| or |!!!| if its argument is not in the range 1--26.
+ The macro is defined so as to reduce the number of tokesn to be
+ skipped when |#1| is less than 6.
+\code
+ |\def\alphabetletter#1{%
+ | \ifcase#1 ??? \or a\or b\or c\or d\or e\else
+ | \xxxalphabetletter#1\fi
+ |}
+ |\def\xxxalphabetletter#1{%
+ | \ifcase#1 \or\or\or\or\or\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 !!!\fi
+ |}
+\endcode
+
+%}}} textlists (bullets + numbered)
+%{{{ tagged list
+
+\section{Tagged lists}
+
+ In other words, description lists. Each paragraph starts with
+ the `tag' set either in the left margin or sticking in to the
+ current line if it is too long to fit. The tag for each
+ paragraph is introduced with `|\\|\arg{\<text>}'.
+
+ The maximum width of tag labels (including the 1\thinspace en
+ space that goes between label and text) in is stored in
+ |\tagmaxwidth|. If there is not room, then the label is run on
+ in to the paragraph and separated from the text by a quad space.
+\code
+ |\newdimen\tagmaxwidth
+\endcode
+ As well as giving a new definition to the |\\| macro, the
+ |\tagged| command mast choose a value for |\tagmaxwidth|. If
+ there is a large left margin (signalled by giving |\leftmargin|
+ a positive value) then tags will go in there; otherwise the text
+ will be indented and the amount of indentation used as the
+ maximum label width.
+\code
+ |\newtoks\everytagged
+\smallbreak
+ |\def\tagged{%
+ | \par
+ | \beginthe{tagged}
+ | \let\\\TAG
+ | \ifdim\leftmargin=0pt
+ | \tagmaxwidth\PDCFMTindent
+ | \else
+ | \tagmaxwidth\leftmargin
+ | \fi
+ | \the\everytagged
+ | \ifdim\tagmaxwidth>\leftmargin
+ | \leftskip\tagmaxwidth \advance\leftskip-\leftmargin
+ | \fi
+ |}
+\smallbreak
+ |\def\endtagged{\PDCFMTendenv{tagged}}
+\endcode
+ The adjustment to |\leftmargin| comes after scanning
+ |\everytagged| so that it is possible to adjust |\tagmaxwidth|
+ inside |\everytagged|.
+
+ Trickery with |\futurelet| and |\aftergroup| (like that used in
+ plain \TeX's |\footnote| command) is used to allow catcode
+ changes in \<text> to work. This allows macros that generate
+ `verbatim' text to work.
+\code
+ |\newtoks\everytag
+\smallbreak
+ |\def\TAG{%
+ | \smallskip\noindent
+ | \setbox0=\hbox\bgroup % matched by \TAGfinish
+ | \the\everytag\ignorespaces
+ | \futurelet\next\TAGtest
+ |}
+\smallbreak
+ |\def\TAGtest{%
+ | \ifcat\bgroup\noexpand\next
+ | \let\next\TAGgotbrace
+ | \else
+ | \let\next\TAGnobrace
+ | \fi \next
+ |}
+\smallbreak
+ |\def\TAGgotbrace{%
+ | \bgroup\aftergroup\TAGfinish
+ | \let\next
+ |}
+\smallbreak
+ |\def\TAGnobrace#1{%
+ | #1\TAGfinish
+ |}
+\smallbreak
+ |\def\TAGfinish{%
+ | \unskip\hskip0.5em\egroup % matches \TAG
+ | \ifdim \wd0 < \tagmaxwidth
+ | \wd0=\tagmaxwidth
+ | \llap{\box0}%
+ | \else
+ | \hskip-\tagmaxwidth
+ | \unhbox0 \unskip\quad
+ | \fi
+ | \ignorespaces
+ |}
+\endcode
+ It might be interesting to generalize these macros so that new
+ macros with an argument scanned this way may be created more
+ easily.
+%}}} tagged list
+%{{{ lines
+
+\section{Lines environment (for program listings etc)}
+
+ In the |lines| environment, each line in the manuscript file
+ becomes a new paragraph (i.e., a separate line on the printed
+ page). A |%| at the end of a line may be used to split a file
+ line in to several logical lines. In addition, the |lines|
+ environment is bracketed by horizontal rules. The effect is
+ similar to that produced by the |\beginlines|--|\endlines|
+ macros in {\it\TeX book} Appendix~E.
+
+\code
+ |\newtoks\everylines
+\smallbreak
+ |\def\lines{
+ | \par
+ | \beginthe{lines}
+ | \nobreak\smallskip\hrule\nobreak\smallskip
+ | \obeylines
+ | \parindent=0pt \parskip=0pt
+ | \parfillskip=0pt plus 1fil
+ | \the\everylines
+ | \nobreak
+ |}
+\smallbreak
+ |\def\endlines{
+ | \nobreak\smallskip
+ | \endthe{lines}
+ | \hrule\smallskip
+ | \global\noindenttrue
+ |}
+\endcode
+
+ For longer listings it may be nice to have the lines numbered
+ for later reference. The following two macros may be put in
+ |\everylines| to enable line numbering---the first starts from~1
+ in each listing environment, the other continues the numbering
+ from where it left off.
+
+ The line number is kept in |\linenumber| (which may be adjusted
+ by the user). Only every 5th line is numbered. The number of
+ lines until the next printed one is held in |\PDCFMTcount|.
+ Both these are always set globally (which means lines
+ environments cannot be nested!).
+\code
+ |\newcount\linenumber
+ |\newcount\PDCFMTcount
+\smallbreak
+ |\def\startlinenumbering{%
+ | \global\linenumber=0 \global\PDCFMTcount=5
+ | \everypar{\numberthisline}%
+ |}
+\smallbreak
+ |\def\continuelinenumbering{%
+ | \everypar{\numberthisline}%
+ |}
+\endcode
+
+ The |\numberthisline| macro is invoked at the beginning of every
+ paragraph. It increments |\linenumber|, and writes the line
+ number of every fifth line in the right margin. By default it
+ uses the same font as used in subscripts; this can be changed by
+ changing the token register |\everylinenum|.
+\code
+ |\newtoks\everylinenum \everylinenum{\the\scriptfont0 }
+\smallbreak
+ |\def\numberthisline{%
+ | \strut
+ | \global\advance\linenumber1 \global\advance\PDCFMTcount-1
+ | \ifnum\PDCFMTcount>0 \else
+ | \global\advance\PDCFMTcount 5
+ | \rlap{\the\everylinenum \kern\hsize\kern1em \the\linenumber}%
+ | \fi
+ |}%
+\endcode
+
+ Within the lines environment it can be useful to indicate where
+ lines have been skipped. This macro also adjusts the
+ |\linenumber| macro.
+\code
+ |\def\linesskipped#1{%
+ | \strut \hskip20pt $\vdots$ \hskip20pt
+ | {\rm(\it #1 lines omitted\rm)}\par
+ | \advance\linenumber#1\relax
+ |}
+\endcode
+
+%}}} lines
+%{{{ display, table
+
+\section{Displays, Tables -- wrapper about \cs{halign}}
+
+ The |display| environment does a generic (meaning not
+ necessarily mathematical) display, in a manner similar to the
+ |\begindisplay|--|\enddisplay| macros in {\it\TeX book}
+ Appendix~E. As with Knuth's macro, assignments may follow on
+ the same line as |\display|, and |\cr| and |&| may be used to
+ split the display into rows and columns.
+\code
+ |\outer\def\display{\obeylines\startdisplay}
+ |\bgroup\obeylines \toksa={\egroup %
+ | \def\startdisplay#1^^M{%
+ | \catcode`\^^M=5 $$ #1 % matched by \enddisplay
+ | \displayindent\PDCFMTindent %
+ | \halign\bgroup##\hfil&&\quad##\hfil\cr %
+ | } %
+ |}\the\toksa %
+\smallbreak
+ |\def\enddisplay{\crcr\egroup$$}
+\endcode
+
+ The |table| environment is similar, ecept that what follows
+ |\table| is an arbitrary |\halign| specification.
+\code
+ |\def\table{%
+ | $$ % matching $$ is in \endtable
+ | \displayindent\PDCFMTindent
+ | \halign \bgroup
+ |}
+\smallbreak
+ |\let\endtable=\enddisplay
+\endcode
+
+\notepar
+ Both the {\tt table} and {\tt display} environments must go
+ within paragraphs. That is, there should not be blank lines
+ before |\table|, or after |\endtable| unless the table ends the
+ paragraph.
+\endnotepar
+%}}} display, table
+%{{{ ebnf
+
+\section{(E)BNF}
+
+ BNF is Bakus-Naur Formalism; EBNF is Extended BNF. The same
+ environment does either format. The style I~happen to like, has
+ non-terminal sumbols written like \<this>, and terminal symbols
+ enclosed in `--'. Optional text is enclosed in brackets (I~like
+ to put spaces between the brackets and the enclosed text for
+ clarity) and repeatable text in braces.
+
+ In the manuscript file, each production is a separate paragraph.
+ The macro |\>| goes between the left hand side and right hand
+ side of a production; by default, it expands to `$::=$'.
+ Alternatives are separated by |\\|; by default this expands to a
+ bar `$\mid$'. If the terminal symbols happen to be keyboard
+ characters, use the verbatim text character {\tt\char`\|} which
+ adds quotation marks around the text it produces. For example,
+ the following expression
+ $$
+ \hbox{\<foo>\enspace$::=$\enspace`|f|' `|o|' `|o|' $\mid$
+ \<bar> [ \<mumble> `{\bf munge}' ].}
+ $$
+ may be produced with
+ $$
+ \defverbatim\~
+ \hbox{~\<foo> \> |f| |o| |o| \\ \<bar> [ \<mumble> `{\bf munge}' ].~}
+ $$
+ Braces are produced with |\{| and |\}|.
+
+\code
+ |\newtoks\everybnf
+\smallbreak
+ |\def\bnf{
+ | \nobreak\smallskip
+ | \beginthe{bnf}
+ | \advance\leftskip2\parindent \parindent=-\parindent
+ | \parskip0pt plus 1pt
+ | \rightskip=1\rightskip plus 3em
+ | \def\\{$\mid$}
+ | \def\>{\unskip\enspace$::=$\enspace\ignorespaces}
+ | \def|{`\begingroup\tt\setupverbatim\catcode`\|=13
+ | \def|{\endgroup'}}
+ | \def\{{$\lbrace$} \def\}{$\rbrace$}
+ | \the\everybnf
+ |}
+\smallbreak
+ |\def\endbnf{
+ | \smallskip
+ | \endthe{bnf}
+ | \global\noindenttrue
+ |}
+\endcode
+
+ The macro |\<| is based on the one in Appendix~E of the {\it\TeX
+ book}. For example, |\<foo>| produces `\<foo>'.
+\code
+ |\def\<#1>{\leavevmode\hbox{$\langle${\it#1\/}$\rangle$}}
+\endcode
+ The difference is that the name is in italics: \<name> not
+ $\langle$name$\rangle$.
+
+\notepar
+ This macro is not intened for be used to generate character
+ names like Return and Tab; I suggest just saying `Return' and
+ `Tab' for these.
+
+ There is a style of RFC-822 email addresses written in the form
+ `\/|Damian Cugley <pdc@alleged.co.uk>|'. I suggest that when
+ presenting email addresses in printed documents this be rendered
+ as something like `\/{\rm Damian Cugley (|pdc@alleged.co.uk|)}'.
+\endnotepar
+%}}} ebnf
+%{{{ headings
+
+\section{Headings}
+
+ Here are some macros for making headings for sections of a
+ document. There are two styles of layout supported by these
+ heading macros: the usual style~$N$, with headings above the
+ first paragraph of the section, and the `tab-indexed' style~$T$,
+ with headings in the left margin, aligned with the first line of
+ the paragraph.
+
+
+\subsec{The left margin parameter}
+ For style~$T$ headings, this is the size of the extra margin at
+ the left side of the page (so $({\it hoffset}+1\,{\rm in})-{\it
+ leftmargin}$ is the margin between the left edge of headings and
+ the edge of the paper). Set this parameter to $0\pt$ for
+ style~$N$.
+
+\code
+ |\newdimen\leftmargin
+\endcode
+
+
+\subsec{Headings that don't start a new page}
+
+ This macro is intended to be used by higher-level macro with
+ names like |\section|, which take care of numbering section
+ headings and so on.
+ $$
+ \hbox{\tt\cs{doheading}\arg{\<skip>}\arg{\<style>}%
+ \arg{\<coda>}\arg{\<text>}}
+ $$
+ Where \<skip> is the skip to put before the heading (for
+ example, a \<dimendef token> like like |\medskipamount| or
+ |\bigskipamount|, or a \<dimen> enclosed in braces); \<style> is
+ tokens to insert before the \<text> (such as assignments that
+ select the font); \<coda> is tokens that follow the \<text>
+ (which might produce a rule under the heading, for example;
+ usually this is empty); and \<text> is the text of the heading
+ supplied by the user.
+\code
+ |\newskip\headingtemp
+ |\def\doheading#1#2#3#4{
+ | \ifdim\lastskip<#1\relax \removelastskip \vskip#1\relax \fi
+ | \ifdim \leftmargin>0pt
+\endcode
+ If the left margin is greater than zero then we generaten a
+ style~$T$ heading. This is done by putting the text in
+ |\parbox|, which will be used by the |\everypar|.
+\code
+ | \global\setbox\parbox=\vtop{%
+ | \hsize=\leftmargin \advance\hsize-\parboxsep
+ | \parindent=0pt
+ | \leftskip=0pt \rightskip=0pt plus 3em
+ | \hyphenpenalty=10000 \exhyphenpenalty=5000
+ | \strut#2#4#3
+ | }
+ | \else
+\endcode
+ Otherwise we typeset the heading as a separate paragraph.
+\code
+ | \begingroup
+ | \parindent=0pt \parfillskip=0pt plus 1fil
+ | \leftskip=0pt \rightskip=0pt plus0.25\hsize
+ | \hyphenpenalty=10000 \exhyphenpenalty=5000
+ | \strut#2#4#3
+ | \global\headingtemp=\baselineskip
+ | \par
+ | \endgroup
+\endcode
+ The vertical space between the heading and the following text is
+ calculated from the difference in baselineskips between the
+ fonts used in the heading and those used in body text, plus $\it
+ smallskipamount$.
+\code
+ | \advance\headingtemp-\baselineskip
+ | \ifdim\headingtemp>0pt \nobreak \vskip 1.0\headingtemp \fi
+ | \smallskip
+ | \noindenttrue
+ | \fi
+ |}
+\endcode
+
+\subsec{Headings that start a new page}
+
+ Major divisions of a book start on a nw page. The parameters to
+ the macro are similar to those for |\doheading|:
+ $$
+ \hbox{\tt\cs{newpageheading}\arg{\<skip>}\arg{\<style>}%
+ \arg{\<coda>}\arg{\<text>}}
+ $$
+ Where here the \<skip> is the extra space at the top of the page.
+
+\code
+ |\def\newpageheading#1#2#3#4{
+ | \vfill\supereject % ensure no insertions still floating
+ | \null\vskip#1\relax
+ | \moveleft\leftmargin\vbox{
+ | \advance\hsize\leftmargin
+ | \parindent=0pt \parfillskip=0pt plus 1fil
+ | \leftskip=0pt \rightskip=0pt plus0.25\hsize
+ | \hyphenpenalty=10000 \exhyphenpenalty=5000
+ | #2\strut#4#3
+ | \global\headingtemp=\baselineskip
+ | \par
+ | }
+ | \advance\headingtemp-\baselineskip
+ | \advance\headingtemp\smallskipamount
+ | \vskip \headingtemp
+ | \noindenttrue
+ | \def\tmp{#4}
+ | \message{*\expandafter\TOCtrim\meaning\tmp. }
+ |}
+\endcode
+%}}} headings
+%{{{ footnotes
+\section{Footnotes}
+
+ We define a new command |\note| that replaces use of the
+ |\footnote| command. This takes one parameter---the text of the
+ footnote---and supplies automatically-numbered footnote markers.
+
+ The |\newcount| command implicitly sets the counter to~0.
+
+\code
+ |\newcount\notecount
+\smallskip
+ |\def\note{%
+ | \global\advance\notecount+1
+ | \footnote{\number\notecount}%
+ |}
+\endcode
+
+ We add a parameter for the indentation of footnote paragraphs.
+\code
+ |\newdimen\footnoteparindent
+ |\footnoteparindent=\parindent
+\endcode
+
+ Now we modify the definition of |\footnote| in plain~\TeX\ (see
+ TeXbook p.\thinspace363). It has the same function as
+ plain~\TeX's |\footnote|, but uses extra parameters
+ (|\everyfootnote|, |\footnotetextmark|), and handles the case
+ ${\it parindent}=0\pt$.
+\code
+ |\newtoks\everyfootnote
+\smallbreak
+ |\catcode`\@=11
+ |\def\footnote#1{\let\@sf\empty
+ | \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ | \footnotetextmark{#1}\@sf\vfootnote{#1}}
+\smallbreak
+ |\def\vfootnote#1{\insert\footins\bgroup % matched by \@foot
+ | \interlinepenalty=\interfootnotelinepenalty
+ | \parindent=\footnoteparindent
+ | \leftskip=0pt
+ | \the\everyfootnote
+ | \splittopskip=\ht\strutbox \splitmaxdepth=\dp\strutbox
+ | \floatingpenalty=20000
+ | \indent\footstrut
+ | \ifdim\parindent>1em
+ | \llap{\footnotenotemark{#1}\enspace}%
+ | \else
+ | \footnotenotemark{#1}\enspace
+ | \fi
+ | \futurelet\next\fo@t
+ |}
+\smallbreak
+ |\def\@foot{\smallskip\egroup}
+\smallskip
+ |\catcode`\@=12
+\endcode
+ These two parameters control the formatting of the footnote
+ marker in the text and in the note itself. They take one
+ parameter, a \<number>. The default definitions simply use a
+ superscript in maths mode.
+\code
+ |\def\footnotetextmark#1{$^{#1}$}
+ |\def\footnotenotemark#1{$^{#1}$}
+\endcode
+%}}} footnotes
+%{{{ in-paragraph commands
+
+\section{Miscellaneous in-paragraph commands}
+
+
+\subsec{Writing the current date}
+
+\let\n=\relax
+\def\today{\n{\number\day} \monthname\month\ \n{\number\year}}
+\def\monthname#1{%
+ \ifcase#1\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
+}
+
+ We define a macro |\today| that prints today's date. I used to
+ have the option of the abbreviated date but decided this was an
+ unnecessary complication. The format `\today' is usual
+ in non-American countries, and is recommended by {\it Hart's
+ Rules}\footnote*{Horace Hart, {\it Hart's Rules for Compositors
+ and Readers at the University Press, Oxford}, 39th~ed.,
+ completely revised (Oxford University Press, 1990),
+ p.\thinspace19.} and Strunk \&
+ White.\footnote\dag{William Strunk jun., and E.~B. White, {\it
+ The Elements of Style}, 3rd~ed.\ (Macmillan, 1979),
+ p.\thinspace3. The American format is given first but followed
+ by the observation that the day--month--year format is `an
+ excellent way to write that date; the figures are separated by a
+ word, and are, for that reason, quickly grasped'.}
+\code
+ |\def\today{\n{\number\day} \monthname\month\ \n{\number\year}}
+\smallbreak
+ |\def\monthname#1{%
+ | \ifcase#1\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
+ |}
+\endcode
+ Redefine the |\monthname| macro if you want different names for
+ the months.
+
+
+\def\isodate{\n{\number\year}--\twodigits\month--\twodigits\day}
+\def\twodigits#1{%
+ \ifnum#1<10 0\fi \number#1%
+}
+
+ Here's a definition for the date in ISO~8601/BS~4795
+ format,\footnote\ddag{{\it The Oxford Writers' Dictionary}
+ (Oxford University Press, 1990), under `date'. I~have not read
+ the relevant standards.} which puts the year first, giving
+ `\isodate':
+\code
+ |\def\isodate{\n{\number\year}--\twodigits\month--\twodigits\day}
+\smallbreak
+ |\def\twodigits#1{%
+ | \ifnum#1<10 0\fi \number#1%
+ |}
+\endcode
+
+
+\subsec{Raising things}
+
+ The |\flushtop| macro prints its argument in a box raised so
+ that the its top is aligned with the top of a letter X in the
+ current font.
+\code
+ |\def\flushtop#1{%
+ | \leavevmode
+ | \begingroup
+ | \setbox0\hbox{#1}\setbox2\hbox{X}%
+ | \dimen0\ht2 \advance\dimen0-\ht0
+ | \raise\dimen0\box0
+ | \endgroup
+ |}
+\endcode
+ This allows us to define a fairly generic version of the \LaTeX\
+ logo:
+\code
+ |\def\La{L\negthinspace\flushtop{a}}
+ |\def\LaTeX{\La\TeX}
+\endcode
+ I have not given a definition for the \LaTeX~2e logo, since
+ I~think that `|\LaTeX~2e|' (or `|\LaTeX2e|' if you prefer) is
+ adequate, whereas Addison--Wesley think it should be `|\LaTeX|
+ |\kern0.05em| |2$| |_{\textstyle| |\varepsilon}| |$|' in regular
+ text and something involving bold maths in boldface. SImilarly,
+ I do not include macros for Bib\TeX, Sli\TeX, AMS-\TeX, and so
+ on; the |texlogos.sty| file from the Eplain package has
+ definitions for these.
+
+\def\superiorletter#1{\flushtop{\the\scriptfont\fam
+ \vphantom{t}\smash{#1}}}
+
+ Here's a variation which raises a scriptstyle letter so that
+ its {\it x}-height matches the cap-height of the body text,
+ thus making `M\superiorletter{\b c\kern0.1ex }Donald' and
+ `1\superiorletter{\b a}', `1\superiorletter{\b o}',
+ `1\superiorletter{er}', `2\superiorletter{\`eme}',
+ `1\superiorletter{st}', `2\superiorletter{nd}',
+ `3\superiorletter{rd}' and `659\superiorletter{th}' (which I
+ prefer to $659^{\rm th}$).
+\code
+ |\def\superiorletter#1{%
+ | \flushtop{\the\scriptfont\fam \vphantom{x}\smash{#1}}%
+ |}
+\smallbreak
+ |\def\Mc{M\flushtop{\the\scriptfont\fam \b{c}}}
+\endcode
+
+
+%}}} in-paragraph commands
+\endcodefile
+\enddocument
+\bye
+%}}} pdcfmt2
+
+%Local variables:
+%fill-prefix: " "
+%fold-folded-p: t
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcfsel.dtx b/macros/plain/contrib/pdcmac/pdcfsel.dtx
new file mode 100644
index 0000000000..397d6c029d
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcfsel.dtx
@@ -0,0 +1,607 @@
+% pdcfsel.dtx -- documentation & source for pdcfsel.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCFSEL, a font selection scheme for TeX",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcfsel.dtx",
+%%% version = "$Revision: 3.5 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/28 19:05:54 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and defines pdcfsel.tex,
+%%% a file of definitions for managing font selection in
+%%% documents based on the plain TeX macros.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% 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.",
+%%% notice = "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.",
+%%% notice = "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.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcfsel
+%{{{ premable
+
+\relax
+\input pdccode
+
+\document
+\rcs$Id: pdcfsel.dtx,v 3.5 1995/03/28 19:05:54 pdc Exp $\endrcs
+
+\codefile{pdcfsel.tex}
+
+%}}} premable
+%{{{ intro
+
+\author{P. Damian Cugley}
+\title{PDCFSEL, a font-selection scheme for \TeX}
+\section{Introduction}
+
+ This document describes PDCFSEL, a file of font selection macros
+ designed to be used with documents using the plain \TeX\ format
+ (rather than \LaTeX, for example).
+
+ The PDCFSEL macros perform a similar function to the so-called
+ New Font Selection Scheme~2 (used in \LaTeX~2e). PDCFSEL uses a
+ simpler model of font selection, and so is a smaller
+ package---about 110~lines of code---which is just as well as a
+ copy of it will probably need to be included with documents
+ using it. The description of which fonts are used in a document
+ can be relatively compact, despite not using any special
+ database files.
+
+\subsec{Organizing fonts into fontsets}
+
+ We can arrange the fonts used in an imaginary \TeX\ document in
+ a table like so (with an asterisk marking fonts that have to be
+ scaled to fit):
+ $$\def\*{{\rm*}}
+\vbox{\halign{\strut#\hfil&\quad\vrule#&&\quad\tt#\hfil\cr
+ && |\rm|&|\it|&|\bf|&|\bi|&|\mi|&|\sy|\cr
+\noalign{\nointerlineskip}\omit& height \jot\cr
+\noalign{\hrule}\omit& height 1\jot\cr
+\noalign{\nointerlineskip}%
+ body text&& cmr10& cmti10& cmbx10& cmbxti10& cmmi10& cmsy10\cr
+ footnotes&& cmr8& cmti8& cmbx8& cmbxti10\*& cmmi8& cmsy8\cr
+ script&& cmr7& cmti7& cmbx7& cmbxti10\*& cmmi7& cmsy7\cr
+ scriptscript&& cmr5& cmti7\*& cmbx5& cmbxti10\*& cmmi5& cmsy5\cr
+\noalign{\nointerlineskip}\omit& height\jot depth\jot&\multispan6\dotfill\cr
+\noalign{\nointerlineskip}%
+ heading&& cmss12& cmssi12& -&-&-&-\cr
+ subheading&& cmss10& cmssi10& -&-&-&-\cr
+}}
+ $$
+ The column headings are {\it font nicknames}. These nicknames
+ are used as described in the {\it\TeX book} to switch between
+ fonts in the same row. Each has a corresponding {\it fam}
+ used in maths mode, with symbolic names like |\itfam| and
+ |\bffam| (we define $\hbox{|\rmfam|}=0 $ for consistency).
+ I~have added nicknames |\mi| and |\sy| for maths italic and
+ maths symbol respectively.
+
+ Each row of the table is a {\it fontset}. Plain \TeX\ defines a
+ single fontset (which is like the `body text' row of this
+ table); in Appendix~E, Knuth discusses formats that switch
+ between different fontsets with macros like |\ninepoint| and
+ |\eightpoint|. \LaTeX~2.09 uses many fontsets, called
+ |\normalsize|, |\large|, and so on. (NFSS~2 uses a more complex
+ system, where size, weight, and slant may be changed
+ independently of each other.)
+
+ In this table, subheadings and body text have different fontsets
+ in the above, even though the fonts are the same size. Also,
+ there are no |\sf| fonts; the headings are printed in sanserif
+ by using a fontset with |\rm| mapped on to a sanserif font.
+ This is more logical and flexible than the \LaTeX\ approach.
+
+ We can call font families which allow this table to work tidily
+ `regular', and families (like Computer Modern) that require
+ exceptions `irregular'. The above table has one exception
+ (|\it| in scriptscript must use a scaled font); the CM Bold
+ Extended Text Italic fonts can be described as regular if we
+ think of the `body text' entry as being `|cmbxti10 at 10pt|', so
+ that the fonts in that column are scaled fonts without
+ exception. To make font specification compact, we want to take
+ advantage of regular families as much as possible, while not
+ making it difficult to include exceptions.
+
+\subsec{Introduction to using PCDFSEL}
+
+ PDCFSEL uses no databases of font families, and loads no fonts
+ by default. This makes it more flexible, but also requires
+ document designers to write a `mini-database' of those fonts
+ used in the document. The above scheme might be defined as
+ follows:
+\smallskip
+\halign{\indent#\hfil\cr
+ |\input pdcfsel|\cr
+\noalign{\smallbreak}%
+ |\newfam\bifam|\cr
+\noalign{\smallbreak}%
+ |\def\texttemplate{%|\cr
+ | \m{rm}{cmr}\m{it}{cmti}\m{bf}{cmbx}\@\m{bi}{cmbxti10}%|\cr
+ | \M{mi}{cmmi}\M{sy}{cmsy}%|\cr
+ |}|\cr
+ |\loadfont\scriptscriptit{cmti7 at 5pt }|\cr
+ |\xfontset{scriptscript}\texttemplate{5}|\cr
+ |\xfontset{script}\texttemplate{7}|\cr
+ |\fontset{note}\texttemplate{8}{10pt}{scriptscript}{scriptscript}|\cr
+ |\fontset{body}\texttemplate{10}{12pt}{script}{scriptscript}|\cr
+\noalign{\smallbreak}%
+ |\def\headingtemplate{%|\cr
+ | \f{rm}{cmss}\f{it}{cmssi}%|\cr
+ |}|\cr
+ |\fontset{subheading}\headingtemplate{10}{12pt}{subheading}{subheading}|\cr
+ |\fontset{heading}\headingtemplate{12}{14pt}{subheading}{subheading}|\cr
+\noalign{\smallbreak}%
+ |\bodyfonts|\cr
+}
+\smallbreak
+\noindent
+ This defines commands |\bodyfonts|, |\notefonts|,
+ |\headingfonts| and |\subheadingfonts| which switch between
+ fontsets. (The {\it script} and {\it scriptscript} fontsets,
+ which are defined with |\xfontset|, are used only in maths
+ mode and don't need `-|fonts|' commands.) These -|fonts|
+ commands are not usually used directly in documents;
+ |\notefonts| will be used in some |\footnote| command,
+ |\headingfonts| in some heading-generating command, and so on.
+
+ Changes of fontset are accompanied by changes in parameters like
+ |\baselineskip| and pseudo-parameters like |\smallskipamount|,
+ and give definitions to the {\it maths font tables}
+ |\textfont\rmfam|, \dots, |\scriptscriptfont\syfam| (for those
+ fonts that will be used in maths mode).
+
+ We want font nickname commands to be efficient, because they
+ are expected to be more common than changes between rows in
+ the table. In this implementation, after an invocation of
+ |\bodyfonts|, the macro |\rm| expands to exactly `|\fam\rmfam
+ \bodyrm|'.
+
+\subsec{How the rest of this document is organized}
+
+ The remainder of this document is a description of all of
+ |pdcfsel.tex|, including more details of how the commands it
+ defines are used.
+
+ Running this document (|pdcfsel.dtx|) through plain \TeX\
+ creates the definitions file (|pdcfsel.tex|) in addition to
+ the usual |dvi| and |log| files. This way the macros and
+ their documentation may be kept together in one file. The
+ definition lines are numbered.
+
+ The definitions start with macros for loading individual
+ fonts, followed by the macros used to group fonts into
+ fontsets.
+%}}} intro
+%{{{ getting started
+
+\section{Getting started}
+
+\subsec{File identification}
+
+ We start with some comments indentifying the file.
+\code
+ |% pdcfsel.tex -- macros for loading fonts -*-tex-*-
+ |
+ |%%%@TeX-document-file {
+ |%%% title = "PDC Font Selection Scheme",
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcfsel.tex",
+ \|\%\%\% version \space\space\space= "\fileversion",
+ \|\%\%\% Date \space\space\space\space\space\space= "\filedate",
+ \|\%\%\% creator\space\space\space\space= "\filename",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,"
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% abstract = "A file of definitions for managing font
+ |%%% selection in documents based on the plain
+ |%%% TeX macros.
+ |%%% This file was generated by running
+ |%%% plain TeX on pdcfsel.dtx.",
+ |%%% dependencies = ""
+ |%%%}
+ |
+ \|\string\message\{\fileversion\space\string<%
+ \fileauthor\space\filedate\string>\}
+\endcode
+
+\subsec{Private names}
+
+ Macros internal to FSEL all have names starting `|\FSEL|'.
+
+\subsec{Macros for edefs}
+
+ These save typing |\expandafter| a lot. The expression
+ `|\expcs|\<token>\arg{\<tokens>}', creates a csname from
+ \<tokens> and applies \<token> to the result. In the body of an
+ |\edef|, The expression `|\noexpcs|\arg{\<tokens>}' converts
+ \<tokens> to a csname without expanding the result.
+\code
+ |\def\expcs#1#2{\expandafter#1\csname#2\endcsname}
+ |\def\noexpcs{\expcs\noexpand}
+\endcode
+%}}} getting started
+%{{{ selecting demand-loading
+
+\section{Selecting auto-loading mode}
+
+ The flag |\ifFSELautoload| is true, fonts are auto-loaded when
+ they first used instead of all at the start. This is useful
+ when not all the fonts described by the fontsets will be
+ needed. The flag is set with the user command
+ |\autoloadfonts|.
+
+ When demand-loading, the fonts used
+ are written to a file named after the document with a |.fnt|
+ suffix. This checklist might
+ be used to decide which fonts need to be sent with the
+ document if it is being sent to someone to compile on a
+ different \TeX\ system.
+\code
+ |\newif\ifFSELautoload
+ |\def\autoloadfonts{
+ | \FSELautoloadtrue
+ | \csname newwrite\endcsname \FSELfile
+ | \immediate\openout\FSELfile=\jobname.fnt
+ |}
+\endcode
+%}}} selecting demand-loading
+%{{{ making csname for one font
+
+\section{How to set up the csname for one font}
+
+ The macro |\loadfont| is used to load individual fonts, defining
+ a control sequence name (csname) which may be used later to
+ switch to that font. When not demand-loading fonts, this is
+ just like |\global\font| followed by expanding the
+ |\everyloadfont| macro.
+
+ If the csname is already defined, then this command does
+ nothing. This is so that irregularities in the font scheme for
+ the document can be allowed for. Parameter |#1| is the csname,
+ for example `|\bodyrm|', and |#2| is the external name, for
+ example `|cmr10|' or `|cmr10 at 12pt|'.
+\code
+ |\def\loadfont#1#2{%
+ | \ifx#1\relax
+ | \FSELloadfont#1{#2}%
+ | \else\ifx#1\UNDEFINED
+ | \FSELloadfont#1{#2}%
+ | \fi\fi
+ |}
+\endcode
+ (We have to compare |#1| against both |\relax|, which is
+ produced by |\csname|--|\endcsname|, and a completely undefined
+ csname.) The macro |\FSELloadfont| doesa the actual work of
+ loading the font.
+\code
+ |\def\FSELloadfont#1#2{%
+ | \ifFSELautoload
+\endcode
+\begingroup \leftskip=\parindent \advance\leftskip4\fontdimen6\tentt
+\noindent{\it Demand-loading}. We don't load the font, instead we
+ define a csname as a macro. When expanded this new macro will
+ (a)~write the font name to the |fnt| file; (b)~define the macro
+ |\subfont| to load |cmr10| instead (in case \TeX\ stops with a
+ `font not loadable' message); (c)~load the font for real (this
+ overwrites the macro); (d)~call |\everyloadfont| for per-font
+ customization and (e)~switch to the new font.
+\par\endgroup
+\code
+ | \edef#1{%
+ | \write\FSELfile{#2}%
+ | \def\noexpand\subfont{\global\font\noexpand#1cmr10 }%
+ | \global\font\noexpand#1#2\relax
+ | \noexpand\everyloadfont\noexpand#1{#2}%
+ | \noexpand#1%
+ | }%
+ | \else
+\endcode
+\leftline{\hskip4\fontdimen6\tentt \indent{\it Immediate loading}.}
+\code
+ | \global\font#1#2\relax \everyloadfont#1{#2}%
+ | \fi
+ |}
+\endcode
+
+ The macro |\everyloadfont| is expanded immediately after
+ actually loading a font. (The definition used is that one
+ current when the font is actually loaded, not the one current
+ when |\loadfont| was executed.) Its |#1| parameter is always a
+ \<fontdef token>, i.e., it can be to used as a parameter to
+ |\fontdimen1|. The |#2| parameter is the external name of the
+ font.
+\code
+ |\def\everyloadfont#1#2{}
+\endcode
+ For example, in a document with a ragged-right margin, this
+ might be used to suppress the stretch and
+ shrink of interword spaces by being defined as follows
+ $$
+\vbox{\halign{#\hfil\cr
+ |\def\everyloadfont#1#2{%|\cr
+ | \fontdimen3#1=0pt \fontdimen4#1=0pt|\cr
+ |}|\cr
+}}
+ $$
+%}}} making csname for one font
+%{{{ making a fontset
+
+\section{How to set up a fontset}
+
+ Now that we know how to define individual font csnames, we
+ need the mechanism for grouping them in to fontsets. A
+ fontset is defined by a template macro which says what font
+ nicknames are defined and gives part of the external font
+ name. The template macro takes no parameters and expands to
+ a list each of whose elements are of the form
+ $$
+\vbox{\halign{$#$\hfil&\quad#\hfil\cr
+ \<type> \arg{\<nickname>} \arg{\<partial name>}&
+ or\cr
+ \cs{@} \<type> \arg{\<nickname>} \arg{\<external name>}&
+ for a scaled font.\cr
+}}
+ $$
+ where a \<type> is one of the control sequences |\f|, |\m| or
+ |\M|, and \<nickname> is the two- or three-letter nickname
+ used for the font (without any leading backslash), for example
+ |rm|, |it|, |bf|. There must be a font fam called
+ |\|\<nickname>|fam| (|\rmfam|, |\itfam| etc.\ are already
+ defined).
+
+ If there is no |\@|, then the \<partial name> is a font name
+ sans the size specification, such as |cmr|. The size in
+ points will be appended to this (|cmr| + $10\pt$ = |cmr10|).
+ If |\@| is included then the \<external name> is the complete
+ font name, such as |cmr10| or |ptmr|. This will be followed
+ by `{\tt\char32 at\char32 10pt\char32 }', say.
+
+ The \<type> specifies how much support for mathematics this font
+ requires. This is because maths mode requires that all fonts
+ that might be used in a formula be loaded (because the font
+ tables |\textfont|, |\scriptfont| and |\scriptscriptfont| must
+ be set). The code |\f| means that the font is not used in
+ maths, |\m| means that |\textfont| and |\scriptfont| will be set
+ correctly for this fam, and |\M| means that |\scriptscriptfont|
+ will also be set. In these cases there must be a corresponding
+ token ending in `-|fam|' that expands to the fam number.
+
+ The fontset name is a sequence of \<letter>s, like `|body|',
+ `|note|', `|script|', `|heading|'. This is turned into a
+ fontset selection macro by adding `|\|' to the front and
+ `|fonts|' to the end (e.g., |\bodyfonts|). The csnames for
+ loaded fonts are formed from the fontset name + the nickname
+ (e.g., |\bodyrm|).
+
+\subsec{Defining the csnames for a fontset}
+
+ The macro |\xfontset| defines all the csnames for the fonts in a
+ fontset, without defining a `-|fonts|' macro. This is used to
+ define a fontset that is never selected in its own right (e.g.,
+ its fonts are used only as subscripts and superscripts), and
+ also used internally by the |\fontset| command. Its arguments
+ are |#1| the fontset name, |#2| the csname of a template macro,
+ and |#3| a \<number> that specifies the font size (sans the
+ `|pt|').
+\code
+ |\def\xfontset#1#2#3{
+ | \def\f##1##2{\expcs\loadfont{#1##1}{##2#3}}
+ | \let\m=\f \let\M=\f
+ | \def\@##1##2##3{\expcs\loadfont{#1##2}{##3 at #3pt }}
+ | #2
+ |}
+\endcode
+
+\subsec{Defining a complete fontset}
+
+ The user command |\fontset| is used to define a complete
+ fontset. Its parameters are
+ |#1| (a string of letters) is the fontset name,
+ |#2| (a csname) is a template macro,
+ |#3| (a \<number>) is size in points,
+ |#4| (a \<skip>) is baseline skip,
+ |#5| (a fontset name) is the scriptstyle fontset, and
+ |#6| (a fontset name) is the scriptscriptstyle fontset.
+\code
+ |% Set up a fontset -- define \#1fonts
+ |\def\fontset#1#2#3#4#5#6{%
+ | \xfontset{#1}{#2}{#3}%
+\endcode
+\begingroup\leftskip=\parindent \advance\leftskip2\fontdimen6\tentt
+\noindent
+ Now to define the |\#1fonts| macro. When demand-loading, this
+ macro will call |\#1mathfonts| (to ensure the fonts needed for
+ maths are loaded). Then it will call |\FSELnicknames| to
+ define |\rm|, |\it|, etc., and to define |\textfont\rmfam|, etc.
+ Finally it will set the baseline skip and related parameters and
+ switch to the new |\rm| font.
+\par\endgroup
+\code
+ | \expcs\edef{#1fonts}{%
+ | \ifFSELautoload \noexpcs{#1mathsfonts}\fi
+ | \noexpand\FSELnicknames{#1}{#5}{#6}\noexpand#2%
+ | \noexpand\setbaselineskip{#4}%
+ | \noexpand\rm
+ | }%
+\endcode
+\begingroup\leftskip=\parindent \advance\leftskip2\fontdimen6\tentt
+\noindent
+ If we are demand-loading, we must define |\#1mathsfonts| as well.
+\par\endgroup
+\code
+ | \ifFSELautoload
+ | \expcs\def{#1mathsfonts}{\FSELloadmaths{#1}{#5}{#6}#2}%
+ | \fi
+ |}
+\endcode
+
+\subsec{Setting font nicknames}
+
+ |\FSELnicknames|
+ gives definitions to |\f|, |\m| and |\M| so that expanding the
+ template macro defines |\rm| and the like. If the fontset name
+ is |ffff|, and a nickname |xx| is introduced with |\f|, the
+ macro |\xx| is defined to |\ffffxx|. If it is introduced with
+ |\m|, then the font table entries |\textfont\xxfam| and |\scriptfont\xxfam| are also
+ set, and |\xx| expands to `|\fam\xxfam \ffffxx|'. If it is
+ introduced with |\M| then |\scriptscriptfont\xxfam| is also set.
+
+ The parameters are |#1| the fontset name, |#2| the fontset name
+ for scriptstyle, and |#3| the fontset name for
+ scriptscriptstyle. The implicit fourth parameter is the
+ template macro.
+\code
+ |\def\FSELnicknames#1#2#3{%
+ | \let\@\relax
+ | \def\f##1##2{%
+ | \expcs\edef{##1}{\noexpcs{#1##1}}%
+ | }%
+ | \def\m##1##2{%
+ | \expcs\textfont{##1fam}\csname#1##1\endcsname
+ | \expcs\scriptfont{##1fam}\csname#2##1\endcsname
+ | \expcs\edef{##1}{%
+ | \fam\expcs\noexpand{##1fam}%
+ | \expcs\noexpand{#1##1}%
+ | }%
+ | }%
+ | \def\M##1{%
+ | \expcs\scriptscriptfont{##1fam}\csname#3##1\endcsname
+ | \m{##1}%
+ | }%
+ |}
+\endcode
+
+\subsec{Setting the baseline skip}
+ The second helper macro, |\setbaselineskip|, sets
+ |\baselineskip| and a bunch of related paramaters and
+ pseudo-parameters like |\smallskipamount|. It takes one
+ parameter, a \<skip>.
+\notepar
+ My definitions for the skips that go before and after displays
+ put less white\-space around displays than is set in plain \TeX.
+ This can be changed by redefining this macro in a style file.
+\endnotepar
+\code
+ |\def\setbaselineskip#1{%
+ | \baselineskip#1\relax \normalbaselineskip\baselineskip
+ | \jot0.25\baselineskip
+ | \smallskipamount 0.25\baselineskip plus 0.083\baselineskip
+ | minus 0.083\baselineskip
+ | \medskipamount 0.5\baselineskip plus 0.167\baselineskip
+ | minus 0.167\baselineskip
+ | \bigskipamount 1\baselineskip plus 0.333\baselineskip
+ | minus 0.333\baselineskip
+ | \abovedisplayskip\medskipamount
+ | \abovedisplayshortskip\abovedisplayskip
+ | \advance\abovedisplayshortskip-1\abovedisplayskip
+ | \belowdisplayskip\medskipamount
+ | \belowdisplayshortskip\smallskipamount
+ |}
+\endcode
+
+\subsec{Loading maths fonts}
+ Finally, we need to force the fonts used in maths at a given
+ size to be loaded. for |\f| fonts this does nothing; for |\m|
+ fonts it loads the text and script fonts; for |\M| fonts it also
+ loads the scriptscript font.
+
+ This is done the first time this fontset is selected, even if no
+ formulas are used (rather than trying to do something
+ complicated like use |\everymath|\dots). Because this macro
+ only needs to be used once for each fontset, it finishes by
+ redefining |\#1mathfonts| to be the same as |\relax|.
+
+ Its parameters are |#1| the fontset name, |#2| the fontset name
+ for scriptstyle, and |#3| the fontset name for scriptscriptstyle.
+\code
+ |\def\FSELloadmaths#1#2#3{%
+ | \let\@\relax \def\f##1##2{}%
+ | \def\m##1##2{\csname#1##1\endcsname \csname#2##1\endcsname}%
+ | \def\M##1{\csname#3##1\endcsname \m{##1}}%
+ | \global\expcs\let{#1mathsfonts}\relax
+ |}
+\endcode
+
+%}}} making a fontset
+%{{{ finishing up
+
+\section{Finishing up}
+
+ We define |\rmfam|, |\mifam| and |\syfam| as aliases for the
+ numbers $0$, $1$ and $2$. This is so that the maths fonts may
+ be included in the font templates without any special
+ arrangements. The names |\itfam|, |\bffam|, |\ttfam|, and |\slfam| are set in |plain.tex|.
+\code
+ |\chardef\rmfam=0 \chardef\mifam=1 \chardef\syfam=2
+\endcode
+ Note that we do not include an alias for the the maths
+ extension font's fam number. This is because there is only
+ one maths extension font---|cmex10|---used for all sizes, so it
+ does not belong in any fontset.
+
+\section{Summary of user commands}
+
+ The following lists the user commands provided by FSEL. A
+ \<fontset name> is a sequence of letters like |note|;
+ \<points> is a \TeX\ \<number> representing size in points
+ (without any final |pt|); an \<external name> is the external
+ name for a font (e.g., `|cmr12|').
+
+\medskip\hrule\medskip
+
+\begingroup \parindent=0pt
+
+ |\autoloadfonts|
+
+ |\loadfont|\<csname>\arg{\<external name>}
+
+ |\xfontset|\arg{\<fontset name>}\<csname>\arg{\<points>}
+
+ |\fontset|\arg{\<fontset
+ name>}\<csname>\arg{\<points>}\arg{\<skip>}\arg{\<fontset
+ name>}\arg{\<fontset name>}
+
+ |\def\everyloadfont#1#2{| \dots\ |}|
+
+ |\def\setbaselineskip#1{| \dots\ |}|
+
+\medskip\hrule\medskip
+
+\endgroup
+
+%}}} finishing up
+%{{{ bugs
+
+\section{Bugs}
+
+ FSEL clobbers the macros |\f|, |\m|, |\M| and |\@|.
+%}}} bugs
+\endcodefile
+\enddocument
+\bye
+
+%}}} pdcfsel
+
+%Local variables:
+%fold-folded-p: t
+%fill-prefix: " "
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcfsel.pdf b/macros/plain/contrib/pdcmac/pdcfsel.pdf
new file mode 100644
index 0000000000..fb3f246541
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcfsel.pdf
Binary files differ
diff --git a/macros/plain/contrib/pdcmac/pdcguide.pdf b/macros/plain/contrib/pdcmac/pdcguide.pdf
new file mode 100644
index 0000000000..635a22f2e0
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcguide.pdf
Binary files differ
diff --git a/macros/plain/contrib/pdcmac/pdcguide.tex b/macros/plain/contrib/pdcmac/pdcguide.tex
new file mode 100644
index 0000000000..cc79b69f67
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcguide.tex
@@ -0,0 +1,942 @@
+% pdcguide.dtx -- user guide for PDCMAC -- Time-stamp: <pdc 1995-04-06>
+
+%%%@TeX-document-file {
+%%% title = "The PDCMAC Package",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcguide.dtx",
+%%% version = "$Revision$",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date$",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "A brief user guide for the PDCMAC package.",
+%%% copyright = "Copyright (c) 1995 P. Damian Cugley",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccmlft.tex, pdcmacvn.tex, ..."
+%%%}
+
+%{{{ pdcguide
+%{{{ preamble
+
+\errorcontextlines10000
+
+\ifx\usepsfonts!
+ \def\bodyfontname{pplr} \def\bodyttfontname{phvr}
+ \def\headingttfontname{phvro}
+ \input pdcpsdoc
+ \mathcode`.=\gbdecimal \mathcode`/="202F
+\else
+ \input pdccmdoc \mathcode`.="0201 \mathcode`/="213D
+\fi
+
+\input pdcmacvn
+\majorheadline{PDCMAC Release $\pdcmacversion$} \twosidedtrue
+\noheadlinetrue
+
+\def\n#1{$ \textfont0=\font \mathcode`i=`i \mathcode`v=`v \mathcode`x=`x #1 $}
+
+\def\plainslash{/} \declareactivechar\/ \let/\plainslash
+\def\texmf#1#2{{\tt\let/=\slash% $ for matching
+ \$texmf/#1%
+ \def\tmp{#2}\ifx\tmp\empty \plainslash \else /#2\fi}}
+\def\url#1#2#3{{\tt#1:\penalty\exhyphenpenalty
+ \plainslash\plainslash \let/=\slash #2%
+ \def\tmp{#3}\ifx\tmp\empty \plainslash \else /#3\fi}}
+
+\newcount\tablecount \tablecount2
+\def\newtableid{\global\advance\tablecount1 \number\tablecount}
+
+%}}} preamble
+%{{{ intro
+\section{What is this thing you Earth people call PDCMAC?}
+%{{{ intro
+\subsec{Introduction}
+
+ PDCMAC is collection of \TeX\ definition files (macro files)
+ which may be useful for setting documents using plain \TeX\
+ (`plain' here meaning \TeX\ formats following similar
+ conventions to those of Appendix~B of the {\it\TeX book}, as
+ opposed to more complex formats like \LaTeX). This package is
+ much less powerful than \LaTeX~2e; it is intended to be a
+ simpler solution to simpler requirements. Because it is less
+ complex, the macro code should be more readily adapted by other
+ \TeX\ hackers.
+
+ The package includes a font-selection system, an output routine,
+ general formatting macros, and `style files' which input the
+ other files and set the format for documents.
+
+ The name `PDCMAC' is pronounced `{\it p-d-c}-mac'. In file
+ names where case matters it is always written in all-lower-case.
+ The fairly consistent use of a `|pdc|-' or `|ma|-' prefix in
+ this and other names is intended to prevent these files clashing
+ with files from other packages. (The `|ma|-' files are part of
+ the Malvern package.)
+%}}} intro
+%{{{ conventions
+\subsec{Conventions in this guide}
+
+ Contents and names of computer files, and commands to be typed
+ literally are printed in {\tt this distinctive font}.
+ Placeholders to be filled in with real file names etc.~are
+ written in {\it this italic font}.
+
+%}}} conventions
+%{{{ copying
+
+\subsec{Copying}
+ The PDCMAC files are copyright \copyright\ 1990--1995 P. Damian
+ Cugley. They may be used in documents, and distributed as a
+ complete package as per the GNU General Public Licence
+ (reproduced at the end of this document).
+
+ The |tex| files generated by the |dtx| files are like `object
+ files'; you should not distribute them without their source
+ files (the |dtx| files).
+
+ Do not modify the generated |tex| files; if you must modify the
+ macros, do this by editing the |dtx| files and running them
+ through \TeX\ again. If you must distribute modified versions
+ (instead of persuading me to modify my copies), help reduce the
+ proliferation of incompatible versions by doing the following:
+\bullets
+ \\describe the modifications clearly in the printed
+ documentation;
+
+ \\say who modifed them in the header comments in the definition
+ files, and change the version identifier;
+
+ \\use a different name for the modifed definition files.
+\endbullets
+ The last point is so that documents using the unmodified
+ versions can coexist with the ones using modified ones.
+
+
+
+%}}} copying
+%{{{ feedback
+
+\subsec{Feedback}
+ I am very interested to hear from people who find a use for this
+ package. Please send comments and suggestions, or reports of
+ bugs, to the address above. If you find PDCMAC useful or
+ amusing, please send me a pretty postcard. Thanks.
+
+%}}} feedback
+%}}} intro
+%{{{ unpack install
+\section{Unpacking and installing the files}
+%{{{ unpack
+
+\subsec{Unpacking}
+
+ Two common formats for archives are
+\bullets
+\\ (on Unix)
+ |tar| files, compressed using GNU |zip| (|gzip|), and
+\\ (on MS-DOS) PKZIP-style archives.
+\endbullets
+ Compressed tarfiles will have names like |pdcmac-1.0.tar.gz| or
+ |pdcmac10.tgz| (the latter form is required by ISO-9660\note{ISO
+ 9660 is the standard for CD-ROM file systems. Its file names
+ are like MS-DOS file names: a sequence of 8-letter components
+ followed by a `|.|' and three-letter suffix. ISO~9660 names use
+ capital letters, but on case-sensitive operating systems these
+ are usually transliterated to lower-case.} file systems).
+ Unpack the package with something like
+\display \defverbatim\"
+ "zcat pdcmac10.tgz | tar -xf -"
+\enddisplay
+ This generates a new directory called |pdcmac-1.0|.
+
+ PKZIP archives unpack files into the current directory, so they
+ are unpacked like this:
+\display
+ |md pdcmac|\cr
+ |cd pdcmac|\cr
+ |unzip a:\pdcmac10.zip|\cr
+\enddisplay
+ assuming the zipfile is so named.
+
+ There is a list of the files in the release in the appendix.
+%}}} unpack
+%{{{ compile
+
+\subsec{Generating the macro files}
+
+ The macro files are packaged with their documentation in
+ |dtx|\note{The \LaTeX~2e distribution uses the file name suffix
+ |dtx| for files with a similar function. Unlike the \LaTeX\
+ system, the |dtx| files for PDCMAC produce the printed
+ documentation and unpack the macro files themselves using a
+ single macro file |pdccode.tex| and a single run through plain
+ \TeX; there are no |drv| or |ins| files.} files; run plain
+ \TeX\ on each of the |dtx| files in turn to generate the macro
+ files and the printed documentation. The resulting definition
+ files have almost no comments in them; instead you must read the
+ |dtx| files or the printed documentation.
+
+ The macro files are written in the current working directory.
+ They are identical to the code lines in the printed
+ documentation (they are generated from the same text in the
+ |dtx| files).
+
+ There is a file |pdcmondo.tex| which reads all of the |dtx|
+ files in turn except |pdcsty.dtx| and produces one large (70+
+ pages) document as well as all their macro files. This is most
+ useful if you want to make a printed listing rather than keeping
+ |dvi| files for reading online.
+
+%}}} compile
+%{{{ install
+\subsec{Installing the files}
+
+ The definition (|tex|) files belong in a directory where \TeX\
+ can find them. In the new soon-to-be-standardized file name
+ conventions TWG-TDS~$0.61$\note{The TUG Working Group on a \TeX\
+ Directory Structure, {\it A Directory Structure for
+ Implementation-Independent \TeX\ Files} Version~$0.61$
+ (\url{ftp}{ftp.th-darmstadt.de/pub/tex/TDS-compliant/draft}{twg-tds.dvi},
+ 10~February 1995).} this is the directory
+ \texmf{tex/plain/pdcmac}{}. On older systems, the files go with
+ all the other macro files.
+
+ With TWG-TDS~$0.61$ the documentation goes in
+ \texmf{doc/plain/pdcmac}{}. If you do not have a directory for
+ documentation, the documentation files might as well go in the
+ \TeX\ inputs directory as well.
+%}}} install
+%{{{ configure
+
+\subsec{Configuration on Unix systems}
+
+ There is a |configure| script and makefile template included,
+ which allows the process of unpacking to be run automatically on
+ Unix systems.\note{The configuration system is based on the GNU
+ Coding Standards, but was written by hand rather than using
+ Autoconf.} The remainder of this section assumes you are
+ installing PDCMAC on a Unix system.
+
+\subsec{Run\-ning |configure|}
+
+ Start by running a Bourne Shell on the |configure| script, by
+ typing `|sh configure|'. This examines your file system and
+ attempts to guess suitable directories in which to put macro and
+ documentation files. The |configure| script understands options
+ listed in Table~1.
+
+\midinsert
+\noindent{\bf Table 1}\quad Options for |configure|. Other
+ options are ignored.\smallskip
+\moveleft\leftmargin\vbox{
+ \def\,{{\rm,}}
+ \def\\#1\, #2&{\vbox to \ht\strutbox{\hbox{$
+ \left.
+ \vcenter{\ialign{\strut##\hfil\cr#1 \cr#2 \cr}}
+ \right\rbrace
+ $}\vss}&}
+ \halign to \bodywd{\tt#\hfil\tabskip=0pt plus 1fil&
+ \vtop{\noindent#\smallskip}\tabskip=0pt\cr
+\noalign{\hrule height 1pt \vskip1.5\jot}%
+\it Option&\omit\it Meaning\hfil\cr
+\noalign{\vskip1\jot \hrule \vskip1.5\jot}%
+ \ttminus h\, \ttminus \ttminus help&
+ Print a summary of options\cr
+ \ttminus n\, \ttminus \ttminus no\ttminus create&
+ Create |config.status| but don't run it to make |makefile|.\cr
+ \\\ttminus t$dir$\, \ttminus \ttminus texmf=$dir$&
+ Says where to find a \TeX\ directory hierarchy. For example,
+ `|-t|\allowbreak|/usr/texmf|' or `|-t|\allowbreak|/usr/local/lib/tex3.14/tex|'. The
+ |configure| script will often guess correctly without this
+ option.\cr
+ \\\ttminus p$dir$\, \ttminus \ttminus prefix=$dir$&
+ Specifies the parent of the \TeX\ directory, for example,
+ `|-p/usr|' or `|-p/usr/local/lib|'. This is for compatability
+ with the GNU coding standards.\cr
+ \\\ttminus wtds\, \ttminus \ttminus with\ttminus tds& Specify that the \TeX\ directory uses some
+ approximation to the TWG-TDS $0.61$ file name
+ conventions. This should not be necessary as
+ |configure| will usually guess correctly.
+ \cr
+\noalign{\vskip\jot \hrule height 1pt}%
+} }
+\endinsert
+
+ The configuration process creates a script |config.status| which
+ records the configuration; running |config.status| generates a
+ file |makefile|\note{Usually a makefile is called |Makefile|,
+ but I~wanted to make the package proof against file name munging
+ from being copied onto MS-DOS discs.} from the template
+ |makefile.in|.
+
+ The |config.status| script has one option |-r| (or |--recheck|),
+ which re-runs |configure| with the same arguments as were used
+ to generate |config.status|; any options following |-r| are
+ passed to |configure|.
+
+%}}} configure
+%{{{ make
+
+\subsec{Running |make|}
+
+ Now you can use the |make| command to unpack and install all the
+ files. Do `|make|' to generate all the definition files and
+ documentation. Then `|make install|' to copy the macros into
+ \TeX's macros directory and the documentation into \TeX's
+ documentation area (assuming there is one). The standard
+ targets which the makefile understands are listed in Table~2.
+
+\midinsert
+\noindent{\bf Table 2}\quad Conventional targets defined in |makefile|.\smallskip
+\moveleft\leftmargin\vbox{
+ \def\,{{\rm,}}
+ \def\\#1\, #2&{\vbox to \ht\strutbox{\hbox{$
+ \left.
+ \vcenter{\ialign{\strut##\hfil\cr#1 \cr#2 \cr}}
+ \right\rbrace
+ $}\vss}&}
+ \halign to \bodywd{\tt make #\hfil\tabskip=0pt plus 1fil&
+ \vtop{\noindent\strut#\strut\smallskip}\tabskip=0pt\cr
+\noalign{\hrule height 1pt \vskip1.5\jot}%
+\omit\it Command&\omit\it Meaning\hfil\cr
+\noalign{\vskip1\jot \hrule \vskip1.5\jot}%
+ all&
+ Generate all the definitions files and |dvi| files\cr
+ install&
+ Generate the definition files and copy them in to \TeX's
+ macro area. Also copy the |dvi| files into \TeX's documentation
+ area, if possible.\cr
+ uninstall&
+ Delete all the files that `|make install|' would install.\cr
+ mostlyclean& Delete some files but not as many as `|make clean|'.\cr
+ clean& Delete files from the current directory that are normally
+ created by `|make all|'. Don't delete files that could be built
+ using the makefile but which come with the distribution.\cr
+ distclean& Delete some more files, including those made by
+ configuration. If you have unpacked the files and generated the
+ macro files without creating any other files, this should leave
+ only the files in the distribution.\cr
+ realclean& Delete files deleted `|make distclean|' and any others
+ that can be rebuilt using the makefile.\cr
+ TAGS& Generate a tags table file for Emacs.\cr
+ dist& Make a tarfile and zipfile for the package.\cr
+\noalign{\vskip\jot \hrule height 1pt}%
+} }
+\endinsert
+%}}} make
+%}}} unpack install
+%{{{ using
+
+\section{Using PDCMAC style files for your documents}
+
+ Normally a document will start by reading one of the style
+ files, which in turn load the various definition files. The
+ style files are intended to be more-or-less compatible with each
+ other. I have arbitrarily divided the style files into
+ `leaflets' and `docs'.
+%{{{ leaflets
+
+\subsec{Leaflet styles}
+
+ A leaflet is only a few pages, so does not need a table of
+ contents or division into large units. There is still a
+ |\section| command, but it is designed for smaller divisions
+ than the |\section| command used in `docs' (in a leaflet,
+ |\section| produces a heading with prominence similar to that
+ produced by |\subsec| in a doc).
+
+ A leaflet-style document has no front matter, and so should
+ start with some sort of heading for the title.
+\lines \it
+ |\input pdccmlft|
+ |\majorheadline{| title |} \noheadlinetrue|
+ \quad commands to generate the title at the top of the first page
+\smallskip
+ \quad text of the document, perhaps using |\section| commands
+\smallskip
+ |\bye|
+\endlines
+%}}} leaflets
+%{{{ docs
+
+\subsec{Doc styles}
+
+ A doc is something larger than a leaflet but smaller than a
+ book. It has a table of contents and numbered sections and
+ subsections, with section titles being reproduced in the
+ headline. There is no provision for cross-references and
+ automatic bibliography (which require an |aux| file and at least
+ two passes through \TeX).
+
+ Sections may be grouped into larger divisions I have called
+ \dfn{part}s. Parts are numbered independently of sections, in
+ upper-case roman numerals. (There is no special reason for not
+ numbering sections within parts; I~just prefer to have fewer
+ levels of numbering, so we get `\S$12.6$' instead of
+ `Subsection~$4.1.6$'.)
+
+\lines\it
+ |\input pdccmdoc|
+ |\part{| title |}| ---or--- |\majorheadline{| title |}|
+ |\section{| title |}|
+ \quad contents of section
+\smallbreak
+ more sections
+\smallbreak
+ |\frontmatter|
+ \quad front matter
+ |\endfrontmatter|
+ |\bye|
+\endlines
+
+\subsec{Front matter}
+
+ The front matter of the document---the title page, preface,
+ forword, etc.---must be printed {\it last}, with the table of
+ contents at the end of the front matter; this is so that the
+ table of contents may be accumulated during the \TeX ing of the
+ file.\note{It has a benefit for people reading the document with
+ a browser: page~1 of the document is the first page of the DVI
+ file, which makes selecting a given page easy, and the table of
+ contents is at the very end, so the browser's `go to last page'
+ command can be used to find the table of contents quickly.}
+ The front matter starts with |\frontmatter| and may contain
+ |\section| commands. Such sections will be unnumbered and will
+ not appear in the table of contents.
+
+ For a short document, a separate title page is probably
+ excessive, and an abstract may be preferable to a preface. In
+ this case the first page after |\frontmatter| could have the
+ title of the document (with author etc.)\ followed by an
+ abstract, any copyright information (or other small print), and
+ the contents (generated by |\endfrontmatter|). In other words,
+ something like this:
+\lines\it
+ |\frontmatter|
+ \quad commands to print the title, etc.
+ \quad|\abstract|
+ \qquad the text of the abstract
+ \quad|\endabstract|
+ \quad copyright information, etc.
+ |\endfrontmatter|
+\endlines
+ For a longer document, there will be a separate title page and
+ perhaps a preface.
+\lines\it
+ |\frontmatter|
+ \quad|\titlepage|
+ \qquad commands to print the title, etc.
+ \quad|\splittitlepage|
+ \qquad print copyright information, etc.
+ \quad|\endtitlepage|
+ \quad|\section{Preface}|
+ \qquad text of preface, etc.
+ |\endfrontmatter|
+\endlines
+ The macro |\splittitlepage| marks the division between the title
+ page (title recto, page~i) and the back of the title page (title
+ verso, page~ii), which is where copyright information goes.
+ When formatting for one-sided printing, the copyright
+ information belongs on the title recto, because the title verso
+ will be blank, so |\splittitle| instead does |\vfill|.
+%}}} docs
+%{{{ new syms
+\subsec{New symbols}
+
+ Several new symbols common to Malvern~A and PostScript fonts are
+ added (listed in Table~3). Approximations built from other
+ glyphs are available in Computer Modern documents.
+
+
+\def\chartable#1{%
+ \midinsert
+ \leftline{{\bf Table \newtableid}\quad #1}\smallskip
+ \def\cs##1{\hbox to \gridwd{\hbox to2em{\csname##1\endcsname\hfil}
+ {\tt\char`\\##1}\hfil}}
+ \def\mcs##1{\hbox to \gridwd{\hbox to2em{$\csname##1\endcsname$\hfil}
+ {\tt\char`\\##1}\hfil}}
+ \def\mch##1{\hbox to \gridwd{\hbox to2em{$##1$\hfil}
+ {\tt##1}\hfil}}
+ \moveleft\leftmargin\vbox\bgroup
+ \hrule\medskip
+ \halign\bgroup ##\hfil&& \hskip\colsep##\hfil\cr
+}
+\def\endchartable{
+ \egroup
+ \smallskip\hrule
+ \egroup
+ \endinsert
+}
+
+\chartable{New symbols}
+ \cs{cents}& \cs{pounds}& \cs{yen}& \cs{florin}\cr
+ \cs{currency}& \cs{lguillemet}& \cs{rguillemet}& \cs{gbdecimal}\cr
+ \cs{permille}& \cs{registered}& \cs{orda}& \cs{ordo}\cr
+ \cs{S}& \cs{P}& \cs{dag}& \cs{ddag}\cr
+\endchartable
+
+ The symbols in the last row are `new' in the sense that they
+ will change according to the current font when using Malvern or
+ PostScript fonts.
+
+
+ The maths symbols in Table~4 will be in the current |\rm| font
+ (fam~0) in PostScript documents.
+\begingroup\catcode`_=12 \catcode`\|=12
+\chartable{Maths symbols taken from Adobe's latin character set}
+ \mch{<}& \mch{>}& \mcs{_}& \mch{|}\cr
+ \mcs{backslash}& \mcs{setminus}& \mcs{sim}& \mcs{mid}\cr
+ \mcs{bullet} &\mcs{lbrace}& \mcs{rbrace}\cr
+\endchartable
+\endgroup
+
+%}}} new syms
+%}}} using
+
+\section{Appendix}
+%{{{ tagged-table intrinsics
+
+\def\taggedtable#1#2#3{
+ \medskip
+ \noindent{\bf Table \newtableid}\quad#1
+ \medskip
+ \moveleft\leftmargin\vbox{\hsize=\bodywd
+ \hrule height 1pt \medskip
+ \line{\it\strut\hbox to \leftmargin{#2\hfil}{\it #3}\hfil}
+ \smallskip \hrule
+ }
+ \tagged \everytag{\tt}
+}
+\def\endtaggedtable{
+ \endtagged
+ \removelastskip \medskip \hrule height 1pt \bigskip
+}
+
+%}}} tagged-table intrisnics
+%{{{ file types
+\subsec{File suffixes}
+
+ In this document, `a |foo| file' refers to a file of the type
+ conventionally given a name ending in `-|.foo|' (using lower
+ case because \TeX\ file names are always given in lower case).
+ This table lists some conventional file name suffixes used for
+ files in this package.
+
+\taggedtable{File suffixes used in this package}{\hbox to
+ \gridwd{Suffix\hfil Origin}}{Meaning}
+\def\\#1#2{\TAG{\hbox to \gridwd{\tt#1\hfil\rm#2}}}
+\\{1}{Unix}
+ Manual page for a program, in |nroff| format.
+\\{def}{\LaTeX~2e}
+ Definitions used by macro files but not expected to be referred
+ to directly in user documents.
+\\{dtx}{\LaTeX~2e}
+ Documented \TeX\ macros---a file which combines macro
+ definitions with their printed documentation.
+\\{eps}{Adobe}
+ An EPSF (Encapsulated PostScript Format) file.
+\\{fig}{Fig}
+ A picture file in Fig's undocumented format.
+\\{fnt}{PDCMAC}
+ Font list---a list of fonts used in a document, generated by the
+ PDCFSEL macros.
+%\\{idx}{\LaTeX~$2.09$}
+% Unsorted index file. (The lamentable convention of using |idx|
+% and |ind|, both standing for `index' but representing different
+% stages in the index-generation process, is for compatibility
+% with \LaTeX.)
+\\{in}{GNU}
+ Template for a configuration file---when using the |configure|
+ script, the file |foo| is generated from the template |foo.in|.
+\\{tex}{\TeX}
+ (1)~A plain \TeX\ document. (2)~A plain \TeX\ definition file.
+\\{tgz}{GNU}
+ A Unix |tar| archive, compressed with GNU |zip|. (Same as
+ |tar.gz|.)
+\\{txt}{traditional}
+ Plain ASCII text, readable on the terminal.
+\\{zip}{?PKZIP}
+ An MS-DOS PKZIP archive.
+\endtaggedtable
+
+%}}} file types
+%{{{ file list
+
+\subsec{List of files}
+
+ Here is a list of files supplied with the package. A list of
+ the files generated from these---the definition files, used in
+ documents---form the next section.
+
+ All the names are chosen so that they may be copied onto, say,
+ an ISO~9660\note{See note~1 on page 2.} or MS-DOS file system and
+ back to a sensible file system without the names being changed.
+
+\taggedtable{Files supplied in the package.}{File}{Contents}
+\\{00readme.txt}
+ Brief description of the package.
+
+\\{configure}
+ A shell script used to automatically configure the makefile for
+ Unix systems. (This is an unavoidable exception to the rule
+ that names are ISO-9660-compatible.)
+
+\\{copying.tex}
+ A copy of the GNU General Public Licence, in \TeX able form.
+
+\\{copying.txt}
+ A copy of the GNU General Public Licence.
+
+\\{dtxtags}
+ Shellscript for making tag files in |etags|(1) format.
+
+\\{dtxtags.1}
+ A Unix manual entry for |dtxtags|.\note{This (and three more
+ shellscripts used in the makefile) are not intended to be
+ installed anywhere, but I~included manual pages just in case
+ they are---or in case the installer is curious as to what these
+ scripts do.}
+
+\\{fig2epsf}
+ A Unix shellscript that converts figures from Fig's format into
+ Encapsulated PostScript Format (EPSF) version~$3.0$ files. It
+ uses |fig2dev| (from the TransFig package) to do most of the
+ work. (It munges the PostScript code produced by |fig2dev|
+ 2.1.4.1 so that it will print and will work with Ghostview.)
+
+\\{fig2epsf.1}
+ A Unix manual page for |fig2epsf|.
+
+\\{install.txt}
+ Installation hints.
+
+\\{makefile.in}
+ Template from which the configuration process generates a
+ makefile, used by Unix's |make| command to automate compilation
+ and installation. Should be called |Makefile.in| but that's not
+ ISO-9660-compliant.
+
+\\{magrmac.dtx}
+ Documentation for Malvern Greek macros. This replaces the file
+ |magrmac.tex| included in Malvern release~$1.2$.
+
+\\{magrman.tex}
+ Brief user manual for |magrmac.tex|. This replaces the version
+ distributed with Malvern~$1.2$. It requires some Malvern~G
+ fonts.
+
+\\{oput01.eps oput02.eps}
+ Diagrams for |pdcoput5.dtx|.\note{The second edition of the {\it
+ PostScript Language Reference Manual} says these should be called
+ `-|.epsf|', but such names are not ISO-9660-compliant, so I~have
+ switched to `-|.eps|'.}
+
+\\{oput01.fig oput02.fig}
+ Source code for the above figures (Fig format).
+
+\\{pdcadobe.dtx}
+ Source code and documentation for |pdcadobe.tex|.
+
+\\{pdccode.dtx}
+ Source code and documentation for |pdccode.tex|.
+
+\\{pdccode.tex}
+ Macros used by |dtx| files. This file has to be included
+ because |pdccode.dtx| can't be \TeX ed without it.
+
+\\{pdccode2.tex}
+ An experimental variation allowing multiple simultaneous
+ code files.
+
+\\{pdcfmt2.dtx}
+ Source code and documentation for formatting macros.
+
+\\{pdcfsel.dtx}
+ Source code and documentation for font selection macros.
+
+\\{pdcguide.dvi}
+ A copy of the user guide, already run through \TeX.
+
+\\{pdcguide.tex}
+ This user guide for PDCMAC.
+
+\\{pdcl1maa.dtx}
+ Source code and documentation for |pdcl1maa.tex|.
+
+\\{pdcmacvn.tex}
+ Version number for the whole package.
+
+\\{pdcmisc.dtx}
+ Source code and documentation for some small macro files.
+
+\\{pdcmondo.tex}
+ Makes a combined listing of all the |dtx| files (except
+ |pdcsty.dtx|).
+
+\\{pdcoput5.dtx}
+ Source code and documentation for an output routine.
+
+\\{pdcsty.dtx}
+ Source code and documentation for style files (|pdccmdoc.tex|,
+ |ma55doc.tex|, etc.).
+
+\\{pinstall}
+ A Unix shellscript that substitutes for the |install| command on
+ systems which don't have GNU |install|.\note{I am not going to
+ bother trying to make a makefile that will work with all the
+ different versions of |install|, since there is no easy way to
+ tell them apart and they are mutually incompatible.}
+
+\\{pinstall.1}
+ A Unix manual page for |pinstall|.
+
+\\{pmkdir}
+ A Unix shellscript used to create a directory. Unlike plain
+ |mkdir|, it creates parent directories of the specified
+ directory if they do not exist. This would be called
+ |pmkdirhier| but that name is not ISO-9660-compliant.
+
+\\{pmkdir.1}
+ A Unix manual page for |pmkdir|.
+
+\\{version.txt}
+ List of the version identifiers of the |dtx| files and the
+ shellscripts that come with the package.
+\endtaggedtable
+
+%}}} file list
+%{{{ macro files
+
+\subsec{List of definition files}
+
+ The following files are the ones that are intended to go in the
+ \TeX\ inputs area and to be used in documents. Here a
+ \dfn{macro file} is simply a file of \TeX\ definitions; a
+ \dfn{style file} is a higher-level definition file that
+ specifies most of the things that affect the style of a document
+ (layout, fonts, macros, etc.). Style files start by reading a
+ bunch of macro files.
+
+\taggedtable{Files generated from the |dtx| files.}{File}{Contents}
+\\{ma55doc.tex}
+ Style file for short documents with Malvern~55 as the text font.
+ A table of contents and page headlines are generated
+ automatically.
+
+\\{ma55lft.tex}
+ Style file for very short documents with Malvern~55 as the text
+ font. `Leaflet'-class documents have no table of contents.
+
+\\{magrmac.tex}
+ Macros for typesetting in Greek with Malvern fonts (or any font
+ with the Malvern~G encoding). There is a brief user's guide in
+ |magrman.tex|.
+
+\\{pdcadobe.tex}
+ Support for fonts with the Adobe Standard Roman and Adobe Symbol
+ repertoires\note{The \dfn{repertoire} of an encoding scheme is
+ the set of characters/glyphs it includes. Since PostScript
+ fonts may be easily re-encoded, repertoire is more significant
+ then the actual encoding.} in the |dvi| file, and ISO~8859--1
+ (Latin-1) conventions in the manuscript file. The output
+ encoding actually used is that variation on \TeX\ Text generated
+ by the |afm2tfm| that comes with DVIPS. Newer \TeX\ systems
+ should instead use PostScript fonts with (a subset of) the 1990
+ Cork encoding.\note{Variously called `DC', `EC', `T1', and
+ `\TeX\ Extended Text---Latin', and described in {\it TUGboat}
+ 10\#4.} This file actually combines two functions: (1)~making
+ the various symbols availabe via commands like |\pounds| and
+ (2)~making Latin-1 characters in the manuscript produce
+ corresponding characters in the output. Described in
+ |pdcadobe.dtx|.
+
+
+\\{pdccmdoc.tex}
+ Style file for short documents with Computer Modern Roman as the
+ text font. A table of contents and page headlines are generated
+ automatically.
+
+\\{pdccmlft.tex}
+ Style file for very short documents with Computer Modern Roman
+ as the text font. `Leaflet'-class documents have no table of
+ contents.
+
+\\{pdcfmt2.tex}
+ Macros for formatting text---bulleted and numbered lists, syntax
+ descriptions, verbatim text, headings, etc. Most of
+ the facilities used by the style files come from this file.
+
+\\{pdcfsel.tex}
+ Macros for selecting fonts. Fonts are organized into
+ \dfn{fontset}s (selected with macros with names like
+ |\bodyfonts|) in which fonts are selected with nicknames like
+ |\it|, |\bf| (specified at the start of the document using
+ template macros).
+
+\\{pdchyex.tex}
+ Some random British English hyphenation exceptions (developed
+ while I~was using American English hyphenation paterns). You
+ may not want to use this. Described in |pdcmisc.dtx|.
+
+\\{pdcimth.tex}
+ Make letters in maths formulas come out in text italic instead
+ of math italic. Useful if the body font isn't CMR, or if
+ multiple-letter identifiers are used. Described in
+ |pdcmisc.dtx|.
+
+\\{pdcl1maa.tex}
+ Support for documents with using the ISO~8859--1 (Latin-1)
+ character set in the manuscript file and fonts with Malvern~A
+ encoding in the |dvi| file. Described in |pdcl1maa.dtx|.
+
+\\{pdccmsub.tex}
+ Define some Malvern~A and PostScript glyphs (like \yen,
+ \registered) by overprinting CM glyphs. Described in
+ |pdcmisc.dtx|.
+
+\\{pdcmigr.tex}
+ Make Greek capitals in maths mode use math italic (fam~1)
+ letters instead of letters from the roman font. Especially
+ useful when there are no Greek caps in the roman font.
+ Described in |pdcmisc.dtx|.
+\endtaggedtable
+%}}} macro files
+%{{{ old files
+\subsec{Obselete files}
+
+ The following macro files were included with the Malvern~$1.0$
+ distribution, but were not intended to be installed.
+ Nevertheless they appear to have been copied into some older
+ versions of the Unix\TeX\ distribution. They are obselete, and
+ their successors have new names (intended to reduce the chance
+ of accidental clashes). I'd appreciate people removing them
+ from their \TeX\ systems.
+\display
+ |formac.tex|&
+ |parmac.tex|&
+ |utils.tex|&
+ |ssoutput.tex|\cr
+ |ldfonts.tex|&
+ |malvern.tex|&
+ |cmdoc.tex|\cr
+\enddisplay
+ The following documents are similarly obselete and should not be
+ in the macros directory anyway.
+\display
+ |aboutmalvern.tex|&
+ |latexfmv.tex|\cr
+\enddisplay
+ The following macro files have the new-style names, but are
+ superseded by PDCMAC~$1.0$ files. You are not required to
+ remove then if you have documents using them. Fortunately, they
+ appear not to have been absorbed by the Unix\TeX\ distribution
+ anyway.
+\display
+ |pdcfmt.tex|&
+ |pdcpars.tex|&
+ |pdcutil.tex|&
+ |pdcoput.tex|\cr
+\enddisplay
+ The new versions will have the major number of their version ID
+ appended to their names (e.g., |pdcfmt2.tex|), and this way new
+ and old versions may coexist, allowing older documents to still
+ be processed by \TeX. The functionality of |pdcpars.tex| and
+ |pdcfmt.tex| have been taken over by |pdcfmt2.tex|.
+
+
+%}}} old files
+%{{{ gpl
+
+\rigidbalancepartialpage{\bigskip}
+
+\begingroup \notefonts \setncolumns2 \everypage{} \leftmargin=0pt
+ \advance\textlistdepth2 \let\section=\subsec
+ \input copying.tex
+ \rigidbalancepartialpage{\bigskip}
+\endgroup
+
+
+%}}} gpl
+
+\frontmatter
+%{{{ an absurd logo
+
+\ifx\asyfam\UNDEFINED
+%{{{ CMSSDC logo
+
+\moveleft\leftmargin\vbox{
+
+\font\titlefont=cmssdc10 at 24pt
+
+\leftline{\titlefont P D C M A C\quad User Guide}
+
+\bigskip
+} % end of vbox
+%}}}
+\else
+%{{{ PostScript logo
+
+\moveleft\leftmargin\vbox{\hsize=\bodywd
+ \font\thefont=pplr at 120pt
+ \input rotate
+
+ \line{\thefont
+ \setbox0=\hbox{\lower0.975ex\hbox{pd}}\dp0=1ex \ht0=0pt \rotu0%
+ c%
+ \setbox0=\hbox{\lower0.95ex\hbox{vw}}\dp0=1ex \ht0=0pt \rotu0%
+ c\hfil
+ }
+}
+\medskip
+\leftline{\font\thotherfont=pplri at 60pt \thotherfont
+ \kern-0.1em USER GUIDE}
+\bigskip
+
+%}}} PostScript logo
+\fi
+%}}} an absurd logo
+%{{{ titlepage
+
+\halign{#\hfil\cr
+ \headingfonts Edition 1 for Release
+ $\textfont0=\font \pdcmacversion$\cr
+\noalign{\medskip}%
+ P. Damian Cugley\cr
+\noalign{\smallskip}%
+ Oxford University Computing Laboratory\cr
+ Parks Road\cr
+ Oxford \sc{OX2~7HN}\cr
+ UK\cr
+\noalign{\smallskip}%
+ |damian.cugley@comlab.ox.ac.uk|\cr
+}
+
+\bigskip
+\abstract
+ PDCMAC is a collection of macro files intended to be useful with
+ \TeX\ formats with similar conventions to those described in the
+ {\it\TeX book}. This document describes how to unpack the files
+ and use them in \TeX\ documents.
+\endabstract
+
+\bigskip
+
+\global\setbox\botbox\vbox{\hsize=\bodywd \prevdepth=0pt
+\noindent
+ {\it PDCMAC User Guide}. \copyright~1995 P. Damian Cugley. All
+ rights reserved. Verbatim copies of this document (including
+ this copyright message) may be freely distributed. This edition
+ first published March 1995.
+}
+
+\let\section=\subsec
+%}}} title page
+\endfrontmatter
+
+\bye
+%}}}
+%Local Variables:
+%fill-prefix: " "
+%fold-folded-p: t
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcl1maa.dtx b/macros/plain/contrib/pdcmac/pdcl1maa.dtx
new file mode 100644
index 0000000000..8e13681ea0
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcl1maa.dtx
@@ -0,0 +1,248 @@
+% pdcl1maa.dtx -- documentation & source for pdcl1maa.tex -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCL1MAA -- Formatting Macros",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcl1maa.dtx",
+%%% version = "$Revision: 1.3 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/30 16:09:52 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file pdcl1maa.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1995 P. Damian Cugley",
+%%% 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.",
+%%% notice = "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.",
+%%% notice = "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.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcl1maa
+%{{{ preamble
+
+\relax
+\input pdccode
+
+\document
+\rcs$Id: pdcl1maa.dtx,v 1.3 1995/03/30 16:09:52 pdc Exp $\endrcs
+\codefile{pdcl1maa.tex}
+%}}} preamble
+%{{{ introduction
+
+\author{P. Damian Cugley}
+\title{PDCL1MAA---Macros for using Latin-1 characters with Malvern~A}
+\section{Introduction}
+
+ This document describes |pdcl1maa.tex|, a collection of
+ definitions designed to make Malvern~A characters available
+ using the ISO~8859--1 input encoding (Latin-1).
+
+
+\subsec{About this document}
+
+ The definitions file and the printed documentation are both in
+ |pdcl1maa.dtx|, a `documented \TeX\ macros' file\footnote*{The
+ \LaTeX~2e distribution uses files with the `|dtx|' suffix for
+ similar purposes.} which, when processed by plain \TeX,
+ generates a fresh copy of |pdcl1maa.tex| in the current directory
+ in addition to the |dvi| file. This ensures that the printed
+ documentation and the code it describes are identical. The
+ |dtx| file uses the macros in |pdccode.tex|.
+
+%}}} introduction
+%{{{ File identification
+\section{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file.
+
+\code
+ \|\% pdcl1maa.tex \fileversion~\filedate~-- Latin-1 chars in Malvern-A
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcl1maa.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "ISO 8859-1 characters using Malvern-A fonts.
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+%}}} file id
+%{{{ ISO 8859-1 support
+\section{ISO 8859--1 input}
+
+\subsec{Symbols}
+
+ Those characters whose code is the same as the code of the
+ corresponding glyph are left alone (with catcode~12). For
+ example, |^^a3| (pounds sterling) is left alone.
+
+ Those that have an equivalent |\chardef| (or |\mathchardef|)
+ name are defined with |\let|. Those with an equivalent standard
+ ligature use that ligature.
+
+ I don't use |\declareactivechar| on these because they would not
+ work properly in verbatim text with catcode~12. (Extending
+ verbatim text to include Latin-1 will take a few definitions
+ along the same lines as |\ttlq| etc.)
+\code
+ |\catcode`^^a0\active \let^^a0=~
+% A1
+% A2
+% A3
+% A4
+ |\catcode`^^a5\active \let^^a5=\yen
+% A6
+ |\catcode`^^a7\active \let^^a7=\S
+ |\catcode`^^a8\active \let^^a8=\"
+ |\catcode`^^a9\active \let^^a9=\copyright
+ |\catcode`^^aa\active \let^^aa=\orda
+ |\catcode`^^ab\active \def^^ab{<<}
+ |\catcode`^^ac\active \let^^ac=\lnot
+ |\catcode`^^ad\active \let^^ad=\-
+ |\catcode`^^ae\active \let^^ae=\registered
+ |\catcode`^^af\active \let^^af=\=
+\smallbreak
+ |\catcode`^^b0\active \let^^b0=\degrees
+ |\catcode`^^b1\active \let^^b1=\pm
+ |\catcode`^^b2\active \def^^b2{^2}
+ |\catcode`^^b3\active \def^^b3{^3}
+ |\catcode`^^b4\active \let^^b4=\'
+ |\catcode`^^b5\active \let^^b5=\mu
+ |\catcode`^^b6\active \let^^b6=\P
+ |\catcode`^^b7\active \let^^b7=\gbdecimal
+ |\catcode`^^b8\active \let^^b8=\c
+ |\catcode`^^b9\active \def^^b9{^1}
+ |\catcode`^^ba\active \let^^ba=\ordo
+ |\catcode`^^bb\active \def^^bb{>>}
+ |\catcode`^^bc\active \def^^bc{\frac14}
+ |\catcode`^^bd\active \def^^bd{\frac12}
+ |\catcode`^^be\active \def^^be{\frac34}
+ |\catcode`^^bf\active \def^^bf{?`}
+\smallbreak
+ |\catcode`^^d7\active \let^^d7=\times
+ |\catcode`^^f7\active \let^^f7=\div
+\endcode
+
+\subsec{Composite letters}
+
+
+ The characters that represent marks for composite
+ letters\footnote*{This phrase is used on the grounds that the
+ word {\it accent} tends to provoke lectures on ways in which
+ many composite letters do {\it not} represent accents in the
+ languages in which they are used.} are |\let| to the
+ corresponding composite-letter-making command---one may write
+ `{\tt\char"7F u\char"18 c}' to get `\"u\c c'.
+\code
+ |\catcode`^^c0\active \def^^c0{\`A}
+ |\catcode`^^c1\active \def^^c1{\'A}
+ |\catcode`^^c2\active \def^^c2{\^A}
+ |\catcode`^^c3\active \def^^c3{\~A}
+ |\catcode`^^c4\active \def^^c4{\"A}
+ |\catcode`^^c5\active \let^^c5=\AA
+ |\catcode`^^c6\active \let^^c6=\AE
+ |\catcode`^^c7\active \def^^c7{\c C}
+ |\catcode`^^c8\active \def^^c8{\`E}
+ |\catcode`^^c9\active \def^^c9{\'E}
+ |\catcode`^^ca\active \def^^ca{\^E}
+ |\catcode`^^cb\active \def^^cb{\"E}
+ |\catcode`^^cc\active \def^^cc{\`I}
+ |\catcode`^^cd\active \def^^cd{\'I}
+ |\catcode`^^ce\active \def^^ce{\^I}
+ |\catcode`^^cf\active \def^^cf{\"I}
+\smallbreak
+ |\catcode`^^d0\active \let^^d0=\DH
+ |\catcode`^^d1\active \def^^d1{\~N}
+ |\catcode`^^d2\active \def^^d2{\`O}
+ |\catcode`^^d3\active \def^^d3{\'O}
+ |\catcode`^^d4\active \def^^d4{\^O}
+ |\catcode`^^d5\active \def^^d5{\~O}
+ |\catcode`^^d6\active \def^^d6{\"O}
+ |\catcode`^^d8\active \let^^d8=\O
+ |\catcode`^^d9\active \def^^d9{\`U}
+ |\catcode`^^da\active \def^^da{\'U}
+ |\catcode`^^db\active \def^^db{\^U}
+ |\catcode`^^dc\active \def^^dc{\"U}
+ |\catcode`^^dd\active \def^^dd{\'Y}
+ |\catcode`^^de\active \let^^de=\TH
+ |\catcode`^^df\active \let^^df=\ss
+\smallbreak
+ |\catcode`^^e0\active \def^^e0{\'a}
+ |\catcode`^^e1\active \def^^e1{\`a}
+ |\catcode`^^e2\active \def^^e2{\^a}
+ |\catcode`^^e3\active \def^^e3{\~a}
+ |\catcode`^^e4\active \def^^e4{\"a}
+ |\catcode`^^e5\active \let^^e5=\aa
+ |\catcode`^^e6\active \let^^e6=\ae
+ |\catcode`^^e7\active \def^^e7{\c c}
+ |\catcode`^^e8\active \def^^e8{\`e}
+ |\catcode`^^e9\active \def^^e9{\'e}
+ |\catcode`^^ea\active \def^^ea{\^e}
+ |\catcode`^^eb\active \def^^eb{\"e}
+ |\catcode`^^ec\active \def^^ec{\`i}
+ |\catcode`^^ed\active \def^^ed{\'i}
+ |\catcode`^^ee\active \def^^ee{\^i}
+ |\catcode`^^ef\active \def^^ef{\"i}
+\smallbreak
+ |\catcode`^^f0\active \let^^f0=\dh
+ |\catcode`^^f1\active \def^^f1{\~n}
+ |\catcode`^^f2\active \def^^f2{\`o}
+ |\catcode`^^f3\active \def^^f3{\'o}
+ |\catcode`^^f4\active \def^^f4{\^o}
+ |\catcode`^^f5\active \def^^f5{\~o}
+ |\catcode`^^f6\active \def^^f6{\"o}
+ |\catcode`^^f8\active \let^^f8=\o
+ |\catcode`^^f9\active \def^^f9{\`u}
+ |\catcode`^^fa\active \def^^fa{\'u}
+ |\catcode`^^fb\active \def^^fb{\^u}
+ |\catcode`^^fc\active \def^^fc{\"u}
+ |\catcode`^^fd\active \def^^fd{\'y}
+ |\catcode`^^fe\active \let^^fe=\th
+ |\catcode`^^ff\active \def^^ff{\"y}
+\endcode
+
+%}}} ISO 8859-1 support
+\endcodefile
+\enddocument
+\bye
+%}}} pdcl1maa.dtx
+
+%Local variables:
+%fill-prefix: "\t"
+%fold-folded-p: t
+%End:
+
diff --git a/macros/plain/contrib/pdcmac/pdcmacvn.tex b/macros/plain/contrib/pdcmac/pdcmacvn.tex
new file mode 100644
index 0000000000..b1f9395e65
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcmacvn.tex
@@ -0,0 +1 @@
+\def\pdcmacversion{1.0.01}
diff --git a/macros/plain/contrib/pdcmac/pdcmisc.dtx b/macros/plain/contrib/pdcmac/pdcmisc.dtx
new file mode 100644
index 0000000000..ad7cad7262
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcmisc.dtx
@@ -0,0 +1,555 @@
+% pdcmisc.dtx -- documentation and source code for misc macro files -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "Miscellanous macro files",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcmisc.dtx",
+%%% version = "$Revision: 1.4 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/30 16:13:08 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions files pdcmigr.tex, pdcimth.tex,
+%%% pdchyex.tex, pdcmasyb.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions files and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% 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.",
+%%% notice = "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.",
+%%% notice = "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.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcmisc.dtx
+%{{{ preamble
+
+\relax
+\input pdccode
+
+\document
+\rcs$Id: pdcmisc.dtx,v 1.4 1995/03/30 16:13:08 pdc Exp $\endrcs
+
+\def\newfile{\lineno=0 }
+%}}} preamble
+%{{{ intro
+\author{P. Damian Cugley}
+\title{Miscellaneous macro files}
+
+%}}} intro
+%{{{ pdcmigr
+
+\newfile
+\section{PDCMIGR: Use math italic Greek capitals}
+
+ Knuth notes that it is conventional to use unslanted Greek
+ capitals in maths, even though other letters are slanted
+ (I~personally think that it looks nicer to use slanted Greek
+ caps). Thus \TeX\ takes the Greek capitals from fam~0 by
+ default.
+
+ If you are using a body text font that does not have the Greek
+ capitals---for example, almost any PostScript or Cork-style
+ font---then this no longer works. Better then to switch to
+ using the Greek capitals from the math italic font (fam~1).
+ That's what the file |pdcmigr.tex| does. The characters are
+ still in maths class~7, meaning that they will respect changes
+ to |\fam| made by font-switching commands.
+
+\codefile{pdcmigr.tex}
+
+\code
+ \|\% pdcmigr.tex \fileversion~\filedate -- see end of file %
+ for more info
+ \|\\message\{\fileversion~<\fileauthor~\filedate>\}
+\smallbreak
+ |\mathchardef\Gamma = "7100
+ |\mathchardef\Delta = "7101
+ |\mathchardef\Theta = "7102
+ |\mathchardef\Lambda = "7103
+ |\mathchardef\Xi = "7104
+ |\mathchardef\Pi = "7105
+ |\mathchardef\Sigma = "7106
+ |\mathchardef\Upsilon = "7107
+ |\mathchardef\Phi = "7108
+ |\mathchardef\Psi = "7109
+ |\mathchardef\Omega = "710A
+\endcode
+
+ This file has more comments than code. Since the code is so
+ short I think I'll get away with putting the comments after an
+ |\endinput|.
+\code
+ |\endinput
+\smallskip
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcmigr.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "A definition file for TeX, which redefines
+ |%%% \Gamma, ..., \Omega to use letters from the
+ |%%% maths italic font instead of the roman font.
+ |%%% This file was generated by running
+ |%%% plain TeX on pdcmisc.dtx",
+ |%%% copyright = "Copyright (c) 1991, 1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ |%%% Distribute pdcmisc.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+\endcode
+
+\endcodefile
+%}}} pdcmigr
+%{{{ pdcimth
+
+\newfile
+\section{PDCIMTH: use text italic letters in maths mode}
+
+ Very few existing font families have a separate math-italic font. When
+ using these fonts as body fonts, with the Computer Modern fonts as
+ maths fonts, it looks wrong to have the maths letters in a completely
+ different style form the text italic. Therefore it makes sense to
+ redefine maths mode so that the letters come from the text italic font.
+
+ This is also useful when multiple-letter identifiers are used in maths
+ mode. We c an say |$difference:=height+depth$| and get `$\it
+ difference:=height+depth$' instead of `$difference:=height+depth$'.
+
+ In the following, the counters |\count0| to |\count4| are used as
+ follows:
+$$\centerline{\vbox{\halign{\tt\cs{#}\hfil&&\quad#\hfil\cr
+ count0&mathcode for current upper case char\cr
+ count1&mathcode for current lower case char\cr
+ count2&ASCII code of current upper case char\cr
+ count3&ASCII code of current lower case char\cr
+ count4&number of characters left to redefine\cr
+}}}$$
+ The grouping prevents this temporary use conflicting with \TeX's
+ use of these counters.
+
+\codefile{pdcimth.tex}
+\code
+ \|\% pdcimth.tex \fileversion~\filedate~- maths letters in text italic
+ \|\\message\{\fileversion~\filedate\}
+ |
+ |\begingroup
+\smallbreak
+ | \count0="7400 \count1=\count0
+ | \advance\count0 by`A \advance\count1 by`a
+ | \count2=`A \count3=`a \count4=26
+\smallbreak
+ | \loop\ifnum\count4>0
+ | \advance\count4 by-1
+ | \global\mathcode\count2=\count0
+ | \global\mathcode\count3=\count1
+ | \advance\count0 by1 \advance\count1 by1
+ | \advance\count2 by1 \advance\count3 by1
+ | \repeat
+\smallbreak
+ |\endgroup
+\endcode
+\noindent
+ The value $\hbox{\H{}\tt 7400} + c$ used above means mathcode~7,
+ fam~4 (|\itfam|), character~$c$.
+
+ Once again, the code is short enough that I think I can get away
+ with putting the comments at the end:
+\code
+ |\endinput
+\smallskip
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcimth.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "A definition file for TeX, which redefines
+ |%%% mathcodes to use letters from the
+ |%%% text italic font instead of math italic.
+ |%%% This file was generated by running
+ |%%% plain TeX on pdcmisc.dtx",
+ |%%% copyright = "Copyright (c) 1991, 1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ |%%% Distribute pdcmisc.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+\endcode
+\endcodefile
+%}}} pdcimth
+%{{{ pdchyex
+
+\newfile
+\section{PDCHYEX: Hyphenation exceptions}
+
+ These hyphenation exceptions are ones I~use for must documents.
+
+\notepar
+ Of all the macro files in this package, this is the one you
+ should be most chary of using. These are written for a \TeX\
+ system which uses American English hyphenation patterns, but are
+ intended to help it produce hyphenations suitable for British
+ English, and this peverse approach will probably lead to all
+ sorts of anomalies. Ideally separate hyphenation patterns will
+ be used for British English documents.
+\endnotepar
+
+\codefile{pdchyex.tex}
+
+\subsec{File identification}
+
+ The list of exceptions is expected to grow, so it seems best to
+ have the identification at the top of the file.
+
+\code
+ \|\% pdchyex.tex \fileversion~\filedate~-- some British hyphenations
+\smallskip
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdchyex.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "A non-exhaustive set of hyphenation exceptions
+ |%%% designed to make TeX with American hyphenation
+ |%%% tables produce some British hyphenations.
+ |%%% This file was generated by running
+ |%%% plain TeX on pdcmisc.dtx",
+ |%%% copyright = "Copyright (c) 1991, 1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ |%%% Distribute pdcmisc.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%%}
+ |
+ \|\\message\{\fileversion~<\fileauthor~\filedate>\}
+ |
+\endcode
+
+\subsec{Setting parameters}
+
+ These settings are from {\it Hart's Rules} p.\thinspace141.
+\code
+ |\lefthyphenmin=2 \righthyphenmin=3 \uchyph=0
+\endcode
+
+\subsec{And finally, the hyphenation exceptions}
+
+\code
+ |\hyphenation{
+\endcode
+ First, some words from {\it Hart's Rules}\/ pp.\thinspace14--15.
+ I've taken the list on p.\thinspace14 and included here those
+ which were given wrong hyphenation by \TeX's default tables.
+\code
+ | le-gend le-gends re-adjust re-appear exact-ing
+\smallbreak
+
+ | abs-cess abs-cess-es abs-cessed ana-lyse ana-lyses
+ | ana-lysis ana-lyses appear-ance appear-ances bio-graphy
+ | celeb-rate celeb-rates celeb-rations cor-respond-ence
+ | depend-ent des-pise des-pises dis-pised dimin-ish
+ | dimin-ish-es dimin-ish-ed dis-connect dis-connect-ed
+ | dis-connects forget-ting gener-ally haemor-rhage
+ | illus-trate immedi-ate immedi-ately immport-ance
+ | inexplic-able inter-pret inter-est inter-ested
+ | inter-est-ing minis-ter origin-ally philo-sophy
+ | philo-sophic philo-sophic-ally prim-ary prob-ably
+ | semb-lance
+\smallbreak
+ | calm-est debt-ors fea-ther fea-thers post-humous lamb-like
+ | poingn-ant tough-ish ach-ing archaeo-logy etymo-logy
+ | philo-logist psycho-logist tauto-logy zoolo-gist
+\endcode
+ Now some random hyphenations I~encountered in my own documents
+ at some point. I~haven't checked these in a spelling
+ dictionary, so don't use them in documents where your life
+ depends on correct hyphenation.
+\code
+
+ | art-iest cig-ar-ette bio-logy bio-chem-is-try boy-friend
+ | brit-ain brit-ish com-ic com-ics cug-ley dogs-body
+ | dor-mouse gai-man graph-ic immedie-ate immedi-ate
+ | immedi-ately issue mckean mis-hap mis-haps news-letter
+ | news-paper night-crawler origin-ally origin-ator phys-ique
+ | phys-iques porn-o-graphy porn-o-graphic rec-om-mend-ation
+ | Ser-geant ser-geant Sien-kie-wicz spon-tan-e-ous
+ | spon-tan-e-ously stop-ped strip-ped teen-ager teen-agers
+ | tem-per-men-tal Thatch-er-ism Thatch-er-ite under-ground
+ | under-grounds var-i-able venge-ance warp-smith warp-smiths
+ | whirl-pool
+
+ |}
+\endcode
+\endcodefile
+
+%}}} pdchyex
+%{{{ pdccmsub
+
+\newfile
+\codefile{pdccmsub.tex}
+\section{PDCCNSUB: Substitutions using Computer Modern glyphs}
+
+ The Malvern and PostScript repertoire includes some characters
+ not included in the \TeX\ Text fonts used by plain \TeX. I~have
+ made macros for some of these that assemble symbols from
+ existing characters. This way documents can be switched between
+ the different font encoding schemes mroe easily. They won't
+ look very pretty though.
+
+\notepar
+ These work acceptably with ten-point Computer Modern but might
+ need adjustment with other fonts.
+\endnotepar
+
+%{{{ indentification
+\subsec{File dientification}
+
+\code
+ \|\% \filename~\fileversion~\filedate~-- CM subs for PS glyphs
+\smallskip
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcmigr.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "Macros for simulating some PostScript characters
+ |%%% using glyphs form the Computer Modern family.
+ |%%% This file was generated by running
+ |%%% plain TeX on pdcmisc.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ |%%% Distribute pdcmisc.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~\filedate\}
+ |
+\endcode
+
+%}}} indentification
+
+
+\code
+ |\dimendef\dimena=0
+\endcode
+\dimendef\dimena=0
+
+%{{{ currency
+
+\subsec{Currency signs}
+
+\def\yen{{%
+ \ooalign{%
+ \hfil\raise0.25ex\hbox{$\scriptscriptstyle=$}\hfil\crcr
+ \hfil Y\hfil
+ }%
+}}
+\def\currency{{%
+ \ooalign{%
+ \dimena-0.10em
+ \hskip\dimena \raise0.2ex \hbox{\mathhexbox202}\hskip\dimena\crcr
+ \hfil \raise0.2ex \hbox{\mathhexbox20E}\hfil
+ }%
+}}
+
+ The Yen sign looks like `50\thinspace000\yen', the cents sign
+ like `37\rlap/c'. The pounds-sterling sign is always italic.
+\code
+ |\def\pounds{{\it\char36 }}
+\smallbreak
+ |\def\yen{{%
+ | \ooalign{%
+ | \hfil\raise0.25ex\hbox{$\scriptscriptstyle=$}\hfil\crcr
+ | \hfil Y\hfil
+ | }%
+ |}}
+\smallbreak
+ |\def\cents{\leavevmode\hbox{\rm\rlap/c}}
+\endcode
+
+ The ISO~646 currency sign---originally created to replace the
+ dollar sign in the international reference version character
+ set---is supposed to be drawn as a circle with four `ears';
+ we'll have to fake it rather crudely: `\currency', as in
+ `\currency100' or possibly `100\currency'.
+\code
+ |\def\currency{{%
+ | \ooalign{%
+ | \hskip-0.1em
+ | \raise0.2ex \hbox{\mathhexbox202}\hskip-0.1em\crcr
+ | \hfil \raise0.2ex \hbox{\mathhexbox20E}\hfil
+ | }%
+ |}}
+\endcode
+
+ The florin sign `{\it f}' seems to have started life as a way of
+ getting an italic {\it f} on dot-matrix printers. In an italic
+ context it still has to be in itaics---switching to a roman
+ letter does not seem appropriate.
+\code
+ |\def\florin{{\it f\/}}
+\endcode
+
+%}}} currency
+%{{{ circled letters
+
+
+\subsec{Things in circles}
+
+\def\circledletter#1#2{{%
+ \ooalign{%
+ \hfil\kern#1\hbox{$\scriptstyle\rm #2$}\hfil\crcr
+ \mathhexbox20D%
+ }%
+}}
+\def\registered{\circledletter{0.02em}R}
+\def\copyright{\circledletter{-0.045em}C}
+ Here's a general macro for making letters in circles---like
+ the registered trade mark sign `\registered', or the signs
+ `\circledletter{0.04em}P' and `\circledletter{0.02em}S'
+ (I~don't use them so I~haven't given them names) or even `\circledletter{0.05em}1'. A matching
+ copyright sing (using a small capital {\it c} instead of a
+ lower case {\it c}) looks like `\copyright'. Parameter |#1|
+ to the macro is the amount to shift the small letter relative
+ to the circle to get it optically centred.
+\code
+ |\def\circledletter#1#2{{%
+ | \ooalign{%
+ | \hfil\kern#1\raise0.00ex \hbox{$\scriptstyle\rm #2$}\hfil\crcr
+ | \mathhexbox20D%
+ | }%
+ |}}
+\smallbreak
+ |\def\registered{\circledletter{0.02em}R}
+ |\def\copyright{\circledletter{-0.045em}C}
+\endcode
+%}}} circled letters
+%{{{ guillemets
+
+\subsec{Guillemets}
+
+\def\lguillemet{\leavevmode \raise0.5ex \hbox{$\scriptscriptstyle\langle\!\langle$}}
+\def\rguillemet{\leavevmode \raise0.5ex \hbox{$\scriptscriptstyle\rangle\!\rangle$}}
+
+ Ersatz guillemets look like \lguillemet this\rguillemet.
+\code
+ |\def\lguillemet{%
+ | \leavevmode
+ | \raise0.5ex \hbox{$\scriptscriptstyle\langle\!\langle$}%
+ |}
+\smallbreak
+ |\def\rguillemet{%
+ | \leavevmode
+ | \raise0.5ex \hbox{$\scriptscriptstyle\rangle\!\rangle$}%
+ |}
+\endcode
+%}}} guillemets
+%{{{ misc
+\subsec{Miscellaneous}
+
+\def\permille{{%
+ \setbox0 \hbox{/}%
+ \flushtop{$\scriptstyle0\!$}/%
+ \lower\dp0 \hbox{$\!\scriptstyle00$}%
+}}
+\def\orda{\flushtop{\the\scriptfont\ifnum\fam>0 \fam\else 0\fi \b a}}
+\def\ordo{\flushtop{\the\scriptfont\ifnum\fam>0 \fam\else 0\fi \b o}}
+
+ The per-mille sign `\permille' can't be made from `\%' sign because
+ matching the rings is impossible, so we use `0/00':
+\code
+ |\def\permille{{%
+ | \setbox0 \hbox{/}%
+ | \flushtop{$\scriptstyle0\!$}/%
+ | \lower\dp0 \hbox{$\!\scriptstyle00$}%
+ |}}
+\endcode
+
+ The British decimal point is a raised dot: `3\mathhexbox201141'
+ instead of `3.141'.
+\code
+ |\def\gbdecimal{\mathhexbox201}
+\endcode
+ Unfortunately, this symbol has become a casualty of the `DTP
+ revolution', and the American use of a full stop as a decimal
+ point has become common.
+
+ The glyphs `\orda' and `\ordo' are used in to abbreviate Spanish
+ ordinal numbers: the feminine {\it primera} becomes 1\orda, and
+ the masculine {\it primero} 1\ordo.
+\code
+ |\def\orda{\flushtop{\the\scriptfont\ifnum\fam>0 \fam\else 0\fi \b a}}
+ |\def\ordo{\flushtop{\the\scriptfont\ifnum\fam>0 \fam\else 0\fi \b o}}
+\endcode
+
+
+%}}} misc
+%{{{ sc and csc
+
+\subsec{Substitutions for Malvern's alphabet-switching commands}
+
+ The macros used to select small capitals etc.\ in Malvern fonts
+ cannot work with Computer Modern, but might appear in documents
+ anyway. Instead they are all made equivalent to |\relax|.
+
+\code
+ |\let\sc=\relax
+ |\let\csc=\relax
+ |\let\mc=\relax
+\endcode
+
+%}}} sc and csc
+
+\endcodefile
+
+%}}} pdcmasub
+\enddocument
+\bye
+%}}} pdcmisc.dtx
+%Local Variables:
+%fill-prefix: " "
+%fold-folded-p: t
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcmondo.tex b/macros/plain/contrib/pdcmac/pdcmondo.tex
new file mode 100644
index 0000000000..76c6eac3ca
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcmondo.tex
@@ -0,0 +1,189 @@
+% Combined listing of the PDCMAC macros
+% hacked together pdc 1995-03-28
+
+\relax
+\input pdccode
+\input epsf
+\errorcontextlines10000
+\document
+
+\input pdcmacvn
+
+% Redefine the PDCCODE macros
+
+%\def\codefile#1{}
+%\def\endcodefile{}
+%\begingroup\obeylines \toksa={\endgroup %
+% \def\CODElinei#1^^M{%
+% \indent\the\everycodeline #1\par %
+% \endgroup % matches \CODEline
+% }%
+% \def\CODElinex#1^^M{%
+% {\indent\the\everycodeline #1\par}%
+% }%
+%} \the\toksa
+
+
+% abbreviated TOC macros taken from pdcsty
+
+\newwrite\TOCfile
+\openout\TOCfile=\jobname.toc
+\def\TOCwrite#1#2#3{%
+ \begingroup\def\n{\string\n}
+ \def\tmp{#3}%
+ \edef\tmp{\string#1{#2}{\expandafter\TOCtrim\meaning\tmp}}
+ \write\TOCfile\expandafter{\tmp{\folio}}\endgroup
+}
+\def\TOCtrim#1:->{}
+\def\TOCentryfile#1#2#3{
+ \medbreak\noindent{\subsecfont #2}\smallskip
+}
+\def\TOCentrysection#1#2#3{
+ \indent \llap{\S#1\enspace}
+ \ignorespaces #2\quad#3\par
+}
+\def\TOCentrysubsec#1#2#3{}
+
+
+% Abbreviated fontmatter definitions from pdcsty:
+
+\def\frontmatter{
+ \write\TOCfile{\string\endinput}
+ \closeout\TOCfile
+ \vfill\supereject
+ \pageno=-1 \secnofalse \headline{\hfil}
+ \def\TOCwrite##1##2##3{}
+}
+\def\endfrontmatter{
+ \section{Contents}
+ \input\jobname.toc
+ \vfill\supereject
+}
+\newif\ifsecno \secnotrue
+
+
+% sectioning taken from pdccode -- adapted to include TOC entries.
+
+\def\section#1{%
+ \advance\seccount1 \subseccount=0
+ \bigbreak
+ \begingroup
+ \secfont \hyphenpenalty=10000 \tolerance=1000
+ \rightskip=0pt plus 2em
+ \ifsecno \noindent\llap{\number\seccount.\enspace}\fi #1
+ \TOCwrite\TOCentrysection{\number\seccount}{#1}
+ \nobreak\medskip
+ \endgroup
+ \noindenttrue
+}
+\def\subsec#1{%
+ \advance\subseccount1
+ \medbreak
+ \begingroup
+ \subsecfont \hyphenpenalty=10000 \tolerance=1000
+ \parskip=0pt \parindent=0pt \rightskip=0pt plus 2em
+ \ifsecno \noindent\llap{\number\seccount.%
+ \number\subseccount.\enspace}\fi #1
+ \TOCwrite\TOCentrysubsec{\number\seccount.\number\subseccount}{#1}
+ \nobreak\smallskip
+ \endgroup
+ \noindenttrue
+}
+\def\title#1{
+ \vglue2\baselineskip
+ \begingroup \titlefont \parindent-\leftmargin \hyphenpenalty10000
+ #1\smallskip
+ \endgroup
+ \leftline{Version \fileversion,
+ last changed \fileauthor\space \mungedate\filedate}
+ \ifx\filelocker\empty\else
+ \leftline{Edited by \filelocker\unskip\ \today}
+ \fi
+ \medskip
+ \hrule \vskip1pt \hrule \vskip1pt \hrule \vskip1pt \hrule
+ \medskip
+ \rightline{\theauthor}
+ \bigskip
+ \headline{\hfil\global\headline{%
+ \hskip-\leftmargin \sevenbf \themarks \hfil #1
+ \fileversion
+ \ifx\filelocker\empty
+ \space\mungedate\filedate
+ \else
+ e\space\today
+ \fi
+ }}
+ \TOCwrite\TOCentryfile{}{#1}
+}
+
+% A command to include another complete document in this one.
+
+\def\includedocument#1{
+ \begingroup
+ \let\RELAX\relax
+ \def\relax{\let\relax\RELAX \iffalse}
+ \let\document=\fi
+ \let\enddocument\endinput
+ \lineno=0
+ \input #1
+ \vfil\eject \mark{}
+ \endgroup
+}
+
+\includedocument{maamac.dtx}
+\includedocument{magrmac.dtx}
+\includedocument{pdcadobe.dtx}
+\includedocument{pdccode.dtx}
+\includedocument{pdcfsel.dtx}
+\includedocument{pdcfmt2.dtx}
+\includedocument{pdcl1maa.dtx}
+\includedocument{pdcmisc.dtx}
+\includedocument{pdcoput5.dtx}
+
+\headline{\hfil}
+\null
+% need a blank page (unfortunate kludge)
+% This is because each embedded document is followed by a page break
+% but we need the a page break before the TOC to finish writing out
+% the TOC file. Argh.
+\frontmatter
+\vfill
+\leftline{\titlefont PDCMAC Mondo Combined Listing}
+\leftline{\titlefont For release 1\kern-0.07em \raise0.5ex\hbox{.}0}
+
+\section{Preface}
+
+ PDCMAC is a package of plain \TeX\ macro files. The macro files
+ are generated by running plain \TeX\ on |dtx| files, which
+ produces both a copy of the macros and printed documentation
+ (see the {\it PDCMAC User Guide}\/ for more information). This
+ `combined listing' is a compilation of most of the |dtx| files
+ in the PDCMAC distribution (|pdcsty.dtx|, which generates the
+ sample style files, is not included).
+
+ This compilation document works as follows. First it reads
+ |pdcmac.tex| and then redefines some macros to write entries for
+ a table of contents, and then reads the |dtx| files one after
+ another. The results should be same as running \TeX\ on each of
+ the |dtx| files separately, except that the pages are numbered
+ continuously and there is a contents list.
+
+ This is useful for two different purposes: (1)~to make a printed
+ copy of the macros for reference while using them, and (2)~to
+ generate all the macro files in one \TeX\ command instead of
+ several. This is useful when you cannot use the makefile
+ supplied with the package. If you do have the makefile, it will
+ probably be the more convenient way to keep the macro files
+ up-to-date.
+
+ The files are included in alphabetical order. See the PDCCODE
+ chapter below for information on the PDCCODE system.
+
+\endfrontmatter
+\enddocument
+\bye
+
+%Local Variables:
+%fill-prefix: " "
+%tex-has-children: t
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcoput5.dtx b/macros/plain/contrib/pdcmac/pdcoput5.dtx
new file mode 100644
index 0000000000..106b45feca
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcoput5.dtx
@@ -0,0 +1,986 @@
+% pdcoput5.dtx -- documentation & source for outpout routine -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "PDCOPUT5 -- An output routine for zines",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcoput5.dtx",
+%%% version = "$Revision: 5.3 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/04/06 11:51:03 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX definitions file pdcoput5.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions file and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% 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.",
+%%% notice = "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.",
+%%% notice = "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.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode.tex"
+%%%}
+
+%{{{ pdcoput5.tex
+%{{{ preamble
+
+\relax
+\input pdccode
+\input epsf
+
+\document
+\rcs$Id: pdcoput5.dtx,v 5.3 1995/04/06 11:51:03 pdc Exp $\endrcs
+
+\codefile{pdcoput5.tex}
+
+\countdef\counta=255 \newcount\countb
+\counta=`a \countb="7461
+\loop \ifnum\counta<"7B
+ \mathcode\counta\countb
+ \advance\counta1 \advance\countb1
+\repeat
+\counta=`A \countb="7441
+\loop \ifnum\counta<"5B
+ \mathcode\counta\countb
+ \advance\counta1 \advance\countb1
+\repeat
+
+%}}} preamble
+%{{{ introduction
+
+\title{PDCOPUT5---an output routine for zines}
+
+\section{Introduction}
+
+ This document describes |pdcoput5.tex|, a \TeX\ definition file
+ that defines an output routine for \TeX\ documents. The
+ complete text of the macros is reproduced, with brief
+ descriptions of how to exploit them.
+
+ In fact, running plain \TeX\ on the file |pdcoput5.dtx|
+ generates a copy of the macros in a file called |pdcoput5.tex|
+ in the current directory, as well as the printed
+ documentation.\footnote*{The \LaTeX~2e distribution uses files
+ with the suffix |dtx| for similar purposes.} This should help
+ ensure that the printed documentation matches the file it
+ describes.
+
+ The name ends with `-|5|' to distinguish this file from its
+ predecessor (version 4.1.7), so that documents based on the old
+ macros can still be printed.
+
+%{{{ output routines
+\subsec{Output routines}
+
+ In a \TeX\ document, there is a special sequence of \TeX\
+ commands called the {\it output routine} which controls the
+ assembly of pages for output to the |dvi| file.
+ Plain \TeX\ comes with an output routine that handles simple
+ documents (with footnotes and topinserts); \LaTeX\ has a more
+ complex output routine that has many extra features (margin
+ paragraphs, \LaTeX's floats).
+%}}} output routines
+%{{{ backgorund
+
+\subsec{Background to this output routine}
+
+ I have been using \TeX\ to typeset fanzines\footnote\dag{The
+ word {\it fanzine} comes from science fiction fans' jargon: {\it
+ fan} for amateur (in the sense of unpaid, not necessarily
+ amateurish) + {\it magazine}. (They call professional magazines
+ {\it prozines}.) Thus a fanzine (or zine for short) is a small
+ magazine, often produced by photocopying or cheap printing by
+ its editor. The word {\it zine} rhymes with {\it scene} not
+ {\it sign}, and isn't spelled with an apostrophe (unless you are
+ the sort of person who spells {\it phone}, {\it cello} and {\it
+ bus} with an apostrophe).} for some years. Unfortunately, for
+ magazine layouts, the `floating' insertions provided by plain
+ \TeX\ and \LaTeX\ do exactly the wrong thing---in a magazine,
+ the designer wants to lay out the components of the page
+ (illustrations, text, headings) exactly where he or she wants
+ them, whereas the standard \TeX\ formats are designed to let the
+ formatter place components according to its own complex rules.
+
+ Originally I~tried browbeating \LaTeX\ into doing the zine
+ layouts I~wanted. I realized eventually that by the time I~had
+ redefined enough of \LaTeX's kernel to get the effects I~wanted
+ I~would more or less have written everything from scratch. The
+ sort of typesetting I~wanted is so unlike what \LaTeX\ is
+ designed for that \LaTeX\ was getting in the way.
+
+ Thus I~developed a set of \TeX\ definition files,\footnote\ddag{We
+ can ignore the intermediate stage, which involved writing a
+ `user-friendly' format in the style of \LaTeX\ and Texinfo, with
+ structures very different from plain \TeX's syntax. In the end
+ I realized that a format that requires disguising or renaming
+ plain \TeX\ constructs makes using and modifying the macros
+ harder, not easier, because the user has to understand the new
+ conventions in addition to plain \TeX\ syntax.} with an output
+ routine that allowed a page to be peppered with inserts with the
+ text flowing in between them (with a more restricted class of
+ inserts than, say, a DTP program, but still flexible enough to
+ be useful). The output routine also does multi-column text---in
+ this respect it is very similar to the |multicol| package in
+ \LaTeX~2e. The routine presented here has been rewritten from
+ scratch a few times, each time shedding some cruft as I~have a
+ better understanding of \TeX.
+%}}} backgorund
+%{{{ layout model
+
+\subsec{The layout model}
+
+\topinsert
+ \line{\vbox{\advance\hsize-1pc \hsize=0.333\hsize
+ \noindent{\bf Figure 1}\quad Page layout. This shows a
+ page without the optional extra boxes. In this example,
+ text columns each span two grid cells. The left-hand
+ column has an illo (space for an illustration) with caption.
+ }%
+ \epsfxsize=\hsize \advance\epsfxsize-1pc
+ \epsfxsize=0.667\epsfxsize \epsffile{oput01.eps}\hfil
+}
+\medskip\hrule\medskip
+\endinsert
+
+\topinsert
+ \line{\epsfxsize=\hsize \advance\epsfxsize-1pc
+ \epsfxsize=0.667\epsfxsize \epsffile{oput02.eps}\hfil
+ \vbox{\advance\hsize-1pc \hsize=0.333\hsize
+ \noindent{\bf Figure 2}\quad Page layout parameters.
+ This page has with
+ all the optional boxes (shown with dashed lines). One text
+ column has a space left for artwork. Text columns are the same
+ width as grid cells.
+ }}
+\medskip\hrule\medskip
+\endinsert
+
+ The main part of the page (everything except the headline and
+ footline) is called the {\it body}. The body is divided into a
+ grid of cells. The cells are conceptually the framework on
+ which page components like text columns and illustrations are
+ hung. For example, text columns may span two cells. Figure~1
+ shows a simple layout. Fitting on the grid usually means the
+ width of the object is $N\times gridwd + (N-1)\times colsep$ and
+ its left edge is $K\times(gridwd + colsep)$ from the left edge
+ of the page body.
+
+ The aim of using a grid layout is to combine flexibility with
+ enough structure that the result is not a chaotic mess. The
+ example grid is 5~cells wide, so that text columns can probably
+ be 2 or 3 cells wide without being too narrow or too wide.
+ Illustrations may be anything from 1 to 5 cells wide, or may
+ bleed off the page.
+
+
+
+
+%}}} layout model
+%}}} introduction
+%{{{ identification
+\section{File identification}
+
+ Macro files nowadays tend to start with a whole slew of header
+ comments designed to be useful to people comign across the file
+ in some archive and unaware of what it is for.
+
+\code
+ \|\% \filename~\fileversion~\filedate~-- output routine for zines
+ |
+ |%%%@TeX-definition-file {
+ |%%% filename = "$texmf/tex/plain/pdcmac/pdcoput5.tex",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, macros",
+ |%%% supported = "Maybe",
+ |%%% abstract = "TeX output routine for magazine-style layout.
+ |%%% This file was generated by running
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~plain TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+ |%%% dependencies = "",
+ |%%% }
+ |
+ \|\\message\{\fileversion~<pdc \filedate>\}
+ |
+\endcode
+%}}} identification
+%{{{ internals
+\section{Miscellaneous internal definitions}
+\subsec{Scratch registers}
+
+ These are one-token names for some handy non-global temporary
+ registers (in plain \TeX\ these are given names with |@| in
+ them; these definitions give them names I can use).
+\code
+ |\countdef\counta=255
+ |\dimendef\dimena=0 \dimendef\dimenb=2
+ |\toksdef\toksa=0 \toksdef\toksb=2
+\endcode
+ I~don't use |\dimen1| and |\toks1| because they are supposed to
+ be used only globally (as discussed in {\it\TeX book}
+ Appendix~B).
+
+\subsec{Queues}
+
+ These macros manipulate queues of instructions for the ouytput
+ routine, represented as list macros of a form similar to those
+ described in {\it\TeX book} Appendix~D Section~2 (the parameters
+ in different order).
+
+\notepar
+ All of these work by making assignments and so will not work in
+ \TeX's mouth.
+\endnotepar
+
+ We can describe these briefly using letters like $x$ to stand
+ for elements (enclosed in braces) and $xs$ to stand for a list
+ macro of $x$s. Each macr has a duplicate starting with `|g|-'
+ which does the same operation globally.
+
+% |\prepend| $xs$ $x$ --- $xs:=\langle x\rangle + xs$
+%\code
+% |\long\def\prepend#1#2{%
+% | \toksa={\\{#2}}\toksb=\expandafter{#1}%
+% | \edef#1{\the\toksa\the\toksb}%
+% |}
+%\smallbreak
+% |\long\def\gprepend#1#2{%
+% | \toksa={\\{#2}}\toksb=\expandafter{#1}%
+% | \xdef#1{\the\toksa\the\toksb}%
+% |}
+%\endcode
+ |\qappend| $xs$ $x$ --- $xs:= xs + \langle x\rangle $
+\code
+ |\long\def\qappend#1#2{%
+ | \toksa={\\{#2}}\toksb=\expandafter{#1}%
+ | \xdef#1{\the\toksb\the\toksa}%
+ |}
+\endcode
+% |\catenate| $xs$ $ys$ $zs$ --- $xs:=ys + zs$
+%\code
+% |\def\catenate#1#2#3{%
+% | \toksa=\expandafter{#2}\toksb=\expandafter{#3}%
+% | \edef#1{\the\toksa\the\toksb}%
+% |}
+%\smallbreak
+% |\def\gcatenate#1#2#3{%
+% | \toksa=\expandafter{#2}\toksb=\expandafter{#3}%
+% | \xdef#1{\the\toksa\the\toksb}%
+% |}
+%\endcode
+ |\qremove| $x$ $xs$ --- $x, xs := hd(xs), tl(xs)$
+ (where $xs = \langle hd(xs)\rangle + tl(xs)$)
+\code
+ |\def\qremove#1#2{%
+ | \expandafter\glopoff#2\glopoff#1#2%
+ |}
+ |\long\def\glopoff\\#1#2\glopoff#3#4{%
+ | \gdef#3{#1}\gdef#4{#2}%
+ |}
+\endcode
+
+%}}} internals
+%{{{ parameters
+\section{Parameters}
+
+ We collect here definitions for parameters that customizate the
+ layout. In documents, many of these are set in using
+ higher-level macros.
+
+ The abbreviations |mg| (margin), |wd| (width) and |ht| (height)
+ are used a lot in dimen names.
+
+\subsec{Heights and depths}
+ The physical size of the paper is $paperwd\times paperwd$. The
+ area which will be filled with text columns is $bodywd\times
+ bodyht$. This area is divided in to a grid of cells each
+ $gridwd\times gridht$, with cells separated by $colsep$
+ horizontally but butting vertically (there are $n$ cells, so
+ $n\times gridwd + (n-1)\times colsep = bodywd$). Finally,
+ $colwd$ is the width of text columns ($colwd = k\times gridwd +
+ (k-1)\times colsep$) and $colht$ is the height of text columns
+ on the current page (it is equal to $bodyht$ iff therte is no
+ topbox or botbox).
+\code
+ |\newdimen\paperwd \newdimen\paperht
+ |\newdimen\bodywd \newdimen\bodyht
+ |\newdimen\gridwd \newdimen\gridht
+ |\newdimen\colwd \newdimen\colht
+\endcode
+
+
+\subsec{Margins and separators}
+ These margins measure from the edge of the paper as defined by
+ |\paperwd| and |\paperht|. The inner margin (|\innermg|) is on
+ the left on odd pages and on the right for even pages.
+
+ The bottom margin will be increased slightly later on to make
+ $$vsize=N\times baselineskip + topskip\quad.$$
+
+\code
+ |\newdimen\topmg \topmg=20mm
+ |\newdimen\outermg \outermg=20mm
+ |\newdimen\innermg \innermg=20mm
+ |\newdimen\botmg \botmg=27mm
+\endcode
+
+ Parameters for the distance between the baselines of the
+ headline and the first line of text the corresponding distance
+ for footlines.
+\code
+ |\newskip\headlineskip \headlineskip=10mm
+ |\newskip\footlineskip \footlineskip=10mm
+\endcode
+
+
+ The parameters |\caprule| and |\capsep| specify the separation
+ between captions and the adjacent text column. The vertical
+ displacement is $capsep$, with a horizontal rule of thickness
+ $caprule$ is drawn in the middle (set this to $0\pt$ to have no
+ rule).
+
+\code
+ |\newdimen\caprule \caprule=0.4pt
+ |\newskip\capsep \capsep=5mm
+\endcode
+
+ The corresponding parameters for column separators---this time
+ it is a vertical rule.
+\code
+ |\newdimen\colrule \colrule=0.4pt
+ |\newdimen\colsep \colsep=5mm
+\endcode
+
+ The number of text columns on a page.
+\code
+ |\newcount\ncols \ncols=1
+\endcode
+
+\subsec{Boxes}
+ To switch the number of columns in mid page, the first text is
+ run through the output routine and the resultant partial page is
+ stored in |\partialpage| to be placed at the top of the next
+ output.
+
+\code
+ |\newbox\partialpage
+\endcode
+
+ The special boxes |\topbox| and |\botbox|, if non-void, are
+ placed at the top and bottom of the page, going inside the
+ headline and footline but outside the body text area (which is
+ reduced correspondingly). These are often useful in
+ multi-column text to put titles that span the page.
+\code
+ |\newbox\topbox \newbox\botbox
+\endcode
+
+ These boxes, if not void, go at the left and right of the body
+ text. The amount of space for columns of text is reduced by the
+ width of the boxes.
+\code
+ |\newbox\leftbox \newbox\rightbox
+\endcode
+
+ The output routine is passed the current page contents in
+ box~255.
+\code
+ |\chardef\pagebox=255
+\endcode
+
+\subsec{Hooks}
+
+ These two list macros are used to override the output routine
+ with customized layouts.
+
+ One item is removed from |\pagelist| to generate each page body
+ (the page body is everything except the headline, footline,
+ topbox, botbox amd partial page). If the list is empty, then
+ the default action is `|\makebody\pagebox|'. The commands
+ should make a box with width |\bodywd|m and heght |\colht|.
+\code
+ |\let\pagelist\empty
+\endcode
+ An item is removed from |\collist| each time a column is to be
+ created by |\makebody|. Each item should be \TeX\ commands that
+ generate a box with width |\colwd| and height |\colht|.
+\code
+ |\let\collist\empty
+\endcode
+
+ Finally, token registers that may be used to customize pages and
+ captions. For example, |\everypage| is used in |pdccmdoc.tex|
+ to create an empty |\leftbox| on each page.
+\code
+ |\newtoks\everypage
+ |\newtoks\everycaption
+\endcode
+%}}} parameters
+%{{{ make a column (vbox)
+\section{How to make one column}
+
+ This is the default way to generate a column of text---this will
+ normally be invoked $k$ times if there are $k$ columns.
+
+ A column is a vbox of height $colht$ and width $colwd$. It
+ contains, in order from top to bottom, an illustration (vertical
+ mode material, normally white space for artwork to be pasted
+ into), caption separator, text (from the page), caption
+ separator, and bottom illustration. The illustrations are
+ usually omitted. When there is no illustration, the caption
+ separators are omitted too.
+ The macro takes the following parameters:
+$$\halign{\indent\tt\##\hfil&\quad#\hfil&\quad#\hfil\cr
+ 1& vertical mode material& illustration at top of column\cr
+ 2& \<8-bit number>& box to make middle out of\cr
+ 3& vertical mode material& illustration for bottom of column\cr
+}$$
+ To make baselines line up, $capsep=baselineskip$ and the height
+ of a top illustration must be $N\times baselineskip + topskip$
+ and of a bottom illustration must be $N\times baselineskip$
+ (|\prevdepth| is set to $0\pt$ at the start of the bottom
+ illustration, so if it starts with a box, baselineskip glue will
+ be inserted to make the baseline of the box align correctly.)
+\code
+ |\newdimen\toptotal \newdimen\bottotal
+\smallbreak
+ |\def\xxxmakecolumn#1#2#3#4#5{\xmakecolumn
+ | {\ifdim#1=0pt\else \kern#1 \fi
+ | \def\tmp{#2}\ifx\tmp\empty\else #2 \fi}
+ | {#3}
+ | {\def\tmp{#2}\ifx\tmp\empty\else #2 \fi
+ | \ifdim#1=0pt\else \kern#1 \fi}%
+ |}
+\smallbreak
+ |\def\xmakecolumn#1#2#3{%
+ | \vbox to \colht{
+\endcode
+ Calculate in |\dimena| how much of the text box will be needed
+ once we have allowed for any illustrations, footnotes or
+ topinserts:
+\code
+ | \dimena\colht
+ | \setbox0=\vbox{#1}\advance\dimena-\ht0
+ | \ifdim\ht0>0pt
+ | \advance\dimena-\capsep
+ | \advance\dimena\topskip \advance\dimena-\baselineskip
+ | \fi
+ | \setbox4=\vbox{\prevdepth=0pt #3}%
+ | \advance\dimena-\ht4
+ | \ifdim\ht4>0pt \advance\dimena-\capsep \fi
+ | \ifvoid\footins\else
+ | \advance\dimena-\ht\footins
+ | \advance\dimena-\skip\footins
+ | \fi
+ | \ifvoid\topins\else
+ | \advance\dimena-\ht\topins
+ | \advance\dimena-\skip\topins
+ | \fi
+\endcode
+ Split that much text off the top of the box:
+\code
+ | \splittopskip\topskip \splitmaxdepth\maxdepth
+ | \setbox2=\vsplit#2to\dimena
+\endcode
+ Now to sandwich it all together.
+\code
+ | \dimena=\ht0 \dimenb=\dp0 \unvbox0
+ | \ifdim\dimena>0pt
+ | \prevdepth=\dimenb
+ | \capseparator
+ | \dimena\baselineskip \advance\dimena-\topskip
+ | \kern\dimena
+ | \nointerlineskip
+ | \fi
+ | \ifvoid\topins\else \unvbox\topins \vskip\skip\topins \fi
+ | \dimena\dp2
+ | \ifvoid2 \vfil \else \unvbox2 \fi
+ | \ifvoid\footins \else
+ | \vskip\skip\footins \footnoterule
+ | \dimena=\dp\footins \unvbox\footins
+ | \fi
+ | \ifdim\ht4>0pt
+ | \prevdepth=\dimena
+ | \capseparator \kern-\prevdepth \prevdepth0pt
+ | \fi
+ | \unvbox4
+ | }%
+ |}
+\endcode
+ The caption separator is in an hbox so that
+ baselineskip glue will be added appropriately.
+\code
+ |\def\capseparator{%
+ | \hbox to \colwd{%
+ | \dimena=0.5ex \advance\dimena-0.5\caprule
+ | \dimenb=\dimena \advance\dimenb\caprule
+ | \vrule height \dimenb depth-\dimena width\colwd
+ | }%
+ |}
+\endcode
+
+ Here's a macro for making an illustration (blank space) with
+ caption, suitable for top of page. |#1| is the cation, |#2| is
+ vertical mode material commands to make the illustration (often
+ this will be something like `|\kern|$n$|\baselineskip|' to leave
+ $n$ lines of blank space). The whitespace between illustration
+ and caption is adjusted to make the whole shebang line up.
+\code
+ |\def\topillustration#1#2{%
+ | \setbox0=\vbox{#2}%
+ | \dimena\ht0 \dimenb\dp0 \unvbox0
+ | \counta\dimena \divide\counta\baselineskip
+ | \advance\dimena-\counta\baselineskip \advance\dimena-\topskip
+ | \kern-\dimena \prevdepth\dimenb
+ | \hsize=\colwd \vskip-\parskip \noindent#1\par
+ |}
+\endcode
+
+ Similar for bottom of column.
+\code
+ |\def\botillustration#1#2{%
+ | \setbox0\vbox{\hsize=\colwd \vskip-\parskip \prevdepth=0pt #1}
+ | \setbox2=\vbox{\prevdepth=\dp0 #2}%
+ | \dimena=\ht0 \advance\dimena\dp0 \advance\dimena\ht2
+ | \unvbox0
+ | \counta\dimena \divide\counta\baselineskip
+ | \advance\dimena-\counta\baselineskip
+ | \advance\dimena-\baselineskip
+ | \kern-\dimena
+ | \unvbox2
+ |}
+\endcode
+
+%}}} make a column
+%{{{ make body part of page (hbox)
+\section{Making the page body hbox}
+
+ The page body is everything except the footline, headline,
+ topbox and botbox. It should be a box of height |\bodywd|
+ (which is normally fixed) and height |\colht| (which is
+ |\bodyht| minus the top and bot boxes).
+
+ The default macro for making the body is |\makebody| which takes
+ as its parameter the box number (usually |\pagebox|). (This may
+ be replaced by adding items to the list macro |\pagelist|.)
+\code
+ |\def\makebody#1{%
+ | \hbox to \bodywd{%
+ | \ifvoid\leftbox\else
+ | \box\leftbox
+ | \colseparator
+ | \fi
+ | \makecolumnfromcollist{#1}%
+ | \counta\ncols
+ | \loop \ifnum\counta>1
+ | \colseparator
+ | \makecolumnfromcollist{#1}%
+ | \advance\counta -1
+ | \repeat
+ | \ifvoid\rightbox\else
+ | \colseparator
+ | \box\rightbox
+ | \fi
+ | }%
+ |}
+\smallbreak
+ |\def\colseparator{%
+ | \hfil \vrule width\colrule depth0pt \hfil
+ |}
+\endcode
+
+ The macro |\makecolumnfromcollist| is used to generate columns
+ (which must be boxes of height |\colht| and width |\colwd|). It
+ uses the next item on |\collist| if there is one, otherwise it
+ just uses |\xmakecolumn|.
+\code
+ |\def\makecolumnfromcollist#1{%
+ | \ifx\collist\empty
+ | \xmakecolumn{}{#1}{}%
+ | \else
+ | \qremove\temp\collist
+ | \temp
+ | \fi
+ |}
+ |
+\endcode
+%}}} make insides of page (hbox)
+%{{{ make a page (vbox)
+\section{Making a page vbox}
+
+ The macro generates a new page---a vbox to be `shipped out'.
+ The first page includes a |papersize| special; this is because
+ if the macros used to change the paper size also generated the
+ |\special| then there might be conflicting |\special|s which
+ would confuse the printer driver. This way the paper size may
+ be changed a few times before the first page.
+
+ The |\colht| register is set to the height of text columns on
+ this page (which is $bodyht$ minus the height of any partial
+ page, top or bottom boxes).
+\code
+ |\def\makepage{%
+ | \vbox{
+ | \papersizespecial
+ | \colht\bodyht \advance\colht-\ht\partialpage
+ | \advance\colht-\ht\topbox \advance\colht-\ht\botbox
+ | \advance\colht-\dp\partialpage
+ | \advance\colht-\dp\topbox
+ | \the\everypage
+ | \makeheadline \nointerlineskip
+ | \box\partialpage \nointerlineskip
+ | \box\topbox \nointerlineskip
+ | \ifx\pagelist\empty
+ | \makebody\pagebox
+ | \else
+ | \qremove\temp\pagelist
+ | \temp
+ | \fi
+ | \unvbox\botbox
+ | \makefootline
+ | }%
+ |}
+\endcode
+
+ The |\makeheadline| macro generates the headline in the form of
+ vertical mode material with zero height. It is expanded after
+ |\everypage| has been expanded, at the very top of the page's
+ vbox.
+\code
+ |\def\makeheadline{
+ | \vbox to 0pt {
+ | \skip0=\topskip \advance\skip0-2\ht\strutbox
+ | \advance\skip0-\headlineskip
+ | \vskip\skip0
+ | \hbox to \bodywd{\the\headline}
+ | \vss
+ | }
+ |}
+\endcode
+
+ The footline is, naturally, generated with |\makefootline|.
+ This time there is no requirement for it to be zero height. It
+ is the last thing in the box being shipped out.
+\code
+ |\def\makefootline{{
+ | \baselineskip=\footlineskip
+ | \hbox to \bodywd{\the\footline}
+ |}}
+\endcode
+
+ The |papersize| special is specified in the manual for DVIPS.
+ It specifies the physical size of the medium---and so must be
+ multiplied by the current magnification.
+\code
+ |\def\papersizespecial{{%
+ | \dimena=0.001\paperwd \multiply\dimena\mag
+ | \dimenb=0.001\paperht \multiply\dimenb\mag
+ | \special{papersize=\the\dimena,\the\dimenb}%
+ | \global\let\papersizespecial=\relax
+ |}}
+ |
+\endcode
+%}}} make a page (vbox)
+%{{{ output
+\section{The output routine}
+
+ The output routine sets |\hoffset| appropiately (subtracting
+ $1{\scriptstyle''}$ to allow for \TeX's peculiar origin point
+ one inch from the top left of the page.
+\code
+ |\def\pdcoutput{%
+ | \ifodd\pageno \hoffset=\innermg \else \hoffset=\outermg \fi
+ | \advance\hoffset-1 true in
+ | \voffset=\topmg
+ | \advance\voffset-1truein
+ | \shipout\makepage \advancepageno
+ | \ifnum\outputpenalty>-20000 \else \dosupereject \fi
+ | \unvbox\pagebox
+ |}
+\smallbreak
+ |\output={\pdcoutput}
+\endcode
+%}}} output
+%{{{ automated column setting
+\section{Specifying a grid}
+
+ These macros for setting the paper size ought to be invoked
+ after the base font and baseline skip have been set but before
+ the numebr of columns is chosen.
+
+\subsec{Specifiying the paper size}
+
+ This is a macro that might be used in documents. It takes two
+ parameters, \<dimen>s for the width and height of the paper.
+\code
+ |\def\setpaper#1#2{%
+ | \paperwd=#1\relax
+ | \paperht=#2\relax
+ | \OPUTcalcbodywdht
+ | \OPUTcalctopskip
+ |}
+\endcode
+ Calculate the page body width |\bodywd| from the paper size and
+ the size of the margins:
+\code
+ |\def\OPUTcalcbodywdht{
+ | \bodywd=\paperwd \advance\bodywd-\outermg \advance\bodywd-\innermg
+ | \bodyht=\paperht \advance\bodyht-\topmg \advance\bodyht-\botmg
+ | \OPUTcalctopskip
+ |}
+\endcode
+
+ To avoid having to write `Aiv' or `afour' for specifying
+ international standard A4 paper, I~use an
+ |\ifcase|.\footnote*{Note for Americans: A4 corresponds to
+ American Letter size, and A3 to Ledger size.} This macro
+ handles A0 to A5.
+\code
+ |\def\setpaperA#1{
+ | \ifcase#1
+ | \setpaper{841mm}{1189mm}\or
+ | \setpaper{594mm}{841mm}\or
+ | \setpaper{420mm}{594mm}\or
+ | \setpaper{297mm}{420mm}\or
+ | \setpaper{210mm}{297mm}\or
+ | \setpaper{148mm}{210mm}
+ | \else
+ | \errmessage{Dunno how big DIN A#1 paper is, sorry.}
+ | \fi
+ |}
+\endcode
+
+\subsec{Adjusting the body height and top skip}
+
+ Plain \TeX\ sets |\topskip| to $10\pt$, which means there is a
+ gap between the top of the letters of the top line of text and
+ the top of the pages's vbox (i.e., $vsize$ is measured from the
+ baseline of the last line to a line $topskip$ above the baseline
+ of the first line). For magazine-style setting, it is more
+ usual to have $topskip$ set to the cap-height of the font
+ (assuming there are no strange tall characters in use).
+
+ To have an exactly $N$ lines to a page,
+ $$
+ bodyht = (N-1)\times baselineskip + topskip \quad.
+ $$
+ This macro increases the bottom margin in order to set $bodyht$
+ to such a value.
+\code
+ |\def\OPUTcalctopskip{
+ | \setbox0=\hbox{AXbl()!gyJQ,}
+ | \topskip=\ht0 \maxdepth=\dp0
+ | \advance\bodyht-\topskip \divide\bodyht\baselineskip
+ | \multiply\bodyht\baselineskip \advance\bodyht\topskip
+ |}
+\endcode
+
+ Give this value for $bodyht$, we can set $hsize$ and $vsize$
+ according to the number of columns to a page. For $N$ lines to
+ a column, we need $N\times ncols$ lines to make a whole page, so
+ $$
+ \eqalign{vsize
+ &= (ncols \times N - 1) \times baselineskip + topskip\cr
+ &= (bodyht + \delta) \times ncols - \delta\cr
+ }
+ $$
+ where $\delta=baselineskip-topskip$.
+\code
+ |\def\OPUTcalchsizevsize{
+ | \hsize=\colwd
+ | \vsize=\bodyht
+ | \advance\vsize-\topskip \advance\vsize\baselineskip
+ | \multiply\vsize\ncols
+ | \advance\vsize-\baselineskip \advance\vsize\topskip
+ |}
+\endcode
+
+
+\subsec{Setting the number of columns}
+
+ Now some macros used in documents for setting the number of
+ coumns. In the general case we have a grid of $n$ cells with
+ text columnns spanning $k$ cells. This macro takes two number
+ parameters, $n$ and $k$. It sets |\ncols| to as many columns
+ fit on the page.
+ $$
+ \eqalign{colwd &= k \times gridwd + (k - 1) \times colsep\cr
+ ncols &= \lfloor n \mathbin/ k \rfloor\cr}
+ $$
+ Often $n$ is not a multiple of $k$, which leaves some grid cells
+ `spare' for illustrations or extra margins and so on.
+\code
+ |\def\setnkgrid#1#2{%
+ | \gridwd=\bodywd
+ | \advance\gridwd-#1\colsep \advance\gridwd\colsep \divide\gridwd#1
+ | \colwd#2\gridwd \advance\colwd#2\colsep \advance\colwd-\colsep
+ | \ncols#1 \divide\ncols#2
+ | \gridht=\baselineskip
+ | \capsep=\gridht
+ | \OPUTcalchsizevsize
+ |}
+\endcode
+
+ For simpler layouts, we just set the number of columns and set
+ the grid and column widths to be the same.
+\code
+ |\def\setncolumns#1{%
+ | \colwd=\bodywd
+ | \advance\colwd-#1\colsep \advance\colwd\colsep \divide\colwd #1
+ | \gridwd=\colwd
+ | \ncols=#1
+ | \OPUTcalchsizevsize
+ |}
+\endcode
+
+\subsec{Setting default values}
+
+ We give all the parameters default values by assuming A4 paper
+ and a single-column layout in \TeX's default fonts.
+\code
+ |\setpaperA4
+ |\setncolumns1
+\endcode
+
+%}}} automated column setting
+%{{{ balancing columns
+\section{Routines for balanced columns}
+
+\subsec{Balanced columns from a rigid vbox}
+
+ This is the routine discussed in {\it\TeX book}, Appendix~D,
+ Section~7 (pp.\thinspace396--397). It takes a rigid, regular
+ vbox (rigid meaning there is no stretchable glue between lines,
+ and regular meaning that baselines are all the same distance
+ apart). Its parameters are
+ $$\centerline{\vbox{\halign{\tt\char`\##\hfil&&\quad#\hfil\cr
+ 1&\<8-bit number>& box to chop\cr
+ 2&\<number>& how many columns to make (${}>0$)\cr
+ 3&\<dimen>& the value of \cs{topskip} for the box\cr
+ 4&tokens& what to put between columns\cr
+ }}}$$
+ the last parameter will usually be |\hfil| or |\colseparator|.
+ Usually this command will be used like
+$$\hbox{|\hbox to \bodywd{\rigidbalance...}|}$$
+
+
+\code
+ |\newcount\RGDncols
+\smallbreak
+ |\def\rigidbalance#1#2#3#4{%
+ | \setbox0=\box#1\relax \RGDncols=#2\relax \toksa={#4}%
+ | \begingroup\splittopskip#3\relax \vbadness=10000
+ | \valign{##\vfil\cr \RGDdosplits}%
+ | \endgroup
+ |}
+\endcode
+ The helper function that produces the insides of the valign is
+ recursive.
+\code
+ |\def\RGDdosplits{
+ | \dimena\ht0 \divide\dimena\RGDncols
+ | \advance\dimena\splittopskip
+ | \setbox1=\vsplit0 to\dimena
+ | \unvbox1
+ | \global\advance\RGDncols-1
+ | \cr
+ | \ifnum\RGDncols>0
+ | \noalign{\the\toksa}
+ | \RGDdosplits
+ | \fi
+ |}
+\endcode
+
+\subsec{Balance partial page}
+
+ Occasionally it is useful to switch between different grids or
+ numbers of columns within one page. This macro does this,
+ creating a shorter-than-usual page body (including topbox and
+ botbox) and then putting the result in |\partialpage| Its
+ parameters are |#1| the \TeX\ code used to generate the text
+ columns and |#2| what to put between the partial page and the
+ rest of the page.
+
+\code
+ |\def\makepartialpage#1#2{
+ | \maybepagebreak
+ | \begingroup
+ | \output{%
+ | \message{[partial}
+ | \setbox0=\vbox{\unvbox\pagebox}%
+ | \global\setbox\partialpage\vbox{
+ | \box\partialpage \nointerlineskip
+ | \the\everypage
+ | \box\topbox \nointerlineskip
+ | \hbox to \bodywd{%
+ | \ifvoid\leftbox\else
+ | \box\leftbox \colseparator
+ | \fi
+ | #1%
+ | \ifvoid\rightbox\else
+ | \colseparator \box\rightbox
+ | \fi
+ | }% \nointerlineskip
+ | \box\botbox
+ | #2
+ | \dimena\baselineskip \advance\dimena-\topskip
+ | \kern\dimena
+ | }%
+ | \message{page]}
+ | }
+ | \eject
+ | \endgroup
+ |}
+\smallbreak
+ |\def\rigidbalancepartialpage{
+ | \makepartialpage{\rigidbalance0\ncols\topskip\colseparator}
+ |}
+\endcode
+ Occasionally \TeX\ might have just over a pageful of text when
+ this command is used (since the page break calculations do not
+ take into account the space subtracted by
+ illustrations\footnote*{This is probably a bug.}). In this case
+ we have to force out a complete page.
+\code
+ |\def\maybepagebreak{%
+ | \vskip0pt plus\baselineskip \penalty-100
+ | \loop
+ | \dimena\vsize \advance\dimena-\ncols\ht\partialpage
+ | \advance\dimena-\ncols\ht\topbox
+ | \advance\dimena-\ncols\ht\botbox
+ | \ifdim\pagetotal>\dimena
+ | \eject\null
+ | \repeat
+ |}
+\endcode
+%}}} balancing columns
+\endcodefile
+\enddocument
+\bye
+%}}} pdcoput5.tex
+
+%Local variables:
+%fold-folded-p: t
+%fill-prefix: " "
+%End:
diff --git a/macros/plain/contrib/pdcmac/pdcsty.dtx b/macros/plain/contrib/pdcmac/pdcsty.dtx
new file mode 100644
index 0000000000..33f22e7994
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pdcsty.dtx
@@ -0,0 +1,1153 @@
+% pdcsty -- documentation and source code for several style files -*-tex-*-
+
+%%%@TeX-document-file {
+%%% title = "Damian's random style files",
+%%% filename = "$texmf/doc/plain/pdcmac/pdcsty.dtx",
+%%% version = "$Revision: 1.2 $",
+%%% package = "pdcmac 1.0",
+%%% date = "$Date: 1995/03/30 16:12:17 $",
+%%% author = "P. Damian Cugley",
+%%% email = "damian.cugley@comlab.ox.ac.uk",
+%%% address = "Oxford University Computing Laboratory,"
+%%% Parks Road, Oxford OX1 3QD, UK",
+%%% abstract = "This document describes and is the source code for
+%%% the TeX style files pdccmdoc.tex, ma55doc.tex,
+%%% etc. and definitioon files pdcdoc1.tex and pdclft1.tex.
+%%% Running plain TeX on this file produces both the
+%%% definitions files and the printed documentation.",
+%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+%%% 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.",
+%%% notice = "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.",
+%%% notice = "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.",
+%%% codetable = "USASCII",
+%%% dependencies = "pdccode2.tex"
+%%%}
+
+
+%{{{ pdcsty.dtx
+%{{{ preamble
+
+\input pdccode2
+\rcs$Id: pdcsty.dtx,v 1.2 1995/03/30 16:12:17 pdc Exp $\endrcs
+
+\everycode{\tt \baselineskip=0.8\baselineskip \lineskiplimit=0pt }
+\newcount\lineno
+\everycodeline{\llap{$ \global\advance\lineno1
+ \scriptstyle\the\lineno $\enspace}}
+
+
+\codefile{cmX}{pdccmlft.tex} \codefile{cmT}{pdccmdoc.tex}
+\codefile{maX}{ma55lft.tex} \codefile{maT}{ma55doc.tex}
+\codefile{psX}{pdcpslft.tex} \codefile{psT}{pdcpsdoc.tex}
+\codefile{X}{pdclft.def} \codefile{T}{pdcdoc.def}
+
+\def\maonly{\global\maXtrue \global\maTtrue
+ \global\cmXfalse \global\cmTfalse
+ \global\psXfalse \global\psTfalse
+ \global\Xfalse \global\Tfalse
+ \banner{Malvern}}
+\def\cmonly{\global\maXfalse \global\maTfalse
+ \global\cmXtrue \global\cmTtrue
+ \global\psXfalse \global\psTfalse
+ \global\Xfalse \global\Tfalse
+ \banner{Computer Modern}}
+\def\psonly{\global\maXfalse \global\maTfalse
+ \global\cmXfalse \global\cmTfalse
+ \global\psXtrue \global\psTtrue
+ \global\Xfalse \global\Tfalse
+ \banner{PostScript fonts}}
+
+\def\styonly {\global\maXtrue \global\maTtrue
+ \global\cmXtrue \global\cmTtrue
+ \global\psXtrue \global\psTtrue
+ \global\Xfalse \global\Tfalse
+ \banner{Style files}}
+\def\Tstyonly{\global\maXfalse \global\maTtrue
+ \global\cmXfalse \global\cmTtrue
+ \global\psXfalse \global\psTtrue
+ \global\Xfalse \global\Tfalse
+ \banner{Doc style files}}
+\def\Xstyonly{\global\maXtrue \global\maTfalse
+ \global\cmXtrue \global\cmTfalse
+ \global\psXtrue \global\psTfalse
+ \global\Xfalse \global\Tfalse
+ \banner{Lft style files}}
+
+\def\Tonly {\global\maXfalse \global\maTfalse
+ \global\cmXfalse \global\cmTfalse
+ \global\psXfalse \global\psTfalse
+ \global\Xfalse \global\Ttrue
+ \banner{Sectioning macros for Docs}}
+\def\Xonly {\global\maXfalse \global\maTfalse
+ \global\cmXfalse \global\cmTfalse
+ \global\psXfalse \global\psTfalse
+ \global\Xtrue \global\Tfalse
+ \banner{Sectioning macros for Lfts}}
+
+\def\banner#1{
+ \par
+ \line{%
+ \vrule height 1ex width 0.2ex
+ \leaders\vrule height 1ex depth -0.8ex \hskip2em
+ \enspace{\it \strut #1\/}\enspace
+ \leaders\vrule height 1ex depth -0.8ex \hfil
+ }
+}
+
+\def\onlyone#1{
+ \allfilesfalse \global\csname#1true\endcsname
+ \banner{{\tt\csname filename#1\endcsname}}
+}
+\def\onlytwo#1#2{
+ \allfilesfalse \global\csname#1true\endcsname
+ \global\csname#2true\endcsname
+ \banner{{\tt\csname filename#1\endcsname},
+ {\tt\csname filename#2\endcsname}}
+}
+
+\def\common{
+ \par
+ \allfilesfalse \global\Xtrue \global\Ttrue
+ \closebanner
+}
+
+\def\closebanner{
+ \line{%
+ \vrule height 1.8ex depth -0.5ex width 0.2ex
+ \leaders\vrule height 0.7ex depth -0.5ex \hfil
+ }
+}
+
+
+
+%}}} preamble
+%{{{ introduction
+
+\null\vskip2\baselineskip\hrule\bigskip
+\leftline{Style files for the pdc- macros \fileversion\space(\filedate)}
+\bigskip\hrule\bigskip
+\headline{\hfil\global\headline={\hfil
+ \sevenbf Style files for the pdc- macros
+ \fileversion\space(\filedate)}}
+
+\section{Introduction}
+
+\subsec{About the style files}
+
+ This document describes a family of plain \TeX\ style files for
+ typesetting documents which are short enough not to need any
+ fancy indexing or cross-references, but long enough to want
+ numbered section headings and a table of contents.
+
+ A {\it style file} in this context means a definitions file that
+ specifies the formatting of for a document: layout, choice of
+ fonts, instructions for how to format lists, and so on. The
+ style files use the macros defined in other definition files to
+ supply most of the features they need. The document only needs
+ one `|\input|' command to set up most of the commands it needs.
+
+\subsec{No cross-references}
+
+ Omitting cross-references is important because it means we can
+ avoid having documents that have to be run through \TeX\ more
+ than once (the first time to generate a raw index or
+ cross-reference file, the second to incorporate the references
+ into the document). This greatly simplifies the macros.
+
+ So that the table of contents may be generated automatically
+ without requiring a second pass, it is printed {\it last\/} in
+ the file. It follows that the table of contents belongs at the
+ end of the front matter of the document (on pages numbered in
+ roman numerals), immediately before page~1. It is easiest if
+ all the front matter is printed last. After the end of the
+ document proper, put the front matter enclosed in |\frontmatter|
+ \dots |\endfrontmatter|; this automatically switches to page
+ numbering in roman numerals, and puts the table of contents at
+ the end.
+
+ The file |pdccmdoc.tex| does documents using the Computer Modern
+ fonts. There is a variant called |pdccmlft.tex| intended for
+ `leaflets' that are even shorter than the `docs' produced with
+ |pdccmdoc.tex|. Leaflets have no front matter section, no table
+ of contents, and section headings are much less prominent---they
+ should only be a few pages long at most. The Malvern versions
+ are called |ma55doc.tex| and |ma55lft.tex|.
+
+\subsec{About this document}
+
+ The file that generates this printed documentation, |pdcsty.dtx|
+ is a `documented \TeX' file. As well as briefly describing what
+ the macros are for and how they work, it includes a complete
+ listing of their definitions. The text of the definitions is
+ also written to files in the current directory, generating fresh
+ copies of the style files. This way this documentation and the
+ files it describes are guaranteed to match.
+
+ The lines of all definitions are numbered continuously, even
+ though only a subset of all the definition lines will go in each
+ file.
+
+%}}} introduction
+%{{{ starting up
+
+\section{Starting up}
+
+\subsec{File identification}
+
+ Nowadays, macro files start with some comments identifying the
+ file, for the benefit of people wondering what the file is for.
+ The macro file otherwise has no other comments, in the hope that
+ this will let \TeX\ read it in faster. (It should be possible
+ for the identification comments to go {\it after} an |\endinput|
+ at the close of the file, but the convention is to have them at
+ the start.)
+
+ The following segment is common to the style files and the
+ definiton files.
+
+\code
+ \|\% \filename~\fileversion~\filedate~-- macros for short documents
+\smallbreak
+ |%%%@TeX-definition-file {
+ \|\%\%\% filename~~~~~~~= "\filename",
+ \|\%\%\% version~~~~~~~~= "\fileversion",
+ \|\%\%\% date~~~~~~~~~~~= "\filedate",
+ |%%% package = "pdcmac 1.0",
+ |%%% author = "P. Damian Cugley",
+ |%%% email = "damian.cugley@comlab.ox.ac.uk",
+ |%%% address = "Oxford University Computing Laboratory,
+ |%%% Parks Road, Oxford OX1 3QD, UK",
+ |%%% codetable = "USASCII",
+ |%%% keywords = "TeX, plain TeX, style file",
+ |%%% supported = "Maybe",
+\cmonly |%%% abstract = "Top-level macro file for documents set in
+ |%%% Computer Modern fonts.
+\maonly |%%% abstract = "Top-level macro file for documents set in
+ |%%% Malvern 55, 56 and 75 fonts.
+\onlytwo{X}{T}
+ |%%% abstract = "Sectioning macros for style files.
+\allfilestrue\closebanner
+ |%%% This macro file was generated by running plain
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~TeX on \jobname.dtx",
+ |%%% copyright = "Copyright (c) 1991-1995 P. Damian Cugley",
+ |%%% copying = "DO NOT DISTRIBUTE THIS FILE.
+ \|\%\%\%~~~~~~~~~~~~~~~~~~~Distribute \jobname.dtx only as part of the
+ |%%% package it came in.",
+\onlytwo{X}{T}
+ |%%% dependencies = ""
+\cmonly |%%% dependencies = "pdcfmt2.tex, pdcfsel.tex, pdchyex.tex,
+ |%%% pdcimth.tex, pdccmsub.tex, pdcmigr.tex,
+\maonly |%%% dependencies = "maamac.tex, pdcfmt2.tex, pdcfsel.tex,
+ |%%% pdchyex.tex, pdcimth.tex, pdcmigr.tex,
+\psonly |%%% dependencies = "pdcadobe.tex, pdcfmt2.tex, pdcfsel.tex,
+ |%%% pdchyex.tex, pdcimth.tex, pdcmigr.tex,
+\Tstyonly
+ |%%% pdcoput5.tex, pdcdoc.def",
+\Xstyonly
+ |%%% pdcoput5.tex, pdclft.def",
+\allfilestrue\closebanner
+ |%%%}
+ |
+ \|\\message\{\fileversion~<\fileauthor~\filedate>\}
+ |
+\endcode
+
+ This is followed immediately by a list of the macro files
+ included by this format:
+\code
+\styonly
+ |\input pdcimth
+ |\input pdcmigr
+ |\input pdcfmt2
+ |\input pdchyex
+ |\input pdcoput5
+ |\input pdcfsel
+\cmonly
+ |\input pdccmsub
+\maonly
+ |\input maamac
+\psonly
+ |\input pdcadobe
+\common
+\endcode
+
+
+%}}} starting up
+%{{{ layout
+
+\section{Layout}
+
+\subsec{Paper sizes}
+
+ The section defining the paper size is at the very top of the
+ file to make it easy for someone adapting the macros to American
+ Letter size paper to find them.
+
+ Nevertheless, we set the top and bottom margins to be large
+ enough that even if it is printed on American paper, nothing
+ important will be cut off. This requires decent-sized margins
+ at the top and bottom of pages (since the end of the page that
+ will be lost depends on whether the printer driver has its real
+ origin at top-left or bottom-left). The edge of the printing
+ area is guessed at as being $7\,{\rm mm}$ from the edge of the
+ paper.
+\code
+ |\topmg=297mm \advance\topmg-11in \advance\topmg7mm
+ |\botmg=\topmg
+ |\advance\topmg\ht\strutbox \advance\topmg\headlineskip
+ |\ifdim \topmg<20mm \topmg=20mm \fi
+ |\ifdim \botmg<27mm \botmg=27mm \fi
+\smallbreak
+ |\setpaper{210mm}{297mm}
+\endcode
+
+ The document has `tab-index' headings, that is, headings go in a
+ wide left margin to the left of the body text. The underlying
+ structure is a grid is 4~cells wide, with the text spanning
+ across the rightmost 3~cells. Definitions in the fonts section
+ below specify that the text will be set ragged-right.
+\code
+ |\setnkgrid{4}{3}
+ |\colrule=0pt
+ |\leftmargin=\gridwd \advance\leftmargin\colsep
+\endcode
+ The output routine's |\leftbox| is set at the start of each page
+ to make space for the left margin.
+\code
+ |\everypage={\ifdim\leftmargin>0pt
+ | \setbox\leftbox=\hbox to \gridwd{}\fi}
+\endcode
+
+ While we're here, we customize some of the environments supplied
+ by pdcFMT2:
+\code
+ |\everyfootnote={\notefonts}
+ |\everylinenum={\smallfonts}
+\maonly
+ |\def\footnotetextmark#1{{\rmsy#1}}
+ |\def\footnotenotemark#1{{\rmsy#1}}
+\common
+ |\everylinenum={\smallfonts}
+ |\everytag={\bf}
+\endcode
+
+%}}} layout
+%{{{ fonts
+\section{Fonts}
+
+ This section describes the fonts available in the document.
+
+ We introduce extra nicknames |\bi| for bold italic (used for the
+ first mention of new techical terms), |\mf| for the METAFONT
+ logo, |\mfi| for the METAFONT logo in italic (Something of an
+ affectation) and |\ttb| for an `emphasized' typewriter (usually
+ it is best if this is slanted, not bold).
+\code
+\styonly
+ |\autoloadfonts
+\endcode
+
+ The style files differ because of encoding schemes more than
+ because of the particular fonts. For example, a style for Times
+ Roman will work for Palatino too,if we change the names of the
+ fonts used. To do this, a macro |\basefontname| may be defined
+ before the style file is read in; if it isn't defined it is
+ given a default value.
+
+%{{{ cmr
+
+\subsec{Fonts for Computer Modern documents}
+\cmonly
+ We use Computer Modern Sans Serif for the headings in CM
+ documents. I have not put much effort into making formulas
+ work in headings.
+\code
+ |\def\STYheadingT{%
+ | \m{rm}{cmss}\m{mi}{cmmi}\m{sy}{cmsy}%
+ | \f{it}{cmssi}\f{tt}{cmtt}\f{mf}{logo}\f{mfi}{logosl}%
+ |}
+\smallbreak
+ |\font\headingrm=cmss17 \font\headingit=cmssi17
+ |\fontset{subheading}\STYheadingT{10 scaled 1200}{14pt}
+ | {small}{tiny}
+ |\fontset{heading}\STYheadingT{10 scaled 1728}{20pt}
+ | {subheading}{small}
+\endcode
+
+ We use Computer Modern for body text.
+\code
+ |\def\STYbodyT{\m{rm}{cmr}\m{it}{cmti}%
+ | \m{bf}{cmbx}\@\f{bi}{cmbxti10}%
+ | \m{mi}{cmmi}\m{sy}{cmsy}%
+ | \@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ | \f{tt}{cmtt}\@\f{ttb}{cmsltt10}%
+ |}
+\smallbreak
+ |\font\tinytt=cmtt8 at 7pt
+ |\font\bodysy=cmsy10 at 12pt
+\endcode
+
+%}}} cmr
+%{{{ malvern
+
+\subsec{Fonts for Malvern documents}
+\maonly
+
+ Headings are in Malvern~75. The maths fonts are scaled for
+ expediency; I~do not make much effort to make formulas work in
+ headings.
+\code
+ |\def\STYheadingT{%
+ | \m{rm}{ma75a}\@\m{mi}{cmmi10}\@\m{sy}{cmsy10}%
+ | \f{it}{ma76a}\@\f{tt}{cmtt10}\@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ |}
+\smallbreak
+ |\fontset{subheading}\STYheadingT{12}{14pt}{subheading}{subheading}
+ |\fontset{heading}\STYheadingT{18}{20pt}{subheading}{subheading}
+\endcode
+
+
+ We use Malvern~55 for body text. The supplementary font with
+ encoding~B is added, with font nickname |\rmsy|.
+\code
+ |\newfam\rmsyfam
+\smallbreak
+ |\def\STYbodyT{%
+ | \m{rm}{ma55a}\f{rmsy}{ma55b}\m{it}{ma56a}%
+ | \m{bf}{ma75a}\f{bi}{ma76a}%
+ | \m{mi}{cmmi}\m{sy}{cmsy}%
+ | \@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ | \f{tt}{cmtt}\f{tb}{cmsltt}%
+ |}
+\endcode
+% The main problem with defining the body fonts is that the
+% $x$-height of Malvern is larger then Computer Modern. This makes
+% in necessary to load the maths fonts at a larger size to match.
+% (A better solution might be to make a parameter file for
+% Computer Modern so that maths fonts may be generated with
+% compatible proportions.)
+%\code
+% |\loadfont\bodytt{cmtt10 scaled \magstep2}
+% |\loadfont\notett{cmtt10 scaled \magstep1}
+% |\loadfont\smalltt{cmtt10 scaled \magstephalf}
+% |\loadfont\bodytb{cmsltt10 scaled \magstep2}
+% |\loadfont\smalltb{cmsltt10 scaled \magstep1}
+% |\loadfont\notetb{cmsltt10 scaled \magstephalf}
+%\endcode
+ There is no point using |\loadfont| on the maths symbol fonts,
+ since they have to be loaded anyway the first time |\bodyfonts|
+ is called.
+\code
+ |\font\bodymi=cmmi10 scaled \magstep2
+ |\font\bodysy=cmsy10 scaled \magstep2
+ |\font\notemi=cmmi10 scaled \magstep1
+ |\font\notesy=cmsy10 scaled \magstep1
+ |\font\smallmi=cmmi10 scaled \magstephalf
+ |\font\smallsy=cmsy10 scaled \magstephalf
+\endcode
+%}}} malvern
+%{{{ PostScript
+
+\subsec{Fonts for Times documents}
+\psonly
+ The big problem with PostScript fonts is what they are called;
+ I~shall be assuming that Fontname~$1.6$\footnote*{Karl Berry,
+ {\it File Names for \TeX\ Fonts} $1.6$ ({\tt
+ ftp:\penalty\exhyphenpenalty //ftp.umb.edu\slash pub\slash
+ tex\slash fontname/}).} applies: fonts with |afm2tfm|'s
+ variation on the \TeX\ Text encoding are called |ptmr| and fonts
+ with Adobe's StandardRoman encoding are called |ptmr0| (rather
+ than |rptmr|).
+
+ This macro attempts to make it possible to guess the standard
+ name for the italic variant of a given font.
+ |\KBcanonical{|\<tentative font name>|}| takes a font name which
+ is formed from an upright name optionally followed by `|i|'
+ representing an italic variation. It returns the corresponding
+ standard name. For example, |ptmri| is left unchanged, but
+ |phvri| is changed to |phvro| and |phvrrni| is changed to
+ |phvron|.
+\code
+ |\def\KBcanonical#1{%
+ | \expcs\ifx{KB#1}\relax #1\else\csname KB#1\endcsname \fi
+ |}
+\smallbreak
+ |\ifx\KBadobe\UNDEFINED \def\KBadobe#1{\KBcanonical{#10}} \fi
+ |\def\KBit#1{\KBcanonical{#1i}}
+ |\def\KBbi#1{\KBbf{#1i}}
+ |\def\KBbf#1{\expandafter\KBbfx#1.}
+ |\def\KBbfx#1#2#3#4#5.{\KBcanonical{#1#2#3b#5}}
+\smallbreak
+ |\def\KBpagbr{pagdr} \def\KBpagbri{pagdro}
+ |\def\KBpbkbr{pbkdr} \def\KBpbkbri{pbkdri}
+ |\def\KBpagri{pagro} \def\KBpagbi{pagbo}
+ |\def\KBphvri{phvro} \def\KBphvbi{phvbo}
+ |\def\KBpcrri{pcrro} \def\KBpcrbi{pcrbo}
+ |\def\KBphvrrni{phvron} \def\KBphvbrni{phvbon}
+ |\def\KBphvrrn0{phvr0n} \def\KBphvbrn0{phvb0n}
+ |\def\KBphvrrni0{phvro0n} \def\KBphvbrni0{phvbo0n}
+\endcode
+
+ Headings are in Helvetica. The maths fonts are scaled for
+ expediency; I~do not make much effort to make formulas work in
+ headings.
+\code
+
+ |\ifx\headingfontname\UNDEFINED \def\headingfontname{phvr} \fi
+ |\ifx\headingttfontname\UNDEFINED \def\headingttfontname{pcrb} \fi
+\smallbreak
+ |\def\STYheadingT{%
+ | \@\f{rm}{\headingfontname}\@\m{mi}{cmmi10}\@\m{sy}{cmsy10}%
+ | \@\f{asy}{psyr}%
+ | \@\f{it}{\KBit\headingfontname}%
+ | \@\f{tt}{\headingttfontname}\@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ |}
+\smallbreak
+ |\loadfont\bodysy{cmsy10 at 12pt}
+\smallbreak
+ |\fontset{subheading}\STYheadingT{12}{14pt}{subheading}{subheading}
+ |\fontset{heading}\STYheadingT{18}{20pt}{subheading}{subheading}
+\endcode
+
+
+ We use Times Roman by default for body text, and Courier for
+ typewriter text. Adobe's Symbol font is included, with font
+ nickname |\asy|; a family called |\asyfam| has already been
+ created by |pdcadobe.tex|.
+\code
+ |\ifx\bodyfontname\UNDEFINED \def\bodyfontname{ptmr} \fi
+ |\ifx\bodyttfontname\UNDEFINED \def\bodyttfontname{pcrr} \fi
+\smallbreak
+ |\def\STYbodyT{%
+ | \@\m{rm}{\bodyfontname}\@\m{it}{\KBit\bodyfontname}%
+ | \@\m{bf}{\KBbf\bodyfontname}\@\f{bi}{\KBbi\bodyfontname}%
+ | \@\m{asy}{psyr}\m{mi}{cmmi}\m{sy}{cmsy}%
+ | \@\f{mf}{logo10}\@\f{mfi}{logosl10}%
+ | \@\f{tt}{\bodyttfontname}\@\f{tb}{\KBit\bodyttfontname}%
+ |}
+\endcode
+
+
+ Finally the alphabet-switching commands defined for Malvern
+ fonts are given dummy definitions.
+\code
+ |\let\sc=\relax \let\mc=\relax \let\csc=\relax
+\endcode
+
+%}}} malvern
+
+\common
+\subsec{Definitions common to all formats}
+
+\code
+\styonly
+ |\fontset{tiny}\STYbodyT{7}{9pt}{tiny}{tiny}
+ |\fontset{small}\STYbodyT{9}{11pt}{tiny}{tiny}
+ |\fontset{note}\STYbodyT{10}{12pt}{tiny}{tiny}
+ |\fontset{body}\STYbodyT{12}{14pt}{small}{tiny}
+\endcode
+
+ The text is set left-justified (ragged-right). To make this
+ work, the fontdimens that control word spacing are set to force
+ interword spaces to all be the same width.
+\code
+ |\def\everyloadfont#1#2{\fontdimen3#1=0pt \fontdimen4#1=0pt}
+ |\rightskip=0pt plus 2em \tolerance=1000
+\smallbreak
+ |\bodyfonts
+ |{\tt \hyphenchar\font=-1 }
+\common
+\endcode
+
+%}}} fonts
+%{{{ minimal section headings
+\section{Simple sectioning}
+
+\onlyone{X}
+ A `leaflet' is divided into short sections, which may contain
+ subsections (but usually will not). There may well be more than
+ one section on a page.
+
+ The section number is held in two count registers, and printed
+ (enclosed in |\n{|\dots|}|) with the macro |\thesecno|:
+
+\code
+ |\newcount\secno \newcount\subsecno
+\smallbreak
+ |\def\thesecno{%
+ | \n{%
+ | \number\secno
+ | \ifnum\subsecno>0
+ | .\number\subsecno
+ | \fi
+ | }%
+ |}
+\endcode
+
+ The section and subsection commands are implemented
+ straightforwardly with macros from |pdcfmt2.tex|, since there is
+ no need for marks or fiddling with table-of-contents files.
+\code
+ |\def\section{
+ | \global\advance\secno1 \global\subsecno0
+ | \doheading\medskipamount{\subheadingfonts\thesecno\enspace}{}
+ |}
+\smallbreak
+ |\def\subsec{
+ | \global\advance\subsecno1
+ | \doheading\smallskipamount{\bodyfonts\thesecno\enspace}{}
+ |}
+\endcode
+
+ The page header includes only the title of the file, which the
+ user sets with the command |\majorheadline{|\<text>|}|
+\code
+ |\newtoks\majorheadline
+ |\expandafter\majorheadline
+ | \expandafter{\expandafter\uppercase\expandafter{\jobname}}
+\endcode
+ All those |\expandafter|s are to get the initial value in upper
+ case.
+
+ The flag |noheadline| signals that the headline is to be omitted
+ on this page (e.g., the title page). The |twosided| flag is set
+ for two-sided binding.
+\code
+ |\newif\ifnoheadline \newif\iftwosided
+\smallbreak
+ |\headline{%
+ | \ifnoheadline
+ | \hfil
+ | \else\iftwosided
+ | \ifodd\pageno
+ | \hfil \the\majorheadline \quad{\bf\folio}%
+ | \else
+ | {\bf\folio}\quad \the\majorheadline\hfil
+ | \fi
+ | \else
+ | \hfil \the\majorheadline \quad{\bf\folio}%
+ | \fi\fi
+ |}
+\smallbreak
+ |\footline{%
+ | \ifnoheadline
+ | \global\noheadlinefalse
+ | \hfil{\bf\folio}\hfil
+ | \else
+ | \hfil
+ | \fi
+ |}
+\endcode
+
+%}}} minimal section headings
+%{{{ sectioning
+\section{Sectioning in PDCCMDOC documents}
+
+\onlyone{T}
+ Now a document is divided into {\it sections}, which are further
+ divided into so-called {\it subsecs} and {\it subsubsecs}.
+ (Division into subsubsecs should be done sparingly.)
+
+ The sections may be grouped into {\it parts}---or, to look at it
+ another way, parts are a larger division of the document than
+ sections, but sections are not numbered within part numbers.
+ Each |\part| command should be almost immediately followed by
+ |\section|.
+
+\subsec{Macros for section numbers}
+
+ The part and section numbers are kept in \TeX\ number registers,
+ with corresponding `|\the|-' macros to print the value
+ formatted.
+\code
+ |\newcount\partno
+\smallbreak
+ |\def\thepartno{%
+ | \ifcase\partno O\or I\or II\or III\or IV\or V\else
+ | \expandafter\uppercase\expandafter{\romannumeral\partno}%
+ | \fi
+ |}
+\endcode
+ Formatted section and subsec numbers are generated by one macro
+ |\thesecno|. It automatically omits (sub)subsec numbers if they
+ are zero. The whole number is enclosed in |\n{|\dots|}| so that
+ the formatting of numbers may be customized.
+\code
+ |\newcount\secno \newcount\subsecno \newcount\subsubsecno
+\smallbreak
+ |\def\thesecno{%
+ | \n{%
+ | \number\secno
+ | \ifnum\subsecno>0
+ | .\number\subsecno
+ | \ifnum\subsubsecno>0
+ | .\number\subsubsecno
+ | \fi
+ | \fi
+ | }%
+ |}
+\endcode
+
+\subsec{Parts}
+
+ The |\part| macro takes one argument, the title. It sets a
+ token register |\majorheadline| which is printed on the left
+ page of two-sided documents.
+
+ The |\majorheadline{|\<text>|}| command may be used immediately
+ after a |\part| command if the part title is not suitable to go
+ in the headline. This should also be used at the start of the
+ document to the title of the document, if division into parts is
+ not used.
+\code
+ |\newtoks\majorheadline
+ |\expandafter\majorheadline
+ | \expandafter{\expandafter\uppercase\expandafter{\jobname}}
+\smallbreak
+ |\def\part#1{%
+ | \global\advance\partno1
+ | \newpageheading{2\baselineskip}{\headingfonts}
+ | {}{\thepartno.\quad#1}
+ | \TOCwrite\TOCentrypart{\thepartno}{#1}
+ |}
+\endcode
+
+\subsec{Section headings}
+
+ Section headings will start on a new page if the current page is
+ almost finished. The section heading is set across the full
+ width of the page, including the margin usually used for
+ tab-indexed headings.
+
+ To force the next section to start a new page, do
+ |\sectionpenalty-10000| immediately before it.
+\code
+ |\newcount\sectionpenalty
+\smallbreak
+ |\def\sectionheading#1{
+ | \par
+ | \vskip 0pt plus 0.3\vsize
+ | \penalty\sectionpenalty \sectionpenalty-200
+ | \vskip 1\bigskipamount plus -0.3\vsize
+ | \begingroup \advance\leftskip-\leftmargin
+ | \parskip=0pt \parindent=0pt
+ | \hyphenpenalty=10000 \exhyphenpenalty=500
+ | \interlinepenalty=100
+ | \headingfonts \nointerlineskip
+ | \hbox{\hskip-\leftmargin
+ | \vrule height 2pt depth 0pt width \leftmargin
+ | \vrule height 2pt depth 0pt width \hsize}
+% | \nobreak\medskip
+ | #1\par
+ | \nobreak\smallskip
+ | \endgroup
+ | \global\noindenttrue
+ |}
+\endcode
+ As well as generating a heading, the section macro generates
+ marks used for the page headings and a TOC entry. The marks are
+ of the form in a way similar to that discussed in Chapter~23 of
+ the {\it\TeX book}. More precisely, a mark is placed on either
+ side of the section heading of the form
+$$\hbox{\tt\arg{\<rhs>}\arg{\<lhs>}}$$ where \<rhs> is the section
+ number that belongs on the right-hand page, reflecting the
+ situation at the bottom of the page, whereas \<lhs> is what
+ belongs on following left-hand pages.
+\code
+ |\newtoks\sectiontoks
+ |\newif\ifsecno \secnotrue
+\smallbreak
+ |\def\section#1{
+ | \ifsecno
+ | \global\advance\secno1 \global\subsecno0 \global\subsubsecno0
+ | \fi
+ | \toks0={#1}
+ | \mark{{\the\sectiontoks}{\ifsecno\S\thesecno\space\fi\the\toks0 }}
+ | \edef\tmp{\ifsecno\noexpand\S\the\secno\space\fi}
+ | \global\sectiontoks\expandafter{\tmp#1}
+ | \sectionheading{\ifsecno\thesecno\quad\fi #1}
+ | \mark{{\the\sectiontoks}{\the\sectiontoks}}
+ | \TOCwrite\TOCentrysection{\ifsecno\thesecno\fi}{#1}
+ |}
+\endcode
+ Subsecs and subsubsecs use the |\doheading| macro defined in
+ |pdcfmt.tex|. They do not appear in page headings, but may
+ appear in the TOC.
+\code
+ |\def\subsec#1{%
+ | \ifsecno \global\advance\subsecno1 \global\subsubsecno0 \fi
+ | \doheading\medskipamount{\subheadingfonts}{}
+ | {\ifsecno\thesecno\quad\fi#1}
+ | \TOCwrite\TOCentrysubsec{\ifsecno\thesecno\fi}{#1}
+ |}
+\smallbreak
+ |\def\subsubsec#1{%
+ | \ifsecno \global\advance\subsubsecno+1 \fi
+ | \doheading\smallskipamount{\rm}{}{\ifsecno\thesecno\quad\fi#1}
+ | \TOCwrite\TOCentrysubsubsec{\ifsecno\thesecno\fi}{#1}
+ |}
+\endcode
+
+ The headline and footline are controlled by two flags. The
+ command |\noheadlinetrue| suppresses the headline for this page
+ (e.g., a title page). The |twosided| flag says whether the
+ document should be formatted for two-sided printing.
+\code
+ |\newif\ifnoheadline
+ |\newif\iftwosided
+\smallbreak
+ |\footline={%
+ | \ifnoheadline
+ | \global\noheadlinefalse
+ | \hfil\bodyfonts\n\folio\hfil
+ | \else
+ | \hfil
+ | \fi
+ |}
+\endcode
+ The headline varies according to whether it is a one-sided page,
+ a left-hand page or a right-hand page. On a one-sided page, it
+ has the major headline (part or document title) at the left, and
+ the section title of the {\it first} section on the page on the
+ right with the folio. On a left-hand page, there is the folio
+ and the major headline, and on a right-hand page there is the
+ section title for the {\it last} section on the page, and the
+ folio.
+\code
+ |\headline={%
+ | \ifnoheadline
+ | \hfil
+ | \else
+ | \bodyfonts
+ | \iftwosided
+ | \ifodd\pageno
+ | \hfil
+ | \expandafter\firstoftwo\botmark\quad
+ | {\bf\n\folio}%
+ | \else
+ | {\bf\n\folio}\quad
+ | \the\majorheadline
+ | \hfil
+ | \fi
+ | \else
+ | \the\majorheadline
+ | \hfil
+ | \expandafter\secondoftwo\topmark\quad
+ | {\bf\n\folio}%
+ | \fi
+ | \fi
+ |}
+\smallbreak
+ |\def\firstoftwo#1#2{#1}
+ |\def\secondoftwo#1{}
+\endcode
+%}}} sectioning
+%{{{ table of contents
+\section{Table of contents intrinsics}
+
+ This section defines the macros used to generate a table of
+ contents. The entries are written to a file \<jobname>|.toc| in
+ the current directory. At the end of the manuscript this files
+ is closed and then read to generate the table of contents.
+
+ Macros special to the TOC-generating section have names starting
+ with `|\TOC|-'.
+\code
+ |\newwrite\TOCfile
+ |\openout\TOCfile=\jobname.toc
+\endcode
+
+ Entries in the TOC file are of the form
+$$\hbox{\tt\cs{TOCentry}\<foo>\arg{\<secno>}\arg{\<title>}\arg{\<folio>}}$$
+ where |\TOCentry|\<foo> is a csname, \<secno> is some
+ automatically-generated section number like `|1.2|', \<title> is
+ the section title as supplied by the user, and \<folio> is the
+ folio for this page, in arabic or lower-case roman numeral form.
+
+ They are generated with calls to |\TOCwrite| like this
+$$\hbox{\tt\cs{TOCwrite}\cs{TOCentry}\<foo>\arg{\<secno>}\arg{\<title>}}$$
+ The \<secno> is evaluated when |\TOCwrite| is called, whereas
+ the \<title> is carefully written without being expanded so that
+ its expansion happens when the TOC file is read in. The
+ \<folio> is automatically appended when it is written.
+\code
+ |\def\TOCwrite#1#2#3{%
+ | \begingroup\def\n{\string\n}
+ | \def\tmp{#3}%
+ | \edef\tmp{\string#1{#2}{\expandafter\TOCtrim\meaning\tmp}}
+ | \write\TOCfile\expandafter{\tmp{\folio}}\endgroup
+ |}
+\smallbreak
+ |\def\TOCtrim#1:->{}
+\endcode
+
+
+ Now we define all the `|\TOCentry|-' macros.
+\code
+ |\def\TOCentrypart#1#2#3{
+ | \smallskip
+ | \dimen0=\hsize \advance\dimen0\leftmargin
+ | \moveleft\leftmargin\hbox to\dimen0{\strut\bf #1. #2\hfil}
+ | \smallskip
+ |}
+\smallbreak
+ |\def\TOCentrysection#1#2#3{
+ | \smallskip\noindent\llap{#1\kern1pc}%
+ | {\bf \ignorespaces #2\quad\rm \n{#3}}\par
+ |}
+\smallbreak
+ |\def\TOCentrysubsec#1#2#3{
+ | \ifvmode \noindent \else \quad \fi
+ | {#1}~{\ignorespaces #2}
+ |}
+\smallbreak
+ |\def\TOCentrysubsubsec#1#2#3{}
+\endcode
+%}}} table of contents
+%{{{ front matter
+\section{Printing the front matter}
+
+ The front matter of the document---the title page, preface,
+ forword, etc.---must be printed {\it last}, with the table of
+ contents at the end of the front matter; this is so that the
+ table of contents may be accumulated during the \TeX ing of the
+ file.\footnote*{It has a benefit for people reading the document
+ with a browser: page~1 of the document is the first page of the
+ DVI file, which makes selecting a given page easy, and the table
+ of contents is at the very end, so the browsers `go to last
+ page' command can be used to find the table of contents
+ quickly.}
+ The front matter starts with the command |\frontmatter| and may
+ contain |\section| commands. Such sections will be unnumbered
+ and will not appear in the table of contents.
+
+ For a short document, a separate title page is probably
+ excessive, and an abstract may be preferable to a preface. In
+ this case the first page after |\frontmatter| could have the
+ title of the document (with author etc.)\ followed by an
+ abstract, any copyright information (or other small print), and
+ the contents (generated by |\endfrontmatter|). In other words,
+ something like this:
+$$\halign{\indent#\hfil\cr
+ |\frontmatter|\cr
+ \quad\it commands to print the title, etc.\cr
+ \quad|\abstract|\cr
+ \qquad\it the text of the abstract\cr
+ \quad|\endabstract|\cr
+ \quad\it copyright information, etc.\cr
+ |\endfrontmatter|\cr
+}$$
+ For a longer document, there will be a separate title page and
+ perhaps a preface.
+$$\halign{\indent#\hfil\cr
+ |\frontmatter|\cr
+ \quad|\titlepage|\cr
+ \qquad\it commands to print the title, etc.\cr
+ \quad|\splittitlepage|\cr
+ \qquad\it print copyright information, etc.\cr
+ \quad|\endtitlepage|\cr
+ \quad|\section{Preface}|\cr
+ \qquad\it text of preface, etc.\cr
+ |\endfrontmatter|\cr
+}$$
+ The macro |\splittitlepage| marks the division between the title
+ page (title recto, page~i) and the back of the title page (title
+ verso, page~ii), which is where copyright information goes. On
+ a one-sided document, the copyright information belongs on the
+ title recto, because the title verso will be blank, so
+ |\splittitle| instead does |\vfill|.
+
+ Setting |\pageno| nagative makes it print in roman numerals.
+ Calling |\secnofalse| suppresses section numbering. The first
+ page has no headline.
+\code
+ |\def\frontmatter{
+ | \write\TOCfile{\string\endinput}
+ | \write\TOCfile{\folio}
+ | \closeout\TOCfile
+ | \vfill\supereject
+ | \ifvoid\partialpage\else \null\vfill\eject \fi
+ | \beginthe{frontmatter}
+ | \pageno=-1 \secnofalse \noheadlinetrue
+ | \def\TOCwrite##1##2##3{}
+ |}
+\endcode
+ The front matter is finshed off with the contents list,
+ generated by |\endfrontmatter|. This reads the TOC file, which
+ was closed at the end of the last page of the body of the
+ document.
+\code
+ |\def\endfrontmatter{
+ | \section{Contents}
+ | \input\jobname.toc
+ | \vfill\supereject
+ | \endthe{frontmatter}
+ |}
+\endcode
+
+ Here's macros for generating the titlepage---it shoul;d enclose
+ commands to generate the title, author and publisher information
+ for the document. If it is used, it goes immediately after
+ |\frontmatter|, so that the title page is page~i.
+\code
+ |\def\titlepage{
+ | \vfill\eject
+ | \beginthe{titlepage}
+ | \noheadlinetrue
+ | \def\splittitlepage{
+ | \iftwosided \vfill\eject\null\vfill \else \vfill \fi
+ | }
+ |}
+\smallbreak
+ |\def\endtitlepage{
+ | \eject
+ | \endthe{titlepage}
+ |}
+\endcode
+
+ This |abstract| environment doesn't do anything fancy.
+\code
+ |\def\abstract{
+ | \smallskip
+ | \beginthe{abstract}
+ | \setbox\parbox\hbox to \gridwd{\subheadingfonts Abstract\hfil}
+ | \noindenttrue \bodyfonts
+ |}
+\smallbreak
+ |\def\endabstract{
+ | \smallskip
+ | \endthe{abstract}
+ |}
+\endcode
+%}}} front matter
+ This concludes the code that is included only in documents with TOC.
+\common
+
+%{{{ abbreviations
+
+\section{abbrevs}
+
+
+ The definitions of |\pt| and |\mm| work only in maths mode.
+\code
+ |\def\pt{\,{\rm pt}}
+ |\def\mm{\,{\rm mm}}
+\smallbreak
+ |\def\MF{{\ifdim\fontdimen1\font>0pt \mfi \else \mf \fi META}\-%
+ | {\ifdim\fontdimen1\font>0pt \mfi \else \mf \fi FONT}}
+ |\def\MSDOS{\leavevmode\hbox{MS-DOS}}
+\endcode
+
+\subsec{Program names with small caps}
+
+ Some program names use small capitals in their names. For
+ normal fonts there is no point trying to duplicate this, since
+ small capitals aren't common to all fonts. But small capitals
+ come `for free' with Malvern, so we might as well use them. The
+ following definitions apply to Malvern~A fonts.
+\code
+\maonly
+ |\def\PS{\csc{PostScript}}
+ |\def\La{L\negthinspace\flushtop{\char"C1 }}
+\cmonly
+ |\def\PS{PostScript}
+\common
+\endcode
+
+\font\sf=cmss10
+ Here's a redefinition of |\TeX|. This adds a spacefactor 1000
+ to the end (so that \TeX\ doesn't apply its usual heuristic that
+ a full stop following a capoital {\it X} isn't a sentence end).
+ It also loosens up the logo, producing `\TeX' rather than the
+ usual `T\negthinspace\lower0.5ex\hbox{E}\kern-0.125emX'. This
+ design is more forgiving of changes in font (for example, in
+ sanserif it makes `{\sf\TeX}' instead of `{\sf
+ T\negthinspace\lower0.5ex\hbox{E}\kern-0.125emX}').
+\code
+ |\def\TeX{T\kern-0.1em\lower0.5ex\hbox{E}X\spacefactor1000 }
+\endcode
+
+ The macro |\dfn{...}| formats a defining instance of a word or
+ phrase (usually used the first time a new technical term is
+ introduced). When generating an index with a command |\index|,
+ this also adds the phrase to the index.
+\code
+ |\begingroup\catcode`\|=12 \toks0={\endgroup
+ | \def\dfn#1{\ifx\index\UNDEFINED\else\index{#1|INDdfn}\fi{\bi #1}}
+ |} \the\toks0
+\endcode
+
+ Here's a hack for using email-style emphasis using
+ `asterisking'. Text enclosed in matching asterisks is
+ emphasized.
+\code
+ |\declareactivechar\* \def*#1*{{\it#1\/}}
+\endcode
+
+
+\begingroup\defverbatim\~
+ When documenting computer progams it is useful to be able to
+ present dialogues between the user and the computer, with the
+ user's commands distinguished by a slightly different font.
+ Here we define ~\|~\<text>~|~ so that it behaves like
+ ~|~\<text>~|~ except that |\ttb| is used instead of |\tt|. In
+ maths mode it is still equivalent to |\Vert|.
+\code
+ |\def\|{%
+ | \relax\ifmmode
+ | \Vert
+ | \else
+ | \begingroup
+ | \ttb \setupverbatim
+ | \catcode`\|=13 \let|\endgroup
+ | \fi
+ |}
+\endcode
+\endgroup
+%}}} abbreviations
+%{{{ postamble
+\section{Finally}
+
+ The definitions common to all style files are read last, so that
+ they can take account of changes to |\baselineskip|.
+\code
+\Tstyonly
+ |\input pdcdoc.def
+\Xstyonly
+ |\input pdclft.def
+\common
+\endcode
+
+ And, at last, a file {\tt\<filename>.cfg} is read, if it exists.
+\code
+ |\def\inputifexists#1{%
+ | \openin15=#1
+ | \ifeof15 \else \input #1 \fi
+ | \closein15
+ |}
+\styonly
+ \|\\inputifexists\{\filenamesanssuffix.cfg\}
+\common
+\endcode
+
+\endcodefile{cmX} \endcodefile{cmT} \endcodefile{maX} \endcodefile{maT}
+\endcodefile{psX} \endcodefile{psT} \endcodefile{X} \endcodefile{T}
+\bye
+%}}} postamble
+%}}} pdccmcode.dtx
+
+%Local variables:
+%fold-folded-p: t
+%fill-prefix: " "
+%End:
diff --git a/macros/plain/contrib/pdcmac/pinstall b/macros/plain/contrib/pdcmac/pinstall
new file mode 100644
index 0000000000..c9b6b95638
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pinstall
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+# I can't figure out how I'm supposed to use a builtin "install"
+# program in a makefile given that every Unix has an incompatible version!
+
+# This script shall behave similarly to GNU "install".
+
+version="1.1 Time-stamp: <pdc 1995-03-24>"
+
+echo=
+strip=:
+
+while test $# -gt 0; do
+ case $1 in
+ -c) ;;
+ -n|--no-create)
+ echo=echo ;;
+ --g*=*)
+ group=`expr $1 : '.*=\(.*\)$'` ;;
+ -g|--g*)
+ group=$2; shift ;;
+ -g*)
+ group=`expr $1 : '-.\(.*\)$'` ;;
+ --o*=*)
+ owner=`expr $1 : '.*=\(.*\)$'` ;;
+ -o|--o*)
+ owner=$2; shift ;;
+ -o*)
+ owner=`expr $1 : '-.\(.*\)$'` ;;
+ --m*=*)
+ mode=`expr $1 : '.*=\(.*\)$'` ;;
+ -m|--m*)
+ mode=$2; shift ;;
+ -m*)
+ mode=`expr $1 : '-.\(.*\)$'` ;;
+ -s|--strip)
+ strip=strip ;;
+ -h|--help)
+ cat <<@EOF
+$0 -- install files
+usage:
+ $0 [ OPTION ]... FILE1 FILE2
+ $0 [ OPTION ]... FILE1...FILEn DIR
+ $0 --help | --version
+options:
+ -c ignored
+ --group=GROUP --owner=USER --mode=MODE -g GROUP -o USER -m MODE
+ --strip -s
+@EOF
+ exit 0 ;;
+ -V|--version)
+ echo "PDCMAC install ($0) version $version"
+ exit 0 ;;
+ -*)
+ echo >&2 $0: $1: not understood -- try $0 --help
+ exit 2 ;;
+ *)
+ files="$files $lastfile"
+ lastfile=$1 ;;
+ esac
+ shift
+done
+
+#echo group=$group owner=$owner mode=$mode lastfile=$lastfile files=$files
+
+$echo cp -p $files $lastfile || exit 1
+if test -d "$lastfile"; then
+ $echo cd $lastfile
+else
+ files="$lastfile"
+fi
+
+if test -n "$group"; then
+ $echo chgrp $group $files || exit 1
+fi
+
+if test -n "$owner"; then
+ $echo chown $owner $files || exit 1
+fi
+
+if test -n "$mode"; then
+ $echo chmod $mode $files || exit 1
+fi
+$echo $strip $files
+
+exit 0
diff --git a/macros/plain/contrib/pdcmac/pinstall.1 b/macros/plain/contrib/pdcmac/pinstall.1
new file mode 100644
index 0000000000..7faccac859
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pinstall.1
@@ -0,0 +1,108 @@
+.TH PINSTALL 1 "Time-stamp: <pdc 1995-03-27>" "PDCMAC 1.0" "CONTRIBUTED SOFTWARE"
+.SH NAME
+pinstall \- shellscript for copying programs into system directories,
+compatible with install
+.SH SYNOPSIS
+.na
+.B pinstall
+[
+.B \-c
+] [
+.I options
+]
+.I file1
+.I file2
+.br
+.B pinstall
+[
+.B \-c
+] [
+.I options
+]
+.I file\|.\|.\|.
+.I dir
+.br
+.BR pinstall
+.B \-\-help
+|
+.B \-\-version
+.PP
+.I options
+= [
+.B \-\-no\-create
+] [
+.BI \-\-group= groupname
+] [
+.BI \-\-owner= username
+] [
+.BI \-\-mode= mode
+] [
+.B \-\-strip
+]
+.SH DESCRIPTION
+.na
+This documents the
+.SM PDCMAC
+version of
+.IR install (1),
+called
+.IR pinstall .
+It is only used if
+.SM GNU
+.I install
+is not available.
+.PP
+This copies
+.I file1
+(which must exist)
+to the name
+.IR file2 ,
+or
+the
+.I files
+into the directory called
+.IR dir ,
+preserving the last-modified times
+(just like
+.BR "cp \-p" ).
+.PP
+This command is implemented as a shellscript.
+.SH OPTIONS
+.TP
+.B \-c
+Ignored.
+.TP
+.BI \-\-group= "groupname, " "\-g " groupname
+.PD 0v
+.TP
+.BI \-\-owner= "username, " "\-o " username
+.TP
+.BI \-\-mode= "mode, " "\-m " mode
+.PD
+Set the group, owner or mode for the new files (using the same
+conventions as
+.IR chgrp (1),
+.IR chown (1),
+and
+.IR chmod (1)
+respectively).
+Only root can combine changes of mode and group.
+.TP
+.BR \-\-help ", " \-h
+Print a usage message and exit.
+.TP
+.BR \-\-no\-create ", " \-n
+Do not copy files; instead print the commands that would have been performed.
+.TP
+.BR \-\-strip ", " \-s
+Apply
+.IR strip (1)
+to the files after copying them.
+.TP
+.BR \-\-version ", " \-V
+Print a version identification message and exit.
+.SH AUTHOR
+P. Damian Cugley
+.I damian.cugley@comlab.ox.ac.uk
+.SH "SEE ALSO"
+pmkdir(1), chgrp(1), chown(1), chmod(1), cp(1), strip(1), install(1)
diff --git a/macros/plain/contrib/pdcmac/pmkdir b/macros/plain/contrib/pdcmac/pmkdir
new file mode 100644
index 0000000000..1ed9baef93
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pmkdir
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+version="1.0 Time-stamp: <pdc 1995-03-27>"
+
+# pmkdir [ -m MODE | -g GROUP | -o OWNER | -n ] DIR
+# -- create a directory DIR, including any necessary
+# intervening directories.
+# Also takes note of 3 enbvironment variables:
+# GROUP -- group to give to new directories
+# OWNER -- owner for new directories
+# MODE -- mode for new directories
+# If called with the name of an existing directory, this will still
+# change group, mode, owner (if they are set).
+
+me=`basename $0`
+
+while test $# -gt 0; do
+ case $1 in
+ --m*=*)
+ MODE=`expr $1 : '.*=\(.*\)$'` ; export MODE ;;
+ -m|--m*)
+ MODE=$2 ; export MODE; shift ;;
+ --g*=*)
+ GROUP=`expr $1 : '.*=\(.*\)$'` ; export GROUP ;;
+ -g|--g*)
+ GROUP=$2; export GROUP; shift ;;
+ --o*=*)
+ OWNER=`expr $1 : '.*=\(.*\)$'` ; export OWNER ;;
+ -o|--o*)
+ OWNER=$2; export OWNER; shift ;;
+ -n*|--n*)
+ echo=echo ;;
+ -h|--h*)
+ cat <<'@EOF'
+$me -- make directory and any parent directories necessary
+
+$me [--no-create] [--mode=MODE] [--group=GROUP] [--owner=OWNER] DIR...
+$me --help | --version
+
+MODE is a mode for the new directory(s); see chmod(1).
+GROUP and OWNER are the group and owner; see chown(1) and chgrp(1).
+
+The --no-create option means don't do anything, print the commands instead.
+
+If not specified on the command line, the environment variables MODE,
+GROUP and OWNER are used. If there are no environment variables, the
+defaults used by mkdir(1) apply.
+@EOF
+ exit 0
+ ;;
+ -V|--v*)
+ echo $me for PDCMAC $version
+ exit 0 ;;
+ -*)
+ echo >&2 `basename $0`: $1: not understood
+ exit 2 ;;
+ *)
+ p=`dirname $1`
+ test -d $p || $0 $p || exit 1
+ $echo mkdir $1 || exit 1
+ test -n "$OWNER" && { $echo chgrp $OWNER $1 || exit 1; }
+ test -n "$GROUP" && { $echo chgrp $GROUP $1 || exit 1; }
+ test -n "$MODE" && { $echo chmod $MODE $1 || exit 1; }
+ ;;
+ esac
+ shift
+done
diff --git a/macros/plain/contrib/pdcmac/pmkdir.1 b/macros/plain/contrib/pdcmac/pmkdir.1
new file mode 100644
index 0000000000..88ed4e46cf
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/pmkdir.1
@@ -0,0 +1,81 @@
+.TH PMKDIR 1 "Time-stamp: <pdc 1995-03-27>" "PDCMAC 1.0" "CONTRIBUTED SOFTWARE"
+.SH NAME
+pmkdir \- make a directory and possibly its parents as well
+.SH SYNOPSIS
+.na
+.B pmkdir
+[
+.B \-\-no\-create
+] [
+.BI \-\-group= groupname
+] [
+.BI \-\-owner= username
+] [
+.BI \-\-mode= mode
+]
+.I dir\|.\|.\|.
+.br
+.BR pmkdir
+.B \-\-help
+|
+.B \-\-version
+.SH DESCRIPTION
+.na
+This documents the
+.SM PDCMAC
+version of
+.IR mkdirhier (1),
+called
+.IR pmkdir .
+.PP
+For each
+.I dir
+this creates a directory with that file name.
+Unlike
+.IR mkdir (1),
+any intermediate directories required will also be
+created.
+.PP
+This command is implemented as a shellscript.
+.SH OPTIONS
+.TP
+.BI \-\-group= "groupname, " "\-g " groupname
+.PD 0v
+.TP
+.BI \-\-owner= "username, " "\-o " username
+.TP
+.BI \-\-mode= "mode, " "\-m " mode
+.PD
+Set the group, owner or mode for the new files (using the same
+conventions as
+.IR chgrp (1),
+.IR chown (1),
+and
+.IR chmod (1)
+respectively).
+Only root can combine changes of mode and group.
+.TP
+.BR \-\-help ", " \-h
+Print a usage message and exit.
+.TP
+.BR \-\-no\-create ", " \-n
+Do not copy files; instead print the commands that would have been performed.
+.TP
+.BR \-\-version ", " \-V
+Print a version identification message and exit.
+.SH ENVIRONMENT
+.TP
+.SM GROUP
+.PD 0v
+.TP
+.SM OWNER
+.TP
+.SM MODE
+.PD
+The values of these variables are used if the corresponding command-line
+options are omitted.
+.SH AUTHOR
+P. Damian Cugley
+.I damian.cugley@comlab.ox.ac.uk
+.SH "SEE ALSO"
+pinstall(1), chgrp(1), chown(1), chmod(1), mkdir(1), mkdirhier(1)
diff --git a/macros/plain/contrib/pdcmac/version.txt b/macros/plain/contrib/pdcmac/version.txt
new file mode 100644
index 0000000000..18b8e2204e
--- /dev/null
+++ b/macros/plain/contrib/pdcmac/version.txt
@@ -0,0 +1,19 @@
+* pdcmac release 1.0, patch level 01 *
+Version ID list generated 1995-04-06
+
+maamac.dtx = 1.5 1995/04/06 13:33:44 pdc Exp
+magrmac.dtx = 1.3 1995/03/29 16:32:24 pdc Exp
+pdcadobe.dtx = 1.3 1995/03/30 16:07:31 pdc Exp
+pdccode.dtx = 1.6 1995/03/30 16:08:32 pdc Exp
+pdcfmt2.dtx = 2.4 1995/04/06 11:55:16 pdc Exp
+pdcfsel.dtx = 3.5 1995/03/28 19:05:54 pdc Exp
+pdcl1maa.dtx = 1.3 1995/03/30 16:09:52 pdc Exp
+pdcmisc.dtx = 1.4 1995/03/30 16:13:08 pdc Exp
+pdcoput5.dtx = 5.3 1995/04/06 11:51:03 pdc Exp
+pdcsty.dtx = 1.2 1995/03/30 16:12:17 pdc Exp
+
+configure = 1.0 Time-stamp: <pdc 1995-03-24>
+dtxtags = 1.1 Time-stamp: <pdc 1995-04-06>
+fig2epsf = 1.0 Time-stamp: <pdc 1995-03-24>
+pinstall = 1.1 Time-stamp: <pdc 1995-03-24>
+pmkdir = 1.0 Time-stamp: <pdc 1995-03-27>
diff --git a/macros/plain/contrib/pitex/README b/macros/plain/contrib/pitex/README
new file mode 100644
index 0000000000..13fd5c7192
--- /dev/null
+++ b/macros/plain/contrib/pitex/README
@@ -0,0 +1,38 @@
+This is piTeX, a set of macros I (Paul Isambert) use to
+typeset documentations for my packages (that's why it is
+archived on CTAN).
+
+Perhaps in the future, when this achieves some kind of
+format-like completude, it'll be publicly announced. In the
+meanwhile, a documentation exists (pitex-doc.pdf, also readable
+in a text editor as pitex-doc.txt).
+
+You can of course use those macros, but you are on your
+own, and the files will probably be modified without announcement.
+The file is supposed to be \input on plain TeX with LuaTeX, at least v.0.7.
+
+The files needed are:
+
+texapi.tex (an independent package for programming)
+yax.tex (an independent package for key=value interface)
+gates.tex and gates.lua (an independant package for overall architecture)
+navigator.tex (an independant package for PDF features)
+lua.ptx and base.ptxlua (Lua side)
+files.ptx (file management)
+fonts.ptx, fonts.ptxlua and foundry-settings.lua
+ (fonts, should be independant some day; actually
+ fonts.ptxlua can be used independantly, but there is
+ no doc)
+sections.ptx (sectionning commands)
+blocks.ptx (text blocks)
+references.ptx (labels and references)
+verbatim.ptx (typesetting verbatim)
+inserts.ptx (footnotes and figures, a mess, like most files here anyway)
+output.ptx (output routine)
+
+The file i-pitex.lua is needed only to typeset the documentation
+with the Interpreter package.
+
+Date: November 2011.
+
+Licensing of these files is covered by LPPL.
diff --git a/macros/plain/contrib/pitex/base.ptxlua b/macros/plain/contrib/pitex/base.ptxlua
new file mode 100644
index 0000000000..615632db0d
--- /dev/null
+++ b/macros/plain/contrib/pitex/base.ptxlua
@@ -0,0 +1,85 @@
+require"gates.lua"
+
+pitex = gates.new("pitex")
+pitex.misc = gates.new("pitex.misc")
+
+function pitex.log (message, ...)
+ texio.write_nl(string.format("\n" .. message .. "\n", ...))
+end
+function pitex.error (...)
+ tex.error ("! PiTeX error: " .. string.format(...) .. ".")
+end
+
+pitex.callback = gates.new("pitex.callback")
+
+-- Creates a gate with a callback's name and put it in that callback, if not
+-- already there. Adds the subgate(s).
+function pitex.callback.register (c, f)
+ if pitex.callback.type(c) == 2 then
+ pitex.callback.add(f, c)
+ else
+ pitex.callback.list{c}
+ pitex.callback.add(f, c)
+ callback.register(c, pitex.callback.execute[c])
+ end
+end
+
+-- Latin1 to UTF-8.
+local char = unicode.utf8.char
+local function convert_char (ch)
+ return char(string.byte(ch))
+end
+function pitex.callback.convert (buf)
+ return string.gsub(buf,".",convert_char)
+end
+
+pitex.callback.register("process_input_buffer", "convert")
+
+function remove_conversion ()
+ pitex.callback.close("convert", "process_input_buffer")
+end
+function restore_conversion ()
+ pitex.callback.open("convert", "process_input_buffer")
+end
+
+require("nodeinspector")
+new_inspection = nodeinspector.new_inspection
+
+local french_highmarks = {
+ string.byte("?"),
+ string.byte("!"),
+ string.byte(":"),
+ string.byte(";"),
+ }
+local french_marks = {
+ string.byte("?"),
+ string.byte("!"),
+ string.byte(":"),
+ string.byte(";"),
+ string.byte(","),
+ string.byte("."),
+ string.byte("("),
+ string.byte("["),
+ string.byte("{"),
+ }
+
+local function french_punctuation (head, ...)
+ for _, glue in ipairs(arg) do
+ if glue.id == 10 then
+ head = node.remove(head, glue)
+ node.free(glue)
+ end
+ end
+ local kern = node.new(11, 1)
+ kern.kern = tex.sp(".15em")
+ node.insert_after(head, arg[1], kern)
+end
+
+pitex.callback.french_punctuation = new_inspection(
+ french_punctuation,
+ {{id = 37, _char = french_marks}, {true, id = 37, char = french_highmarks}},
+ {{id = 10, subtype = 0}, {id = 11, subtype = 0}})
+
+pitex.callback.register("kerning", "french_punctuation")
+pitex.callback.original_kerning = node.kerning
+pitex.callback.register("kerning", "original_kerning")
diff --git a/macros/plain/contrib/pitex/blocks.ptx b/macros/plain/contrib/pitex/blocks.ptx
new file mode 100644
index 0000000000..13ba4b01e1
--- /dev/null
+++ b/macros/plain/contrib/pitex/blocks.ptx
@@ -0,0 +1,40 @@
+\long\def\newblocktype#1#2#3#4{%
+ \def#1{\ptx@newblock_pattern{#2}{#3}{#4}}%
+ }
+\newife\ifptx@newblock_group
+\long\def\ptx@newblock_pattern#1#2#3{%
+ \ifnext*
+ {\ptx@newblock_grouptrue\gobbleoneand{\ptx@newblock{#1}{#2}{#3}}}
+ {\ptx@newblock_groupfalse\ptx@newblock{#1}{#2}{#3}}%
+ }
+\long\def\ptx@newblock#1#2#3#4#5{%
+ \ifnextnospace*
+ {\gobbleoneand{\ptx@newblock_do#4{#1#5}{#2}{#3}}}
+ {\ptx@newblock_do#4{#1#5}{#2}{#3}{}}%
+ }
+\long\def\ptx@newblock_do#1#2#3#4#5#6{%
+ \ifptx@newblock_group
+ {\defcs{ptx@inner_\commandtoname#1:start}{\bgroup#2}%
+ \defcs{ptx@inner_\commandtoname#1:stop}{#4#6\egroup}}
+ {\defcs{ptx@inner_\commandtoname#1:start}{#2}%
+ \defcs{ptx@inner_\commandtoname#1:stop}{#4#6}}%
+ \defcs{ptx@inner_\commandtoname#1:continue}{#3#5}%
+ \def#1##1{%
+ \ifelseif{%
+ {\ifstring{##1}{|}} {\skipspace{\usecs{ptx@inner_\commandtoname#1:continue}}}
+ {\ifstring{##1}{/}} {\usecs{ptx@inner_\commandtoname#1:stop}}
+ {\ifstring{##1}{>}} {\skipspace{\usecs{ptx@inner_\commandtoname#1:start}}}
+ \iftrue {\usecs{ptx@inner_\commandtoname#1:start}##1}}%
+ }%
+ }
+
+\newblocktype\newblock{}{}{}
+
+\def\Indent{\quitvmode\kern\parindent}
+
+\gates new \Everypar {Everypar}
+\Everypar list {everypar} [0]
+ [noindent] ?{status = close} {{\setbox0=\lastbox}}
+\Everypar close {noindent}{everypar}
+\everypar={\Everypar execute {everypar}}
+\def\removenextindent{\Everypar ajar {noindent}{everypar}}
diff --git a/macros/plain/contrib/pitex/files.ptx b/macros/plain/contrib/pitex/files.ptx
new file mode 100644
index 0000000000..212b05fc07
--- /dev/null
+++ b/macros/plain/contrib/pitex/files.ptx
@@ -0,0 +1,39 @@
+\newread\ptx@temp_read
+\def\iffile{%
+ \ifnext[
+ {\ptx@iffile}
+ {\ptx@iffile[]}%
+ }
+\def\ptx@iffile[#1]#2{%
+ \directlua{
+ local f = kpse.find_file("\luaescapestring{#2}"\reverse\iffemptystring{#1}{, "#1"})
+ local x = f and "firstoftwo" or "secondoftwo"
+ tex.print(\the\texcatcodes, "\noexpand\\" .. x)
+ }%
+ }
+\long\def\ifffile{%
+ \ifnext[
+ {\ptx@ifffile}
+ {\ptx@ifffile[]}%
+ }
+\long\def\ptx@ifffile[#1]#2#3{%
+ \iffile[#1]{#2}{#3}{}%
+ }
+
+\long\def\inputfileor{%
+ \ifnext[
+ {\ptx@inputfileor}
+ {\ptx@inputfileor[]}%
+ }
+\long\def\ptx@inputfileor[#1]#2{%
+ \iffile[#1]{#2}{\input{#2}\relax}%
+ }
+
+\newwrite\ptx@auxfile
+\def\ptx@write_toaux{%
+ \ifnext*
+ {\gobbleoneand{\write\ptx@auxfile}}
+ {\immediate\write\ptx@auxfile}%
+ }
+
+\let\writeout\ptx@write_toaux
diff --git a/macros/plain/contrib/pitex/fonts.ptx b/macros/plain/contrib/pitex/fonts.ptx
new file mode 100644
index 0000000000..a504846d6b
--- /dev/null
+++ b/macros/plain/contrib/pitex/fonts.ptx
@@ -0,0 +1,308 @@
+\inputluafile fonts.ptxlua
+\pdfadjustspacing=2
+
+\def\currentfont{}
+\def\currentsize{normal}
+\def\currentstyle{rm}
+\def\currentweight{rg}
+\def\currentcase{lc}
+\def\makecurrentfont{%
+ \csname\currentfont @\currentsize @\currentstyle @\currentweight @\currentcase\endcsname
+ }
+\def\normalsize{%
+ \def\currentsize{normal}%
+ \makecurrentfont
+ }
+\def\small{%
+ \def\currentsize{small}%
+ \makecurrentfont
+ }
+\def\verysmall{%
+ \def\currentsize{verysmall}%
+ \makecurrentfont
+ }
+\def\smaller{%
+ \passexpanded\ifstring\currentsize{normal}%
+ {\def\currentsize{small}}
+ {\def\currentsize{verysmall}}
+ \makecurrentfont
+ }
+\def\big{%
+ \def\currentsize{big}%
+ \makecurrentfont
+ }
+\def\verybig{%
+ \def\currentsize{verybig}%
+ \makecurrentfont
+ }
+\def\bigger{%
+ \passexpanded\ifstring\currentsize{normal}%
+ {\def\currentsize{big}}
+ {\def\currentsize{verybig}}
+ \makecurrentfont
+ }
+\def\it{%
+ \def\currentstyle{it}%
+ \makecurrentfont
+ }
+\def\rm{%
+ \def\currentstyle{rm}%
+ \makecurrentfont
+ }
+\def\rmstring{rm}
+\def\emph{%
+ \ifx\currentstyle\rmstring
+ \expandafter\ital
+ \else
+ \expandafter\rom
+ \fi
+ }
+\def\bf{%
+ \def\currentweight{bf}%
+ \makecurrentfont
+ }
+%\def\normalweight{%
+\def\rg{%
+ \def\currentweight{rg}%
+ \makecurrentfont
+ }
+\def\sc{%
+ \def\currentcase{sc}%
+ \makecurrentfont
+ }
+%\def\normalcase{%
+\def\lc{%
+ \def\currentcase{lc}%
+ \makecurrentfont
+ }
+\freedef\ital{{\it#1}}
+\freedef\bold{{\bf#1}}
+\freedef\scap{{\sc#1}}
+\freedef\rom{{\rm#1}}
+
+
+\restrictparameter font :
+ command % The command to be used to switch to that font.
+ name % Actually the part common to all files' names for that font.
+ size % Well, the size.
+ small % Smaller size.
+ verysmall % Smaller yet.
+ big % Bigger.
+ verybig % Insanely big.
+ bold % Modifier for bold font.
+ italic % Modifier for italic font.
+ math % If set to "true", then used for math font.
+ % small, verysmall and italic should be specified
+ % (which shows I don't use it very often).
+ features % Font features (e.g. +onum, etc.).
+ slant % A number representing an angle, loading an italic
+ % font if no real italic is a available.
+ slantsc % The same, for small caps.
+
+% The font parameter should disappear some day, it's clumsy.
+\def\setfont#1:{%
+ \setparameter font : command = #1%
+ }
+
+\setparameter metafont : % No relation :)
+ size = 10pt
+ bold = Bold
+ italic = Italic
+ features = "+onum; +liga; +trep; +tlig; expansion=30 20 5;"
+
+\setparameter font :
+ meta = metafont
+
+\newdimen\ptx@fontsize
+\luacode
+ptx_fonts = {}
+function ptx_getfont(Font, ...)
+ if ptx_fonts[Font] then
+ local tempfont = ptx_fonts[Font]
+ for _, style in ipairs(arg) do
+ if ptx_getstyle[style] then
+ tempfont = tempfont:gsub("(%w+)@(%w+)@(%w+)@(%w+)@(%w+)",ptx_getstyle[style])
+ else
+ tempfont = nil
+ texio.write_nl("! PiTeX error: Unknown font style `style'.")
+ return Font
+ end
+ end
+ return font.id(tempfont)
+ else
+ texio.write_nl("! PiTeX error: " .. Font .. " is not a PiTeX font. It can't be changed.")
+ end
+end
+ptx_getstyle = {
+ normal = "%1@normal@%3@%4@%5",
+ small = "%1@small@%3@%4@%5",
+ verysmall = "%1@verysmall@%3@%4@%5",
+ big = "%1@big@%3@%4@%5",
+ verybig = "%1@verybig@%3@%4@%5",
+ rm = "%1@%2@rm@%4@%5",
+ it = "%1@%2@it@%4@%5",
+ rg = "%1@%2@%3@rg@%5",
+ bf = "%1@%2@%3@bf@%5",
+ lc = "%1@%2@%3@%4@lc",
+ sc = "%1@%2@%3@%4@sc"
+ }
+\luacode/
+
+\newstring{+} \newstring{-}
+\def\ptx@dofont#1#2#3#4#5{%
+ \edef\ptx@temp{\passvaluenobraces\commandtoname font : command }%
+ \ifexpression{ -\ifstring{#4}{normal} & { \ifprefix-{#5} | \ifprefix+{#5} } }
+ {\def\ptx@dofont_size{\dimexpr\usevalue font : size + #5\relax}}
+ {\def\ptx@dofont_size{#5}}%
+ \ptx@dofont_load{\ptx@temp @#4@#1@#2@lc}{#3}{}{\ptx@dofont_size}%
+ \ifstring{#1}{rm}
+ {\ptx@dofont_load{\ptx@temp @#4@#1@#2@sc}{#3}{+smcp;}{\ptx@dofont_size}%
+ \ifattribute font : slant % Loading a slanted version of the font if no italic was given
+ {\ptx@dofont_load{\ptx@temp @#4@it@#2@lc}{#3}{slant=\usevalue font: slant ;}{\ptx@dofont_size}
+ \ifattribute font : slantsc {}
+ {\ptx@dofont_load{\ptx@temp @#4@it@#2@sc}{#3}{+smcp;slant=\usevalue font: slant ;}{\ptx@dofont_size}}}{}%
+ \ifattribute font : slantsc
+ {\ptx@dofont_load{\ptx@temp @#4@it@#2@sc}{#3}{+smcp;slant=\usevalue font: slantsc ;}{\ptx@dofont_size}}{}}%
+ {\ifattribute font : slantsc {}{\ptx@dofont_load{\ptx@temp @#4@it@#2@sc}{#3}{+smcp;}{\ptx@dofont_size}}}
+ }
+
+\def\ptx@dofont_load#1#2#3#4{%
+ \passcs\font{#1}="\usevalue font : name #2:#3\usevalue font : features " at #4\relax
+ \ptx@lua{ptx_fonts[font.id("#1")] = "#1"}%
+ }
+
+
+
+\def\dofont#1#2#3{%
+ \passvalue{\ptx@dofont{#1}{#2}{#3}{normal}} font : size
+ \passvalue{\ptx@dofont{#1}{#2}{#3}{small}} font : small
+ \passvalue{\ptx@dofont{#1}{#2}{#3}{verysmall}} font : verysmall
+ \passvalue{\ptx@dofont{#1}{#2}{#3}{big}} font : big
+ \passvalue{\ptx@dofont{#1}{#2}{#3}{verybig}} font : verybig
+%
+ \ifvalue font : math = true
+ {\ifstring{#1#2}{rmrg}
+ {\passcs{\textfont0=}{\passvalue\commandtoname font : command @normal@#1@#2@lc}%
+ \passcs{\scriptfont0=}{\passvalue\commandtoname font : command @small@#1@#2@lc}%
+ \passcs{\scriptscriptfont0=}{\passvalue\commandtoname font : command @verysmall@#1@#2@lc}
+ \passcs{\textfont2=}{\passvalue\commandtoname font : command @normal@#1@#2@lc}%
+ \passcs{\scriptfont2=}{\passvalue\commandtoname font : command @small@#1@#2@lc}%
+ \passcs{\scriptscriptfont2=}{\passvalue\commandtoname font : command @verysmall@#1@#2@lc}}
+ {\iffstring{#1#2}{itrg}
+ {\passcs{\textfont1=}{\passvalue\commandtoname font : command @normal@#1@#2@lc}%
+ \passcs{\scriptfont1=}{\passvalue\commandtoname font : command @verysmall@#1@#2@lc}%
+ \passcs{\scriptscriptfont1=}{\passvalue\commandtoname font : command @verysmall@#1@#2@lc}}}%
+ }{}%
+ }
+
+\gates new \FontLoader {FontLoader}
+\FontLoader list {fontloader}
+ [fl_command]
+ {%
+ \passvaluenobraces\edef font : command {%
+ \def\noexpand\currentfont{\passvalue\commandtoname font : command }%
+ \noexpand\makecurrentfont}}
+ (fl_load)
+ . ( fl_roman )
+ . . [ fl_doromanregular ]
+ {\dofont{rm}{rg}{}}
+ . . [ fl_doromanbold ] ? {conditional = -\ifvalue font : bold = none }
+ {\dofont{rm}{bf}{/\usevalue font : bold }}
+ . ( fl_italic ) ? {conditional = -\ifvalue font : italic = none }
+ . . [ fl_doitalicregular ]
+ {\dofont{it}{rg}{/\usevalue font : italic }}
+ . . [ fl_doitalicbold ] ? {conditional = -\ifvalue font : bold = none }
+ {\dofont{it}{bf}{/\usevalue font : italic /\usevalue font : bold }}
+ [fl_use] ? {conditional = \ifvalue font : command = {\mainfont} }
+ {\mainfont}
+ (fl_post)
+ . [fl_delete]
+ {\deleteparameter font:}
+ . [fl_meta]
+ {\setattribute font : meta = metafont }
+
+\defactiveparameter font {%
+ \FontLoader execute {fontloader}%
+ }
+
+
+
+
+
+
+
+\long\def\color#1#2{%
+ \pdfcolorstack0 push {#1 rg #1 RG}%
+ #2%
+ \pdfcolorstack0 pop%
+ }
+
+\newattribute\ptx@underline_attribute
+\luacode
+local do_underline = function (head,order,ratio,sign)
+ local item, leader = head, false
+ while item do
+ leader = false
+ if node.has_attribute(item,\attributenumber\ptx@underline_attribute)
+ and not (item.id == 10 and (item.subtype == 8 or item.subtype == 9)) then
+ local item_line = node.new(2)
+ item_line.depth = tex.sp("1.4pt")
+ item_line.height = tex.sp("-1pt")
+ if node.has_field(item,"spec") then
+ item_line.width = item.spec.width
+ if order == 0 then
+ if sign == 1 then
+ item_line.width = item_line.width + ratio * item.spec.stretch
+ else
+ item_line.width = item_line.width - ratio * item.spec.shrink
+ end
+ else
+ if item.spec.stretch_order > 0 or item.spec.shrink_order > 0 then
+ lualog(item.spec.stretch_order)
+ item_line.width = 1
+ item.subtype = 100
+ item.leader = item_line
+ leader = true
+ end
+ end
+ elseif node.has_field(item,"width") then
+ item_line.width = item.width
+ elseif node.has_field(item,"kern") then
+ item_line.width = item.kern
+ end
+ if leader then
+ item = item.next
+ else
+ local item_kern = node.new(11)
+ item_kern.kern = -item_line.width
+ node.insert_after(head,item,item_line)
+ node.insert_after(head,item,item_kern)
+ item = item_line.next
+ end
+ else
+ item = item.next
+ end
+ end
+end
+pitex.misc.underline = function (head)
+ for line in node.traverse_id(0,head) do
+ do_underline(line.list,line.glue_order,line.glue_set,line.glue_sign)
+ end
+ return head
+end
+pitex.callback.register("post_linebreak_filter", "pitex.misc:underline")
+pitex.callback.close("pitex.misc:underline", "post_linebreak_filter")
+\luacode/
+
+\freedef\underline{%
+ \ptx@lua{%
+ pitex.callback.ajar("pitex:underline", "post_linebreak_filter")
+ }
+% local plf = callback.list_functions("post_linebreak_filter")
+% if not plf or not plf["underline"] then
+% callback.add_function(underline, "underline", "post_linebreak_filter")
+% end}%
+ \quitvmode % Otherwise it might also underline the indentation box.
+ \ptx@underline_attribute=0\relax
+ #1\unsetattribute\ptx@underline_attribute
+ }
diff --git a/macros/plain/contrib/pitex/fonts.ptxlua b/macros/plain/contrib/pitex/fonts.ptxlua
new file mode 100644
index 0000000000..391ee9a676
--- /dev/null
+++ b/macros/plain/contrib/pitex/fonts.ptxlua
@@ -0,0 +1,1211 @@
+-- *** UTILITY FUNCTIONS ***
+local function get_locals (tab)
+ local tb = {}
+ for lib, keys in pairs(tab) do
+ keys = string.explode(keys)
+ for _, k in ipairs(keys) do
+ tb[k] = _G[lib][k]
+ end
+ end
+ return tb
+end
+
+-- str
+-- string manipulation
+local str = get_locals {string = "explode gsub match format lower upper"}
+
+-- Removes space at the beginning and end and conflates multiple spaces.
+function str.trim (s)
+ s = str.match(s, "^%s*(.-)%s*$")
+ s = str.gsub(s, "%s+", " ")
+ return s
+end
+
+-- Extracts a pattern from a string, i.e. removes it and returns it.
+-- If "full", then the entire pattern is removed, not only the captures.
+function str.extract (s, pat, full)
+ local cap = str.match(s, pat)
+ if cap then
+ if full then
+ s = str.gsub(s, pat, "")
+ else
+ s = str.gsub(s, cap, "")
+ end
+ end
+ return cap, s
+end
+-- /str
+
+
+-- lp
+-- advanced string manipulation
+lpeg.locale(lpeg)
+local lp = get_locals {lpeg = "match P C S Ct V alnum"}
+lp.space = lpeg.space^0
+-- /lp
+
+
+-- tab
+-- table manipulation
+local tab = get_locals {table = "insert remove sort"}
+
+-- Adds val to tab, creating it if necessary.
+function tab.update (tb, val)
+ tb = tb or {}
+ tab.insert(tb, val)
+ return tb
+end
+
+-- Adds subtable (empty, or val) to tb at entry key, unless it already exists.
+function tab.subtable (tb, key, val)
+ tb[key] = tb[key] or val or {}
+end
+
+-- Writes a table to an extenal file.
+local function write_key (key, ind)
+ return ind .. '["' .. key .. '"] = '
+end
+
+function tab.write (tb, f, ind)
+ for a, b in pairs (tb) do
+ if type(a) == "string" then
+ a = '"' .. a .. '"'
+ end
+ a = "[" .. a .. "]"
+ if type(b) == "table" then
+ f:write(ind, a, " = {")
+ tab.write(b, f, ind .. " ")
+ f:write(ind, "},")
+ else
+ if type(b) == "boolean" then
+ b = b and "true" or "false"
+ elseif type(b) == "string" then
+ b = '"' .. b .. '"'
+ end
+ f:write(ind, a, " = ", b, ",")
+ end
+ end
+end
+
+-- Returns a full copy of a table. Not copying of metatables necessary for the
+-- moment.
+function tab.copy (tb)
+ local t = {}
+ for k, v in pairs (tb) do
+ if type(v) == "table" then
+ v = tab.copy(v)
+ end
+ t[k] = v
+ end
+ return t
+end
+
+-- Sorts two tables containing modifiers (Italic, etc.).
+function tab.sortmods (a, b)
+ local A, B = "", ""
+ for _, x in ipairs (a) do
+ A = A .. " " .. x
+ end
+ for _, x in ipairs (b) do
+ B = B .. " " .. x
+ end
+ return A < B
+end
+
+-- Turns an array into a hash.
+function tab.tohash(tb)
+ local t = {}
+ for _, k in ipairs(tb) do
+ t[k] = true
+ end
+ return t
+end
+-- /tab
+
+-- lfs
+-- files etc.
+local lfs = get_locals {lfs = "dir isdir isfile mkdir", kpse = "expand_var show_path find_file"}
+
+-- Returns anything after the last dot, i.e. an extension.
+function lfs.extension (s)
+ return str.lower(str.match(s, "%.([^%.]*)$"))
+end
+
+local extensions = {
+ otf = "opentype",
+ ttf = "truetype",
+ ttc = "truetype",
+}
+function lfs.type (s)
+ return extensions[lfs.extension(s)]
+end
+
+local kpse_extensions = {
+ otf = "opentype fonts",
+ ttf = "truetype fonts",
+ ttc = "truetype fonts",
+}
+function lfs.kpse (s)
+ return kpse_extensions[lfs.extension(s)]
+end
+
+-- Returns anything after the last slash, i.e. a pathless file.
+function lfs.nopath (f)
+ return str.match(f, "[^/]*$")
+end
+
+-- Creates a directory; the arguments are the successive subdirectories.
+function lfs.ensure_dir (...)
+ local arg, path = {...}
+ for _, d in ipairs(arg) do
+ if path then
+ path = path .. "/" .. d
+ else
+ path = d
+ end
+ path = str.gsub(path, "//", "/")
+ if not lfs.isdir(path) then
+ lfs.mkdir(path)
+ end
+ end
+ return path
+end
+
+-- Turns "foo/blahblah/../" into "foo/" (such going into and leaving
+-- directories happens with kpse). Also puts everything to lowercase.
+function lfs.smooth_file (f)
+ f = str.gsub(f, "/.-/%.%./", "/")
+ f = str.gsub(f, "^%a", str.lower)
+ return f
+end
+-- /lfs
+
+
+-- wri
+-- messages
+local wri, write_nl = {}, texio.write_nl
+
+function wri.report (s, ...)
+ write_nl(str.format(s, unpack(arg)))
+end
+
+function wri.error (s, ...)
+ tex.error(str.format(s, unpack(arg)))
+end
+-- /wri
+
+
+-- various
+-- the last one is, of course, not the least
+local io = get_locals {io = "open lines"}
+local os = get_locals {os = "date"}
+local num = get_locals {math = "abs tan rad floor pi", tex = "sp"}
+local fl = get_locals {fontloader = "open close to_table info", font = "read_tfm"}
+-- /various
+
+
+-- *** END OF UTILITY FUNCTIONS ***
+
+
+
+--- *** CREATING THE LIBRARY *** ---
+local settings
+if lfs.find_file"foundry-settings.lua" then
+ settings = require"foundry-settings.lua"
+else
+ settings = {normal = {}, features = {}}
+end
+local font_families = {}
+local normal_names = {}
+for _, name in ipairs(settings.normal) do
+ normal_names[name] = true
+end
+local local_path = lfs.expand_var("$TEXMFLOCAL")
+local foundry_path = lfs.ensure_dir (local_path, "tex", "luatex", "foundry")
+local library_file = foundry_path .. "/" .. "readable.txt"
+--local library_file = "c:/texlive/texmf-local/tex/plain/pitex/readable.txt"
+--local library_file = "readable.txt"
+
+-- Analyze a font file and return a name and a table
+-- with modifiers.
+local function extract_font (file, names)
+ local fi, subname
+ -- Trying to open a font in ttc, using the names returned by fontloader.info
+ if names then
+ local name = names.fullname
+ if name then
+ fi = fl.open (file, name)
+ end
+ if not fi then
+ name = names.fontname
+ if name then
+ fi = fl.open
+ end
+ if not fi then
+ fl.error("Can't open %s", file)
+ return
+ end
+ end
+ subname = name
+ else
+ fi = fl.open(file)
+ end
+ -- Getting the most precise information. Not necessarily the best
+ -- solution, but since the user can modify the library, it's not so bad.
+ local fam, name = fi.names[1].names.preffamilyname or fi.names[1].names.family or fi.familyname, fi.fontname
+ local spec = fi.names[1].names.prefmodifiers or fi.names[1].names.subfamily or ""
+ local subfam, _spec
+ local t = { [0] = file }
+ -- Removing mods like Regular, Book, etc.
+ for name in pairs(normal_names) do
+ spec = str.gsub(spec, name, "")
+ end
+ if subname then
+ tab.insert(t, "[font = " .. subname .. "]")
+ end
+ if spec ~= "" then
+ spec = str.explode(spec)
+ for _, s in ipairs(spec) do
+ tab.insert(t, s)
+ end
+ end
+ fl.close(fi)
+ return fam, t
+end
+
+-- Searches directories for font files, and pass them to
+-- extract_font. The fonts are collected in a table.
+-- The fonts_done table is updated when the library is read,
+-- so when a font is missing and one needs to recheck files,
+-- only those that arent in the libraries are considered.
+local fonts_done = {}
+local function check_fonts (rep, tb)
+ for f in lfs.dir (rep) do
+ if f ~= "." and f ~= ".." then
+ f = str.gsub(rep, "/$", "") .. "/" .. f
+ if lfs.isdir(f) then
+ check_fonts(f, tb)
+ elseif lfs.isfile(f) and not fonts_done[lfs.nopath(f)] then
+ local e = lfs.extension(f)
+ if e == "ttf" or e == "otf" then
+ local fam, file = extract_font(f)
+ if fam then
+ tab.subtable(tb, fam)
+ tab.insert(tb[fam], file)
+ end
+ elseif e == "ttc" then
+ local info = fl.info(f)
+ for _, i in ipairs(info) do
+ local fam, file = extract_font(f, i)
+ if fam then
+ tab.subtable(tb, fam)
+ tab.insert(tb[fam], file)
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+-- Writes the library to an external file.
+-- Type is "a" if what's going on is recheck_fonts.
+local function write_lib (fams, file, type)
+ local read_table = {}
+ for fam, tb in pairs(fams) do
+ tab.insert(read_table, fam)
+ for _, ttb in ipairs(tb) do
+ tab.sort(ttb)
+ end
+ tab.sort(tb, tab.sortmods)
+ end
+ tab.sort(read_table)
+ local readable = io.open(file, type)
+ for n, fam in ipairs(read_table) do
+ local log
+ if type == "a" then
+ log = true
+ if n == 1 then
+ wri.report("\nAdding new font(s):")
+ readable:write("\n\n% Added automatically " .. os.date() .. "\n\n")
+ end
+ wri.report(fam)
+ end
+ readable:write(fam .. " :")
+ for n, f in ipairs(fams[fam]) do
+ log = log and " "
+ readable:write("\n ")
+ for _, t in ipairs(f) do
+ log = log and log .. " " .. t
+ readable:write(" " .. t)
+ end
+ log = log and log .. " " .. '"' .. f[0] .. '"'
+ readable:write(" " .. '"' .. lfs.nopath(f[0]) .. '",')
+ if log then wri.report(log) end
+ if n == #fams[fam] then
+ readable:write("\n\n")
+ end
+ end
+ end
+ readable:close()
+end
+
+
+-- If there is no library, we create it.
+local font_paths = lfs.show_path("opentype fonts")
+font_paths = str.gsub(font_paths, "\\", "/")
+font_paths = str.gsub(font_paths, "/+", "/")
+font_paths = str.gsub(font_paths, "!!", "")
+font_paths = str.explode(font_paths, ";+")
+
+if not lfs.find_file(library_file) then
+ wri.report("I must create the library; please wait, that can take some time.")
+ for _, rep in ipairs(font_paths) do
+ check_fonts(rep, font_families)
+ end
+ write_lib(font_families, library_file, "w")
+end
+
+-- Reads the library file, turning it into a table.
+local explode_semicolon = lp.P{
+ lp.Ct(lp.V"data"^1),
+ data = lp.C(((1 - lp.S";[") + (lp.S"[" * (1 - lp.S"]")^0 * lp.S"]" ))^1) / str.trim * (lp.S";" + -1),
+ }
+local explode_comma = lp.P{
+ lp.Ct(lp.V"data"^1),
+ data = lp.C(((1 - lp.S",[") + (lp.S"[" * (1 - lp.S"]")^0 * lp.S"]" ))^1) / str.trim * (lp.S"," + -1),
+ }
+
+local function load_library (lib)
+ local LIB = ""
+ local lib_file = lfs.find_file(lib)
+ if not lib_file then
+ wri.error("I can't find library %s.", lib)
+ return
+ end
+
+ for l in io.lines(lib_file) do
+ if not str.match(l, "^%s*%%") then
+ if str.match(l, "^%s*$") then
+ LIB = LIB .. ";"
+ else
+ LIB = LIB .. " " .. l
+ end
+ end
+ end
+ LIB = str.gsub(LIB, ";%s*;", ";;")
+ LIB = str.gsub(LIB, ";+", ";")
+ LIB = str.gsub(LIB, "^;", "")
+ LIB = str.gsub(LIB, "%s+", " ")
+
+ LIB = lp.match(explode_semicolon, LIB)
+
+ local newlib = {}
+ for _, t in ipairs(LIB) do
+ local fam, files = str.match(t, "(.-):(.*)")
+ local current_mods
+ if files then
+ files = lp.match(explode_comma, files)
+ fam = str.explode(fam, ",")
+ local root
+ for n, f in ipairs (fam) do
+ f = str.trim(f)
+ if n == 1 then
+ root = f
+ if type(newlib[f]) == "string" then
+ wri.error("Name `%s' is already used as an alias for `%s'; it is now overwritten to denote a family", f, newlib[f])
+ newlib[f] = {}
+ else
+ newlib[f] = newlib[f] or {}
+ end
+ else
+ if newlib[f] then
+ wri.error("The name `%s' is already used. I ignore it as an alias for `%s'", f, root)
+ else
+ newlib[f] = root
+ end
+ end
+ end
+ for _, f in ipairs(files) do
+ local reset
+ reset, f = str.extract(f, "^%.%.", true)
+ if reset then current_mods = nil end
+ local mods, file, feats = str.match(f, '([^"]*)"(.*)"')
+ if mods then
+ fonts_done[lfs.nopath(file)] = true
+ feats, mods = str.extract(mods, "%[([^%]]-)]", true)
+ mods = str.explode(mods)
+ if current_mods then
+ for _, t in ipairs(current_mods) do
+ tab.insert(mods, t)
+ end
+ if current_mods.feats then
+ feats = feats or ""
+ feats = current_mods.feats .. "," .. feats
+ end
+ end
+ local sizes, real_mods = {}, {}
+ for n, s in ipairs(mods) do
+ if tonumber(s) then
+ tab.insert(sizes, tonumber(s))
+ else
+ tab.insert(real_mods, s)
+ end
+ end
+ sizes = #sizes > 0 and sizes or {0}
+ tab.sort(real_mods)
+ local T = newlib[root]
+ for _, t in ipairs(real_mods) do
+ t = str.trim(t)
+ if t ~= "" then
+ T[t] = T[t] or {}
+ T = T[t]
+ end
+ end
+ T.__files = T.__files or {}
+ for _, s in ipairs(sizes) do
+ T.__files[s] = {str.trim(file), feats}
+ end
+ else
+ feats, mods = str.extract(f, "%[([^%]]-)]", true)
+ if current_mods then
+ for _, mod in ipairs(str.explode(mods)) do
+ tab.insert(current_mods, mod)
+ end
+ if feats then
+ current_mods.feats = current_mods.feats and current_mods.feats .. "," .. feats or feats
+ end
+ else
+ current_mods = str.explode(mods)
+ current_mods.feats = feats
+ end
+ end
+ end
+ end
+ end
+ return newlib
+end
+
+local library = {}
+library.default = load_library(library_file)
+
+-- Same as above, but used when rechecking (if a font isn't found in libraries).
+local function recheck_fonts ()
+ local tb = {}
+ for _, rep in ipairs(font_paths) do
+ check_fonts(rep, tb)
+ end
+ write_lib(tb, library_file, "a")
+ library.default = load_library(library_file)
+end
+
+
+-- This is public.
+function new_library (lib)
+ local l = load_library(lib)
+ if l then
+ tab.insert(library, l)
+ end
+end
+
+--- *** END OF LIBRARY MANAGEMENT *** ---
+
+
+
+--- *** FONT CREATION *** ---
+
+
+-- Creates a new substitution for trep.
+local function add_sub (f, num, sub)
+ num, sub = f.map.map[num], f.map.map[sub]
+ if f.glyphs[num] and f.glyphs[sub] then
+ local x = f.glyphs[num]
+ tab.subtable(x, "lookups")
+ x.lookups.tex_trep = { { type = "substitution", specification = {variant = f.glyphs[sub].name} } }
+ end
+end
+
+-- Creates a new ligature for tlig.
+local function add_lig (f, lig, ...)
+ lig = f.map.map[lig]
+ if lig then
+ arg = {...}
+ local components
+ for _, c in ipairs(arg) do
+ c = f.map.map[c]
+ c = c and f.glyphs[c]
+ if c then
+ c = c.name
+ components = components and components .. " " .. c or c
+ else
+ components = nil
+ break
+ end
+ end
+ if components then
+ local x = f.glyphs[lig]
+ tab.subtable(x, "lookups")
+ tab.subtable(x.lookups, "tex_tlig")
+ tab.insert(x.lookups.tex_tlig, { type = "ligature",
+ specification = {char = x.name, components = components} })
+ end
+ end
+end
+
+-- Loops over all the constitutents of ligatures, creating intermediary
+-- ligatures if necessary. E.g. "f f i" is broken into:
+-- f + f = ff.lig
+-- ff.lig + i = ffi.lig
+-- Then when loading the font if the intermediary ligatures do not exist
+-- (e.g. "1/" in "1 / 4") a phantom character is added to the font; which might
+-- be dangerous (e.g. "1/" will create a node without character if no "4" follows).
+-- The ".lig" suffix is arbitrary but all glyphs marked as ligatures are also registered
+-- with such a name, so if there's an "f f" ligature in a font, no matter its name, "ff.lig"
+-- will point to it.
+local function ligature (comp, tb, phantoms)
+ local i = str.gsub(comp[1], "%.lig$", "") .. comp[2] .. ".lig"
+ phantoms[i] = true
+ tab.insert(tb.all_ligs, i)
+ tab.subtable(tb, comp[1])
+ tb[comp[1]][comp[2]] = { char = i, type = 0 } -- The type could be something else.
+ tab.remove(comp, 1)
+ tab.remove(comp, 1)
+ if #comp > 0 then
+ tab.insert(comp, 1, i)
+ ligature(comp, tb, phantoms)
+ end
+end
+
+local function get_lookups (t, lookup_table)
+ if t then
+ for _, tb in pairs(t) do
+ local _tb = { tags = {} }
+ if tb.features then
+ for _, feats in pairs(tb.features) do
+ local _tag = {}
+ if feats.scripts then
+ for _, scr in pairs(feats.scripts) do
+ _tag[scr.script] = {}
+ for _, lang in pairs(scr.langs) do
+ tab.insert (_tag[scr.script], str.trim(lang))
+ end
+ end
+ end
+ for _, sub in pairs(tb.subtables) do
+ tab.insert(_tb, sub.name)
+ end
+ _tb.tags[feats.tag] = _tag
+ end
+ end
+ if tb.name then
+ local tp = tb.type or "no_type"
+ tab.subtable(lookup_table, tp)
+ lookup_table[tp][tb.name] = _tb
+ end
+ end
+ end
+end
+
+function create_font (filename, extension, path, subfont, write)
+
+ local data = fl.open(filename, subfont)
+ fontfile = fl.to_table(data)
+ fl.close(data)
+
+ local lookups = {}
+
+ local name_touni = { }
+ local max_char = 0
+ for chr, gly in pairs(fontfile.map.map) do
+ max_char = chr > max_char and chr or max_char
+ -- Some glyphs have the same name in some fonts,
+ -- e.g. the several hyphens.
+ local name = fontfile.glyphs[gly].name
+ while name_touni[name] do
+ name = name .. "_"
+ end
+ name_touni[name] = chr
+ end
+
+ if fontfile.gsub then
+ tab.insert(fontfile.gsub,
+ { type = "gsub_single",
+ name = "tex_trep",
+ subtables = { {name = "tex_trep"} },
+ features = { { tag = "trep"} } })
+ tab.insert(fontfile.gsub,
+ { type = "gsub_ligature",
+ name = "tex_tlig",
+ subtables = { {name = "tex_tlig"} },
+ features = { { tag = "tlig"} } })
+ for _, tb in ipairs(fontfile.gsub) do
+ for __, ttb in ipairs(tb.subtables) do
+ if tb.type == "gsub_contextchain" then
+ lookups[tb.name] = lookups[tb.name] or { type = tb.type }
+ tab.insert(lookups[tb.name], ttb.name)
+ end
+ lookups[ttb.name] = { type = tb.type }
+ lookups["-" .. ttb.name] = { type = tb.type }
+ end
+ end
+ end
+
+ if fontfile.gpos then
+ for _, tb in ipairs(fontfile.gpos) do
+ for __, ttb in ipairs(tb.subtables) do
+ lookups[ttb.name] = { type = tb.type }
+ lookups["-" .. ttb.name] = { type = tb.type }
+ end
+ end
+ end
+
+ if fontfile.kerns then
+ for _, class in ipairs(fontfile.kerns) do
+ local max = 0
+ for a in pairs (class.seconds) do
+ max = max < a and a or max
+ end
+ if type(class.lookup) == "string" then
+ lookups[class.lookup] = { type = "gpos_pair", firsts = class.firsts, seconds = class.seconds, offsets = class.offsets, max = max}
+ else
+ for _, lk in ipairs(class.lookup) do
+ lookups[lk] = { type = "gpos_pair", firsts = class.firsts, seconds = class.seconds, offsets = class.offsets, max = max}
+ end
+ end
+ end
+ end
+
+ add_sub(fontfile, 96, 8216) -- ` to quoteleft
+ add_sub(fontfile, 39, 8217) -- ' to apostrophe (quoteright)
+
+ add_lig(fontfile, 8220, 8216, 8216) -- quoteleft + quoteleft to quotedblleft
+ add_lig(fontfile, 8221, 8217, 8217) -- quoteright + quoteright to quotedblright
+ add_lig(fontfile, 8211, 45, 45) -- -- to endash
+ add_lig(fontfile, 8212, 8211, 45) -- --- (i.e. endash + -) to emdash
+ add_lig(fontfile, 161, 63, 96) -- ?` to inverted question mark
+ add_lig(fontfile, 161, 63, 8216) -- The same, with `turned to quoteleft.
+ add_lig(fontfile, 191, 33, 96) -- !` to inverted exclamation mark
+ add_lig(fontfile, 191, 33, 8216) -- Idem.
+
+ local characters, phantom_ligatures = {}, {}
+ for chr, gly in pairs(fontfile.map.map) do
+ local glyph, char = fontfile.glyphs[gly], {}
+
+ char.index = gly
+ char.name = glyph.name
+ char.width = glyph.width
+ if glyph.boundingbox then
+ char.depth = -glyph.boundingbox[2]
+ char.height = glyph.boundingbox[4]
+ end
+ if glyph.italic_correction then
+ char.italic = glyph.italic_correction
+ elseif glyph.width and glyph.boundingbox then
+ char.italic = glyph.boundingbox[3] - glyph.width
+ end
+ tab.subtable(characters, chr)
+ characters[chr] = char
+
+ if glyph.lookups then
+ for lk, tb in pairs(glyph.lookups) do
+ local _lk = "-" .. lk
+ if lookups[lk] and lookups[_lk] then
+ for _, l in ipairs(tb) do
+ if l.type == "substitution" then
+
+ tab.subtable(lookups[lk], "pairs")
+ lookups[lk].pairs[glyph.name] = l.specification.variant
+
+ tab.subtable(lookups[_lk], "pairs")
+ lookups[_lk].pairs[l.specification.variant] = glyph.name
+
+ elseif l.type == "ligature" then
+
+ local comp, lig = str.explode(l.specification.components), l.specification.char
+ local lig = ""
+ for _, c in ipairs(comp) do
+ lig = lig .. c
+ end
+
+ tab.subtable(lookups, lk)
+ tab.subtable(lookups[lk], "ligs", {all_ligs = {}})
+ ligature(comp, lookups[lk].ligs, phantom_ligatures)
+ name_touni[lig .. ".lig"] = chr
+
+ end
+ end
+ end
+ end
+ end
+
+ if glyph.kerns then
+ for _, kern in pairs(glyph.kerns) do
+ local lks = type(kern.lookup) == "table" and kern.lookup or {kern.lookup}
+ for _, lk in ipairs(lks) do
+ tab.subtable(lookups[lk], "kerns")
+ tab.subtable(lookups[lk].kerns, glyph.name)
+ lookups[lk].kerns[glyph.name][kern.char] = kern.off
+ end
+ end
+ end
+
+ end
+
+ for lig in pairs(phantom_ligatures) do
+ if not name_touni[lig] then
+ max_char = max_char + 1
+ name_touni[lig] = max_char
+ characters[max_char] = {name = lig}
+ end
+ end
+
+ local lookup_table = {}
+ get_lookups(fontfile.gsub, lookup_table)
+ get_lookups(fontfile.gpos, lookup_table)
+ get_lookups(fontfile.lookups, lookup_table, true)
+
+ if fontfile.lookups then
+ for name, lk in pairs(fontfile.lookups) do
+ local tb, format = {}, lk.format
+ for _, rule in ipairs(lk.rules) do
+ local ttb = { lookups = rule.lookups }
+ for pos, seq in pairs(rule[format]) do
+ ttb[pos] = {}
+ for _, glyfs in ipairs(seq) do
+ glyfs = str.explode(glyfs)
+ glyfs = tab.tohash(glyfs)
+ tab.insert(ttb[pos], glyfs)
+ end
+ end
+ tab.insert(tb, ttb)
+ end
+ lookups[name] = tb
+ end
+ end
+
+ local loaded_font = {
+
+ direction = 0,
+ filename = filename,
+ format = extension,
+ fullname = fontfile.names[1].names.fullname,
+ name = fontfile.fontname,
+ psname = fontfile.fontname,
+ type = "real",
+ units_per_em = fontfile.units_per_em,
+
+ auto_expand = true,
+
+ cidinfo = fontfile.cidinfo,
+
+ -- Used only to adjust absoluteslant.
+ italicangle = -fontfile.italicangle,
+ name_to_unicode = name_touni,
+ max_char = max_char,
+ lookups = lookups,
+ lookup_table = lookup_table,
+ characters = characters
+ }
+
+ if write then
+ local f = io.open(path, "w")
+ f:write("return {")
+ tab.write(loaded_font, f, "\n")
+ f:write("}")
+ f:close()
+ end
+
+ return loaded_font
+
+end
+
+-- GETTING A FONT
+
+-- Finds a font file, and returns the original
+-- file and the Lua version.
+local name_luafile, get_features
+local function is_font (name, mods, size)
+
+ local lib, library_filename
+ for l, t in ipairs(library) do
+ if t[name] then
+ library_filename = t[name]
+ lib = t
+ break
+ end
+ end
+ if not library_filename then
+ library_filename = library.default[name]
+ lib = library.default
+ end
+
+ if library_filename then
+ if type(library_filename) == "string" then
+ library_filename = lib[library_filename]
+ end
+ tab.sort(mods)
+ local T = library_filename
+ for _, t in ipairs(mods) do
+ local found
+ for tag in pairs(T) do
+ if str.match(tag, "^" .. t) then
+ T = T[tag]
+ found = true
+ break
+ end
+ end
+ if not found then
+ T = nil
+ break
+ end
+ end
+
+ if T and T.__files then
+ local file, feats
+ local diff = 10000
+ for s, f in pairs(T.__files) do
+ if num.abs(s - size) < diff then
+ diff = num.abs(s - size)
+ file, feats = f[1], f[2]
+ end
+ end
+ file, _file = lfs.find_file(file, lfs.kpse(file)), file
+ if file then
+ file = str.gsub(file, "\\", "/")
+ else
+ return 1, _file
+ end
+ local features = {}
+ if feats then
+ get_features(feats, features)
+ end
+ local lua = name_luafile(file, features.font)
+ lua = lfs.isfile(lua) and lua
+ return file, lua, feats
+ end
+ end
+end
+
+-- Returns the full path to the Lua version of the font.
+-- "sub" is a font in ttc.
+function name_luafile (file, sub)
+ local lua
+ sub = sub and "_" .. sub or ""
+ sub = str.gsub(sub, " ", "_")
+ if str.match(file, "/") then
+ lua = str.match(file, ".*/(.-)%....$")
+ else
+ lua = str.match(file, "(.-)%....$")
+ end
+ lua = lua .. sub
+ return foundry_path .. "/" .. lua .. ".lua"
+end
+
+local function apply_size (font, size, letterspacing, parameters)
+ if (size < 0) then size = (- 655.36) * size end
+ local to_size = size / font.units_per_em
+ font.size = size
+ font.designsize = size
+ font.to_size = to_size
+ local italic = font.italicangle or 0
+ local space, stretch, shrink, extra
+ if parameters == "mono" then -- Creates a monospaced font with space equal to the
+ -- width of an "m" and no stretch or shrink.
+ space = font.characters[109].width * to_size
+ stretch, shrink, extra = 0, 0, 0
+ else
+ parameters = parameters and str.explode(parameters) or {}
+ space = (parameters[1] or 0.25) * size
+ stretch = (parameters[2] or 0.166666) * size
+ shrink = (parameters[3] or 0.111111) * size
+ extra = (parameters[4] or 0.111111) * size
+ end
+ font.parameters = {
+ slant = size * num.floor(num.tan(italic * num.pi/180)), -- \fontdimen 1
+ space = space, -- \fontdimen 2
+ space_stretch = stretch, -- \fontdimen 3
+ space_shrink = shrink, -- \fontdimen 4
+ x_height = size * 0.4, -- \fontdimen 5
+ quad = size, -- \fontdimen 6
+ extra_space = extra -- \fontdimen 7
+ }
+
+ letterspacing = letterspacing or 1
+ for c, t in pairs(font.characters) do
+ if t.width then
+ t.width, t.height, t.depth = t.width * to_size * letterspacing, t.height * to_size, t.depth * to_size
+ t.expansion_factor = 1000
+ if t.italic then
+ t.italic = t.italic * to_size
+ end
+ end
+ end
+
+ return font
+end
+
+
+local get_mods = lp.Ct((lp.space * lp.S"/" * lp.C(lp.alnum^1))^0)
+local get_feats = lp.Ct((lp.C((1 - lp.S",;")^1) * (lp.S",;" + -1))^1)
+function get_features (features, tb)
+ features = lp.match(get_feats, features) or {}
+ for _, f in ipairs(features) do
+ if str.match(f, "=") then
+ local key, val = str.match(f, "%s*(.-)%s*=%s*(.*)")
+ val = str.trim(val)
+ if val == "false" then
+ tb[key] = nil
+ else
+ tb[key] = val
+ end
+ else
+ f = str.trim(f)
+ neg, f = str.extract(f, "^%-")
+ if neg then
+ tb[f] = nil
+ else
+ _, f = str.extract(f, "^%+")
+ tb[f] = true
+ end
+ end
+ end
+end
+
+local lookup_functions = {}
+
+function lookup_functions.gsub_single (tb, f)
+ local name_touni = f.name_to_unicode
+ for a, b in pairs(tb.pairs) do
+ local _a, _b = name_touni[a], name_touni[b]
+ f.max_char = f.max_char + 1
+ f.characters[f.max_char] = f.characters[_a]
+ f.characters[_a] = f.characters[_b]
+ name_touni[a], name_touni[b] = f.max_char, _a
+ end
+ return f
+end
+
+function lookup_functions.gsub_ligature (tb, f)
+ local name_touni = f.name_to_unicode
+ tb.ligs.all_ligs = nil
+ for a, tb in pairs(tb.ligs) do
+ a = name_touni[a]
+ tab.subtable(f.characters[a], "ligatures")
+ for b, ttb in pairs(tb) do
+ b, c = name_touni[b], name_touni[ttb.char]
+ f.characters[a].ligatures[b] = {char = c, type = ttb.type}
+ end
+ end
+ return f
+end
+
+local function kern_pairs (tb, firsts, seconds, offset)
+ for _, c1 in ipairs(str.explode(firsts)) do
+ for __, c2 in ipairs(str.explode(seconds)) do
+ tab.subtable(tb, c1)
+ tb[c1][c2] = offset
+ end
+ end
+end
+
+local function kern_classes (firsts, seconds, offsets, max)
+ local kerns = {}
+ for f, F in pairs (firsts) do
+ for s, S in pairs (seconds) do
+ local off = offsets[(f-1) * max + s]
+ if off then
+ kern_pairs (kerns, F, S, off)
+ end
+ end
+ end
+ return kerns
+end
+
+local function apply_kerns (f, kerns, to_size)
+ local name_touni = f.name_to_unicode
+ to_size = to_size or 1
+ for c1, ttb in pairs(kerns) do
+ for c2, off in pairs(ttb) do
+ tab.subtable(f.characters[name_touni[c1]], "kerns")
+ f.characters[name_touni[c1]].kerns[name_touni[c2]] = off * to_size
+ end
+ end
+end
+
+function lookup_functions.gpos_pair (tb, f)
+ -- These are the big kern classes.
+ if tb.offsets then
+ local name_touni = f.name_to_unicode
+ for n, off in pairs(tb.offsets) do
+ tb.offsets[n] = off * f.to_size
+ end
+ local kerns = kern_classes(tb.firsts, tb.seconds, tb.offsets, tb.max)
+ apply_kerns(f, kerns)
+ end
+ -- These are the ones retrieved from individual glyphs.
+ if tb.kerns then
+ apply_kerns(f, tb.kerns, f.to_size)
+ end
+ return f
+end
+
+function lookup_functions.gsub_contextchain (tb, f)
+ local name_touni = f.name_to_unicode
+ local T = f.contextchain or {}
+ for _, llk in ipairs(tb) do
+ if fontfile.lookups then
+ local sub, Sub = fontfile.lookups[llk].rules[1].lookups
+ local chain = fontfile.lookups[llk].rules[1].coverage
+ local cur, current = str.explode(chain.current[1]), {}
+ local aft, after = chain.after and str.explode(chain.after[1]) or {}, {}
+ for _, c in ipairs(cur) do
+ c = name_touni[c]
+ if sub then
+ Sub = {}
+ for n, x in ipairs(sub) do
+ Sub[n] = name_touni[fontfile.glyphs[f.characters[c].index].lookups[x .. "_s"][1].specification.variant]
+ end
+ end
+ local t = { lookup = Sub}
+ tab.subtable(T, C)
+ for __, a in ipairs(aft) do
+ tab.subtable(t, "after")
+ t.after[name_touni[a]] = true
+ end
+ tab.insert(T[c], t)
+ end
+ end
+ end
+ f.contextchain = T
+ return f
+end
+
+local function _isactive (tb, ft, sc, lg)
+ for t in pairs(tb.tags) do
+ if ft[t] then
+ if t[sc] then
+ for _, lang in pairs(tb[sc]) do
+ if lang == lg then
+ return true
+ end
+ end
+ else
+ return true
+ end
+ end
+ end
+end
+
+
+local lookup_types = {
+ "gsub_single",
+ "gsub_ligature",
+ "gpos_pair"
+ }
+
+local function activate_lookups (font, features, script, lang)
+ for _, type in ipairs(lookup_types) do
+ if font.lookup_table and font.lookup_table[type] then
+ for l, tb in pairs(font.lookup_table[type]) do
+ if _isactive(tb, features, script, lang) then
+ for _, lk in ipairs(tb) do
+ local lt = font.lookups[lk]
+ if lt then
+ font = lookup_functions[type](lt, font)
+ end
+ end
+ end
+ end
+ end
+ end
+ return font
+end
+
+local function load_font (name, size, id, done)
+ local loaded_font = lfs.find_file(name, "tfm")
+ if loaded_font then
+ loaded_font = fl.read_tfm(loaded_font, size)
+ else
+ local original = str.trim(str.match(name, "[^:]*"))
+ local family, mods, feats
+ family, name = str.extract(name, "([^/:]*)")
+ family = str.trim(family)
+ mods, name = str.extract(name, "[^:]*")
+ mods = lp.match(get_mods, mods) or {}
+ feats = str.extract(name, ":(.*)") or ""
+ local features = tab.copy(settings.features)
+ get_features(feats, features)
+
+ local at_size
+ if features.size then
+ at_size = features.size
+ else
+ at_size = size
+ at_size = at_size > 0 and at_size or at_size * - 655.36
+ at_size = at_size / 65536
+ end
+ local source, lua, add_feats = is_font(family, mods, at_size)
+ if add_feats then get_features(add_feats, features) end
+
+ if type(source) == "string" then
+ local cache = features.cache or "yes"
+ if lua then
+ if cache == "no" or cache == "rewrite" then
+ loaded_font = create_font(source, lfs.type(source), lua, features.font, cache == "rewrite")
+ else
+ loaded_font = dofile(lua)
+ end
+ else
+ lua = name_luafile(source, features.font)
+ loaded_font = create_font(source, lfs.type(source), lua, features.font, cache ~= "no")
+ end
+ else
+ if not done then
+ if type(source) == "number" then
+ wri.error("The library says `%s' matches `%s', but I can't find that file anywhere. Clean up your library!", original, lua)
+ else
+ recheck_fonts()
+ return load_font(original, size, id, true)
+ end
+ else
+ wri.error("I can't find `%s'. I return a default font to avoid further errors.", original)
+ end
+ end
+
+ if loaded_font then
+
+ local expansion = features.expansion and str.explode(features.expansion) or {}
+ loaded_font.stretch = expansion[1] or 0
+ loaded_font.shrink = expansion[2] or 0
+ loaded_font.step = expansion[3] or 0
+
+ local extend = features.extend or 1
+ loaded_font.extend = extend * 1000
+ local slant
+ if features.absoluteslant then
+ local italic = loaded_font.italicangle or 0
+ slant = features.absoluteslant - italic
+ else
+ slant = features.slant or 0
+ end
+ loaded_font.slant = num.tan(num.rad(slant)) * 1000
+
+ loaded_font = apply_size(loaded_font, size, features.letterspacing, features.space)
+ loaded_font = activate_lookups(loaded_font, features, features.script, features.lang)
+
+ loaded_font.name = loaded_font.name .. id
+ loaded_font.fullname = loaded_font.fullname .. id
+ local embedding = features.embedding or "subset"
+ if embedding ~= "no" and embedding ~= "subset" and embedding ~= "full" then
+ wri.error("Invalid value `%s' for the `embedding' feature. Value should be `no', `subset' or `full'.", embedding)
+ embedding = "subset"
+ end
+ loaded_font.embedding = embedding
+ else
+ loaded_font = fl.read_tfm(lfs.find_file("cmr10", "tfm"), size)
+ end
+ end
+ return loaded_font
+end
+
+callback.register("define_font", load_font)
diff --git a/macros/plain/contrib/pitex/foundry-settings.lua b/macros/plain/contrib/pitex/foundry-settings.lua
new file mode 100644
index 0000000000..5c24caa937
--- /dev/null
+++ b/macros/plain/contrib/pitex/foundry-settings.lua
@@ -0,0 +1,19 @@
+return {
+
+ features = {
+ kern = true,
+ liga = true,
+ trep = true,
+ tlig = true,
+ script = "latn",
+ lang = "dflt",
+ --stretch = 30,
+ --shrink = 20,
+ --step = 10,
+ },
+
+ normal = {
+ "Normal", "Regular", "Book",
+ },
+
+}
diff --git a/macros/plain/contrib/pitex/i-pitex.lua b/macros/plain/contrib/pitex/i-pitex.lua
new file mode 100644
index 0000000000..4559a1901d
--- /dev/null
+++ b/macros/plain/contrib/pitex/i-pitex.lua
@@ -0,0 +1,163 @@
+local gsub, match, gmatch = string.gsub, string.match, string.gmatch
+local insert = table.insert
+local add_pattern = interpreter.add_pattern
+
+-- CLASS 1: things that prevent other things, thanks to protection.
+interpreter.default_class = 1
+
+-- "> foo ..." as the first line of a paragraph signals a description
+-- of foo.
+local function describe (buffer, num)
+ if num == 1 then
+ local line = buffer[num]
+ line = line .. " "
+ line = gsub(line, "^> ", "")
+ line = gsub(line, "{<(.-)>}", "\\hskip1pt\\hbox{\\barg{%1}}")
+ line = gsub(line, "^(.-)%s+", "\\describe{%1}{")
+ line = gsub(line, "%[<(.-)>%]", "\\hskip1pt\\hbox{\\oarg{%1}}")
+ line = gsub(line, "<(.-)>", "\\hskip1pt\\hbox{\\arg{%1}}")
+ line = gsub(line, "\\hfil", "", 1)
+ line = gsub(line, "%s*$", "}", 1)
+ buffer[num] = line
+ interpreter.protect(num)
+ else
+ return 2
+ end
+end
+add_pattern{pattern = "^[\\>]", call = describe}
+
+-- Verbatim material is marked by a 10-space indent.
+local function verbatim (buffer)
+ for n, l in ipairs(buffer) do
+ buffer[n] = gsub(l, "%s%s%s%s%s%s%s%s%s%s","", 1)
+ end
+ insert(buffer, 1, [[\verbatim]])
+ if gsub(buffer[#buffer],
+ interpreter.paragraph, "") == "" then
+ buffer[#buffer] = [[\verbatim/]]
+ else
+ insert(buffer, [[\verbatim/]])
+ end
+ interpreter.protect()
+end
+add_pattern{pattern = "^%s%s%s%s%s%s%s%s%s%s", call = verbatim}
+
+-- CLASS 2: protecting control sequences, so they're verbatim.
+interpreter.default_class = 2
+add_pattern {
+ pattern = "(\\[%a@]+)",
+ replace = '"%1"'}
+
+
+-- CLASS 3: things that precede other things.
+interpreter.default_class = 3
+
+-- Tables.
+local function table (buffer)
+ buffer[1] = "PROTECT\\tablePROTECT"
+ if buffer[#buffer] == "" then
+ buffer[#buffer-1] = "PROTECT\\table/PROTECT"
+ else
+ buffer[#buffer] = "PROTECT\\table/PROTECT"
+ end
+ local cells = 0
+ for i, l in ipairs(buffer) do
+ if match(l, "^%-%-%-") then
+ l = "%"
+ else
+ l = gsub(l, "^|", "")
+ l = gsub(l, "|%s*$", "PROTECT\\crPROTECT")
+ local c = 0
+ l = gsub(l, "|", function () c = c + 1 return "&" end)
+ cells = c > cells and c or cells
+ end
+ buffer[i] = l
+ end
+ for i, l in ipairs(buffer) do
+ if match(l, "\\cr") then
+ local c = 0
+ for tab in gmatch(l, "&") do
+ c = c + 1
+ end
+ for x = 1, cells - c do
+ buffer[i] = gsub(l, "\\cr", "\\span\\cr")
+ end
+ end
+ end
+end
+add_pattern{pattern = "^%-%-%-", call = table}
+
+-- Sections.
+local function make_header(buffer, num, _, pattern)
+ if num + 1 == #buffer then
+ local l = buffer[1]
+ l = gsub(l, "^%s*", "")
+ l = "\\" .. pattern.type .. "{" .. l
+ if match(l, ":([%S]+)%s*$") then
+ l = gsub(l, "%s*:([%a_]+)%s*$", "}PROTECT[%1]PROTECT")
+ else
+ l = l .. "}"
+ end
+ buffer[1] = l
+ buffer[num] = ""
+ end
+end
+add_pattern {pattern = "^%s*===", call = make_header, type = "section"}
+add_pattern {pattern = "^%s*~~~", call = make_header, type = "subsection"}
+add_pattern {pattern = "^%s%s%s*%-%-%s+(.-)%s+%-%-",
+ call = function (buffer, line, _, pattern)
+ buffer[line] = gsub(buffer[line], pattern.pattern, "\\paragraph{%1}")
+ buffer[line] = gsub(buffer[line], "%s*:(%S+)", "PROTECT[%1]PROTECT")
+ end}
+
+
+-- CLASS 4: things with no order of preference.
+interpreter.default_class = 4
+
+add_pattern {pattern = "%*(.-)%*", replace = "\\emph{%1}"}
+add_pattern {pattern = "%*%*(.-)%*%*", replace = "\\bold{%1}"}
+add_pattern {pattern = "%?([a-zA-Z]+)", replace = "\\attr{%1}"}
+add_pattern {pattern = "!([a-zA-Z]+)", replace = "\\param{%1}"}
+add_pattern {pattern = "=([a-zA-Z]+)", replace = "\\value{%1}"}
+add_pattern {pattern = "|(.-)|", replace = "\\gateaction{%1}"}
+add_pattern {pattern = "<(.-)>", replace = "\\arg{%1}"}
+add_pattern {pattern = "{<(.-)>}", replace = "\\barg{%1}", offset = 7}
+add_pattern {pattern = "%[<(.-)>%]", replace = "\\oarg{%1}", offset = 7}
+add_pattern {pattern = "TeX", replace = "\\TeX{}", offset = 2}
+
+add_pattern {pattern = "(texapi)(.?)", offset = 7,
+ replace = function (a, b)
+ a = "\\emph{texapi}"
+ if b == "'" then
+ a = a .. "\\kern.2em'"
+ else
+ a = a .. b
+ end
+ return a
+ end}
+
+-- Links.
+add_pattern {pattern = "%s*%[see%s+([%a_]+)%]",
+ call = function (buffer, line, index, pattern)
+ local l = buffer[line]
+ local pre, post = l:sub(1, index-1), l:sub(index)
+ local text
+ if pre:match("{.-}$") then
+ pre, text = match(pre, "(.*){(.-)}$")
+ else
+ pre, text = match(pre, "(.-)(%a+)$")
+ end
+ post = gsub(post, pattern.pattern, "\\jumplink{PROTECT%1PROTECT}{" .. text .. "}", 1)
+ buffer[line] = pre .. post
+ end}
+add_pattern {pattern = ":([%a_]+)", replace = "\\anchor{PROTECT%1PROTECT}"}
+
+
+-- CLASS 0: the broom wagon
+interpreter.default_class = 0
+
+interpreter.protector('"')
+add_pattern {pattern = '"(.-)"', replace = "\\verb`%1`", class = 0}
+
+interpreter.protector("PROTECT")
+add_pattern {pattern = "PROTECT(.-)PROTECT", replace = "%1", class = 0}
diff --git a/macros/plain/contrib/pitex/inserts.ptx b/macros/plain/contrib/pitex/inserts.ptx
new file mode 100644
index 0000000000..70155f5d7e
--- /dev/null
+++ b/macros/plain/contrib/pitex/inserts.ptx
@@ -0,0 +1,113 @@
+% This is a mess.
+\newinsert\ptx@insert_footnotes
+\dimen\ptx@insert_footnotes20\baselineskip
+\skip\ptx@insert_footnotes12pt
+\count\ptx@insert_footnotes1000
+
+\newcount\ptx@footnote_count
+\newbox\ptx@footnote_box
+\newif\iffootnote
+
+\def\footnote{%
+ \global\advance\ptx@footnote_count1
+ \maintextfalse \footnotetrue
+ \ifnext[
+ {\ptx@label_withand{\the\ptx@footnote_count}\ptx@footnote}
+ {\ptx@footnote}%
+ }
+\long\def\ptx@footnote#1{%
+ {\verysmall
+ \unskip\kern.1em
+ \raise.53em\hbox{\the\ptx@footnote_count}%
+ \global\setbox\ptx@footnote_box\hbox{\the\ptx@footnote_count}%
+ }%
+ \insert\ptx@insert_footnotes\bgroup
+ \verysmall
+ \baselineskip12pt
+ \leftskip=0pt \rightskip=\leftskip
+ \floatingpenalty20000
+ \noindent\vrule width0pt depth0pt height9pt
+ \hbox to 0pt{\hss\the\ptx@footnote_count\hskip.5em\hfill}#1%
+ \egroup
+ \futurelet\temp\getpunc
+ }
+
+\def\getpunc{%
+ \bgroup
+ \ifx\temp\virgule
+ \kern-.4\wd\ptx@footnote_box,%
+ \egroup
+ \expandafter\gobble
+ \else
+ \ifx\temp\point
+ \kern-.4\wd\ptx@footnote_box.%
+ \egroup
+ \expandafter\expandafter\expandafter\gobble
+ \else
+ \egroup
+ \fi
+ \fi
+ \maintexttrue \footnotefalse
+ }
+
+
+\newinsert\ptx@insert_figures
+\dimen\ptx@insert_figures\vsize
+\count\ptx@insert_figures1000
+\newcount\ptx@figure_count
+\newcount\ptx@table_count
+\newbox\ptx@figure_captionbox
+\newif\iffigure
+
+\newblock*\figure
+ {\ifnextnospace*
+ {\def\ptx@figure_type{table}\def\ptx@figure_word{Table}\gobbleoneand\ptx@figure_do}
+ {\def\ptx@figure_type{figure}\def\ptx@figure_word{Fig.}\ptx@figure_do}}
+ {\egroup
+ \insert\ptx@insert_figures{%
+ \penalty0
+ \floatingpenalty0
+ \vbox to \ptx@figure_measure{0}{\ht\ptx@box_temp+\dp\ptx@box_temp+\ht\ptx@figure_captionbox}{2\baselineskip}{%
+ \box\ptx@box_temp
+ \vfill
+ \vskip\baselineskip
+ \box\ptx@figure_captionbox
+ \vskip\baselineskip}}}
+\def\ptx@figure_do{%
+ \maintextfalse
+ \figuretrue
+ \global\advance\usecs{ptx@\ptx@figure_type _count}1
+ \def\ptx@label{\usevalue chapter:internalcount .\the\usecs{ptx@\ptx@figure_type _count}}%
+ \ifnextnospace[
+ {\ptx@figure_getcaption}
+ {\ptx@figure_getcaption[]}}
+
+\def\ptx@figure_getcaption[#1]{%
+ \setbox\ptx@figure_captionbox\vbox{%
+ \leftskip3em \rightskip\leftskip \parindent0pt
+ \ifdefined\figurefont
+ \figurefont
+ \else
+ \verysmall
+ \fi
+ \baselineskip16pt
+ \leavevmode
+ \llap{\bf \ptx@figure_word~\usevalueand chapter:internalcount {.}{}\the\usecs{ptx@\ptx@figure_type _count}\hskip.5em}#1}%
+ \setbox\ptx@box_temp=\vbox\bgroup
+ \leftskip0pt plus1fill \rightskip\leftskip \parindent0pt
+ }
+
+\newwhile\ptx@figure_measure3{#1+1}{#2}{#3}{%
+ \reverse\straighteniff{ifdim}
+ {\dimexpr\baselineskip*\numexpr(#1)<\dimexpr(#2)\relax}
+ {\breakwhile{\dimexpr(\numexpr(#1)\baselineskip\reverse\iffemptystring{#3}{+#3})\relax}}
+ }
+
+\newblock\infigure
+ {\par \setbox\ptx@box_temp=\hbox\bgroup
+ \leftskip0pt plus1fill \rightskip\leftskip \parindent0pt }
+ {\egroup
+ \kern-\prevdepth \nointerlineskip
+ \vbox to \ptx@figure_measure{0}{\ht\ptx@box_temp+\dp\ptx@box_temp}{}
+ {\vfil\box\ptx@box_temp\vfil}%
+ }
diff --git a/macros/plain/contrib/pitex/lua.ptx b/macros/plain/contrib/pitex/lua.ptx
new file mode 100644
index 0000000000..b41c5af338
--- /dev/null
+++ b/macros/plain/contrib/pitex/lua.ptx
@@ -0,0 +1,26 @@
+\def\inputluafile#1 {\directlua{dofile(kpse.find_file("#1"))}}
+
+\inputluafile base.ptxlua
+
+\def\ptx@lua{\directlua name {Internal PiTeX chunk}}
+
+\newcatcodetable\luacatcodes{\#\%\^^M\~=12}
+\newtoks\ptx@luacode_list
+\newif\ifptx@luacode_store
+% Mimicks a block (\newblock isn't defined yet
+% and anyway it wouldn't be very useful).
+\def\luacode{%
+ \begingroup
+ \catcodetable\luacatcodes
+ \ifnext[
+ {\ptx@luacode_store}
+ {\ptx@luacode_store[]}}
+\bgroup
+\setcatcodes{\^^M=12}%
+\long\gdef\ptx@luacode_store[#1]^^M#2\luacode/{% So line count is right.
+ \endgroup%
+ \ifemptystring{#1}%
+ {\ptx@lua{#2}}%
+ {\def#1{#2}}%
+ }%
+\egroup
diff --git a/macros/plain/contrib/pitex/output.ptx b/macros/plain/contrib/pitex/output.ptx
new file mode 100644
index 0000000000..20a0dc677f
--- /dev/null
+++ b/macros/plain/contrib/pitex/output.ptx
@@ -0,0 +1,311 @@
+\defactiveparameter page {%
+ \settovalue\pdfpagewidth #1 : width
+ \settovalue\pdfpageheight #1 : height
+ \settovalue\baselineskip #1 : baselineskip
+ \settovalueor\topskip #1 : topskip {\topskip=\baselineskip}%
+ \settovalue\pdfhorigin #1 : left
+ \ifattribute #1 : right
+ {\hsize = \dimexpr(\pdfpagewidth-\pdfhorigin-\usevalue #1 : right )\relax}
+ {\settovalue\hsize #1 : hsize }%
+ \settovalue\pdfvorigin #1 : top
+ \settovalue\parindent #1 : parindent
+ \settovalue\parskip #1 : parskip
+ \ifattribute #1 : lines {\vsize=\usevalue #1 : lines \baselineskip}{}%
+ }
+
+\restrictparameter page :
+ width
+ height
+ hsize
+ baselineskip
+ topskip
+ left
+ right
+ top
+ lines
+ parindent
+ parskip
+\par
+
+% Defaults... they don't produce anything beautiful.
+% I redefine them on every job.
+\setparameter page:
+ height = 28cm
+ width = 21cm
+ hsize = 15cm
+ baselineskip = 12pt
+ lines = 42
+ left = 1in
+ top = 1in
+ parskip = 0pt
+
+\widowpenalty151
+\clubpenalty0
+\holdinginserts1
+\newdimen\outputsize
+\newif\ifheader
+
+\gates new \OutputRoutine {OutputRoutine}%
+
+\OutputRoutine list {output}
+ [precheck]
+ {%
+ \global\holdinginserts0
+ \OutputRoutine skip {precheck, shipout}{output}%
+ \ifnum\outputpenalty<\widowpenalty
+ \global\outputsize=\vsize
+ \else
+ \ifnum\outputpenalty=10000
+ \global\outputsize=\vsize
+ \else
+ \ifdim\pagegoal<\vsize
+ \global\advance\vsize-\baselineskip
+ \global\outputsize=\dimexpr\vsize+\baselineskip\relax
+ \else
+ \global\advance\vsize\baselineskip
+ \global\outputsize=\dimexpr\vsize-\baselineskip\relax
+ \fi
+ \fi
+ \fi
+ \unvbox\outputbox
+ \ifnum\outputpenalty=10000
+ \penalty0
+ \else
+ \penalty\outputpenalty
+ \fi}
+%
+ (shipout)
+ . (inserts)
+ . . [inserts_figures] ?{conditional = \unless\ifvoid\ptx@insert_figures} {%
+ \setbox\outputbox=\vbox to \outputsize{%
+ \box\ptx@insert_figures
+ \unvbox\outputbox}}
+ . . [inserts_footnotes] ?{conditional = \unless\ifvoid\ptx@insert_footnotes} {%
+ \setbox\outputbox=\vbox to \outputsize{%
+ \unvbox\outputbox
+ \vfil
+ \vskip.5\skip\ptx@insert_footnotes
+ \vbox to0pt{\vss\hrule width .3\hsize}%
+ \vskip.5\skip\ptx@insert_footnotes
+ \unvbox\ptx@insert_footnotes}}
+ %
+ . [headers] {%
+ \setbox\outputbox=\vbox{%
+ \kern-3\baselineskip
+ \vbox to3\baselineskip{%
+ \hbox to\hsize{\strut\baselineskip {0pt}%
+ \normalsize\rm\sc
+ \ifodd\pageno
+ \hfill\usevalue chapter : inner_title \rlap{\kern1em \the\pageno}\kern-3em
+ \else
+ \kern-3em\llap{\the\pageno\kern1em }\usevalue chapter : inner_title \hfill
+ \fi}
+ \vfill}
+ \nointerlineskip
+ \box\outputbox}}
+ %
+ . [ship] {%
+ \settovalue\pdfhorigin page : left
+ \shipout\box\outputbox}
+ %
+ . [postship] {%
+ \global\holdinginserts1
+ \global\vsize\outputsize
+ \global\advance\count0 1
+ \ifnum\insertpenalties>0
+ \ifnum\outputpenalty=\clearpagepenalty
+ \hbox{}\vfil\penalty\outputpenalty
+ \fi
+ \fi}
+
+
+\output{%
+ \OutputRoutine execute {output}%
+ }
+
+
+
+% MARGIN NOTES
+\setparameter marginnote :
+ hsize = 3cm
+ hpos = fr
+ font = \it
+ parindent = 0pt
+ side = right
+ gap = 1em
+
+\newcount\notecount
+\newattribute\ptx@marginnote_attribute
+\def\marginnote{%
+ \ifnext[
+ {\ptx@marginnote}
+ {\ptx@marginnote[]}%
+ }
+
+\long\def\ptx@marginnote[#1]#2{%
+ \setparameterlist{marginnote@temp}{meta = marginnote, #1}%
+ \global\advance\notecount 1
+ \global\expandafter\newbox\csname marginnote_\the\notecount\endcsname
+ \global\expandafter\setbox\csname marginnote_\the\notecount\endcsname=
+ \vtop{%
+ \settovalue\hsize marginnote@temp : hsize
+ \settovalue{\advance\hsize} marginnote@temp : gap
+ \leftskip=0pt \rightskip=0pt plus 1 fil \parfillskip=0pt\relax
+ \ifcasevalue marginnote@temp : hpos
+ \val ff \rightskip=0pt \parfillskip=0pt plus 1 fil
+ \val rf \leftskip=0pt plus 1 fil \rightskip=1pt
+ \val rr \leftskip=0pt plus 1 fil
+ \endval
+ \ifvalue marginnote@temp : side = left
+ {\settovalue{\advance\rightskip} marginnote@temp : gap }
+ {\settovalue{\advance\leftskip} marginnote@temp : gap }%
+ \settovalue\baselineskip marginnote@temp : baselineskip
+ \settovalue\parindent marginnote@temp : parindent
+ \usevalue marginnote@temp : font
+ #2}%
+ \quitvmode % Must be outside the attribute's scope, otherwise the
+ % paragraphs DIR whatsit might get in the way.
+ \bgroup
+ \ifvalue marginnote@temp : side = left
+ {\ptx@marginnote_attribute=-\expandafter\the\csname marginnote_\the\notecount\endcsname}
+ {\ptx@marginnote_attribute=\expandafter\the\csname marginnote_\the\notecount\endcsname}\relax
+ \pdfliteral{}%
+ \egroup
+ \deleteparameter marginnote@temp:%
+ }
+
+\luacode
+local WHAT, HLIST, KERN = node.id("whatsit"), node.id("hlist"), node.id("kern")
+local GLUE, SPEC = node.id("glue"), node.id("glue_spec")
+local marginnote_table = {}
+function pitex.misc.mark_lines (head)
+ for line in node.traverse_id(HLIST, head) do
+ local t = {left = {}, right = {}}
+ local item = line.head
+ while item do
+ local next = item.next
+ if item.id == WHAT then
+ local attr = node.has_attribute(item, \attributenumber\ptx@marginnote_attribute)
+ if attr then
+ if attr < 0 then
+ table.insert(t.left, -attr)
+ else
+ table.insert(t.right, attr)
+ end
+ line.head = node.remove(line.head, item)
+ end
+ end
+ item = next
+ end
+ if #t.left > 0 or #t.right > 0 then
+ table.insert(marginnote_table, t)
+ node.set_attribute(line, \attributenumber\ptx@marginnote_attribute, #marginnote_table)
+ end
+ end
+ return head
+end
+
+pitex.callback.register("post_linebreak_filter", "pitex.misc:mark_lines")
+
+local lheight, rheight = 0, 0
+local function update_height (h)
+ lheight = lheight + h
+ rheight = rheight + h
+end
+
+local function first_dim (n, t)
+ while n do
+ if node.has_field(n, "kern") then
+ return n.kern
+ elseif node.has_field(n, "spec") then
+ return n.spec.width
+ elseif node.has_field(n, "height") then
+ return t == "height" and n.height or n.depth
+ else
+ n = t == "height" and n.next or n.prev
+ end
+ end
+ return 0
+end
+
+function process_marginalia (head)
+ lheight, rheight = 0, 0
+ local item, first = node.slide(head), true
+ while item do
+ if node.has_field(item, "kern") then
+ if not first then
+ update_height(item.kern)
+ end
+ elseif node.has_field(item, "spec") then
+ if not first then
+ update_height(item.spec.width)
+ end
+ elseif node.has_field(item, "height") then
+ if first then
+ first = false
+ else
+ update_height(item.depth)
+ end
+ local attr = node.has_attribute(item, \attributenumber\ptx@marginnote_attribute)
+ if attr then
+ for side, notes in pairs (marginnote_table[attr]) do
+ if #notes > 0 then
+ local note
+ for _, n in ipairs(notes) do
+ if note then
+ local n, g, s = tex.box[n], node.new(GLUE), node.new(SPEC)
+ local d = first_dim(node.tail(note.head), "depth")
+ local h = first_dim(n.head, "height")
+ s.width = tex.baselineskip.width - (d + h)
+ g.spec = s
+ note.depth = note.depth + s.width + n.height + n.depth
+ node.insert_after(note.head, node.tail(note.head), g)
+ g.next, n.head.prev = n.head, g
+ else
+ note = tex.box[n]
+ end
+ end
+ first = true
+ local upward = note.depth - first_dim(node.tail(note.head), "depth")
+ local remainingheight = side == "left" and lheight or rheight
+ if upward > remainingheight then
+ upward = remainingheight - upward
+ else
+ upward = 0
+ end
+ local kern = node.new(KERN, 1)
+ kern.kern = upward - note.height - item.depth
+ node.insert_before(note.list, note.list, kern)
+ note.list = kern
+ if side == "left" then
+ note.shift = -note.width
+ lheight = upward
+ else
+ note.shift = item.width
+ rheight = upward
+ end
+ note.height, note.depth = 0, 0
+ node.insert_after(head, item, note)
+ else
+ if side == "left" then
+ lheight = lheight + item.height
+ else
+ rheight = rheight + item.height
+ end
+ end
+ end
+ else
+ update_height(item.height)
+ end
+ end
+ item = item.prev
+ end
+end
+\luacode/
+
+\OutputRoutine def {processmarginalia}{%
+ \ptx@lua{process_marginalia(tex.box[255].list)}%
+ }
+
+\OutputRoutine add {processmarginalia}[first]{shipout}
+
diff --git a/macros/plain/contrib/pitex/pitex-doc.pdf b/macros/plain/contrib/pitex/pitex-doc.pdf
new file mode 100644
index 0000000000..dbcbfa7e96
--- /dev/null
+++ b/macros/plain/contrib/pitex/pitex-doc.pdf
Binary files differ
diff --git a/macros/plain/contrib/pitex/pitex-doc.tex b/macros/plain/contrib/pitex/pitex-doc.tex
new file mode 100644
index 0000000000..63c6281717
--- /dev/null
+++ b/macros/plain/contrib/pitex/pitex-doc.tex
@@ -0,0 +1,106 @@
+\input pitex
+
+\setparameter document :
+ author = "Paul Isambert"
+ title = "The PiTeX documentation"
+ date = "November 2011"
+ layout = onecolumn
+ mode = bookmarks
+
+\setparameter page:
+ height = 24cm
+ left = 4cm
+ hsize = 32pc
+
+\setfont\mainfont :
+ name = "Chaparral Pro"
+ size = 10pt
+ bold = Semi
+ big = 50pt
+
+\setfont\codefont :
+ name = "Lucida Console"
+ size = 8pt
+ slant = .15
+ features = "space = mono"
+ bold italic = none
+
+\setparameter marginnote:
+ baselineskip = 9pt
+ font = "\small\it"
+
+\setparameter section:
+ font = \sc
+
+
+\OutputRoutine remove {headers, inserts}{shipout}
+
+\newblock\table
+ {\ifdim\lastskip=\baselineskip
+ \needspace{2\baselineskip}%
+ \else
+ \needspace{3\baselineskip}%
+ \vskip\baselineskip
+ \fi
+ \halign\bgroup##\unskip\hfil&&\kern1em##\unskip\hfil\cr}
+ {\egroup
+ % This is a horrible hack to circumvent a bug in LuaTeX (\prevdepth not
+ % updated after \halign) (rev 4277).
+ \directlua{%
+ local n = tex.lists.page_head
+ while n.next do
+ n = n.next
+ end
+ tex.nest[tex.nest.ptr].prevdepth = n.depth}%
+ \vskip\baselineskip
+ }%
+
+
+\def\describe#1#2{%
+ \needspace{2\baselineskip}%
+ \bgroup\codefont
+ \noindent\color{.8 0 0}{\llap{\string#1\kern.3em}%
+ #2\par\egroup}\removenextindent
+ \ignorespaces}
+
+\def\comarg{\arg{command}\antigobblespace}
+\def\textarg{\arg{text}}
+
+\def\filesection#1{\section{File: \tcode{#1}}}
+\pdfdef\verb`#1`{#1}
+
+\def\attr#1{{\codefont\color{0 .5 0}{#1}}}
+\def\param#1{{\codefont\color{.8 0 0}{#1}}}
+\def\value#1{{\codefont\color{.3 .3 .6}{#1}}}
+
+\def\texapi{\emph{texapi}}
+\def\navigator{\emph{Navigator}}
+\def\tex{\TeX\antigobblespace}
+
+%%% Redefining \TeX to look better with Chaparral.
+\def\TeX{%
+ T\kern-.13em
+ \lower.5ex \hbox {E}%
+ \kern-.03em X%
+ }
+
+
+
+
+
+\vbox to 50pt{%
+ \vfil
+ \hbox{%
+ \hbox{\big\sc Pi\kern-.08em\TeX}%
+ \kern1cm
+ \vbox{%
+ \hbox{Paul Isambert}%
+ \hbox{\codefont zappathustra@free.fr}%
+ \hbox{November 2011}}}%
+ \vfil
+ }
+
+\input interpreter
+\interpretfile{pitex}{pitex-doc.txt}
+
+\bye
diff --git a/macros/plain/contrib/pitex/pitex-doc.txt b/macros/plain/contrib/pitex/pitex-doc.txt
new file mode 100644
index 0000000000..168e7e7b18
--- /dev/null
+++ b/macros/plain/contrib/pitex/pitex-doc.txt
@@ -0,0 +1,1057 @@
+Introduction
+============
+
+If you're reading this, either you saw "\input pitex" at the beginning
+of the documentation of one of my packages, or you spend desperate hours
+browsing CTAN, or you're Arnaud Schmittbuhl. In any case, you're welcome
+to use the PiTeX macros, provided that you don't forget that: nothing
+is guaranteed; changes might occur without warning nor retrocompatibility;
+the documentation isn't necessarily up-to-date; and, if you still want
+to, you must load PiTeX with "\input pitex" on top of plain TeX, using
+LuaTeX.
+
+What is PiTeX? Originally, it was a set of files I loaded with plain TeX
+to typeset documentation for my packages. But it's not just a few macros
+anymore, but rather a format in progress. The format might never see the
+public light, but if it does, its originality (compared to existing
+format) will be an organization based on the Gates package: everything
+will be highly customizable, not because there are tons of options
+(although that can be the case too), but because big operations are
+divided into gates, i.e. macros with a handle that you can control without
+having to rewrite (nor understand) the big operation you're modifying;
+which big operation also keeps its integrity, because removing or adding
+something is neatly done. It also means that PiTeX can be changed
+piecewise, and made into something that bears little resemblance to the
+original code. In other words, there is nothing private, nothing forbidden.
+For the moment, only sectionning commands and the output routine, plus
+callback management in Lua and \everypar, are written with gates. See
+the Gates documentation for further information.
+
+Another thing with PiTeX is that it will rely heavily on external packages.
+There will be as little PiTeX-only code as possible. Rather, in line
+with Gates, each area will be independant code able to work with other
+formats. That is no simple task, though, and far from complete. For
+instance, the user's interface is made with YaX, which can be used (and
+is used) elsewhere.
+
+PiTeX uses three types of files: mandatory external packages, i.e.
+independant code that PiTeX can't do without, optional external packages,
+i.e. independant code that can be used, but is not automatically loaded,
+and mandatory PiTeX-only files. All mandatory files aren't necessary to
+the same degree, though, and in the future switches might be available
+to load only some of them. Currently, the files are:
+
+------------------------------------------------------------------
+| **Mandatory external packages** |
+------------------------------------------------------------------
+| texapi | Macros to write independant code. |
+| YaX | User's interface (and convenient programming tool) |
+| | with "key = value" style). |
+| Gates | Overall architecture for modular code. |
+| Navigator | PDF features (links, bookmarks...) |
+| | Currently used by sections, but might become |
+| | non-mandatory (although strongly recommended). |
+------------------------------------------------------------------
+
+---------------------------------------------------------------------------
+| **Mandatory PiTeX files** |
+---------------------------------------------------------------------------
+| pitex.tex | The main file that inputs the other, |
+| | and contains a few macros. |
+| lua.ptx | Lua-related macros. |
+| base.ptxlua | Lua functions, input in the previous file. |
+| files.ptx | Dealing with files. |
+| fonts.ptx | Interface for fonts; relies on the next file. |
+| fonts.ptxlua | The Lua fontloader; should become independant |
+| | some day. |
+| foundry-settings.lua | Default settings for the fontloader. |
+| sections.ptx | Sectionning commands. |
+| blocks.ptx | Blocks (delimited text with special formatting). |
+| references.ptx | Labels and references. |
+| verbatim.ptx | Typesetting verbatim material. |
+| inserts.ptx | Footnotes and figures. |
+| output.ptx | Page layout and output routine. |
+---------------------------------------------------------------------------
+
+The following can be used with PiTeX; actually I only list the packages
+I've written, but anything working with plain TeX (e.g. TikZ) works with
+PiTeX.
+
+----------------------------------------------------------------------------
+| **Optional external packages** |
+----------------------------------------------------------------------------
+| Librarian | To create bibliographies without BibTeX. |
+| Lecturer | For screen presentations. |
+| Interpreter | To write text with non-TeX markup (as this documentation); |
+| | Interpreter does the conversion on the fly. |
+----------------------------------------------------------------------------
+
+The PiTeX distribution also contains "i-pitex.lua", an interpretation
+file for Interpreter used to typeset documentations, like the one you
+are currently reading. Which is why you can read it quite comfortably
+as a plain text file in a text editor (see "pitex-doc.txt").
+
+The rest of this document is a terse description of existing commands,
+parameters, and of course, gates.
+
+
+
+
+
+Fonts (fonts.ptx and fonts.ptxlua)
+==================================
+
+The fontloader uses gates, but only superficially. They won't be
+documented here.
+
+\setfont <command>:<attributes>
+Sets <command> to call the font described in <attributes>; all defaults
+to the values of the !metafont parameter. If <command> is \mainfont, the
+font is called at once. Also, \codefont is used in some places (e.g.
+verbatim).
+
+> name
+The family name of the font; e.g. Chaparral Pro for the main text of
+this document.
+
+> size (dimension)
+The size of the font.
+
+> small (dimension)
+The size of the font when \small is called. Can be a relative value by
+prefixing it with "-" or "+", in which case it is set relative to ?size.
+
+> verysmall (dimension)
+The size (possibly relative) for \verysmall.
+
+> big (dimension)
+The size (possibly relative) for \big.
+
+> verybig (dimension)
+The size (possibly relative) for \verybig.
+
+> bold (font modifier)
+The modifier used for the bold version of the font, without the leading slash;
+!metafont sets it to "Bold".
+
+> italic (font modifier)
+Same as !bold for the italic version; set to "Italic" by !metafont.
+
+> math (true or false)
+If true, math fonts will be created.
+
+> features
+Well, err, font features...
+
+> slant (angle)
+The slant applied to the font to create a fake italic.
+
+> slantsc (angle)
+The slant applied to the font to create fake italic smallcaps; if not
+given, defaults to ?slant.
+
+There's actually much more going under the hood, but "font.ptxlua" (the
+font loader itself) is a work in progress, and undocumented.
+
+The same macros as in plain TeX can be used, except they're cumulative,
+i.e. "\it\bf" switches to a bold italic.
+
+\it
+Switches to italics.
+
+\rm
+Switches to roman.
+
+\bf
+Switches to bold.
+
+\rg
+Switches to regular weight.
+
+\sc
+Switches to small capitals.
+
+\lc
+Switches to lower case (i.e. not small caps).
+
+\ital <text>
+Typesets <text> in italics.
+
+\bold <text>
+Typesets <text> in bold.
+
+\scap <text>
+Typesets <text> in small caps.
+
+\rom <text>
+Typesets <text> in roman.
+
+\emph <text>
+Typesets <text> in italics or roman, depending on whether the current
+font is roman or italics, respectively.
+
+\underline <text>
+Underlines <text>. Wow.
+
+\small
+Switches to small font.
+
+\verysmall
+Switches to very small font.
+
+\big
+Switches to big font.
+
+\verybig
+Got it?
+
+\normalsize
+Switches to default size.
+
+\smaller
+Switches to the font smaller than the current one (e.g. \normalsize if
+you're currently using \big).
+
+\bigger
+Same as \smaller, the other way around.
+
+\color <color><text>
+Typesets <text> with <color>, which should be a triplet "R G B" with
+each value between 0 and 1.
+
+
+
+
+
+Sections (sections.ptx)
+=======================
+
+Sections are among the victims of my fanaticism for grid-typesetting.
+
+
+
+ Main sectioning commands
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+
+\declaresection <type><level>
+Creates a new section type with <level>. This is not necessary to make
+\sectioncommand work with <type>, but with it all declared sections of
+level larger than <level> are reset (i.e. their counters are set to 0).
+Sections with <type> chapter, section, subsection and paragraph are
+already declared.
+
+\incrementsection <type>
+Increments the counter of section <type>. If <type> hasn't been declared,
+a new <type> is created, but without a level.
+
+\getsectioncounter <type>
+Returns the value of section <type>'s counter, or -1 if there is no
+section of that type.
+
+\sectioncommand <type><title><alternate title>[<label>]
+Creates a section heading of type <type> with <title>. See the details
+of the gates involved below. The <type> refers to the parameter of the
+same name. The <alternate title> is very likely to disappear.
+
+\chapter <title>[<label>]
+Equivalent to \sectioncommand{chapter}{<title>}{<title>}[<label>].
+
+\section <title>[<label>]
+Equivalent to \sectioncommand{section}{<title>}{<title>}[<label>].
+
+\subsection <title>[<label>]
+Equivalent to \sectioncommand{subsection}{<title>}{<title>}[<label>].
+
+\paragraph <title>[<label>]
+Equivalent to \sectioncommand{paragraph}{<title>}{<title>}[<label>].
+
+\ifsectiontitle
+A conditional that is true when the section title is being typeset (sets by
+the section_pre gate below.
+
+\sectioninfile <optional star><title><space><type><space><file><space>
+Creates a section with the contents of a file, unless there's an optional
+star (useful to typeset only parts of a big document); <title> is a
+\freedef argument, hence it can be given between braces, double quotes
+or slashes (but the <space> is nonetheless mandatory); <type> is a section
+type, and <file> is a file to be input: it shouldn't have an extension
+(tex files are searched), but it can be a path with "/" as a separator.
+A \label is also created, with the tail of <file> as its argument. In
+other words, the following:
+
+ \sectioninfile "A chapter" chapter mydir/myfile
+
+is equivalent to:
+
+ \chapter{A chapter}
+ \label{myfile}
+ \input mydir/myfile.tex
+
+The \sectioncommand macro only contains a list gate, "section", itself
+containing the gates typesetting a section heading; all the gates belong
+to the "Section" family associated with the \Section command. Here are
+all the gates involved; the first number between parentheses indicates
+how many arguments the gate should receive, the second how many it
+returns.
+
+-------------------------------------------------------------------------------
+| section | (4, 0) | section_break | (1, 0) | section_vmode | (1, 0) |
+| | | | | section_clearpage | (1, 0) |
+| | | | | section_beforeskip | (1, 0) |
+| | | section_advance | (1, 0) | | |
+| | | section_advance | (1, 0) | | |
+| | | section_bookmark | (4, 0) | | |
+| | | section_toc | (3, 0) | | |
+| | | section_pre | (0, 0) | | |
+| | | section_typeset | (2, 2) | section_number | (2, 3) |
+| | | | | section_heading | (3, 2) |
+| | | | | section_addfont | (2, 2) |
+| | | | | section_addcolor | (2, 2) |
+| | | | | section_do | (2, 0) |
+| | | section_post | (0, 0) | | |
+| | | section_afterskip | (1, 0) | | |
+-------------------------------------------------------------------------------
+
+Here's how the gates work:
+
+> section <type><title><alternate title><label>
+The main list gate that contains all sections. In what follows, when I
+mention an attribute, I mean the attribute of the parameter <type>.
+
+> section_break <type>
+An l-gate managing whatever must happen before the section title is
+typeset.
+
+> section_vmode <type>
+Inserts a \par and removes last skip. (Conditional: ?vmode is =true.)
+
+> section_clear <type>
+Inserts a \clearpage. (Conditional: ?clear is =true.)
+
+> section_beforeskip <type>
+Creates a vertical skip before the heading. If the current page cannot
+accommodate ?beforeskip + ?minimum + ?afterskip worth of lines, then
+the section heading is typeset on the next page (using \breakpage). If
+the current page can accommodate the section, a skip of ?beforeskip
+lines is inserted. The gate doesn't return anything. (Conditional:
+?clear is not =true.)
+
+> section_advance <type>
+Increments the section counter, and resets the counters of those sections
+whose level is larger than <type>'s level (provided <type> has been
+declared with \declaresection and thus given a level). The gate doesn't
+return anything.
+
+> section_bookmark <type><title><alternate title><label>
+The bookmark is created with Navigator's \outline command as follows:
+
+ \outline[meta = <type>bookmark]{<bookmarklevel>}[<label>]{<alternate title>}
+
+only if ?bookmarklevel is defined. For types chapter, section, subsection
+and paragraph, the related !chapterbookmark, !sectionbookmark,
+!subsectionbookmark and !paragraphbookmark parameters are predefined,
+with simply ?meta set to =navigator. The <alternate title> is likely
+to disappear, since Navigator can handle things correctly. The gate
+doesn't return anything. (Conditional: ?link is =true.)
+
+> section_toc <type><title><alternate title>
+Writes what should be written to the auxiliary file for the next run
+to produce a table of contents. The gate doesn't return anything.
+(Conditional: ?toc is =true.)
+
+> section_pre
+Prepares the typesetting: open a group, sets \maintextfalse and
+\sectiontitletrue, and sets a LuaTeX attribute to 0 (so the section title
+is marked and can be spotted in the output routine). The gates doesn't
+return anything.
+
+> section_typeset <type><title>
+A list gate containing the gates used to typeset the section heading.
+It returns its final two arguments if only because list gate automatically
+return. See description below.
+
+> section_post
+Closes the group opened in section_pre. The gate doesn't return anything.
+
+> section_afterskip <type>
+Creates a vertical skip of ?afterskip lines. Also, calls \removenextindent
+if ?removenextindent is =true. The gate doesn't return anything.
+(Conditional: ?inline is not =true.)
+
+Here are the gates contained in section_pre. Beware, there the nature
+of the passed arguments slightly changes.
+
+> section_indent <type>
+Goes into horizontal mode and inserts an indent of width ?indent. The
+gate doesn't return anything.
+
+> section_number <type><title>
+Sets the section number, if ?number isn't =none. The number is surrounded
+by ?beforenumber and ?afternumber, converted to roman or arabic number
+according to the value of ?number, and the whole is passed to ?numbercommand
+(if it exists). The gate returns the following three arguments:
+<type><number><title>, where <number> is what's just been described.
+
+> section_heading <type><number><title>
+Sets the <title>: it is prefixed with <number>, passed to ?function if
+it exists, and suffixed with ?aftertitle if any. The gate returns <type>
+and <title> as just described.
+
+> section_addfont <type><title>
+Prefixes <title> with the value of font and returns its two arguments.
+
+> section_addcolor <type><title>
+Adds color to the title and returns its two arguments. (Conditional:
+?color is =true.)
+
+> section_do <type><title>
+At last! Inserts an horizontal skip of width ?indent, typesets <title>,
+and if ?inline isn't =true, sets \rightskip to ?ragged. Oh, yes, this
+could be divided into smaller gates. The gates doesn't return anything.
+
+The relevant parameters are the one corresponding to the type of the
+section, i.e. !chapter, !section, !subsection, !paragraph, which all
+have !metasection as their meta-parameter. The relevant attributes are:
+
+> vmode (true or false)
+If =true, goes into vertical mode before typesetting the heading.
+
+> clear (true or false)
+If =true, the section starts on a new page.
+
+> beforeskip (glue)
+The skip added before the heading.
+
+> afterskip (glue)
+The skip added after the heading.
+
+> minimum (number)
+The minimum number of lines that should be present on the page after the
+section heading. The "section_skip" gate above starts a new page if
+?beforeskip + ?afterskip + ?minimum can't be accommodated.
+
+> inline (true or false)
+If =true, the section heading is inserted at the beginning of the following
+paragraph.
+
+> number (arabic, roman or none)
+The way the section number should be typeset; =none means the number
+isn't typeset.
+
+> beforenumber
+Material to be added before the section number.
+
+> afternumber
+Material to be added after the section number.
+
+> numbercommand (control sequence)
+A macro to which the section number (surrounded by ?beforenumber and
+?afternumber) is passed.
+
+> function (control sequence)
+A macro to which the section title is passed.
+
+> aftertitle
+Material added after the section title.
+
+> font
+Font for the heading.
+
+> color (a triplet of values)
+Color for the heading.
+
+> indent (glue)
+The value of the glue added before the section title.
+
+> ragged (glue)
+The value of \rightskip for the heading.
+
+> toc (true or false)
+Sets whether the section should be added to the table of contents or
+not.
+
+> removenextindent (true or false)
+Sets whether the next paragraph should be unindented.
+
+> link (true or false)
+Sets whether a bookmark should be created with the section's title.
+
+> bookmarklevel (number)
+The level of the bookmark created for the section (how surprising).
+Further specification of the bookmark is done with !chapterbookmark,
+!sectionbookmark, !subsectionbookmark, !paragraphbookmark, whose only
+specification is that ?meta is set to =navigator. New "<type>bookmark"'s
+can be created, of course. See the documentation of Navigator for advanced
+use.
+
+
+
+ Various commands
+ ~~~~~~~~~~~~~~~~
+
+\tableofcontents
+Writes the table of contents (needs two runs). Not customizable for the
+time being!
+
+\newbreakpenalty <command>
+Defines <command> as a number below "-10000", suffixed with a \relax.
+The idea is to use it to break a page and check it in the output routine.
+
+\clearpage
+Fills the rest of the page with white space.
+
+\clearpagepenalty
+Penalty associated with \clearpage.
+
+\breakpage
+Same as \clearpage. They shouldn't be used for the same reasons. I use
+\clearpage at the end of a chapter, and \breakpage elsewhere (e.g. when
+a section heading would be orphaned and must move to the next page). The
+latter triggers nothing special, but the former can be identified in the
+output routine and for instance suppress footers.
+
+\breakpagepenalty
+Penalty associated with \breakpage.
+
+\needspace <dimen>
+Moves to the next page if there's less than <dimen>.
+
+\iflines <number><true><false>
+Executes <true> if there's at least <number> lines left on the page, and
+<false> otherwise.
+
+\ignorepars <material>
+Ignores incoming \par commands (and spaces too) and executes <material>.
+Useful when a blank line looks good in the source but you don't want it
+to signal a paragraph's end. The command is used by sectionning commands,
+so that if the section's title is supposed to be inserted at the beginning
+of the next paragraph (e.g. if ?inline is =true), you can nonetheless
+leave a blank line after the command.
+
+
+
+References (references.ptx)
+===========================
+
+There is a nice reference system, but it is a mess and should be rewritten
+in Lua. So it isn't fully described here.
+
+\label <name>
+Sets a label with <name>.
+
+\ref [<pre>][<post>] <reference type> {<name>}
+Makes a reference. Beware of the syntax: label should be enclosed between
+braces, because the left brace is the delimiter for <reference name>,
+which in turn should be enclosed in braces. E.g. a call is:
+
+ \ref page {mylabel}
+
+What is returned depends on <reference type>. If it is empty, then what
+is returned is the value of \ptx@label when \label{<name>} was issued.
+I think some commands define \ptx@label (nice in blocks, for instance).
+Otherwise, <reference type> can be page, chapter, section, subsection,
+paragraph or footnote (the latter if and only if \label was issued in a
+footnote). The returned text is prefixed with <pre> and suffixed with
+<post>.
+
+Also, if <reference type> is page, it may take three runs to make things
+work, because it is checked whether the returned value is the current
+page, in which case nothing is printed (it's stupid to refer to the
+current page). As mentioned above, this is a mess.
+
+There also are commands like "\sref{label}" and the like, which are
+shorthands for e.g. "\ref[ section~][] section {label}".
+
+
+
+
+
+Blocks (blocks.ptx)
+===================
+
+
+Blocks are what are called environments elsewhere: they mark up a section
+of the document, and generally apply some special operations. Given a
+block myblock, it is launched with "\myblock", closed with "\myblock/"
+and continued with "\myblock|". As you might imagine, this implies poking
+at the next token, which in some rare case might be troublesome; hence,
+\myblock can be followed by an optional ">" whose only goal is to protect
+the next token. (You can also use a \relax, of course.)
+
+\newblock <optional star><command><pre><optional start><optional middle><post>
+Defines <command> as a block. If the first optional star is present, the
+block is executed inside a group. If the second optional star is present,
+then the <middle> argument should be present too. The block is defined
+as follow: <pre> is executed at the beginning (i.e. "\myblock" or
+"\myblock>"), <middle> is executed when the block is continued (i.e.
+"\myblock|"), and <post> is executed when the block is closed (i.e.
+"\myblock/"). If <middle> is not given, then "\myblock|" does nothing.
+For instance, the following defines a grouped block (so the \rightskip
+setting doesn't affect the rest of the document); note the \par at the
+end, so the paragraph is built before the group is closed:
+
+ \newblock*\raggedblock{\rightskip=0pt plus 1fil\relax}{\par}
+
+And here's a simple example with a middle part:
+
+ \newblock\listblock{\vskip\baselineskip-- }
+ *{\par-- }
+ {\vskip\baselineskip}
+
+The continuation part can be used as a partial block opening: some markers
+are repeated (the dash) others are not (the vertical space).
+
+\newblocktype <command><pre><middle><post>
+Defines <command> as a block definition command like \newblock with
+<pre>, <middle> and <post> to be executed by default before the user-supplied
+versions. The \newblock command itself has been thus defined, with empty
+arguments. Arguments, after:
+
+ \newblocktype\newlist{\vskip\baselineskip--}
+ {\par--}
+ {\vskip\baselineskip}
+
+Then \newlist\listblock{}{} will have the same definition as in the
+previous example (no need to supply a <middle> part, it's in the default),
+and a variation can be created.
+
+\removenextindent
+Removes the indentation box of the next paragraph (used by section
+macros). Technically, it sets ajar the "noindent" gate in the "everypar"
+gate list (itself registered in the \everypar token list, which shouldn't
+be handled otherwise if flexibility is to be ensured). Those two gates
+belong to the "Everypar" family associated with the \Everypar command.
+
+\Indent
+Indents the next paragraph even if it \removenextindent has been issued
+(a \kern is added).
+
+
+
+
+
+
+Dealing with files (files.ptx)
+==============================
+
+\iffile [<format>]<file><true><false>
+Executes <true> if "kpse.find_file" (from the LuaTeX "kpse" library,
+implementing "kpathsea") with file type <format> (default: "tex"), and
+<false> otherwise.
+
+\ifffile [<format>]<file><true>
+Same as \iffile, except nothing happens when the file isn't found. Yes,
+three *f*'s.
+
+\inputfileor [<format>]<file><no file>
+Reads file <file> or executes <no file>.
+
+\writeout <optional star><general text>
+Writes <general text> to the auxilary file that is read at the beginning
+of each job. Without a star, writing happens at once (it's \immediate),
+with it writing is delayed until the current page is shipped out.
+
+
+
+
+
+Verbatim (verbatim.ptx)
+=======================
+
+\verbcatcodes
+A catcode table with usual verbatim catcodes: special characters have
+catcode 12, except space and end-of-line, which have catcode 13 and are
+defined to \quitvmode\spacecs and \quitvmode\par by default.
+
+\newverbatim <command>[<catcode table>]<pre><post>
+Defines a new block <command> with <catcode table>, <pre> at the beginning
+and <post> at the end. If <catcode table> is missing, \verbcatcodes is
+used. Verbatim blocks work as follows: first, there is no continuation
+command, i.e. only "\myverbatimblock" and "\myverbatimblock/" are allowed,
+not "\myverbatimblock|" (it might exist somewhere in the future). Second,
+the block opening takes one optional argument between brackets, which
+is the name of the verbatim block. Third, <pre> is executed at the
+beginning, and <post> at the end, as defined with \newverbatim. Fourth,
+the end statement "\myverbatimblock/" should be on a line of its own.
+What a verbatim block does is the following (not taking into account
+what <pre> and <post> execute): it stores its contents as is, along with
+the <catcode table> the block was declared with, and that's it. Then
+come the following two functions.
+
+\doverbatim [<name>]
+Executes the contents of <name> (with the current catcode regime). If
+name is missing, last is used, a special name which refers to the last
+verbatim block.
+
+\printverbatim [<name>]
+Executes the contents of <name> (or last if <name> is missing) with the
+catcode table associated with the block <name> was stored with. Since
+that catcode table is \verbcatcodes by default, it generally results in
+the contents being typeset.
+
+As an example:
+
+ \newverbatim\myverbatim{\vskip\baselineskip}
+ {\printverbatim\vskip\baselineskip}
+ \myverbatim[example]
+ \def\foo{hello !}%
+ \foo
+ \myverbatim/
+ And now we are going to print: \doverbatim[example].
+
+\verbatim
+A predefined verbatim block, designed as follows:
+
+ \newverbatim\verbatim{\codefont\parindent0pt}
+ {\vskip\baselineskip\printverbatim\relax
+ \vskip\baselineskip\removenextindent}
+
+I.e. it switches to the console-like font, sets the paragraph indentation
+to nothing, prints its contents between two blank lines and removes the
+indentation of the paragraph to follow.
+
+Each verbatim block adds a table to the Lua table "pitex.verbatims" (yes,
+with an *s*); the key is the block's name, and the value is a table with
+lines as values, indexed by numbers, plus a "regime" key which returns
+the catcode table's number of the block. For instance, the core operation
+performed by "\printverbatim[<name>]" is:
+
+ tex.print(pitex.verbatims[<name>].regime, pitex.verbatims[<name>])
+
+
+
+
+
+Insertions (inserts.ptx)
+========================
+
+Insertions are still a mess, and not related to parameters. Yet you can
+use:
+
+\footnote <text>
+Typesets <text> in a footnote. How astounding.
+
+\figure [<title>]
+A block creating a figure with title <title>.
+
+\table [<title>]
+The same as <figure>, except "Table" will be used instead of "Fig" in
+the caption.
+
+\infigure
+Ablock creating a figure in the main text, i.e. between paragraphs.
+
+
+
+
+Layout and output routine (output.ptx)
+=====================================
+
+The page layout can be specified with the !page parameter, whose attributes
+are:
+
+> width (dimension)
+The width of the page.
+
+> height (dimension)
+The height of the page.
+
+> baselineskip (glue)
+The baseline distance.
+
+> topskip (glue)
+The distance between the top of the textblock and the first baseline.
+
+> top (dimension)
+The height of the upper margin.
+
+> lines
+The number of lines on a page.
+
+> hsize (dimension)
+The width of the textblock.
+
+> left (dimension)
+Width of the left margin.
+
+> right (dimension)
+Width of the right margin. If specified, ?hsize is ignored and the
+texblock's width is set to ?width - ?left - ?right.
+
+> parindent (dimension)
+The width of the indentation.
+
+> parskip (glue)
+The glue between paragraphs.
+
+The output routine holds nothing very interesting for the moment. I
+used to redefine it for each job. Now it is set up with gates, but I
+haven't taken the time yet to make it really powerful. Plus I should
+rewrite everything in Lua as much as possible. Anyway, \output contains
+the "output" gate, from the "OutputRoutine" family associated with the
+\OutputRoutine command; the gates work as follows (passed arguments
+aren't indicated, because there isn't any; although someday perhaps the
+gates will pass a box between them, to be less dependant on \outputbox,
+which is used, by the way, instead of box 255, so any box register can
+be used):
+
+---------------------------------------------------------------
+| output | precheck | | |
+| | shipout | processmarginalia | |
+| | | inserts | inserts_figures |
+| | | | inserts_footnotes |
+| | | headers | |
+| | | ship | |
+| | | postship | |
+---------------------------------------------------------------
+
+> output
+The main list gate, holding the following.
+
+> precheck
+Checks whether \outputpenalty is smaller than \widowpenalty. If not,
+\vsize is increased or decreased (if there are inserts) by \baselineskip,
+so that the widow is accommodated or a line is given to the next page.
+In any case, the output box is repassed to TeX with "\holdinginserts=0".
+The gate is then set to "skip", so it isn't executed again.
+
+> shipout
+A list gate containing gates to write the page. By default it is skipped,
+so it isn't executed when the previous gate is, and vice-versa.
+
+> processmarginalia
+Insert the marginal notes (see \marginnote below). Can be obviously
+removed if there are no such notes.
+
+> inserts
+An l-gate containing the following two m-gates.
+
+> inserts_figures
+Adds the figures. (Conditional: the box "\ptx@insert_figures" isn't
+empty.)
+
+> inserts_footnotes
+Adds the footnotes. (Conditional: the box "\ptx@insert_footnotes" isn't
+empty.)
+
+> headers
+Inserts headers or footers, i.e. page number, running title, etc.
+
+> ship
+Ships out the page.
+
+> postship
+Resets some stuff (set "output_shipout" back to "skip"), and increments
+the page number.
+
+And now a lonely command:
+
+\marginnote [options]<text>
+Produces a marginal note with <text>. Uses the attributes (font,
+baselineskip, hsize) of the !marginnote parameter, with the following
+attributes:
+
+> hsize (dimension)
+Width of the textblock in the note.
+
+> hpos (ff, fr, rf, rr)
+Justification of the text: flushed on both sides, ragged on the right,
+ragged on the left, ragged on both sides.
+
+> font
+Font used to typeset the note.
+
+> parindent (dimension)
+Paragraph indentation for the note.
+
+> side (left or right)
+Side of the note relative to the textblock. That should depend on whether
+the note is on an odd or even side, but for the moment that is not the
+case.
+
+> gap (dimension)
+Distance between the textblock and the note.
+
+
+
+
+
+Lua facilities (lua.ptx and base.ptxlua)
+========================================
+
+\inputluafile <file>
+Shorthand for \directlua{dofile(kpse.find_file(<file>))}.
+
+\luacatcodes
+A catcode table with Lua-convenient catcodes: "#", "~", "%" and the end
+of file "^^M" are set to catcode 12.
+
+\luacode
+A block to write Lua code with the catcodes above.
+
+Lua code in PiTeX is organized mostly in gates; "pitex" is a gate table
+associated with family "pitex", "pitex.callback" is another table
+associated with family "pitex.callback", and "pitex.misc" is a third
+table associated (how surprising) with family "pitex.misc". The
+division of labour isn't perfectly defined, to say the least.
+
+The "pitex" family holds general commands, namely:
+
+> pitex.log (<message>, ...)
+Writes a <message> formatted as "string.format(<message>, ...)"
+
+> pitex.error (<message>, ...)
+Same as the previous function, but less friendly.
+
+The "pitex.callback" family is concerned with callback management. It
+has one interesting function (well, a gate) devoted to handling functions
+in callbacks as gates:
+
+> pitex.callback.register (<callback>, <gate>)
+An l-gate is registered in the callback, with subgates added to it; the
+name of the l-gate is the same as the callback where it is registered
+(with the family prefix "pitex.callback" added when necessary). For
+instance the list gate containing functions to used in "process_input_buffer"
+is called "process_input_buffer". Ordinary you would add a subgate to
+such a callback with the "add" action:
+
+ pitex.callback.add ("mygate", "process_input_buffer")
+
+However, the l-gate associated with the callback isn't created by
+default, nor registered in the callback. This means that "add" above
+will fail miserably if "process_input_buffer" hasn't been created
+beforehand. This function is meant to circumvent that: if the l-gate
+exists, it boils down to "add"; otherwise it creates it and registers
+it in the callback, and then add the gate. Note that the syntax follows
+the original "callback.register" function, with the callback first and
+the function second, even though you're adding gates to l-gates, with
+the syntax of "add" being subgates first, l-gate second. To manage the
+gates, thus created, you can then rely on the original gate actions.
+
+So, when I say `gates "X" and "Y" are registered in callback "Z"', it
+means `gates "X" and "Z" are subgates of l-gate "pitex.callback:Z",
+itself registered in callback "Z"'; unless otherwise indicated, "X" and
+"Z" belong to the "pitex.callback" family.
+
+And here are the gates registered in callbacks: "process_input_buffer"
+contains "convert", which turns latin1 into UTF-8. Verbatim blocks also
+register "process_verbatim", which is removed when the block ends. The
+"kerning" callback contains "french_punctuation", meant to add thin
+space before some punctuation mark, and "original_kerning", which is
+just a gate version of the "node.kerning" function. In "post_linebreak_filter"
+you'll find "pitex.misc:underline", which deals with material to be
+underline and "pitex.misc:mark_lines", which marks lines where a margin
+note is to be added. Those last two gates should be rewritten as complex
+l-gates (they're just big functions for the moment) some day. If you
+neither underline nor use marginal notes, you can remove them.
+
+
+
+
+Things that didn't make it elsewhere (pitex.tex)
+================================================
+
+General properties of the document can be set with the !document parameter,
+with the following attributes (the !navigator parameter has a ?meta
+attribute set to !document, which is why you'll find attributes here
+used by Navigator):
+
+> author
+The author of the document.
+
+> title
+The title of the document.
+
+> pdftitle
+The title that Navigator will use for the document's properties (defaults
+to ?title).
+
+> date
+The date of the document
+
+> pdfdate
+The date that Navigator will use for the document's properties; should
+be a properly formatted PDF date (this corresponds to the ?date attribute
+in the !navigator parameter; note that ?pdfdate doesn't defaults to
+?date, because the latter is supposed to hold a readable date).
+
+> subject
+For the document's properties.
+
+> keywords
+Again, the properties.
+
+> mode (outlines, bookmarks, thumbs, thumbnails, attachments, files, oc)
+What should be displayed in the navigation bar when the document is
+opened. See the documentation to Navigator.
+
+> layout (onepage, onecolumn, twopage, twocolumn, twopage*, twocolumn*)
+How the document is displayed when opened. See the documentation of
+Navigator.
+
+\newattribute <command>
+Defines <command> as an attribute register.
+
+\unsetattribute <command>
+Unsets attribute <command>.
+
+\attributenumber <command>
+Returns the number of attribute register <command> (not its value; you
+get the value with \the; this is to pass to Lua).
+
+\freedef <command>{<definition>}
+Same as "\def\foo#1{...}", except <command> can take its argument between
+double quotes (°") or slahes (/), and of course as single token or
+brace-delimited.
+
+\ifmaintext
+Conditional that is true when in main text; inserts, section headings,
+etc., should turn it to false, and sets their own to true.
+
+\newcatcodetable <command><catcode settings>
+Defines <command> as a catcode table with <catcode settings>; the latter
+are "<list of characters> = catcode" pairs, separated by commas, like
+the argument of texapi's \setcatcodes.
+
+\texcatcodes
+A code catcode table with the traditional catcodes.
+
+\inputpitexfile <file><space>
+Inputs <file> unless the initialization script says otherwise. If <file>
+has no extension, ".ptx" is used.
+
+\antigobblespace
+Adds a space if the next character has catcode 11 or is an opening
+parenthesis. For instance, after "\def\tex{\TeX\antigobblespace}", you
+can type "\tex is typesetting program" without worrying for gobbled
+space. Note that only ASCII letters have catcode 11 by default (not
+accented characters).
+
+\strut <height><depth>
+Produces an invisible vertical rule with the specified dimensions.
+
+\colorbox [<dimensions>]<RGB color><text>
+Puts <text> in a colored box with background color <RGB color> (e.g.
+three space-separated numbers between 0 and 1) and with padding <dimensions>.
+If <dimensions> is missing, padding is done according to the \extraboxspace
+length. Otherwise, if <dimensions> contains one value, it is used on all
+side; if there are two values (separated by commas), the first is used
+for top and bottom padding, and the second for left and right padding;
+with three value, the third specifies bottom padding, and a fourth
+specifies left padding. Very unlikely to remain in its present state or
+to remain at all.
+
+\extraboxspace
+Default padding for the previous command.
+
+\og
+Produces an opening guillemet: "«" (character "0x00AB").
+
+\fg
+Produces a closing guillemet: "»" (character "0x00BB"). Uses \antigobblespace.
+
+\trace
+Sets \tracingcommands to 3 and \tracingmacros to 2.
+
+\untrace
+Sets \tracingcommands and \tracingmacros to 0.
diff --git a/macros/plain/contrib/pitex/pitex.tex b/macros/plain/contrib/pitex/pitex.tex
new file mode 100644
index 0000000000..fcaa7f5132
--- /dev/null
+++ b/macros/plain/contrib/pitex/pitex.tex
@@ -0,0 +1,236 @@
+% This is piTeX, a set of macros I (Paul Isambert) use to
+% typeset documentations for my packages (that's why it is
+% archived on CTAN).
+%
+% Perhaps in the future, when this achieves some kind of
+% format-like completude, it'll be publicly announced. In the
+% meanwhile, a documentation exists (pitex-doc.pdf, also readable
+% in a text editor as pitex-doc.txt).
+%
+%
+% You can of course use those macros, but you are on your
+% own, and the files will probably be modified without announcement.
+% The file is supposed to be \input on plain TeX with LuaTeX, at least v.0.6.
+%
+%
+% The files needed are:
+%
+% texapi.tex (an independent package for programming)
+% yax.tex (an independent package for key=value interface)
+% gates.tex and gates.lua (an independant package for overall architecture)
+% navigator.tex (an independant package for PDF features)
+% lua.ptx and base.ptxlua (Lua side)
+% files.ptx (file management)
+% fonts.ptx, fonts.ptxlua and foundry-settings.lua
+% (fonts, should be independant some day; actually
+% fonts.ptxlua can be used independantly, but there is
+% no doc)
+% sections.ptx (sectionning commands)
+% blocks.ptx (text blocks)
+% references.ptx (labels and references)
+% verbatim.ptx (typesetting verbatim)
+% inserts.ptx (footnotes and figures, a mess)
+% output.ptx (output routine)
+%
+% The file i-pitex.lua is needed only to typeset the documentation with the
+% Interpreter package.
+%
+%
+% Date: November 2011.
+%
+%
+% User interface
+\input yax % which itself \input's texapi
+\input gates
+
+\setcatcodes{\@\_=11}
+\suppressoutererror=1
+
+% MESSAGES
+\def\ptx@error{\senderror{PiTeX}}
+\def\ptx@log#1{%
+ \immediate\write17{^^J#1^^J}%
+ }
+\def\ptx@warn#1{%
+ \ptx@log{PiTeX warning: #1}%
+ }
+
+% ATTRIBUTES
+\newcount\ptx@attribute_count
+\ptx@attribute_count=100 % The first 100 attributes are scratch.
+\def\newattribute#1{%
+ \advance\ptx@attribute_count1
+ \attributedef#1=\ptx@attribute_count
+ \xdefcs{ptx@attribute:\commandtoname#1}{\the\ptx@attribute_count}%
+ }
+\def\unsetattribute#1{#1=-"7FFFFFFF\relax}
+\def\attributenumber#1{\usecs{ptx@attribute:\commandtoname#1}}
+
+% FREEDEF
+\def\freedef#1{%
+ \def#1{%
+ \ifnextnospace"
+ {\ptx@freedef_quote#1}
+ {\ifnextnospace/
+ {\ptx@freedef_slash#1}
+ {\usecs{ptx@freedef_user:\commandtoname#1}}}%
+ }%
+ \defcs{ptx@freedef_user:\commandtoname#1}##1%
+ }
+\def\ptx@freedef_quote#1"#2"{%
+ \usecs{ptx@freedef_user:\commandtoname#1}{#2}%
+ }
+\def\ptx@freedef_slash#1/#2/{%
+ \usecs{ptx@freedef_user:\commandtoname#1}{#2}%
+ }
+
+
+\newbox\ptx@box_temp
+
+\newif\ifmaintext
+\maintexttrue
+
+% CATCODE TABLES
+\newcount\ptx@catcodetable_count
+\ptx@catcodetable_count=100 % First 100 are scratch.
+\def\newcatcodetable#1#2{%
+ \global\advance\ptx@catcodetable_count1
+ \chardef#1=\ptx@catcodetable_count
+ \begingroup
+ \setcatcodes{#2}%
+ \savecatcodetable#1%
+ \endgroup
+ }
+
+\newcatcodetable\texcatcodes{\@\_=12}
+
+\def\inputpitexfile#1 {\input #1.ptx }
+
+\inputpitexfile lua
+\inputpitexfile files
+\inputpitexfile fonts
+\inputpitexfile sections
+\inputpitexfile blocks
+\inputpitexfile references
+\inputpitexfile verbatim
+\inputpitexfile inserts
+\inputpitexfile output
+\input navigator.tex
+
+% AUXILIARY FILE
+\iffile{\jobname.aux}{%
+ \ptx@lua{%
+ remove_conversion()
+ tex.print("\luaescapestring{\noexpand\input\noexpand\jobname.aux}")
+ }%
+ \directlua{restore_conversion()}}
+\immediate\openout\ptx@auxfile=\jobname.aux
+
+% PDF SETTINGS
+\restrictparameter document : author title pdftitle date pdfdate subject keywords mode layout version\par
+\restrictattribute document : mode outlines bookmarks thumbs thumbnails attachments files oc\par
+\restrictattribute document : layout onepage onecolumn twopage twocolumn twopage* twocolumn*\par
+
+\suppressoutererror=1
+\let\ptx@bye\bye
+\def\bye{%
+ \passvalueand{\setattribute navigator : title = } document : pdftitle { }{}
+ % The "date" attribute in the "document" parameter isn't supposed to hold a
+ % PDF-date, as navigator expects.
+ \deleteattribute document : date
+ \passvalueand{\setattribute navigator : date = } document : pdfdate { }{}
+ \finishpdffile\ptx@bye
+ }
+
+\setattribute navigator : meta = document
+
+% Turns a dimen into PostScript points, without the unit (as wanted by PDF).
+\def\pdfpoint#1{%
+ \directlua{%
+ local d = "\the\dimexpr#1"
+ d = string.gsub(d, "pt", "")
+ tex.print(tostring(d * (72/72.27)))
+ }}
+
+
+
+
+% TEX SETTINGS
+\long\def\ptx@tex_set#1#2#3{%
+ \ifcs{#2}
+ {\usecs{#2}=#3\relax}
+ {\ptx@error{No TeX parameter `#2'}}
+ }
+
+\defactiveparameter tex {%
+ \parameterloop #1 : \ptx@tex_set
+ }
+
+\frenchspacing
+\maxdepth=\maxdimen
+
+\def\antigobblespace{%
+ \ifcatnext a{ }{\iffnext({ }}%
+ }
+
+\def\strut#1#2{%
+ \vrule height#1 depth#2 width0pt
+ }
+
+\newdimen\extraboxspace
+\newdimen\ptx@extraboxspace_top
+\newdimen\ptx@extraboxspace_right
+\newdimen\ptx@extraboxspace_bottom
+\newdimen\ptx@extraboxspace_left
+
+\newfornoempty\ptx@colorbox_loop{1}#2,{%
+ \ifcase#1
+ \ptx@extraboxspace_top =#2
+ \ptx@extraboxspace_right =#2
+ \ptx@extraboxspace_bottom =#2
+ \ptx@extraboxspace_left =#2
+ \or
+ \ptx@extraboxspace_right =#2
+ \ptx@extraboxspace_left =#2
+ \or
+ \ptx@extraboxspace_bottom =#2
+ \or
+ \ptx@extraboxspace_left =#2
+ \fi
+ \passarguments{\numexpr(#1+1)}%
+ }
+\def\colorbox{%
+ \ifnextnospace[\ptx@colorbox_setborders
+ {\ptx@extraboxspace_top =\extraboxspace
+ \ptx@extraboxspace_right =\extraboxspace
+ \ptx@extraboxspace_bottom =\extraboxspace
+ \ptx@extraboxspace_left =\extraboxspace
+ \ptx@colorbox_do}%
+ }
+\def\ptx@colorbox_setborders[#1]{%
+ \ptx@colorbox_loop{0}{#1,}%
+ \ptx@colorbox_do
+ }
+{\setcatcodes{pt=12}
+\gdef\noPT#1pt{#1 }}
+\def\ptx@colorbox_do#1#2{%
+ \bgroup
+ \setbox\ptx@box_temp=\hbox{#2}%
+ \hbox{%
+ \pdfliteral{
+ q #1 rg #1 RG
+ -\expandafter\noPT\the\ptx@extraboxspace_left
+ \expandafter\noPT\the\dimexpr(\ht\ptx@box_temp+\ptx@extraboxspace_top)\relax
+ \expandafter\noPT\the\dimexpr(\wd\ptx@box_temp+\ptx@extraboxspace_left+\ptx@extraboxspace_right)\relax
+ -\expandafter\noPT\the\dimexpr(\ht\ptx@box_temp+\ptx@extraboxspace_top+\dp\ptx@box_temp+\ptx@extraboxspace_bottom)\relax
+ re f Q}%
+ #2}%
+ \egroup
+ }
+
+\def\og{\char"00AB~} \def\fg{~\char"00BB\antigobblespace}
+
+\def\trace{\tracingcommands3 \tracingmacros2 }
+\def\untrace{\tracingcommands0 \tracingmacros0 }
+
+\restorecatcodes
diff --git a/macros/plain/contrib/pitex/references.ptx b/macros/plain/contrib/pitex/references.ptx
new file mode 100644
index 0000000000..038b90bc26
--- /dev/null
+++ b/macros/plain/contrib/pitex/references.ptx
@@ -0,0 +1,107 @@
+% This is a mess.
+\def\ptx@label{}%
+\def\label#1{%
+ \ifcs{ptx@label_user:#1}
+ {\ptx@error{Label `#1' already exists. Find another one}}
+ {\global\letcs{ptx@label_user:#1}\relax
+ \ptx@label_write{ptx@ref_user:#1}\ptx@label
+ \ptx@label_write{ptx@ref_chapter:#1}{\usevalue chapter : internalcount }%
+ \ptx@label_write{ptx@ref_section:#1}{\usevalue section : beforenumber \usevalue section : internalcount }%
+ \ptx@label_write{ptx@ref_subsection:#1}{\usevalue subsection : beforenumber \usevalue subsection : internalcount }%
+ \ptx@label_write{ptx@ref_paragraph:#1}{\usevalue paragraph : beforenumber \usevalue paragraph : internalcount }%
+ \iffootnote
+ \ptx@label_write{ptx@ref_footnote:#1}{\the\ptx@footnote_count}%
+ \fi
+ \ptx@write_toaux*{\defcs{ptx@ref_page:#1}{\the\pageno}}}%
+ }
+\def\ptx@label_with#1[#2]{%
+ \def\ptx@label{#1}%
+ \label{#2}%
+ \ignorespaces
+ }
+\def\ptx@label_and#1[#2]{%
+ \label{#2}%
+ #1%
+ }
+\def\ptx@label_withand#1#2[#3]{%
+ \ptx@label_with#1[#3]%
+ #2%
+ }
+\newif\ifptx@rerun
+\def\ptx@rerun{%
+ \unless\ifptx@rerun
+ \global\ptx@reruntrue
+ \ptx@warn{You need a rerun.}%
+ \fi
+ }
+\def\ptx@label_write#1#2{%
+ \unless\ifptx@rerun
+ \edef\ptx@temp{#2}%
+ \ifcs{#1}
+ {\passexpanded{\passexpandedcs{\reverse\iffstring}{#1}}\ptx@temp\ptx@rerun}
+ {\ptx@rerun}%
+ \fi
+ \ptx@write_toaux{\defcs{#1}{#2}}%
+ }
+
+
+
+\def\ref{%
+ \ifnextnospace[
+ {\ptx@ref_getpre}
+ {\ptx@ref_getpre[]}%
+ }
+\def\ptx@ref_getpre[#1]{%
+ \ifnextnospace[
+ {\ptx@ref_getpost{#1}}
+ {\ptx@ref_getpost{#1}[]}%
+ }
+\def\ptx@ref_getpost#1[#2]#3#{%
+ \passtrim{#3}{\ptx@ref_do{#1}{#2}}%
+ }
+\def\ptx@ref_do#1#2#3#4{%
+ \ifcs{ptx@ref_user:#4}
+ {\ifemptystring{#3}
+ {\ptx@ref_typeset{\usecs{ptx@ref_user:#4}}}
+ {\ifstring{#3}{page}\ptx@refpage_typeset\ptx@ref_typeset{\usecs{ptx@ref_#3:#4}}}
+ {#1}{#2}}
+ {??\ptx@rerun}%
+ }
+\protected\def\ptx@ref_typeset#1#2#3{#2#1#3}
+\newcount\ptx@ref_pagerefcount
+\protected\def\ptx@refpage_typeset#1#2#3{%
+ \global\advance\ptx@ref_pagerefcount1
+ \ifcs{ptx@pageref_number:\the\ptx@ref_pagerefcount}
+ {\unless\ifnum\usecs{ptx@pageref_number:\the\ptx@ref_pagerefcount}=#1\relax
+ #2#1#3%
+ \fi}
+ {??\ptx@rerun}%
+ \expandafter\ptx@pageref_write\expandafter{\the\ptx@ref_pagerefcount}%
+ }
+\def\ptx@pageref_write#1{%
+ \ptx@write_toaux*{\defcs{ptx@pageref_number:#1}{\the\pageno}}%
+ }
+
+\let\xref\ref
+\def\sref{\unskip\ref[ section~][] section}
+\def\Sref{\unskip\ref[ section~][] subsection}
+\def\cref{\unskip\ref[ chapitre~][] chapter}
+\def\pref{\unskip\ref[ (p.~][)] page}
+\def\Pref{\unskip\ref[ p.~][] page}
+\def\fref{\unskip\ref[ figure~][]}
+\def\Fref#1{\fref{#1}\pref{#1}}
+\def\tref{\unskip\ref[ tableau~][]}
+\def\Tref#1{\tref{#1}\pref{#1}}
+\def\fnref{\unskip\ref[ note~][] footnote}
+\def\FNref#1{\fnref{#1}\pref{#1}}
+\def\multiref#1"#2"{%
+ \passtrim{#1}{\ptx@multiref_loop{first}{#2}}%
+ }
+\def\ptx@multiref#1#2#3{%
+ \ptx@multiref_loop{#2}{#3}{#1}%
+ }
+\newfor\ptx@multiref_loop{2}#3{%
+ \reverse\iffstring{#1}{first}{, }%
+ \usecs{#3ref}{#2}%
+ \passarguments{}{#2}
+ }
diff --git a/macros/plain/contrib/pitex/sections.ptx b/macros/plain/contrib/pitex/sections.ptx
new file mode 100644
index 0000000000..a6d1f95431
--- /dev/null
+++ b/macros/plain/contrib/pitex/sections.ptx
@@ -0,0 +1,332 @@
+\newcount\ptx@penalty
+\ptx@penalty=-10000
+
+\def\newbreakpenalty#1{%
+ \advance\ptx@penalty-1
+ \edef#1{\the\ptx@penalty\relax}
+ }
+
+\newbreakpenalty\clearpagepenalty
+\def\clearpage{\vfil\penalty\clearpagepenalty}
+
+\newbreakpenalty\breakpagepenalty
+\def\breakpage{\vfil\penalty\breakpagepenalty}
+
+\def\whitepage{\clearpage\shipout\hbox{}\advancepageno}
+
+% TODO: Rewrite in Lua.
+\def\needspace#1{%
+ \par\penalty0
+ \ifdim\dimexpr\pagegoal-\pagetotal<\dimexpr#1\relax
+ \breakpage
+ \fi
+ }
+
+\def\iflines#1{%
+ \par\penalty0
+ \ifdim\dimexpr(\pagegoal-\pagetotal) < \numexpr(#1)\baselineskip
+ \expandafter\secondoftwo
+ \else
+ \expandafter\firstoftwo
+ \fi}
+
+\long\def\ignorepars#1{%
+ \ifxnextnospace\par
+ {\gobbleoneand{\ignorepars{#1}}}
+ {#1}%
+ }
+
+\def\sectioncommand#1#2#3{%
+ \ifnext[
+ {\ptx@sectioncommand{#1}{#2}{#3}}
+ {\ptx@sectioncommand{#1}{#2}{#3}[]}%
+ }
+
+\def\ptx@sectioncommand#1#2#3[#4]{%
+ \Section execute {section}{#1}{#2}{#3}{#4}%
+ \ignorepars{}%
+ }
+\def\makeroman#1{%
+ \uppercase\expandafter{\romannumeral#1\relax}%
+ }
+
+\newif\ifsectiontitle
+
+\luacode
+pitex.sections = { sections = {} }
+function pitex.sections.increment (type)
+ local n = type
+ type = pitex.sections.sections[type] or { num = 0 }
+ type.num = type.num + 1
+ local level = type.level
+ if level then
+ for name, tb in pairs(pitex.sections.sections) do
+ tb.num = tb.level > level and 0 or tb.num
+ end
+ end
+end
+function pitex.sections.counter (type)
+ type = pitex.sections.sections[type]
+ return type and type.num or -1
+end
+\luacode/
+
+\def\declaresection#1#2{%
+ \ptx@lua{pitex.sections.sections.#1 = {num = 0, level = #2}}%
+ }
+
+\def\incrementsection#1{%
+ \ptx@lua{pitex.sections.increment("#1")}%
+ }
+
+\def\getsectioncounter#1{%
+ \ptx@lua{tex.print(pitex.sections.counter ("#1"))}%
+ }
+
+%%% Gates in section %%%
+
+\gates new \Section {Section}
+\Section list {section} [4]
+ (section_break) [2]
+ . [section_vmode] [1] ?{conditional = \ifvalue #1 : vmode = true } {\par\removelastskip\penalty0 }
+ . [section_clearpage] [1] ?{conditional = \ifvalue #1 : clear = true } {\clearpage}
+ . [section_beforeskip] [2] ?{conditional = -\ifvalue #1 : clear = true }
+ {% Or skip some lines. The "beforeskip" attribute is
+ % the number of blank lines one wants before a section
+ % title, afterskip is the same thing after,
+ % and "minimum" is the minimum number of lines
+ % one wants after the section title.
+ \ifexpression{%
+ -\ifdim\dimexpr(\pagegoal-\pagetotal) < 0pt &
+ \ifdim\dimexpr(\pagegoal-\pagetotal) < \numexpr(\usevalueor #1 : beforeskip 0+\usevalueor #1 : afterskip 0+\usevalueor #1 : minimum 0) \baselineskip}
+ {\breakpage} % Not enough room.
+ {\passvaluenobracesand\vskip #1 : beforeskip \baselineskip{}}}
+%
+ [section_advance] [1] {\incrementsection{#1}}
+%
+ [section_bookmark] [4] ?{conditional = \ifvalue #1 : link = true } {%
+ \passvalueand{\outline[meta = #1bookmark]} #1 : bookmarklevel {[#4]{#3}}{}}
+%
+ [section_toc] [3] ?{conditional = \ifvalue #1 : toc = true } {%
+ \edef\ptx@temp{{#1}{\ifvalue #1 : number = none {}{\getsectioncounter{#1}}}{\unexpanded{\unexpanded{#3}}}{\the\pageno}}%
+ \expandafter\writeout\expandafter*\expandafter{\expandafter\noexpand\expandafter\ptx@toc\ptx@temp}}
+%
+ [section_pre] {%
+ \bgroup
+ \maintextfalse
+ \sectiontitletrue
+ \ptx@section_attribute=0\relax}
+%
+ (section_typeset) [2]
+ . [section_number] [2] {%
+ \ifvalue #1 : number = none
+ {\Section return3 {#1}{}{#2}}
+ {\Section return3
+ {#1}
+ {\usevalueor #1 : numbercommand \unbrace
+ {\usevalue #1 : beforenumber
+ \ifcasevalue #1 : number
+ \val roman \makeroman
+ \val arabic \unbrace
+ \endval{\getsectioncounter{#1}}%
+ \usevalue #1 : afternumber }}
+ {#2}}}
+%
+ . [section_heading] [3] {%
+ \Section return2 {#1}{#2\usevalueor #1 : function \unbrace{#3}\usevalue #1 : aftertitle }}
+%
+ . [section_addfont] [2] {\Section return {#1}{\usevalue #1 : font #2}}
+%
+ . [section_addcolor] [2] ?{conditional = \ifattribute #1 : color } {%
+ \Section return {#1}{\passvalueand\color #1 : color {{#2}}{}}}
+%
+ . [section_do] [2] {%
+ \noindent
+ \settovalue\hskip #1 : indent
+ #2%
+ \ifvalue #1 : inline = true {}{\settovalue\rightskip #1 :ragged \endgraf}}
+%
+ [section_post] {\egroup}
+%
+ [section_afterskip] [1] ?{conditional = -\ifvalue #1 : inline = true } {%
+ \vskip\usevalueor #1 : afterskip 0\baselineskip
+ \ifvalue #1 : removenextindent = true {\removenextindent}{}}
+
+\setparameter metasection :
+ clear = false
+ vmode = true
+ minimum = 3
+ inline = false
+ number = arabic
+ afternumber = "\kern.3em"
+ link = true
+ ragged = 0pt
+ toc = true
+ removenextindent = true
+
+\declaresection {chapter} 1
+\declaresection {section} 2
+\declaresection {subsection} 3
+\declaresection {paragraph} 4
+
+\setparameter chapter section subsection paragraph:
+ meta = metasection
+
+\setparameter chapter :
+ clear = true
+ number = arabic
+ afterskip = 3
+ indent = "0pt plus 1fill"
+ beforenumber = "chapitre "
+ afternumber = {\par\hfill}
+ bookmarklevel = 1
+
+\setparameter section :
+ beforeskip = 2
+ bookmarklevel = 2
+
+\setparameter subsection paragraph:
+ font = \it
+ beforeskip = 1
+
+\setparameter subsection:
+ beforenumber = "\getsectioncounter{section}."
+ minimum = 3
+ bookmarklevel = 3
+
+\setparameter paragraph:
+ beforenumber = "\getsectioncounter{section}.\getsectioncounter{subsection}."
+ minimum = 2
+ inline = true
+ aftertitle = ".\hskip.333em"
+ bookmarklevel = 4
+
+\setparameter chapterbookmark sectionbookmark subsectionbookmark paragraphbookmark:
+ meta = navigator
+
+\def\chaptertitle{}%
+\freedef\chapter{%
+ \sectioncommand{chapter}{#1}{#1}%
+ }
+\freedef\section{\sectioncommand{section}{#1}{#1}}
+\freedef\subsection{\sectioncommand{subsection}{#1}{#1}}
+\freedef\paragraph{\sectioncommand{paragraph}{#1}{#1}}
+
+\newif\ifptx@sectioninfile
+\def\sectioninfile{%
+ \ifnextnospace*
+ {\ptx@sectioninfilefalse
+ \gobbleoneand\ptx@sectioninfile}
+ {\ptx@sectioninfiletrue
+ \ptx@sectioninfile}%
+ }
+
+\freedef\ptx@sectioninfile{%
+ \ptx@sectioninfile_do{#1}%
+ }
+\def\ptx@sectioninfile_do#1 #2 #3 {%
+ \sectioncommand{#2}{#1}{#1}%
+ \ptx@section_getlabel{#3}%
+ \ifptx@sectioninfile
+ \input #3\relax
+ \fi
+ }
+\newstring/
+\newwhile\ptx@section_getlabel1{#1}{%
+ \ifcontains/{#1}%
+ {\splitstringat/{#1}{\gobbleoneand\changewhile}}
+ {\label{#1}\breakwhile}%
+ }
+\freedef\ptx@sectioninfile_gobble{%
+ \ptx@sectioninfile_gobblerest
+ }
+\def\ptx@sectioninfile_gobblerest#1 #2 #3 {}
+
+\newattribute\ptx@section_attribute
+%
+% Move pending titles if they happen. They shouldn't by themselves,
+% but the next paragraph might want more room than available
+% and clear the page. Hence this.
+% It reads box 255 backwards and move everything with set
+% section attribute to the next page. If the first such material
+% is a line, a (totally arbitrary) one-line skip is added, unless
+% there's already a skip on top of the next page that isn't
+% TeX-inserted (e.g. \baselineskip).
+% This is probably totally insufficient.
+%
+\luacode
+onelineskip = node.new(11)
+onelineskip.kern = tex.baselineskip.width
+remove_pendingtitles = function (head)
+ local item, first = node.slide(head), true
+ while item do
+ if node.has_attribute(item,\attributenumber\ptx@section_attribute) then
+ local nextitem = item.prev
+ node.remove(head,item)
+ if not ((item.id == 10 or item.id == 11) and first) then
+ node.insert_before(tex.lists.contrib_head, tex.lists.contrib_head, item)
+ tex.lists.contrib_head = item
+ end
+ if item.id == 0 then
+ if first then
+ first = false
+ if not (tex.lists.contrib_head.next.id == 10 and tex.lists.contrib_head.next.subtype == 0) then
+ node.insert_after(tex.lists.contrib_head, item, node.copy(onelineskip))
+ lualog("A title has been moved from page " .. tex.count[0] ..
+ " to page " .. tex.count[0]+1 .. ".")
+ end
+ end
+ else
+ end
+ item = nextitem
+ else
+ if item.id == 0 or item.id == 1 then
+ item = nil
+ else
+ item = item.prev
+ end
+ end
+ end
+end
+\luacode/
+
+\def\removependingtitles{%
+ \ptx@lua{remove_pendingtitles(tex.box[255].list)}%
+ }
+
+
+% ToC: this is an inefficient mess.
+
+\def\ptx@toc_tok{}
+\def\ptx@toc#1#2#3#4{%
+ \addright\ptx@toc_tok{%
+ \usecs{ptx@toc_item:#1}{#2}{#3}{#4}}%
+ }
+
+\def\tableofcontents{%
+ \bgroup
+ \parindent=0pt
+ \ifemptycommand\ptx@toc_tok
+ {\ptx@warn{No table of contents.}}
+ {\ptx@toc_tok}%
+ \egroup
+ }
+
+\long\def\ptx@def_tocitem#1#2#3#4{%
+ \defcs{ptx@toc_item:#1}##1##2##3{%
+ \edefcs{ptx@toc_current#1}{##1}%
+ \bgroup\par\quitvmode
+ \leftskip#2\relax
+ \rightskip=0pt plus 1fil
+ #3\reverse\iffemptystring{##1}{\llap{#4##1\kern1em}}%
+ ##2\leaders\hbox{. }\hfill\hbox to .8cm{\hfil##3}\par
+ \egroup}%
+ }
+
+\ptx@def_tocitem{chapter}{0pt}{\big\bf\sc}{}
+\ptx@def_tocitem{section}{1cm}{\sc}{}
+\ptx@def_tocitem{subsection}{2cm}{\it}
+ {\reverse\iffemptycs{ptx@toc_currentsection}{\usecs{ptx@toc_currentsection}.}}
+\ptx@def_tocitem{paragraph}{3cm}{}
+ {\reverse\iffemptycs{ptx@toc_currentsection}{\usecs{ptx@toc_currentsection}.}%
+ \reverse\iffemptycs{ptx@toc_currentsubsection}{\usecs{ptx@toc_currentsection}}.}
diff --git a/macros/plain/contrib/pitex/verbatim.ptx b/macros/plain/contrib/pitex/verbatim.ptx
new file mode 100644
index 0000000000..a4e2a7ed2b
--- /dev/null
+++ b/macros/plain/contrib/pitex/verbatim.ptx
@@ -0,0 +1,128 @@
+% Verbatim facilities.
+\newcatcodetable\verbcatcodes{\\\{\}\$\&\#\^\_\~\%=12,\ \^^M=13}
+
+\def\verb#1{%
+ \def\ptx@verb##1#1{\ptx@verb_punc{}{##1}\egroup}%
+ \bgroup
+ \catcodetable\verbcatcodes
+ \iffcommand\codefont\codefont
+ \ptx@verb
+ }
+
+% Hack to prevent French spacing before punctuation. I should find
+% something better (attributes marking material to be left alone when
+% the French punctuation kicks in in the "kerning" callback).
+\def\ptx@verb_punc#1#2{%
+ \ifelseif{%
+ {\ifcontains:{#2}} {\splitstringat:{#2}{\ptx@verb_glue{#1}:}}
+ {\ifcontains;{#2}} {\splitstringat;{#2}{\ptx@verb_glue{#1};}}
+ {\ifcontains!{#2}} {\splitstringat!{#2}{\ptx@verb_glue{#1}!}}
+ {\ifcontains?{#2}} {\splitstringat?{#2}{\ptx@verb_glue{#1}?}}
+ \iftrue {#1#2}}%
+ }
+\def\ptx@verb_glue#1#2#3#4{%
+ \ptx@verb_punc{#1#3\kern0pt#2}{#4}%
+ }
+
+\bgroup
+\setcatcodes{\ \^^M=13}%
+\gdef {\quitvmode\spacecs}%
+\gdef^^M{\quitvmode\par}%
+\egroup
+
+\def\tcode#1{{\codefont#1}}
+\long\def\com#1{%
+ \bgroup
+ \codefont
+ \string#1%
+ \egroup
+ \antigobblespace
+ }
+\freedef\arg{{\codefont\it<#1>}\iffnext\spacechar{\kern.2ex }}
+\freedef\barg{{\codefont\char"007B\relax\arg{#1}\char"007D\relax}}
+\freedef\oarg{{\codefont[\arg{#1}]}}
+
+\luacode
+pitex.verbatims = {}
+local function prepare_verbatim (chunk, name)
+ return function (str)
+ if not str:match("^%s*\noexpand\\" .. chunk .. "/") then
+ table.insert(pitex.verbatims[name], str)
+ return "%"
+ else
+ pitex.callback.remove("process_verbatim", "process_input_buffer")
+ return "\noexpand\\usecs{ptx@inner_verbatimstop:" .. chunk .. "}"
+ end
+ end
+end
+
+function install_verbatim (chunk, regime, name)
+ pitex.verbatims[name] = { regime = regime }
+ pitex.callback.process_verbatim = prepare_verbatim(chunk, name)
+ pitex.callback.register("process_input_buffer", "process_verbatim")
+end
+
+function do_verbatim(name, exec)
+ if exec then
+ tex.print(pitex.verbatims[name])
+ else
+ tex.print(pitex.verbatims[name].regime, pitex.verbatims[name])
+ end
+end
+\luacode/
+
+\def\ptx@verbatim_last{}
+
+\def\newverbatim#1{%
+ \ifnext[
+ {\ptx@newverbatim#1}
+ {\ptx@newverbatim#1[\verbcatcodes]}%
+ }
+
+\long\def\ptx@newverbatim#1[#2]#3#4{%
+ \edef#1{%
+ \bgroup\primunexpanded{#3}%
+ \bgroup\primunexpanded{\setcatcodes{\^^M=12}}%
+ \noexpand\ptx@verbatim{\commandtoname#1}{#2}}%
+ \defcs{ptx@inner_verbatimstop:\commandtoname#1}{#4\egroup}%
+ }
+
+\bgroup
+\setcatcodes{\^^M=12}%
+\gdef\ptx@verbatim#1^^M{%
+ \egroup%
+ \ptx@verbatim_prepare#1\relax%
+ }%
+\egroup
+
+\def\ptx@verbatim_prepare#1#2{%
+ \ifnext[
+ {\ptx@verbatim_do{#1}{#2}}
+ {\ptx@verbatim_do{#1}{#2}[last]}%
+ }
+
+\def\ptx@verbatim_do#1#2[#3]{%
+ \gdef\ptx@verbatim_last{#3}%
+ \directlua{install_verbatim("#1", \the#2, "#3")}%
+ }
+
+\newverbatim\verbatim{}
+ {\codefont\parindent0pt %\hsize=\maxdimen
+ \directlua{pitex.callback.close("french_punctuation", "kerning")}\relax
+ \vskip\baselineskip\printverbatim\relax
+ \directlua{pitex.callback.open("french_punctuation", "kerning")}
+ \vskip\baselineskip\removenextindent}
+
+\def\doverbatim{%
+ \ifnext[
+ {\ptx@doverbatim{true}}
+ {\ptx@doverbatim{true}[\ptx@verbatim_last]}%
+ }
+\def\printverbatim{%
+ \ifnext[
+ {\ptx@doverbatim{nil}}
+ {\ptx@doverbatim{nil}[\ptx@verbatim_last]}%
+ }
+\def\ptx@doverbatim#1[#2]{%
+ \directlua{do_verbatim("#2", #1)}%
+ }
diff --git a/macros/plain/contrib/plipsum/README b/macros/plain/contrib/plipsum/README
new file mode 100644
index 0000000000..2c478a9f4a
--- /dev/null
+++ b/macros/plain/contrib/plipsum/README
@@ -0,0 +1,76 @@
+P-LIPSUM
+========
+
+'Lorem ipsum' paragraphs generator for the purposes
+of the plain TeX developers.
+
+Author: Sergio Spina <sergio.am.spina@gmail.com>
+
+Version: 4.3 of 2013.05.08
+
+
+Contents of the package
+-----------------------
+
+- `plipsum.nw`: the source file
+- `plipsum.tex`: the format
+- `pliptest.tex`: an example file
+- `plipsum-doc.pdf`: the documentation
+- `compile.sh`: the installation program
+- `stripc`: a python filter
+- `README.md`: this file
+
+
+Installation
+------------
+
+- Run `plipsum.nw` through noweb. You van find it on the Norman Ramsey
+ web page (<http://www.cs.tufts.edu/~nr/noweb/>) or on CTAN
+ (<http://www.ctan.org/tex-archive/web/noweb>).
+
+ A suitable command can be:
+
+ $ notangle -Rplipsum.tex plipsum.nw | ./stripc > plipsum.tex
+
+ `stripc` is a python filter that strips away comments and blank spaces
+ from the final file.
+
+- Move the resulting `.tex` file to a place where TeX finds it.
+ On a TDS compliant system this should be (substitute `$TEXMF`
+ with your local or home texmf directory):
+
+ $TEXMF/tex/plain/plipsum/
+
+- If you like to, move the source file (`.nw`) in a
+ source directory of your system.
+
+- Update your filename database. How to achieve this depends
+ on your system. For TeXlive one of these commands should work:
+
+ $ texhash ~/texmf
+ $ sudo mktexlsr ~/texmf
+
+ More info on this is available with:
+
+ $ texhash --help
+ $ sudo mktexlsr --help
+
+- If you are using a non TDS compliant system you are on your own; take a
+ look in the documentation how to install new packages.
+
+- If you are using windows (TM) you are on your own even more.
+
+
+License
+-------
+This material is subject to the LaTeX Project Public License. See
+
+ http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+
+for the details of that license.
+
+
+Enjoy plipsum. Happy TeXing.
+
+
+= END =
diff --git a/macros/plain/contrib/plipsum/compile.sh b/macros/plain/contrib/plipsum/compile.sh
new file mode 100755
index 0000000000..228d211fdd
--- /dev/null
+++ b/macros/plain/contrib/plipsum/compile.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+MASTER='plipsum'
+
+# commands to compile the `plipsum' package.
+#
+# 1 - the tex format
+notangle -R$MASTER.tex $MASTER.nw | ./stripc > $MASTER.tex
+#
+# 2 - the example file.
+notangle -Rpliptest.tex $MASTER.nw | ./stripc > pliptest.tex
+#
+# 3 - the printable documentation.
+noweave -index -filter "elide paragraphs" $MASTER.nw > $MASTER-doc.tex
+pdflatex $MASTER-doc.tex
+pdflatex $MASTER-doc.tex
+pdflatex $MASTER-doc.tex
+
+# elimina i files non piu' necessari
+rm -v $MASTER-doc.aux
+rm -v $MASTER-doc.log
+rm -v $MASTER-doc.tex
+rm -v $MASTER-doc.toc
+
+
+# istruzioni per la installazione e saluti.
+echo " *************************************************************"
+echo " To finish the installation you have to move the following"
+echo " files into a directory searched by TeX:"
+echo ""
+echo " plipsum.tex"
+echo ""
+echo " A good place to put it is:"
+echo ""
+echo " ~/texmf/tex/plain/plipsum"
+echo ""
+echo ""
+echo " There exists two separate files"
+echo ""
+echo " plipsum-doc.pdf"
+echo " pliptest.tex"
+echo ""
+echo " containing the user documentation. A good place to put"
+echo " them is ~/texmf/doc/plain/plipsum."
+echo ""
+echo ""
+echo " The source files"
+echo ""
+echo " plipsum.nw"
+echo " compile.sh"
+echo ""
+echo " can be put into ~/texmf/source/plain/plipsum"
+echo ""
+echo ""
+echo " ======================================================"
+echo " Don't forget to run the command '$ texhash ~/texmf' !"
+echo " ======================================================"
+echo ""
+echo ""
+echo " Happy TeXing!"
+echo " *************************************************************"
+
+# fine
+
diff --git a/macros/plain/contrib/plipsum/plipsum-doc.pdf b/macros/plain/contrib/plipsum/plipsum-doc.pdf
new file mode 100644
index 0000000000..14157ec413
--- /dev/null
+++ b/macros/plain/contrib/plipsum/plipsum-doc.pdf
Binary files differ
diff --git a/macros/plain/contrib/plipsum/plipsum.nw b/macros/plain/contrib/plipsum/plipsum.nw
new file mode 100644
index 0000000000..1e23839823
--- /dev/null
+++ b/macros/plain/contrib/plipsum/plipsum.nw
@@ -0,0 +1,1067 @@
+%
+% filename: plipsum.nw
+% version: 4.3
+% date: May 8, 2013
+% author: Sergio Spina <sergio.am.spina@gmail.com>
+% description: 'Lorem ipsum' paragraphs for the purposes
+% of the plain TeX developers.
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status 'maintained'.
+%
+% The Current Maintainer of this work is Sergio Spina.
+%
+% This work consists of the files:
+%
+% plipsum.nw
+% compile.sh
+%
+% and the derived files:
+%
+% plipsum.tex the format
+% pliptest.tex an example of use
+% plipsum-doc.pdf the documentation
+%
+% during the compilation the following files are created and deleted:
+%
+% plipsum-doc.tex the documentation TeX manuscript
+%
+% The TeX code and a printable documentation can be obtained
+% running the file 'compile.sh' attached to this file.
+%
+% Alternatively you can compile this file with the following commands:
+%
+% - documentation
+%
+%$ noweave -index -filter "elide paragraphs" plipsum.nw > plipsum-doc.tex
+%$ pdflatex plipsum-doc.tex
+%$ pdflatex plipsum-doc.tex
+%$ pdflatex plipsum-doc.tex
+%
+% - files
+%
+%$ notangle -Rplipsum.tex plipsum.nw | ./stripc > plipsum.tex
+%$ notangle -Rpliptest.tex plipsum.nw | ./stripc > pliptest.tex
+%
+
+\catcode`@=11
+\def\newpage{\vfill\pagebreak}
+\let\@@part\part
+\def\part{\newpage\@@part}
+\def\<{\ifmmode\langle\else$\langle$\fi}
+\def\>{\ifmmode\rangle\else$\rangle$\fi}
+\catcode`@=12
+
+\def\plipsum{{\sl P-Lipsum\/}}
+
+\title{P-Lipsum\\[.3\baselineskip]\small A `lorem ipsum' paragraph generator\\ in plain \TeX\ for plain \TeX ers.}
+\author{Sergio Spina\\sergio.am.spina@gmail.com}
+\date{May 8, 2013}
+
+\maketitle
+
+\tableofcontents
+
+\part{Introduction}
+I wrote this format for my needs, taking inspiration from [[lipsum.dtx]] by
+Patrick Happel and [[kantlipsum.dtx]] by Enrico Gregorio. But those two
+packages are not useful for me as far as I use only plain \TeX\ and those
+packages are written in \LaTeX\ and aimed only to the \LaTeX\ world.
+
+Having used \plipsum\ for a while and having found it useful I've thought
+that it can be shared with the \TeX\ community.
+
+\part{The program}
+I used, to build this package, real phrases of real latin, taken from the
+Cicero's {\sl De finibus bonorum et malorum\/}. There are two main advantages in
+using real latin: first, it `sounds' better; secondly, in the phrases there are
+a lot of `fi', `fl', `ffi' and `ffl' groups, useful to see the effects of
+typographic ligatures with the font choosen for your document.
+
+\section{Usage.} To load the format specify [[\input plipsum]] into
+your document.
+
+\part{Macros}
+\section{\textbackslash lipsum} It's the main macro. It can accept one or two arguments
+separated by an hyphen and an optional parameter.
+
+The argument is one or two different numbers in the range 1-100.
+
+The optional parameter can be one of the following:
+\vskip\baselineskip
+\centerline{[[[s] | [short]]]}
+\centerline{[[[m] | [medium]]]}
+\centerline{[[[l] | [long]]]}
+\vskip\baselineskip
+
+For ex.:
+
+$$\halign{#\kern.2in\hfil$\leftarrow$\quad &#\hfil\cr
+[[\lipsum{33}]] & A. one argument\cr
+[[\lipsum[long]{33}]] & B. one optional parameter and one argument\cr
+[[\lipsum{13-33}]] & C. two arguments\cr
+[[\lipsum[s]{13-33}]] & D. one optional parameter and two arguments\cr}$$
+@
+In the case `A': it will be typeset just the paragraph of medium lenght number
+33.\par
+In the case `B': it will be typeset the paragraph of long lenght number 33.\par
+In the case `C`: it will be typeset 21 paragraphs of medium lenght, from the
+number 13 (included) up to the number 33 (included).\par
+In the case `D': it will be typeset 21 paragraphs of short lenght, from the
+number 13 (included) up to the number 33 (included)
+\footnote{The interface of the [[\lipsum]] command is slightly different from
+the previous version. It is not a good practice to change the interface from one
+version to another, but {\it this specific package} is not aimed to typeset
+documents whose destin is to be archieved, so the backward compatibility is not
+an important issue.}.
+@
+Arguments cannot be greater than 100.
+
+It's ok if the first argument is greater than the second.
+$$\halign{#\kern.2in\hfil$\leftarrow$\quad &#\hfil\cr
+[[\lipsum{33-13}]] & E. same as example `C'; it works as well.\cr}$$
+
+\section{\textbackslash everystartplipsumpar
+\textbackslash everyendplipsumpar}
+These two token lists were in existence in the previous version of \plipsum.
+As far as they can be easily replaced with normal \TeX\ programming tools
+they have been deleted.
+
+\section{\textbackslash nopar.} It eliminates the [[\par]] between one paragraph and
+the following one. This way many paragraphs may become one single big paragraph.
+$$\halign{#\kern.2in\hfil$\leftarrow$\quad &#\hfil\cr
+[[{\nopar\lipsum{14-16}}\par]] & \vtop{\hsize2.36in \noindent One single
+paragraph made with all the medium-lenght paragraphs number 14, number 15
+and number 16.}\cr}$$
+
+\part{Thanks}
+The `lorem ipsum' paragraphs were generated with the help of
+\vskip\baselineskip
+\noindent\centerline{[[http://loripsum.net]]}
+\vskip\baselineskip
+maybe the best lipsum generator on the web.
+
+The main source for the paragraphs in lipsum is the Cicero's {\sl De finibus
+bonorum et malorum\/}. You can find the complete, original text at:
+\vskip\baselineskip
+\noindent\centerline{[[http://www.thelatinlibrary.com/cicero/fin.shtml]]}
+\vskip\baselineskip
+I wrote the package with [[noweb]] by Norman Ramsey, a simple tool for Literate
+Programming.
+\vskip\baselineskip
+\noindent\centerline{[[http://www.cs.tufts.edu/~nr/noweb/]]}\par
+\noindent\centerline{[[http://www.ctan.org/tex-archive/web/noweb]]}\par
+\vskip\baselineskip
+\noindent I feel much more comfortable with this tool than the \LaTeX\ packages
+[[Doc]] and [[Docstrip]].
+
+\part{The code}
+Let's begin with the introductory things.
+\vskip.667\baselineskip
+Version informations in a comfortable place.
+<<preliminaries>>=
+\def\PLversion{4}
+\def\PLrevision{3}
+\def\PLrevisiondate{2013/05/08}
+@
+The sign `@' for the private macros.
+<<preliminaries>>=
+\chardef\beforeplipsumatcatcode=\the\catcode`@
+\catcode`@=11
+@
+Messages in the log file. Handle the newline with the pipe char.
+<<preliminaries>>=
+\def\@message#1{{\newlinechar`\^^J\message{#1}}}
+\def\@errmessage#1{{\newlinechar`\^^J\errmessage{#1}}}
+@
+The first cry of this \TeX\ child.
+<<preliminaries>>=
+\@message{^^JP-lipsum version
+ \PLversion.\PLrevision\space-- revision \PLrevisiondate^^J}
+@
+Let's go with the real thing. The job will be done in two stages:
+\begin{enumerate}
+\item first we will define a collection of ``lipsum'' paragraphs;
+\item then we will define the interfaces (macros) to expand the latin
+phrases into the document.
+\end{enumerate}
+@
+Every paragraph is constituted by a macro who's name can be reached at
+expansion time via a sequential number, for ex.: [[\lips@xxv{...}]],
+[[\lips@xxvi{...}]], etc.
+
+Macros from [[\lips@i]] up to [[\lips@c]] (the first 100 paragraphs) are long
+paragraphs; macros from [[\lips@ci]] up to [[\lips@cc]] are medium-lenght
+paragraphs and the macros from [[\lips@cci]] up to [[\lips@ccc]] are
+short paragraphs.
+
+As far as I'm too lazy to write 300 macro's names organized
+this way, the job will be done for me by the subsequent macro, thanks to the
+magic of [[\csname ... \endcsname]].
+<<collection>>=
+\newcount\c@parnumber \c@parnumber=0
+
+\def\create@par{\advance\c@parnumber by1
+ \expandafter\def\csname plips@\romannumeral\the\c@parnumber\endcsname}
+@
+The last touch: I write an equivalent of the primitive [[\par]] so I can safely
+`deactivate' it.
+<<collection>>=
+\def\@par{\par}
+@
+It follows the macro to deactivate [[\@par]]
+<<collection>>=
+\def\nopar{\let\@par\space}
+@ %def \nopar
+@
+Now we can define the catalog of latin phrases containing the characteristics
+builded till now. We won't report all the catalog: it's simply a list of 300
+identical macros where the expansion is constituted by a latin paragraph.
+So it follow just the first paragraph.
+<<collection>>=
+% LONG paragraphs
+\create@par{Quid enim necesse est, tamquam meretricem in matronarum coetum, sic
+voluptatem in virtutum concilium adducere? Nunc dicam de voluptate, nihil
+scilicet novi, ea tamen, quae te ipsum probaturum esse confidam. Iam quae
+corporis sunt, ea nec auctoritatem cum animi partibus, comparandam et
+cognitionem habent faciliorem. Si qua in iis corrigere voluit, deteriora fecit.
+Polemoni et iam ante Aristoteli ea prima visa sunt, quae paulo ante dixi. Neque
+solum ea communia, verum etiam paria esse dixerunt. Non enim quaero quid verum,
+sed quid cuique dicendum sit. Levatio igitur vitiorum magna fit in iis, qui
+habent ad virtutem progressionis aliquantum. A primo, ut opinor, animantium
+ortu petitur origo summi boni. Nam si quae sunt aliae, falsum est omnis animi
+voluptates esse e corporis societate. Quod est, ut dixi, habere ea, quae
+secundum naturam sint, vel omnia vel plurima et maxima. Praetereo multos, in
+bis doctum hominem et suavem, Hieronymum, quem iam cur Peripateticum appellem
+nescio.\@par}
+@
+<<paragraphs>>=
+\create@par{Qua ex cognitione facilior facta est investigatio rerum
+occultissimarum. Conclusum est enim contra Cyrenaicos satis acute, nihil ad Epicurum. Quid, cum volumus nomina eorum, qui quid gesserint, nota nobis esse, parentes, patriam, multa praeterea minime necessaria? Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Cum ageremus, inquit, vitae beatum et eundem supremum diem, scribebamus haec. Sed quid attinet de rebus tam apertis plura requirere? Sit hoc ultimum bonorum, quod nunc a me defenditur; Minime vero probatur huic disciplinae, de qua loquor, aut iustitiam aut amicitiam propter utilitates adscisci aut probari. Ut ei, qui iucunde vixerit annos decem, si aeque vita iucunda menstrua addatur, quia momentum aliquod habeat ad iucundum accessio, bonum sit; Cupiditates non Epicuri divisione finiebat, sed sua satietate. Nunc dicam de voluptate, nihil scilicet novi, ea tamen, quae te ipsum probaturum esse confidam. Quarum ambarum rerum cum medicinam pollicetur, luxuriae licentiam pollicetur.\@par}
+
+\create@par{Alia quaedam dicent, credo, magna antiquorum esse peccata, quae ille veri investigandi cupidus nullo modo ferre potuerit. Is hoc melior, quam Pyrrho, quod aliquod genus appetendi dedit, deterior quam ceteri, quod penitus a natura recessit. Quid autem habent admirationis, cum prope accesseris? Cum praesertim illa perdiscere ludus esset. Quos nisi redarguimus, omnis virtus, omne decus, omnis vera laus deserenda est. Vide, ne magis, inquam, tuum fuerit, cum re idem tibi, quod mihi, videretur, non nova te rebus nomina inponere. Quorum sine causa fieri nihil putandum est. Verum esto: verbum ipsum voluptatis non habet dignitatem, nec nos fortasse intellegimus. Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Non quam nostram quidem, inquit Pomponius iocans; Deinceps videndum est, quoniam satis apertum est sibi quemque natura esse carum, quae sit hominis natura.\@par}
+
+\create@par{Nam memini etiam quae nolo, oblivisci non possum quae volo. Cum vero paulum processerunt, lusionibus vel laboriosis delectantur, ut ne verberibus quidem deterreri possint, eaque cupiditas agendi aliquid adolescit una cum aetatibus. Tu enim ista lenius, hic Stoicorum more nos vexat. Bonum incolumis acies: misera caecitas. Cur tantas regiones barbarorum pedibus obiit, tot maria transmisit? Et quidem Arcesilas tuus, etsi fuit in disserendo pertinacior, tamen noster fuit; Hoc dictum in una re latissime patet, ut in omnibus factis re, non teste moveamur. Itaque eos id agere, ut a se dolores, morbos, debilitates repellant. Non elogia monimentorum id significant, velut hoc ad portam: Hunc unum plurimae consentiunt gentes populi primarium fuisse virum. Iam quae corporis sunt, ea nec auctoritatem cum animi partibus, comparandam et cognitionem habent faciliorem. Consequens enim est et post oritur, ut dixi. Quamquam tu hanc copiosiorem etiam soles dicere.\@par}
+
+\create@par{Ita enim vivunt quidam, ut eorum vita refellatur oratio. Sed eum qui audiebant, quoad poterant, defendebant sententiam suam. Quid, si non sensus modo ei sit datus, verum etiam animus hominis? Stulti autem malorum memoria torquentur, sapientes bona praeterita grata recordatione renovata delectant. Non enim hilaritate nec lascivia nec risu aut ioco, comite levitatis, saepe etiam tristes firmitate et constantia sunt beati. Unum nescio, quo modo possit, si luxuriosus sit, finitas cupiditates habere. Cum audissem Antiochum, Brute, ut solebam, cum M. Nonne videmus quanta perturbatio rerum omnium consequatur, quanta confusio? Virtutibus igitur rectissime mihi videris et ad consuetudinem nostrae orationis vitia posuisse contraria. Cur igitur easdem res, inquam, Peripateticis dicentibus verbum nullum est, quod non intellegatur? Qui enim voluptatem ipsam contemnunt, iis licet dicere se acupenserem maenae non anteponere. Ut optime, secundum naturam affectum esse possit.\@par}
+
+\create@par{At quanta conantur! Mundum hunc omnem oppidum esse nostrum! Incendi igitur eos, qui audiunt, vides. Quid, cum volumus nomina eorum, qui quid gesserint, nota nobis esse, parentes, patriam, multa praeterea minime necessaria? Fieri, inquam, Triari, nullo pacto potest, ut non dicas, quid non probes eius, a quo dissentias. Sed finge non solum callidum eum, qui aliquid improbe faciat, verum etiam praepotentem, ut M. Illud dico, ea, quae dicat, praeclare inter se cohaerere. Aberat omnis dolor, qui si adesset, nec molliter ferret et tamen medicis plus quam philosophis uteretur. Quibus autem in rebus tanta obscuratio non fit, fieri tamen potest, ut id ipsum, quod interest, non sit magnum. Si quicquam extra virtutem habeatur in bonis. Nam illud quidem adduci vix possum, ut ea, quae senserit ille, tibi non vera videantur. Et nunc quidem quod eam tuetur, ut de vite potissimum loquar, est id extrinsecus; Nec vero pietas adversus deos nec quanta iis gratia debeatur sine explicatione naturae intellegi potest.\@par}
+
+\create@par{Non enim, si omnia non sequebatur, idcirco non erat ortus illinc. Portenta haec esse dicit, neque ea ratione ullo modo posse vivi; Quem ad modum quis ambulet, sedeat, qui ductus oris, qui vultus in quoque sit? Theophrasti igitur, inquit, tibi liber ille placet de beata vita? Quarum cum una sit, qua mores conformari putantur, differo eam partem, quae quasi stirps ets huius quaestionis. Bona autem corporis huic sunt, quod posterius posui, similiora. Nam quod ait sensibus ipsis iudicari voluptatem bonum esse, dolorem malum, plus tribuit sensibus, quam nobis leges permittunt, cum privatarum litium iudices sumus. Nihil enim desiderabile concupiscunt, plusque in ipsa iniuria detrimenti est quam in iis rebus emolumenti, quae pariuntur iniuria. Ut proverbia non nulla veriora sint quam vestra dogmata. Quaeque de virtutibus dicta sunt, quem ad modum eae semper voluptatibus inhaererent, eadem de amicitia dicenda sunt. Tum Torquatus: Prorsus, inquit, assentior;\@par}
+
+\create@par{Cur fortior sit, si illud, quod tute concedis, asperum et vix ferendum putabit? Tu quidem reddes; Haec non erant eius, qui innumerabilis mundos infinitasque regiones, quarum nulla esset ora, nulla extremitas, mente peragravisset. Nunc dicam de voluptate, nihil scilicet novi, ea tamen, quae te ipsum probaturum esse confidam. Ita fit beatae vitae domina fortuna, quam Epicurus ait exiguam intervenire sapienti. Themistocles quidem, cum ei Simonides an quis alius artem memoriae polliceretur, Oblivionis, inquit, mallem. Qui si ea, quae dicit, ita sentiret, ut verba significant, quid inter eum et vel Pyrrhonem vel Aristonem interesset? Hunc ipsum Zenonis aiunt esse finem declarantem illud, quod a te dictum est, convenienter naturae vivere. Semper enim ex eo, quod maximas partes continet latissimeque funditur, tota res appellatur. Fieri, inquam, Triari, nullo pacto potest, ut non dicas, quid non probes eius, a quo dissentias. Ne amores quidem sanctos a sapiente alienos esse arbitrantur. Si longus, levis dictata sunt.\@par}
+
+\create@par{Stoici autem, quod finem bonorum in una virtute ponunt, similes sunt illorum; Quod praeceptum quia maius erat, quam ut ab homine videretur, idcirco assignatum est deo. Expectoque quid ad id, quod quaerebam, respondeas. Et quidem saepe quaerimus verbum Latinum par Graeco et quod idem valeat; Tum ego: Non mehercule, inquam, soleo temere contra Stoicos, non quo illis admodum assentiar, sed pudore impedior; Idem etiam dolorem saepe perpetiuntur, ne, si id non faciant, incidant in maiorem. Quicquid porro animo cernimus, id omne oritur a sensibus; Sed non alienum est, quo facilius vis verbi intellegatur, rationem huius verbi faciendi Zenonis exponere. Quodsi Graeci leguntur a Graecis isdem de rebus alia ratione compositis, quid est, cur nostri a nostris non legantur? Quantum Aristoxeni ingenium consumptum videmus in musicis? Quis enim confidit semper sibi illud stabile et firmum permansurum, quod fragile et caducum sit? Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es?\@par}
+
+\create@par{Est enim perspicuum nullam artem ipsam in se versari, sed esse aliud artem ipsam, aliud quod propositum sit arti. Nam cum Academicis incerta luctatio est, qui nihil affirmant et quasi desperata cognitione certi id sequi volunt, quodcumque veri simile videatur. Mihi enim erit isdem istis fortasse iam utendum. Eorum enim omnium multa praetermittentium, dum eligant aliquid, quod sequantur, quasi curta sententia; Sin kakan malitiam dixisses, ad aliud nos unum certum vitium consuetudo Latina traduceret. Nec lapathi suavitatem acupenseri Galloni Laelius anteponebat, sed suavitatem ipsam neglegebat; Potius ergo illa dicantur: turpe esse, viri non esse debilitari dolore, frangi, succumbere. Teneo, inquit, finem illi videri nihil dolere. Age sane, inquam. Ita multo sanguine profuso in laetitia et in victoria est mortuus. Et quidem illud ipsum non nimium probo et tantum patior, philosophum loqui de cupiditatibus finiendis. Quid, cum fictas fabulas, e quibus utilitas nulla elici potest, cum voluptate legimus?\@par}
+
+\create@par{Nunc omni virtuti vitium contrario nomine opponitur. In quibus doctissimi illi veteres inesse quiddam caeleste et divinum putaverunt. Quaesita enim virtus est, non quae relinqueret naturam, sed quae tueretur. Sin est etiam corpus, ista explanatio naturae nempe hoc effecerit, ut ea, quae ante explanationem tenebamus, relinquamus. Vives, inquit Aristo, magnifice atque praeclare, quod erit cumque visum ages, numquam angere, numquam cupies, numquam timebis. Nihil est enim, de quo aliter tu sentias atque ego, modo commutatis verbis ipsas res conferamus. Negat esse eam, inquit, propter se expetendam. Esse enim quam vellet iniquus iustus poterat inpune. Ita similis erit ei finis boni, atque antea fuerat, neque idem tamen; Nec vero umquam summum bonum assequi quisquam posset, si omnia illa, quae sunt extra, quamquam expetenda, summo bono continerentur. Sin tantum modo ad indicia veteris memoriae cognoscenda, curiosorum. Sit hoc ultimum bonorum, quod nunc a me defenditur;\@par}
+
+\create@par{Sit ista in Graecorum levitate perversitas, qui maledictis insectantur eos, a quibus de veritate dissentiunt. Quid, cum fictas fabulas, e quibus utilitas nulla elici potest, cum voluptate legimus? Aut pertinacissimus fueris, si in eo perstiteris ad corpus ea, quae dixi, referri, aut deserueris totam Epicuri voluptatem, si negaveris. Quid affers, cur Thorius, cur Caius Postumius, cur omnium horum magister, Orata, non iucundissime vixerit? Quia, si mala sunt, is, qui erit in iis, beatus non erit. Si quae forte-possumus. Tantum dico, magis fuisse vestrum agere Epicuri diem natalem, quam illius testamento cavere ut ageretur. Ex quo, id quod omnes expetunt, beate vivendi ratio inveniri et comparari potest. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant. Quid censes in Latino fore? Curium putes loqui, interdum ita laudat, ut quid praeterea sit bonum neget se posse ne suspicari quidem. Tum ille: Tu autem cum ipse tantum librorum habeas, quos hic tandem requiris? Hic nihil fuit, quod quaereremus.\@par}
+
+\create@par{Nam prius a se poterit quisque discedere quam appetitum earum rerum, quae sibi conducant, amittere. Quamquam non negatis nos intellegere quid sit voluptas, sed quid ille dicat. Venit enim mihi Platonis in mentem, quem accepimus primum hic disputare solitum; Tum Torquatus: Prorsus, inquit, assentior; Quid enim de amicitia statueris utilitatis causa expetenda vides. Quaesita enim virtus est, non quae relinqueret naturam, sed quae tueretur. Quae iam oratio non a philosopho aliquo, sed a censore opprimenda est. Ergo opifex plus sibi proponet ad formarum quam civis excellens ad factorum pulchritudinem? Illa enim, quae prosunt aut quae nocent, aut bona sunt aut mala, quae sint paria necesse est. Est autem situm in nobis ut et adversa quasi perpetua oblivione obruamus et secunda iucunde ac suaviter meminerimus. Ergo in utroque exercebantur, eaque disciplina effecit tantam illorum utroque in genere dicendi copiam. Cur igitur, cum de re conveniat, non malumus usitate loqui?\@par}
+
+\create@par{Ne discipulum abducam, times. Itaque ne iustitiam quidem recte quis dixerit per se ipsam optabilem, sed quia iucunditatis vel plurimum afferat. Quid enim mihi potest esse optatius quam cum Catone, omnium virtutum auctore, de virtutibus disputare? At cum de plurimis eadem dicit, tum certe de maximis. Ex quo intellegitur nec intemperantiam propter se esse fugiendam temperantiamque expetendam, non quia voluptates fugiat, sed quia maiores consequatur. Propter nos enim illam, non propter eam nosmet ipsos diligimus. Sic enim maiores nostri labores non fugiendos tristissimo tamen verbo aerumnas etiam in deo nominaverunt. Haec qui audierit, ut ridere non curet, discedet tamen nihilo firmior ad dolorem ferendum, quam venerat. Quae etsi mihi nullo modo probantur, tamen Democritum laudatum a ceteris ab hoc, qui eum unum secutus esset, nollem vituperatum. Nosti, credo, illud: Nemo pius est, qui pietatem-; Huic mori optimum esse propter desperationem sapientiae, illi propter spem vivere.\@par}
+
+\create@par{Quid turpius quam sapientis vitam ex insipientium sermone pendere? Nescio quo modo praetervolavit oratio. Quis est enim, in quo sit cupiditas, quin recte cupidus dici possit? Respondebo me non quaerere, inquam, hoc tempore quid virtus efficere possit, sed quid constanter dicatur, quid ipsum a se dissentiat. Quid in isto egregio tuo officio et tanta fide-sic enim existimo-ad corpus refers? Quorum sine causa fieri nihil putandum est. Semper enim ex eo, quod maximas partes continet latissimeque funditur, tota res appellatur. Summum a vobis bonum voluptas dicitur. Sed emolumenta communia esse dicuntur, recte autem facta et peccata non habentur communia. De hominibus dici non necesse est. Si ad corpus pertinentibus, rationes tuas te video compensare cum istis doloribus, non memoriam corpore perceptarum voluptatum; Verum enim diceret, idque Socratem, qui voluptatem nullo loco numerat, audio dicentem, cibi condimentum esse famem, potionis sitim.\@par}
+
+\create@par{Quae adhuc, Cato, a te dicta sunt, eadem, inquam, dicere posses, si sequerere Pyrrhonem aut Aristonem. At certe gravius. Nihil enim iam habes, quod ad corpus referas; Quis enim potest istis, quae te, ut ais, delectant, brevibus et acutis auditis de sententia decedere? Quis nostrum dixerit, quos non pudet ea, quae Stoici aspera dicunt, mala dicere, melius esse turpiter aliquid facere cum voluptate quam honeste cum dolore? Utinam quidem dicerent alium alio beatiorem! Iam ruinas videres. Utrum igitur tibi litteram videor an totas paginas commovere? Curium putes loqui, interdum ita laudat, ut quid praeterea sit bonum neget se posse ne suspicari quidem. Intellegi quidem, ut propter aliam quampiam rem, verbi gratia propter voluptatem, nos amemus; Utrum igitur tibi non placet, inquit, virtutisne tantam esse vim, ut ad beate vivendum se ipsa contenta sit? Ne tum quidem te respicies et cogitabis sibi quemque natum esse et suis voluptatibus? Confecta res esset. Quod ea non occurrentia fingunt, vincunt Aristonem;\@par}
+
+\create@par{Quae diligentissime contra Aristonem dicuntur a Chryippo. Nam illud vehementer repugnat, eundem beatum esse et multis malis oppressum. Atqui perspicuum est hominem e corpore animoque constare, cum primae sint animi partes, secundae corporis. Ergo opifex plus sibi proponet ad formarum quam civis excellens ad factorum pulchritudinem? Sed nimis multa. Quid ad utilitatem tantae pecuniae? Res tota, Torquate, non doctorum hominum, velle post mortem epulis celebrari memoriam sui nominis. Sed tamen omne, quod de re bona dilucide dicitur, mihi praeclare dici videtur. Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Itaque eos id agere, ut a se dolores, morbos, debilitates repellant. Quod etsi ingeniis magnis praediti quidam dicendi copiam sine ratione consequuntur, ars tamen est dux certior quam natura. Vives, inquit Aristo, magnifice atque praeclare, quod erit cumque visum ages, numquam angere, numquam cupies, numquam timebis.\@par}
+
+\create@par{Itaque et manendi in vita et migrandi ratio omnis iis rebus, quas supra dixi, metienda. Apparet statim, quae sint officia, quae actiones. Hic ego: Etsi facit hic quidem, inquam, Piso, ut vides, ea, quae praecipis, tamen mihi grata hortatio tua est. His singulis copiose responderi solet, sed quae perspicua sunt longa esse non debent. Ita finis bonorum existit secundum naturam vivere sic affectum, ut optime is affici possit ad naturamque accommodatissime. An dolor longissimus quisque miserrimus, voluptatem non optabiliorem diuturnitas facit? Id est enim, de quo quaerimus. Vives, inquit Aristo, magnifice atque praeclare, quod erit cumque visum ages, numquam angere, numquam cupies, numquam timebis. Post enim Chrysippum eum non sane est disputatum. Dicam, inquam, et quidem discendi causa magis, quam quo te aut Epicurum reprehensum velim. At quanta conantur! Mundum hunc omnem oppidum esse nostrum! Incendi igitur eos, qui audiunt, vides. Non modo carum sibi quemque, verum etiam vehementer carum esse?\@par}
+
+\create@par{Quae cum praeponunt, ut sit aliqua rerum selectio, naturam videntur sequi; Crassus fuit, qui tamen solebat uti suo bono, ut hodie est noster Pompeius, cui recte facienti gratia est habenda; Ex quo intellegitur nec intemperantiam propter se esse fugiendam temperantiamque expetendam, non quia voluptates fugiat, sed quia maiores consequatur. Praeclare Laelius, et recte sofñw, illudque vere: O Publi, o gurges, Galloni! es homo miser, inquit. Quid, si reviviscant Platonis illi et deinceps qui eorum auditores fuerunt, et tecum ita loquantur? Quid enim ab antiquis ex eo genere, quod ad disserendum valet, praetermissum est? Non enim, si omnia non sequebatur, idcirco non erat ortus illinc. Sed ea mala virtuti magnitudine obruebantur. Quid, si reviviscant Platonis illi et deinceps qui eorum auditores fuerunt, et tecum ita loquantur? Si ad corpus pertinentibus, rationes tuas te video compensare cum istis doloribus, non memoriam corpore perceptarum voluptatum;\@par}
+
+\create@par{Crasso, quem semel ait in vita risisse Lucilius, non contigit, ut ea re minus agelastoj ut ait idem, vocaretur. Is cum arderet podagrae doloribus visitassetque hominem Charmides Epicureus perfamiliaris et tristis exiret, Mane, quaeso, inquit, Charmide noster; Potius ergo illa dicantur: turpe esse, viri non esse debilitari dolore, frangi, succumbere. Quia dolori non voluptas contraria est, sed doloris privatio. Addo etiam illud, multa iam mihi dare signa puerum et pudoris et ingenii, sed aetatem vides. Fortitudinis quaedam praecepta sunt ac paene leges, quae effeminari virum vetant in dolore. Is enim, qui occultus et tectus dicitur, tantum abest ut se indicet, perficiet etiam ut dolere alterius improbe facto videatur. Perspicuum est enim, nisi aequitas, fides, iustitia proficiscantur a natura, et si omnia haec ad utilitatem referantur, virum bonum non posse reperiri; Crassus fuit, qui tamen solebat uti suo bono, ut hodie est noster Pompeius, cui recte facienti gratia est habenda;\@par}
+
+\create@par{Nec vero pietas adversus deos nec quanta iis gratia debeatur sine explicatione naturae intellegi potest. Quaesita enim virtus est, non quae relinqueret naturam, sed quae tueretur. Non minor, inquit, voluptas percipitur ex vilissimis rebus quam ex pretiosissimis. Non enim, si malum est dolor, carere eo malo satis est ad bene vivendum. Sin autem est in ea, quod quidam volunt, nihil impedit hanc nostram comprehensionem summi boni. Non minor, inquit, voluptas percipitur ex vilissimis rebus quam ex pretiosissimis. Non risu potius quam oratione eiciendum? Non igitur potestis voluptate omnia dirigentes aut tueri aut retinere virtutem. Hi curatione adhibita levantur in dies, valet alter plus cotidie, alter videt. Quae enim dici Latine posse non arbitrabar, ea dicta sunt a te verbis aptis nec minus plane quam dicuntur a Graecis. Quam si explicavisset, non tam haesitaret. Illa sunt similia: hebes acies est cuipiam oculorum, corpore alius senescit;\@par}
+
+\create@par{Illa videamus, quae a te de amicitia dicta sunt. Illud quaero, quid ei, qui in voluptate summum bonum ponat, consentaneum sit dicere. Hos contra singulos dici est melius. Semper enim ita adsumit aliquid, ut ea, quae prima dederit, non deserat. Sin laboramus, quis est, qui alienae modum statuat industriae? Quas enim kakaw Graeci appellant, vitia malo quam malitias nominare. Illa argumenta propria videamus, cur omnia sint paria peccata. Non ego tecum iam ita iocabor, ut isdem his de rebus, cum L. Sin autem ad animum, falsum est, quod negas animi ullum esse gaudium, quod non referatur ad corpus. Nam, ut saepe iam dixi, in infirma aetate inbecillaque mente vis naturae quasi per caliginem cernitur; Amicitiae vero locus ubi esse potest aut quis amicus esse cuiquam, quem non ipsum amet propter ipsum? Quod si ita se habeat, non possit beatam praestare vitam sapientia. An, si id probas, fieri ita posse negas, ut ii, qui virtutis compotes sint, etiam malis quibusdam affecti beati sint?\@par}
+
+\create@par{Ne amores quidem sanctos a sapiente alienos esse arbitrantur. Quae est quaerendi ac disserendi, quae logikh dicitur, iste vester plane, ut mihi quidem videtur, inermis ac nudus est. Quae cum essent dicta, finem fecimus et ambulandi et disputandi. Incommoda autem et commoda-ita enim estmata et dustmata appello-communia esse voluerunt, paria noluerunt. Sed nonne merninisti licere mihi ista probare, quae sunt a te dicta? Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es? Si est nihil nisi corpus, summa erunt illa: valitudo, vacuitas doloris, pulchritudo, cetera. Hoc autem loco tantum explicemus haec honesta, quae dico, praeterquam quod nosmet ipsos diligamus, praeterea suapte natura per se esse expetenda. Quare attendo te studiose et, quaecumque rebus iis, de quibus hic sermo est, nomina inponis, memoriae mando; Ita fit cum gravior, tum etiam splendidior oratio. Eaedem enim utilitates poterunt eas labefactare atque pervertere.\@par}
+
+\create@par{Nam haec ipsa mihi erunt in promptu, quae modo audivi, nec ante aggrediar, quam te ab istis, quos dicis, instructum videro. Sed non sunt in eo genere tantae commoditates corporis tamque productae temporibus tamque multae. Estne, quaeso, inquam, sitienti in bibendo voluptas? Quo modo autem philosophus loquitur? Primum in nostrane potestate est, quid meminerimus? Et quidem, Cato, hanc totam copiam iam Lucullo nostro notam esse oportebit; Etiam inchoatum, ut, si iuste depositum reddere in recte factis sit, in officiis ponatur depositum reddere; Frater et T. Octavio fuit, cum illam severitatem in eo filio adhibuit, quem in adoptionem D. Quae animi affectio suum cuique tribuens atque hanc, quam dico. Sed hoc summum bonum, quod tertia significatione intellegitur, eaque vita, quae ex summo bono degitur, quia coniuncta ei virtus est. In qua si nihil est praeter rationem, sit in una virtute finis bonorum; Sic igitur in homine perfectio ista in eo potissimum, quod est optimum, id est in virtute, laudatur.\@par}
+
+\create@par{Ad eas enim res ab Epicuro praecepta dantur. Quid enim est a Chrysippo praetermissum in Stoicis? Sed id ne cogitari quidem potest quale sit, ut non repugnet ipsum sibi. Videsne igitur Zenonem tuum cum Aristone verbis concinere, re dissidere, cum Aristotele et illis re consentire, verbis discrepare? Ista ipsa, quae tu breviter: regem, dictatorem, divitem solum esse sapientem, a te quidem apte ac rotunde; Philosophi autem in suis lectulis plerumque moriuntur. Atqui, inquit, si Stoicis concedis ut virtus sola, si adsit vitam efficiat beatam, concedis etiam Peripateticis. Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Fatebuntur Stoici haec omnia dicta esse praeclare, neque eam causam Zenoni desciscendi fuisse. Atque ut a corpore ordiar, videsne ut, si quae in membris prava aut debilitata aut inminuta sint, occultent homines? Fortitudinis quaedam praecepta sunt ac paene leges, quae effeminari virum vetant in dolore. Huius ego nunc auctoritatem sequens idem faciam.\@par}
+
+\create@par{Quo minus animus a se ipse dissidens secumque discordans gustare partem ullam liquidae voluptatis et liberae potest. Illi enim inter se dissentiunt. Nam constitui virtus nullo modo potesti nisi ea, quae sunt prima naturae, ut ad summam pertinentia tenebit. Et hanc quidem primam exigam a te operam, ut audias me quae a te dicta sunt refellentem. Et quoniam haec deducuntur de corpore quid est cur non recte pulchritudo etiam ipsa propter se expetenda ducatur? Decius, princeps in ea familia consulatus, cum se devoverat et equo admisso in mediam aciem Latinorum irruebat, aliquid de voluptatibus suis cogitabat? Haec mihi videtur delicatior, ut ita dicam, molliorque ratio, quam virtutis vis gravitasque postulat. Iam id ipsum absurdum, maximum malum neglegi. Quis Aristidem non mortuum diligit? Nos quidem Virtutes sic natae sumus, ut tibi serviremus, aliud negotii nihil habemus. Quae cum dixissem, Habeo, inquit Torquatus, ad quos ista referam, et, quamquam aliquid ipse poteram, tamen invenire malo paratiores.\@par}
+
+\create@par{Contemnit enim disserendi elegantiam, confuse loquitur. Quo studio cum satiari non possint, omnium ceterarum rerum obliti níhil abiectum, nihil humile cogitant; Quae cum magnifice primo dici viderentur, considerata minus probabantur. Scripta sane et multa et polita, sed nescio quo pacto auctoritatem oratio non habet. Sed ad haec, nisi molestum est, habeo quae velim. Cur deinde Metrodori liberos commendas? At enim hic etiam dolore. Licet hic rursus ea commemores, quae optimis verbis ab Epicuro de laude amicitiae dicta sunt. Hoc mihi cum tuo fratre convenit. Venit enim mihi Platonis in mentem, quem accepimus primum hic disputare solitum; Atque etiam valítudinem, vires, vacuitatem doloris non propter utilitatem solum, sed etiam ipsas propter se expetemus. Cur fortior sit, si illud, quod tute concedis, asperum et vix ferendum putabit? Stuprata per vim Lucretia a regis filio testata civis se ipsa interemit. Inscite autem medicinae et gubernationis ultimum cum ultimo sapientiae comparatur.\@par}
+
+\create@par{Sed tempus est, si videtur, et recta quidem ad me. Quis enim potest istis, quae te, ut ais, delectant, brevibus et acutis auditis de sententia decedere? Stuprata per vim Lucretia a regis filio testata civis se ipsa interemit. Sed dum efficere vultis beatum sapientem, cum maximas animo voluptates percipiat omnibusque partibus maiores quam corpore, quid occurrat non videtis. Quid igitur dubitamus in tota eius natura quaerere quid sit effectum? Sed ille, ut dixi, vitiose. Nec vero pietas adversus deos nec quanta iis gratia debeatur sine explicatione naturae intellegi potest. Sed est forma eius disciplinae, sicut fere ceterarum, triplex: una pars est naturae, disserendi altera, vivendi tertia. Quod autem in homine praestantissimum atque optimum est, id deseruit. Indicant pueri, in quibus ut in speculis natura cernitur. Deinde prima illa, quae in congressu solemus: Quid tu, inquit, huc? Non est igitur voluptas bonum. Omnes enim iucundum motum, quo sensus hilaretur.\@par}
+
+\create@par{Innumerabilia dici possunt in hanc sententiam, sed non necesse est. An vero displicuit ea, quae tributa est animi virtutibus tanta praestantia? Quid, quod res alia tota est? Ergo in iis adolescentibus bonam spem esse dicemus et magnam indolem, quos suis commodis inservituros et quicquid ipsis expediat facturos arbitrabimur? Itaque si aut requietem natura non quaereret aut eam posset alia quadam ratione consequi. Id quaeris, inquam, in quo, utrum respondero, verses te huc atque illuc necesse est. Nec vero intermittunt aut admirationem earum rerum, quae sunt ab antiquis repertae, aut investigationem novarum. Et summatim quidem haec erant de corpore animoque dicenda, quibus quasi informatum est quid hominis natura postulet. Hic, qui utrumque probat, ambobus debuit uti, sicut facit re, neque tamen dividit verbis. Ergo id est convenienter naturae vivere, a natura discedere. Hic, qui utrumque probat, ambobus debuit uti, sicut facit re, neque tamen dividit verbis.\@par}
+
+\create@par{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Teneo, inquit, finem illi videri nihil dolere. His singulis copiose responderi solet, sed quae perspicua sunt longa esse non debent. Ut ad minora veniam, mathematici, poëtae, musici, medici denique ex hac tamquam omnium artificum officina profecti sunt. Ita finis bonorum existit secundum naturam vivere sic affectum, ut optime is affici possit ad naturamque accommodatissime. Confecta res esset. Et quidem, Cato, hanc totam copiam iam Lucullo nostro notam esse oportebit; Sic, et quidem diligentius saepiusque ista loquemur inter nos agemusque communiter. Duo Reges: constructio interrete. Quid vero? Ex quo illud efficitur, qui bene cenent omnis libenter cenare, qui libenter, non continuo bene. Non minor, inquit, voluptas percipitur ex vilissimis rebus quam ex pretiosissimis. Quae rursus dum sibi evelli ex ordine nolunt, horridiores evadunt, asperiores, duriores et oratione et moribus.\@par}
+
+\create@par{Teneamus enim illud necesse est, cum consequens aliquod falsum sit, illud, cuius id consequens sit, non posse esse verum. Cur deinde Metrodori liberos commendas? Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo. Ut nemo dubitet, eorum omnia officia quo spectare, quid sequi, quid fugere debeant? Isto modo, ne si avia quidem eius nata non esset. Sint modo partes vitae beatae. Ne tu, inquam, Cato, verbis illustribus et id, quod vis, declarantibus! itaque mihi videris Latine docere philosophiam et ei quasi civitatem dare. Partim cursu et peragratione laetantur, congregatione aliae coetum quodam modo civitatis imitantur; Placet igitur tibi, Cato, cum res sumpseris non concessas, ex illis efficere, quod velis? Quem si tenueris, non modo meum Ciceronem, sed etiam me ipsum abducas licebit. Ego autem tibi, Piso, assentior usu hoc venire, ut acrius aliquanto et attentius de claris viris locorum admonitu cogitemus. Huius ego nunc auctoritatem sequens idem faciam.\@par}
+
+\create@par{Sed venio ad inconstantiae crimen, ne saepius dicas me aberrare; Qui non moveatur et offensione turpitudinis et comprobatione honestatis? Res enim fortasse verae, certe graves, non ita tractantur, ut debent, sed aliquanto minutius. At habetur! Et ego id scilicet nesciebam! Sed ut sit, etiamne post mortem coletur? Atque ab his initiis profecti omnium virtutum et originem et progressionem persecuti sunt. Theophrastum tamen adhibeamus ad pleraque, dum modo plus in virtute teneamus, quam ille tenuit, firmitatis et roboris. Sed vobis voluptatum perceptarum recordatio vitam beatam facit, et quidem corpore perceptarum. Quod cum ille dixisset et satis disputatum videretur, in oppidum ad Pomponium perreximus omnes. Haec dicuntur fortasse ieiunius; Sed ne, dum huic obsequor, vobis molestus sim. Vadem te ad mortem tyranno dabis pro amico, ut Pythagoreus ille Siculo fecit tyranno? Quod cum ille dixisset et satis disputatum videretur, in oppidum ad Pomponium perreximus omnes.\@par}
+
+\create@par{Negat enim tenuissimo victu, id est contemptissimis escis et potionibus, minorem voluptatem percipi quam rebus exquisitissimis ad epulandum. Hoc non est positum in nostra actione. Cum id fugiunt, re eadem defendunt, quae Peripatetici, verba. Nam neque virtute retinetur ille in vita, nec iis, qui sine virtute sunt, mors est oppetenda. Is ita vivebat, ut nulla tam exquisita posset inveniri voluptas, qua non abundaret. Vidit Homerus probari fabulam non posse, si cantiunculis tantus irretitus vir teneretur; An, si id probas, fieri ita posse negas, ut ii, qui virtutis compotes sint, etiam malis quibusdam affecti beati sint? Quod autem magnum dolorem brevem, longinquum levem esse dicitis, id non intellego quale sit. Ita cum ea volunt retinere, quae superiori sententiae conveniunt, in Aristonem incidunt; At enim, qua in vita est aliquid mali, ea beata esse non potest. Nam illud quidem adduci vix possum, ut ea, quae senserit ille, tibi non vera videantur. Confecta res esset.\@par}
+
+\create@par{Gloriosa ostentatio in constituendo summo bono. Sic, et quidem diligentius saepiusque ista loquemur inter nos agemusque communiter. Idne consensisse de Calatino plurimas gentis arbitramur, primarium populi fuisse, quod praestantissimus fuisset in conficiendis voluptatibus? Nunc dicam de voluptate, nihil scilicet novi, ea tamen, quae te ipsum probaturum esse confidam. Restant Stoici, qui cum a Peripateticis et Academicis omnia transtulissent, nominibus aliis easdem res secuti sunt. Facit igitur Lucius noster prudenter, qui audire de summo bono potissimum velit; Nam haec ipsa mihi erunt in promptu, quae modo audivi, nec ante aggrediar, quam te ab istis, quos dicis, instructum videro. Negat enim summo bono afferre incrementum diem. Illum mallem levares, quo optimum atque humanissimum virum, Cn. Sed videbimus. Itaque hoc frequenter dici solet a vobis, non intellegere nos, quam dicat Epicurus voluptatem. Si ista mala sunt, in quae potest incidere sapiens, sapientem esse non esse ad beate vivendum satis.\@par}
+
+\create@par{Ita est quoddam commune officium sapientis et insipientis, ex quo efficitur versari in iis, quae media dicamus. Quodsi vultum tibi, si incessum fingeres, quo gravior viderere, non esses tui similis; Nec vero alia sunt quaerenda contra Carneadeam illam sententiam. O magnam vim ingenii causamque iustam, cur nova existeret disciplina! Perge porro. Nam de summo mox, ut dixi, videbimus et ad id explicandum disputationem omnem conferemus. Polycratem Samium felicem appellabant. Immo vero, inquit, ad beatissime vivendum parum est, ad beate vero satis. Quod dicit Epicurus etiam de voluptate, quae minime sint voluptates, eas obscurari saepe et obrui. Id enim volumus, id contendimus, ut officii fructus sit ipsum officium. Quod iam a me expectare noli. Itaque nostrum est-quod nostrum dico, artis est-ad ea principia, quae accepimus. Quod autem patrocinium aut quae ista causa est voluptatis, quae nec testes ullos e claris viris nec laudatores poterit adhibere? Igitur ne dolorem quidem.\@par}
+
+\create@par{Beatus sibi videtur esse moriens. Quamquam ab iis philosophiam et omnes ingenuas disciplinas habemus; Cur igitur, inquam, res tam dissimiles eodem nomine appellas? Sed quanta sit alias, nunc tantum possitne esse tanta. Ex quo illud efficitur, qui bene cenent omnis libenter cenare, qui libenter, non continuo bene. Nam et ille apud Trabeam voluptatem animi nimiam laetitiam dicit eandem, quam ille Caecilianus, qui omnibus laetitiis laetum esse se narrat. Si enim ita est, vide ne facinus facias, cum mori suadeas. Ita finis bonorum existit secundum naturam vivere sic affectum, ut optime is affici possit ad naturamque accommodatissime. Sit ista in Graecorum levitate perversitas, qui maledictis insectantur eos, a quibus de veritate dissentiunt. Superiores tres erant, quae esse possent, quarum est una sola defensa, eaque vehementer. Ac ne plura complectar-sunt enim innumerabilia-, bene laudata virtus voluptatis aditus intercludat necesse est.\@par}
+
+\create@par{Ab hoc autem quaedam non melius quam veteres, quaedam omnino relicta. Perturbationes autem nulla naturae vi commoventur, omniaque ea sunt opiniones ac iudicia levitatis. Addo etiam illud, multa iam mihi dare signa puerum et pudoris et ingenii, sed aetatem vides. Sic igitur in homine perfectio ista in eo potissimum, quod est optimum, id est in virtute, laudatur. Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Cum autem progrediens confirmatur animus, agnoscit ille quidem naturae vim, sed ita, ut progredi possit longius, per se sit tantum inchoata. Qui ita affectus, beatum esse numquam probabis; Quae cum magnifice primo dici viderentur, considerata minus probabantur. Stoici autem, quod finem bonorum in una virtute ponunt, similes sunt illorum; Facit enim ille duo seiuncta ultima bonorum, quae ut essent vera, coniungi debuerunt; Ergo opifex plus sibi proponet ad formarum quam civis excellens ad factorum pulchritudinem? Comprehensum, quod cognitum non habet?\@par}
+
+\create@par{Gracchum patrem non beatiorem fuisse quam fillum, cum alter stabilire rem publicam studuerit, alter evertere. Gracchum patrem non beatiorem fuisse quam fillum, cum alter stabilire rem publicam studuerit, alter evertere. His similes sunt omnes, qui virtuti student levantur vitiis, levantur erroribus, nisi forte censes Ti. Isto modo ne improbos quidem, si essent boni viri. Quamquam haec quidem praeposita recte et reiecta dicere licebit. Nec vero alia sunt quaerenda contra Carneadeam illam sententiam. Ita enim se Athenis collocavit, ut sit paene unus ex Atticis, ut id etiam cognomen videatur habiturus. Quas enim kakaw Graeci appellant, vitia malo quam malitias nominare. Ut alios omittam, hunc appello, quem ille unum secutus est. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant. Quid affers, cur Thorius, cur Caius Postumius, cur omnium horum magister, Orata, non iucundissime vixerit? Ut placet, inquit, etsi enim illud erat aptius, aequum cuique concedere.\@par}
+
+\create@par{Ergo in gubernando nihil, in officio plurimum interest, quo in genere peccetur. Quem quidem vos, cum improbis poenam proponitis, inpetibilem facitis, cum sapientem semper boni plus habere vultis, tolerabilem. Sed finge non solum callidum eum, qui aliquid improbe faciat, verum etiam praepotentem, ut M. Fortasse id optimum, sed ubi illud: Plus semper voluptatis? Quia voluptatem hanc esse sentiunt omnes, quam sensus accipiens movetur et iucunditate quadam perfunditur. Atque etiam valítudinem, vires, vacuitatem doloris non propter utilitatem solum, sed etiam ipsas propter se expetemus. Nam nisi hoc optineatur, id solum bonum esse, quod honestum sit, nullo modo probari possit beatam vitam virtute effici. Non risu potius quam oratione eiciendum? Itaque eos id agere, ut a se dolores, morbos, debilitates repellant. Eam tum adesse, cum dolor omnis absit; Cum id quoque, ut cupiebat, audivisset, evelli iussit eam, qua erat transfixus, hastam. An est aliquid, quod te sua sponte delectet?\@par}
+
+\create@par{Qui enim voluptatem ipsam contemnunt, iis licet dicere se acupenserem maenae non anteponere. Optime, inquam. Quamquam tu hanc copiosiorem etiam soles dicere. Nam si beatus umquam fuisset, beatam vitam usque ad illum a Cyro extructum rogum pertulisset. Restincta enim sitis stabilitatem voluptatis habet, inquit, illa autem voluptas ipsius restinctionis in motu est. Qui autem esse poteris, nisi te amor ipse ceperit? Conclusum est enim contra Cyrenaicos satis acute, nihil ad Epicurum. Sit ista in Graecorum levitate perversitas, qui maledictis insectantur eos, a quibus de veritate dissentiunt. Sed ita falsa sunt ea, quae consequuntur, ut illa, e quibus haec nata sunt, vera esse non possint. -, sed ut hoc iudicaremus, non esse in iis partem maximam positam beate aut secus vivendi. Quid est igitur, cur ita semper deum appellet Epicurus beatum et aeternum? Videamus animi partes, quarum est conspectus illustrior; Quae qui non vident, nihil umquam magnum ac cognitione dignum amaverunt.\@par}
+
+\create@par{Ita enim vivunt quidam, ut eorum vita refellatur oratio. Sed ita falsa sunt ea, quae consequuntur, ut illa, e quibus haec nata sunt, vera esse non possint. Quod ea non occurrentia fingunt, vincunt Aristonem; Cum sciret confestim esse moriendum eamque mortem ardentiore studio peteret, quam Epicurus voluptatem petendam putat. Si verbum sequimur, primum longius verbum praepositum quam bonum. Nam illud vehementer repugnat, eundem beatum esse et multis malis oppressum. Nummus in Croesi divitiis obscuratur, pars est tamen divitiarum. Nos paucis ad haec additis finem faciamus aliquando; Quocumque enim modo summum bonum sic exponitur, ut id vacet honestate, nec officia nec virtutes in ea ratione nec amicitiae constare possunt. Ut nemo dubitet, eorum omnia officia quo spectare, quid sequi, quid fugere debeant? Ipse negat, ut ante dixi, luxuriosorum vitam reprehendendam, nisi plane fatui sint, id est nisi aut cupiant aut metuant. Duae sunt enim res quoque, ne tu verba solum putes.\@par}
+
+\create@par{Haec non erant eius, qui innumerabilis mundos infinitasque regiones, quarum nulla esset ora, nulla extremitas, mente peragravisset. Quid est enim aliud esse versutum? Ista ipsa, quae tu breviter: regem, dictatorem, divitem solum esse sapientem, a te quidem apte ac rotunde; Nunc omni virtuti vitium contrario nomine opponitur. Et quod est munus, quod opus sapientiae? Illud quaero, quid ei, qui in voluptate summum bonum ponat, consentaneum sit dicere. Quod mihi quidem visus est, cum sciret, velle tamen confitentem audire Torquatum. Bona autem corporis huic sunt, quod posterius posui, similiora. Stuprata per vim Lucretia a regis filio testata civis se ipsa interemit. Mihi quidem Homerus huius modi quiddam vidisse videatur in iis, quae de Sirenum cantibus finxerit. Mene ergo et Triarium dignos existimas, apud quos turpiter loquare? Sed quoniam et advesperascit et mihi ad villam revertendum est, nunc quidem hactenus; Summum a vobis bonum voluptas dicitur. Qualem igitur hominem natura inchoavit?\@par}
+
+\create@par{Iam autem Callipho aut Diodorus quo modo poterunt tibi istud concedere, qui ad honestatem aliud adiungant, quod ex eodem genere non sit? Cuius etiam illi hortuli propinqui non memoriam solum mihi afferunt, sed ipsum videntur in conspectu meo ponere. Nihilne te delectat umquam -video, quicum loquar-, te igitur, Torquate, ipsum per se nihil delectat? Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Quid enim possumus hoc agere divinius? Immo istud quidem, inquam, quo loco quidque, nisi iniquum postulo, arbitratu meo. Itaque et vivere vitem et mori dicimus arboremque et novellan et vetulam et vigere et senescere. Praetereo multos, in bis doctum hominem et suavem, Hieronymum, quem iam cur Peripateticum appellem nescio. Potius inflammat, ut coercendi magis quam dedocendi esse videantur. Potius ergo illa dicantur: turpe esse, viri non esse debilitari dolore, frangi, succumbere. Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo.\@par}
+
+\create@par{Itaque ne iustitiam quidem recte quis dixerit per se ipsam optabilem, sed quia iucunditatis vel plurimum afferat. Quam ob rem tandem, inquit, non satisfacit? Miserum hominem! Si dolor summum malum est, dici aliter non potest. At quanta conantur! Mundum hunc omnem oppidum esse nostrum! Incendi igitur eos, qui audiunt, vides. Haec non erant eius, qui innumerabilis mundos infinitasque regiones, quarum nulla esset ora, nulla extremitas, mente peragravisset. Quod maxime efficit Theophrasti de beata vita liber, in quo multum admodum fortunae datur. Immo istud quidem, inquam, quo loco quidque, nisi iniquum postulo, arbitratu meo. Ita finis bonorum existit secundum naturam vivere sic affectum, ut optime is affici possit ad naturamque accommodatissime. Si est nihil nisi corpus, summa erunt illa: valitudo, vacuitas doloris, pulchritudo, cetera. Rapior illuc, revocat autem Antiochus, nec est praeterea, quem audiamus. At vero illa, quae Peripatetici, quae Stoici dicunt, semper tibi in ore sunt in iudiciis, in senatu.\@par}
+
+\create@par{Qui igitur convenit ab alia voluptate dicere naturam proficisci, in alia summum bonum ponere? Experiamur igitur, inquit, etsi habet haec Stoicorum ratio difficilius quiddam et obscurius. Cuius quidem, quoniam Stoicus fuit, sententia condemnata mihi videtur esse inanitas ista verborum. Licet hic rursus ea commemores, quae optimis verbis ab Epicuro de laude amicitiae dicta sunt. Quem ad modum quis ambulet, sedeat, qui ductus oris, qui vultus in quoque sit? Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Dulce amarum, leve asperum, prope longe, stare movere, quadratum rotundum. Collatio igitur ista te nihil iuvat. Cuius tanta tormenta sunt, ut in iis beata vita, si modo dolor summum malum est, esse non possit. Negat enim summo bono afferre incrementum diem. Sed tamen intellego quid velit. Dic in quovis conventu te omnia facere, ne doleas. Ita multo sanguine profuso in laetitia et in victoria est mortuus. Illi enim inter se dissentiunt.\@par}
+
+\create@par{Aeque enim contingit omnibus fidibus, ut incontentae sint. Quod autem principium officii quaerunt, melius quam Pyrrho; An, partus ancillae sitne in fructu habendus, disseretur inter principes civitatis, P. Nec lapathi suavitatem acupenseri Galloni Laelius anteponebat, sed suavitatem ipsam neglegebat; Quamquam scripsit artem rhetoricam Cleanthes, Chrysippus etiam, sed sic, ut, si quis obmutescere concupierit, nihil aliud legere debeat. Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Quae fere omnia appellantur uno ingenii nomine, easque virtutes qui habent, ingeniosi vocantur. O magnam vim ingenii causamque iustam, cur nova existeret disciplina! Perge porro. Deinde prima illa, quae in congressu solemus: Quid tu, inquit, huc? Est tamen ea secundum naturam multoque nos ad se expetendam magis hortatur quam superiora omnia. Placet igitur tibi, Cato, cum res sumpseris non concessas, ex illis efficere, quod velis? At enim, qua in vita est aliquid mali, ea beata esse non potest.\@par}
+
+\create@par{Erit enim mecum, si tecum erit. Theophrastus mediocriterne delectat, cum tractat locos ab Aristotele ante tractatos? Eorum enim est haec querela, qui sibi cari sunt seseque diligunt. An eum locum libenter invisit, ubi Demosthenes et Aeschines inter se decertare soliti sunt? Quia nec honesto quic quam honestius nec turpi turpius. An dolor longissimus quisque miserrimus, voluptatem non optabiliorem diuturnitas facit? Semper enim ita adsumit aliquid, ut ea, quae prima dederit, non deserat. Possumusne ergo in vita summum bonum dicere, cum id ne in cena quidem posse videamur? Idque testamento cavebit is, qui nobis quasi oraculum ediderit nihil post mortem ad nos pertinere? Praeclare Laelius, et recte sofñw, illudque vere: O Publi, o gurges, Galloni! es homo miser, inquit. Sin kakan malitiam dixisses, ad aliud nos unum certum vitium consuetudo Latina traduceret. Nam aliquando posse recte fieri dicunt nulla expectata nec quaesita voluptate.\@par}
+
+\create@par{Dic in quovis conventu te omnia facere, ne doleas. Ac ne plura complectar-sunt enim innumerabilia-, bene laudata virtus voluptatis aditus intercludat necesse est. Ut enim consuetudo loquitur, id solum dicitur honestum, quod est populari fama gloriosum. Quid igitur dubitamus in tota eius natura quaerere quid sit effectum? Paulum, cum regem Persem captum adduceret, eodem flumine invectio? Mihi, inquam, qui te id ipsum rogavi? Sed quanta sit alias, nunc tantum possitne esse tanta. Verum tamen cum de rebus grandioribus dicas, ipsae res verba rapiunt; Sedulo, inquam, faciam. Erillus autem ad scientiam omnia revocans unum quoddam bonum vidit, sed nec optimum nec quo vita gubernari possit. Id quaeris, inquam, in quo, utrum respondero, verses te huc atque illuc necesse est. Si quicquam extra virtutem habeatur in bonis. Sit, inquam, tam facilis, quam vultis, comparatio voluptatis, quid de dolore dicemus? Vide ne ista sint Manliana vestra aut maiora etiam, si imperes quod facere non possim.\@par}
+
+\create@par{Tollit definitiones, nihil de dividendo ac partiendo docet, non quo modo efficiatur concludaturque ratio tradit, non qua via captiosa solvantur ambigua distinguantur ostendit; Sed quod proximum fuit non vidit. Huius ego nunc auctoritatem sequens idem faciam. Sed haec quidem liberius ab eo dicuntur et saepius. De malis autem et bonis ab iis animalibus, quae nondum depravata sint, ait optime iudicari. Comprehensum, quod cognitum non habet? Ita finis bonorum existit secundum naturam vivere sic affectum, ut optime is affici possit ad naturamque accommodatissime. Quia nec honesto quic quam honestius nec turpi turpius. Nunc omni virtuti vitium contrario nomine opponitur. Ergo opifex plus sibi proponet ad formarum quam civis excellens ad factorum pulchritudinem? Nam prius a se poterit quisque discedere quam appetitum earum rerum, quae sibi conducant, amittere. Itaque hoc frequenter dici solet a vobis, non intellegere nos, quam dicat Epicurus voluptatem.\@par}
+
+\create@par{Quod praeceptum quia maius erat, quam ut ab homine videretur, idcirco assignatum est deo. Etenim nec iustitia nec amicitia esse omnino poterunt, nisi ipsae per se expetuntur. Id enim volumus, id contendimus, ut officii fructus sit ipsum officium. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant. Nunc ita separantur, ut disiuncta sint, quo nihil potest esse perversius. Res enim fortasse verae, certe graves, non ita tractantur, ut debent, sed aliquanto minutius. De malis autem et bonis ab iis animalibus, quae nondum depravata sint, ait optime iudicari. Tenesne igitur, inquam, Hieronymus Rhodius quid dicat esse summum bonum, quo putet omnia referri oportere? Plane idem, inquit, et maxima quidem, qua fieri nulla maior potest. Quod cum ita sit, perspicuum est omnis rectas res atque laudabilis eo referri, ut cum voluptate vivatur. Traditur, inquit, ab Epicuro ratio neglegendi doloris. Intellegi quidem, ut propter aliam quampiam rem, verbi gratia propter voluptatem, nos amemus;\@par}
+
+\create@par{Primum cur ista res digna odio est, nisi quod est turpis? Non dolere, inquam, istud quam vim habeat postea videro; Cuius similitudine perspecta in formarum specie ac dignitate transitum est ad honestatem dictorum atque factorum. Vos autem cum perspicuis dubia debeatis illustrare, dubiis perspicua conamini tollere. Hunc vos beatum; Ex quo, id quod omnes expetunt, beate vivendi ratio inveniri et comparari potest. Quo plebiscito decreta a senatu est consuli quaestio Cn. Quae fere omnia appellantur uno ingenii nomine, easque virtutes qui habent, ingeniosi vocantur. Quod praeceptum quia maius erat, quam ut ab homine videretur, idcirco assignatum est deo. Non enim, si omnia non sequebatur, idcirco non erat ortus illinc. Ergo adhuc, quantum equidem intellego, causa non videtur fuisse mutandi nominis. Itaque his sapiens semper vacabit. Cum autem in quo sapienter dicimus, id a primo rectissime dicitur. Itaque haec cum illis est dissensio, cum Peripateticis nulla sane.\@par}
+
+\create@par{Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Huius ego nunc auctoritatem sequens idem faciam. Aliam vero vim voluptatis esse, aliam nihil dolendi, nisi valde pertinax fueris, concedas necesse est. Id quaeris, inquam, in quo, utrum respondero, verses te huc atque illuc necesse est. Ait enim se, si uratur, Quam hoc suave! dicturum. Fadio Gallo, cuius in testamento scriptum esset se ab eo rogatum ut omnis hereditas ad filiam perveniret. Vide igitur ne non debeas verbis nostris uti, sententiis tuis. Peccata autem partim esse tolerabilia, partim nullo modo, propterea quod alia peccata plures, alia pauciores quasi numeros officii praeterirent. O magnam vim ingenii causamque iustam, cur nova existeret disciplina! Perge porro. Legimus tamen Diogenem, Antipatrum, Mnesarchum, Panaetium, multos alios in primisque familiarem nostrum Posidonium. Sed id ne cogitari quidem potest quale sit, ut non repugnet ipsum sibi. In qua si nihil est praeter rationem, sit in una virtute finis bonorum;\@par}
+
+\create@par{Te ipsum, dignissimum maioribus tuis, voluptasne induxit, ut adolescentulus eriperes P. Callipho ad virtutem nihil adiunxit nisi voluptatem, Diodorus vacuitatem doloris. Nemo igitur esse beatus potest. Quod mihi quidem visus est, cum sciret, velle tamen confitentem audire Torquatum. Is ita vivebat, ut nulla tam exquisita posset inveniri voluptas, qua non abundaret. Satisne igitur videor vim verborum tenere, an sum etiam nunc vel Graece loqui vel Latine docendus? Sed tamen omne, quod de re bona dilucide dicitur, mihi praeclare dici videtur. Deinde concludebas summum malum esse dolorem, summum bonum voluptatem! Lucius Thorius Balbus fuit, Lanuvinus, quem meminisse tu non potes. Quid me istud rogas? Multoque hoc melius nos veriusque quam Stoici. Quo minus animus a se ipse dissidens secumque discordans gustare partem ullam liquidae voluptatis et liberae potest. Quod idem cum vestri faciant, non satis magnam tribuunt inventoribus gratiam.\@par}
+
+\create@par{Fortitudinis quaedam praecepta sunt ac paene leges, quae effeminari virum vetant in dolore. Satisne ergo pudori consulat, si quis sine teste libidini pareat? Sed id ne cogitari quidem potest quale sit, ut non repugnet ipsum sibi. Gracchum patrem non beatiorem fuisse quam fillum, cum alter stabilire rem publicam studuerit, alter evertere. Quod si ita sit, cur opera philosophiae sit danda nescio. Quae in controversiam veniunt, de iis, si placet, disseramus. Restincta enim sitis stabilitatem voluptatis habet, inquit, illa autem voluptas ipsius restinctionis in motu est. Quia nec honesto quic quam honestius nec turpi turpius. Quid interest, nisi quod ego res notas notis verbis appello, illi nomina nova quaerunt, quibus idem dicant? Indicant pueri, in quibus ut in speculis natura cernitur. Nullum inveniri verbum potest quod magis idem declaret Latine, quod Graece, quam declarat voluptas. Sic enim maiores nostri labores non fugiendos tristissimo tamen verbo aerumnas etiam in deo nominaverunt.\@par}
+
+\create@par{Cuius etiam illi hortuli propinqui non memoriam solum mihi afferunt, sed ipsum videntur in conspectu meo ponere. Quis suae urbis conservatorem Codrum, quis Erechthei filias non maxime laudat? At Zeno eum non beatum modo, sed etiam divitem dicere ausus est. Quid iudicant sensus? Nos quidem Virtutes sic natae sumus, ut tibi serviremus, aliud negotii nihil habemus. Nemo enim est, qui aliter dixerit quin omnium naturarum simile esset id, ad quod omnia referrentur, quod est ultimum rerum appetendarum. Quos nisi redarguimus, omnis virtus, omne decus, omnis vera laus deserenda est. Licet hic rursus ea commemores, quae optimis verbis ab Epicuro de laude amicitiae dicta sunt. Aliter homines, aliter philosophos loqui putas oportere? Atque etiam ad iustitiam colendam, ad tuendas amicitias et reliquas caritates quid natura valeat haec una cognitio potest tradere. De hominibus dici non necesse est. Et quidem illud ipsum non nimium probo et tantum patior, philosophum loqui de cupiditatibus finiendis.\@par}
+
+\create@par{In omni enim arte vel studio vel quavis scientia vel in ipsa virtute optimum quidque rarissimum est. Et quae per vim oblatum stuprum volontaria morte lueret inventa est et qui interficeret filiam, ne stupraretur. Bonum incolumis acies: misera caecitas. Ex quo intellegitur officium medium quiddam esse, quod neque in bonis ponatur neque in contrariis. Amicitiam autem adhibendam esse censent, quia sit ex eo genere, quae prosunt. Cum enim summum bonum in voluptate ponat, negat infinito tempore aetatis voluptatem fieri maiorem quam finito atque modico. Ita multo sanguine profuso in laetitia et in victoria est mortuus. Plane idem, inquit, et maxima quidem, qua fieri nulla maior potest. Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo. Nosti, credo, illud: Nemo pius est, qui pietatem-; Tamen aberramus a proposito, et, ne longius, prorsus, inquam, Piso, si ista mala sunt, placet. Expectoque quid ad id, quod quaerebam, respondeas.\@par}
+
+\create@par{Ne vitationem quidem doloris ipsam per se quisquam in rebus expetendis putavit, nisi etiam evitare posset. Deinde prima illa, quae in congressu solemus: Quid tu, inquit, huc? Quin etiam ferae, inquit Pacuvius, quíbus abest, ad praécavendum intéllegendi astútia, iniecto terrore mortis horrescunt. Nonne videmus quanta perturbatio rerum omnium consequatur, quanta confusio? Haec non erant eius, qui innumerabilis mundos infinitasque regiones, quarum nulla esset ora, nulla extremitas, mente peragravisset. Qualis ista philosophia est, quae non interitum afferat pravitatis, sed sit contenta mediocritate vitiorum? Ego, quam ille praeponendam et magis eligendam, beatiorem hanc appello nec ullo minimo momento plus ei vitae tribuo quam Stoici. Virtutis, magnitudinis animi, patientiae, fortitudinis fomentis dolor mitigari solet. Praeterea sublata cognitione et scientia tollitur omnis ratio et vitae degendae et rerum gerendarum. Res enim se praeclare habebat, et quidem in utraque parte.\@par}
+
+\create@par{Potius ergo illa dicantur: turpe esse, viri non esse debilitari dolore, frangi, succumbere. Quid in isto egregio tuo officio et tanta fide-sic enim existimo-ad corpus refers? Quod, inquit, quamquam voluptatibus quibusdam est saepe iucundius, tamen expetitur propter voluptatem. Aut haec tibi, Torquate, sunt vituperanda aut patrocinium voluptatis repudiandum. Ampulla enim sit necne sit, quis non iure optimo irrideatur, si laboret? In ipsa enim parum magna vis inest, ut quam optime se habere possit, si nulla cultura adhibeatur. Fortasse id optimum, sed ubi illud: Plus semper voluptatis? Itaque quantum adiit periculum! ad honestatem enim illum omnem conatum suum referebat, non ad voluptatem. Sed eum qui audiebant, quoad poterant, defendebant sententiam suam. Sic enim maiores nostri labores non fugiendos tristissimo tamen verbo aerumnas etiam in deo nominaverunt. Stuprata per vim Lucretia a regis filio testata civis se ipsa interemit. An tu me de L.\@par}
+
+\create@par{Illum mallem levares, quo optimum atque humanissimum virum, Cn. An eum locum libenter invisit, ubi Demosthenes et Aeschines inter se decertare soliti sunt? Cum id quoque, ut cupiebat, audivisset, evelli iussit eam, qua erat transfixus, hastam. Aut unde est hoc contritum vetustate proverbium: quicum in tenebris? Sed haec ab Antiocho, familiari nostro, dicuntur multo melius et fortius, quam a Stasea dicebantur. Ad corpus diceres pertinere-, sed ea, quae dixi, ad corpusne refers? Aut unde est hoc contritum vetustate proverbium: quicum in tenebris? Nec vero intermittunt aut admirationem earum rerum, quae sunt ab antiquis repertae, aut investigationem novarum. Sed isti ipsi, qui voluptate et dolore omnia metiuntur, nonne clamant sapienti plus semper adesse quod velit quam quod nolit? Quibus natura iure responderit non esse verum aliunde finem beate vivendi, a se principia rei gerendae peti; An dubium est, quin virtus ita maximam partem optineat in rebus humanis, ut reliquas obruat?\@par}
+
+\create@par{Hi curatione adhibita levantur in dies, valet alter plus cotidie, alter videt. Quid ei reliquisti, nisi te, quoquo modo loqueretur, intellegere, quid diceret? Numquam hoc ita defendit Epicurus neque Metrodorus aut quisquam eorum, qui aut saperet aliquid aut ista didicisset. Ut pompa, ludis atque eius modi spectaculis teneantur ob eamque rem vel famem et sitim perferant? Egone quaeris, inquit, quid sentiam? Hoc ipsum elegantius poni meliusque potuit. Parvi enim primo ortu sic iacent, tamquam omnino sine animo sint. Nec lapathi suavitatem acupenseri Galloni Laelius anteponebat, sed suavitatem ipsam neglegebat; Si ista mala sunt, in quae potest incidere sapiens, sapientem esse non esse ad beate vivendum satis. Luxuriam non reprehendit, modo sit vacua infinita cupiditate et timore. Et quidem illud ipsum non nimium probo et tantum patior, philosophum loqui de cupiditatibus finiendis. Tenesne igitur, inquam, Hieronymus Rhodius quid dicat esse summum bonum, quo putet omnia referri oportere?\@par}
+
+\create@par{Quae sunt igitur communia vobis cum antiquis, iis sic utamur quasi concessis; Ad eas enim res ab Epicuro praecepta dantur. Refert tamen, quo modo. Non enim, si omnia non sequebatur, idcirco non erat ortus illinc. Est enim tanti philosophi tamque nobilis audacter sua decreta defendere. Quamquam ex omnibus philosophis Stoici plurima novaverunt, Zenoque, eorum princeps, non tam rerum inventor fuit quam verborum novorum. Nam, ut saepe iam dixi, in infirma aetate inbecillaque mente vis naturae quasi per caliginem cernitur; Ut enim consuetudo loquitur, id solum dicitur honestum, quod est populari fama gloriosum. Dici enim nihil potest verius. Quam si explicavisset, non tam haesitaret. Quasi ego id curem, quid ille aiat aut neget. Quicquid porro animo cernimus, id omne oritur a sensibus; Scis enim me quodam tempore Metapontum venisse tecum neque ad hospitem ante devertisse, quam Pythagorae ipsum illum locum, ubi vitam ediderat, sedemque viderim. Quid igitur dubitamus in tota eius natura quaerere quid sit effectum?\@par}
+
+\create@par{Aliam vero vim voluptatis esse, aliam nihil dolendi, nisi valde pertinax fueris, concedas necesse est. Licet hic rursus ea commemores, quae optimis verbis ab Epicuro de laude amicitiae dicta sunt. Huic ego, si negaret quicquam interesse ad beate vivendum quali uteretur victu, concederem, laudarem etiam; Quare hoc videndum est, possitne nobis hoc ratio philosophorum dare. Facit enim ille duo seiuncta ultima bonorum, quae ut essent vera, coniungi debuerunt; Fortitudinis quaedam praecepta sunt ac paene leges, quae effeminari virum vetant in dolore. Tum ego: Non mehercule, inquam, soleo temere contra Stoicos, non quo illis admodum assentiar, sed pudore impedior; Sed venio ad inconstantiae crimen, ne saepius dicas me aberrare; Quam tu ponis in verbis, ego positam in re putabam. Immo istud quidem, inquam, quo loco quidque, nisi iniquum postulo, arbitratu meo. Nos quidem Virtutes sic natae sumus, ut tibi serviremus, aliud negotii nihil habemus. Quod cum dixissent, ille contra.\@par}
+
+\create@par{Quae cum magnifice primo dici viderentur, considerata minus probabantur. Experiamur igitur, inquit, etsi habet haec Stoicorum ratio difficilius quiddam et obscurius. Ergo instituto veterum, quo etiam Stoici utuntur, hinc capiamus exordium. Quippe, inquieta cum tam docuerim gradus istam rem non habere quam virtutem, in qua sit ipsum etíam beatum. Cur tantas regiones barbarorum pedibus obiit, tot maria transmisit? Etsi ea quidem, quae adhuc dixisti, quamvis ad aetatem recte isto modo dicerentur. Sed haec quidem liberius ab eo dicuntur et saepius. Sin autem eos non probabat, quid attinuit cum iis, quibuscum re concinebat, verbis discrepare? Quae sunt igitur communia vobis cum antiquis, iis sic utamur quasi concessis; Qui non moveatur et offensione turpitudinis et comprobatione honestatis? Cuius similitudine perspecta in formarum specie ac dignitate transitum est ad honestatem dictorum atque factorum. Si enim non fuit eorum iudicii, nihilo magis hoc non addito illud est iudicatum-.\@par}
+
+\create@par{Varietates autem iniurasque fortunae facile veteres philosophorum praeceptis instituta vita superabat. Prave, nequiter, turpiter cenabat; Et tamen tantis vectigalibus ad liberalitatem utens etiam sine hac Pyladea amicitia multorum te benivolentia praeclare tuebere et munies. Restat locus huic disputationi vel maxime necessarius de amicitia, quam, si voluptas summum sit bonum, affirmatis nullam omnino fore. Illa videamus, quae a te de amicitia dicta sunt. Sed eum qui audiebant, quoad poterant, defendebant sententiam suam. Hoc est non modo cor non habere, sed ne palatum quidem. Mihi quidem Homerus huius modi quiddam vidisse videatur in iis, quae de Sirenum cantibus finxerit. Sed memento te, quae nos sentiamus, omnia probare, nisi quod verbis aliter utamur, mihi autem vestrorum nihil probari. Animi enim quoque dolores percipiet omnibus partibus maiores quam corporis. Fortemne possumus dicere eundem illum Torquatum? Hoc non est positum in nostra actione.\@par}
+
+\create@par{Aliud est enim poëtarum more verba fundere, aliud ea, quae dicas, ratione et arte distinguere. Nec enim, dum metuit, iustus est, et certe, si metuere destiterit, non erit; Hi curatione adhibita levantur in dies, valet alter plus cotidie, alter videt. Idem fecisset Epicurus, si sententiam hanc, quae nunc Hieronymi est, coniunxisset cum Aristippi vetere sententia. Itaque et manendi in vita et migrandi ratio omnis iis rebus, quas supra dixi, metienda. Piso igitur hoc modo, vir optimus tuique, ut scis, amantissimus. Hoc autem tempore, etsi multa in omni parte Athenarum sunt in ipsis locis indicia summorum virorum, tamen ego illa moveor exhedra. Ubi ut eam caperet aut quando? Illud urgueam, non intellegere eum quid sibi dicendum sit, cum dolorem summum malum esse dixerit. Et ego: Piso, inquam, si est quisquam, qui acute in causis videre soleat quae res agatur. Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo.\@par}
+
+\create@par{Incommoda autem et commoda-ita enim estmata et dustmata appello-communia esse voluerunt, paria noluerunt. In qua si nihil est praeter rationem, sit in una virtute finis bonorum; Quos quidem dies quem ad modum agatis et in quantam hominum facetorum urbanitatem incurratis, non diconihil opus est litibus-; Egone quaeris, inquit, quid sentiam? Summum ením bonum exposuit vacuitatem doloris; Itaque et manendi in vita et migrandi ratio omnis iis rebus, quas supra dixi, metienda. Quod quidem iam fit etiam in Academia. Sed existimo te, sicut nostrum Triarium, minus ab eo delectari, quod ista Platonis, Aristoteli, Theophrasti orationis ornamenta neglexerit. Quid turpius quam sapientis vitam ex insipientium sermone pendere? Ego vero volo in virtute vim esse quam maximam; Mihi autem nihil tam perspicuum videtur, quam has sententias eorum philosophorum re inter se magis quam verbis dissidere; An vero, inquit, quisquam potest probare, quod perceptfum, quod.\@par}
+
+\create@par{Quid enim mihi potest esse optatius quam cum Catone, omnium virtutum auctore, de virtutibus disputare? Nec vero sum nescius esse utilitatem in historia, non modo voluptatem. Quid igitur dubitamus in tota eius natura quaerere quid sit effectum? Quae in controversiam veniunt, de iis, si placet, disseramus. Non igitur de improbo, sed de callido improbo quaerimus, qualis Q. Duarum enim vitarum nobis erunt instituta capienda. Sunt etiam turpitudines plurimae, quae, nisi honestas natura plurimum valeat, cur non cadant in sapientem non est facile defendere. Graecis hoc modicum est: Leonidas, Epaminondas, tres aliqui aut quattuor; Sed haec ab Antiocho, familiari nostro, dicuntur multo melius et fortius, quam a Stasea dicebantur. Tu autem inter haec tantam multitudinem hominum interiectam non vides nec laetantium nec dolentium? Illud urgueam, non intellegere eum quid sibi dicendum sit, cum dolorem summum malum esse dixerit. Hoc loco discipulos quaerere videtur, ut, qui asoti esse velint, philosophi ante fiant.\@par}
+
+\create@par{Eorum enim omnium multa praetermittentium, dum eligant aliquid, quod sequantur, quasi curta sententia; Non potes ergo ista tueri, Torquate, mihi crede, si te ipse et tuas cogitationes et studia perspexeris; Aliter enim explicari, quod quaeritur, non potest. Cum autem in quo sapienter dicimus, id a primo rectissime dicitur. Tertium autem omnibus aut maximis rebus iis, quae secundum naturam sint, fruentem vivere. Ita fit ut, quanta differentia est in principiis naturalibus, tanta sit in finibus bonorum malorumque dissimilitudo. -delector enim, quamquam te non possum, ut ais, corrumpere, delector, inquam, et familia vestra et nomine. Somnum denique nobis, nisi requietem corporibus et is medicinam quandam laboris afferret, contra naturam putaremus datum; Tum mihi Piso: Quid ergo? Scaevola tribunus plebis ferret ad plebem vellentne de ea re quaeri. At enim hic etiam dolore. Sed quamvis comis in amicis tuendis fuerit, tamen, si haec vera sunt-nihil enim affirmo-, non satis acutus fuit.\@par}
+
+\create@par{Reliqui sibi constiterunt, ut extrema cum initiis convenirent, ut Aristippo voluptas, Hieronymo doloris vacuitas, Carneadi frui principiis naturalibus esset extremum. Itaque mihi non satis videmini considerare quod iter sit naturae quaeque progressio. Sed audiamus ipsum: Compensabatur, inquit, tamen cum his omnibus animi laetitia, quam capiebam memoria rationum inventorumque nostrorum. Res tota, Torquate, non doctorum hominum, velle post mortem epulis celebrari memoriam sui nominis. Non ego tecum iam ita iocabor, ut isdem his de rebus, cum L. Quod autem principium officii quaerunt, melius quam Pyrrho; Itaque vides, quo modo loquantur, nova verba fingunt, deserunt usitata. Te ipsum, dignissimum maioribus tuis, voluptasne induxit, ut adolescentulus eriperes P. Itaque vides, quo modo loquantur, nova verba fingunt, deserunt usitata. Re mihi non aeque satisfacit, et quidem locis pluribus. Hos contra singulos dici est melius. Igitur neque stultorum quisquam beatus neque sapientium non beatus.\@par}
+
+\create@par{Comprehensum, quod cognitum non habet? Nec vero audiendus Hieronymus, cui summum bonum est idem, quod vos interdum vel potius nimium saepe dicitis, nihil dolere. Nam Metrodorum non puto ipsum professum, sed, cum appellaretur ab Epicuro, repudiare tantum beneficium noluisse; Sed haec ab Antiocho, familiari nostro, dicuntur multo melius et fortius, quam a Stasea dicebantur. Pungunt quasi aculeis interrogatiunculis angustis, quibus etiam qui assentiuntur nihil commutantur animo et idem abeunt, qui venerant. Voluptatem cum summum bonum diceret, primum in eo ipso parum vidit, deinde hoc quoque alienum; Hoc positum in Phaedro a Platone probavit Epicurus sensitque in omni disputatione id fieri oportere. Aliam vero vim voluptatis esse, aliam nihil dolendi, nisi valde pertinax fueris, concedas necesse est. Videsne quam sit magna dissensio? Sin te auctoritas commovebat, nobisne omnibus et Platoni ipsi nescio quem illum anteponebas? Facillimum id quidem est, inquam. Quonam, inquit, modo?\@par}
+
+\create@par{Scientiam pollicentur, quam non erat mirum sapientiae cupido patria esse cariorem. An est aliquid per se ipsum flagitiosum, etiamsi nulla comitetur infamia? Quo minus animus a se ipse dissidens secumque discordans gustare partem ullam liquidae voluptatis et liberae potest. Themistocles quidem, cum ei Simonides an quis alius artem memoriae polliceretur, Oblivionis, inquit, mallem. Is cum arderet podagrae doloribus visitassetque hominem Charmides Epicureus perfamiliaris et tristis exiret, Mane, quaeso, inquit, Charmide noster; Itaque mihi non satis videmini considerare quod iter sit naturae quaeque progressio. Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo. Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo. Diodorus, eius auditor, adiungit ad honestatem vacuitatem doloris. Atque haec coniunctio confusioque virtutum tamen a philosophis ratione quadam distinguitur. Ut proverbia non nulla veriora sint quam vestra dogmata.\@par}
+
+\create@par{Praeclare Laelius, et recte sofñw, illudque vere: O Publi, o gurges, Galloni! es homo miser, inquit. Theophrasti igitur, inquit, tibi liber ille placet de beata vita? Nihilne te delectat umquam -video, quicum loquar-, te igitur, Torquate, ipsum per se nihil delectat? Huic mori optimum esse propter desperationem sapientiae, illi propter spem vivere. Primum cur ista res digna odio est, nisi quod est turpis? Quicquid enim a sapientia proficiscitur, id continuo debet expletum esse omnibus suis partibus; Propter nos enim illam, non propter eam nosmet ipsos diligimus. Quae dici eadem de ceteris virtutibus possunt, quarum omnium fundamenta vos in voluptate tamquam in aqua ponitis. Quis tibi ergo istud dabit praeter Pyrrhonem, Aristonem eorumve similes, quos tu non probas? Et quidem illud ipsum non nimium probo et tantum patior, philosophum loqui de cupiditatibus finiendis. Neminem videbis ita laudatum, ut artifex callidus comparandarum voluptatum diceretur.\@par}
+
+\create@par{Iis igitur est difficilius satis facere, qui se Latina scripta dicunt contemnere. Quod quidem iam fit etiam in Academia. Sed tamen est aliquid, quod nobis non liceat, liceat illis. Nam, ut sint illa vendibiliora, haec uberiora certe sunt. Cur ipse Pythagoras et Aegyptum lustravit et Persarum magos adiit? Te autem hortamur omnes, currentem quidem, ut spero, ut eos, quos novisse vis, imitari etiam velis. In eo autem voluptas omnium Latine loquentium more ponitur, cum percipitur ea, quae sensum aliquem moveat, iucunditas. Esse enim, nisi eris, non potes. Nam de summo mox, ut dixi, videbimus et ad id explicandum disputationem omnem conferemus. Non quaeritur autem quid naturae tuae consentaneum sit, sed quid disciplinae. Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es? Diodorus, eius auditor, adiungit ad honestatem vacuitatem doloris. Quodsi vultum tibi, si incessum fingeres, quo gravior viderere, non esses tui similis; Dolere malum est: in crucem qui agitur, beatus esse non potest.\@par}
+
+\create@par{Vide, ne magis, inquam, tuum fuerit, cum re idem tibi, quod mihi, videretur, non nova te rebus nomina inponere. Nec lapathi suavitatem acupenseri Galloni Laelius anteponebat, sed suavitatem ipsam neglegebat; Quod non faceret, si in voluptate summum bonum poneret. Sin ea non neglegemus neque tamen ad finem summi boni referemus, non multum ab Erilli levitate aberrabimus. Illa sunt similia: hebes acies est cuipiam oculorum, corpore alius senescit; Tamen aberramus a proposito, et, ne longius, prorsus, inquam, Piso, si ista mala sunt, placet. Videamus igitur sententias eorum, tum ad verba redeamus. Ita fit ut, quanta differentia est in principiis naturalibus, tanta sit in finibus bonorum malorumque dissimilitudo. Non igitur de improbo, sed de callido improbo quaerimus, qualis Q. Cum id fugiunt, re eadem defendunt, quae Peripatetici, verba. Et hi quidem ita non sola virtute finem bonorum contineri putant, ut rebus tamen omnibus virtutem anteponant;\@par}
+
+\create@par{Aufidio, praetorio, erudito homine, oculis capto, saepe audiebam, cum se lucis magis quam utilitatis desiderio moveri diceret. Aristoteles, Xenocrates, tota illa familia non dabit, quippe qui valitudinem, vires, divitias, gloriam, multa alia bona esse dicant, laudabilia non dicant. Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Immo alio genere; Ergo hoc quidem apparet, nos ad agendum esse natos. Hanc quoque iucunditatem, si vis, transfer in animum; Iam illud quale tandem est, bona praeterita non effluere sapienti, mala meminisse non oportere? Hanc se tuus Epicurus omnino ignorare dicit quam aut qualem esse velint qui honestate summum bonum metiantur. In eo enim positum est id, quod dicimus esse expetendum. Huic ego, si negaret quicquam interesse ad beate vivendum quali uteretur victu, concederem, laudarem etiam; Ita graviter et severe voluptatem secrevit a bono. At tu eadem ista dic in iudicio aut, si coronam times, dic in senatu.\@par}
+
+\create@par{Piso igitur hoc modo, vir optimus tuique, ut scis, amantissimus. In quibus doctissimi illi veteres inesse quiddam caeleste et divinum putaverunt. Et ille ridens: Video, inquit, quid agas; Videmus igitur ut conquiescere ne infantes quidem possint. Ad eas enim res ab Epicuro praecepta dantur. Et hanc quidem primam exigam a te operam, ut audias me quae a te dicta sunt refellentem. Quid, si etiam iucunda memoria est praeteritorum malorum? Sic vester sapiens magno aliquo emolumento commotus cicuta, si opus erit, dimicabit. Atque haec ita iustitiae propria sunt, ut sint virtutum reliquarum communia. Quis est enim aut quotus quisque, cui, mora cum adpropinquet, non refugiat timido sanguen átque exalbescát metu? Ex quo intellegitur nec intemperantiam propter se esse fugiendam temperantiamque expetendam, non quia voluptates fugiat, sed quia maiores consequatur. Quid ei reliquisti, nisi te, quoquo modo loqueretur, intellegere, quid diceret?\@par}
+
+\create@par{Id et fieri posse et saepe esse factum et ad voluptates percipiendas maxime pertinere. Ad corpus diceres pertinere-, sed ea, quae dixi, ad corpusne refers? Is cum arderet podagrae doloribus visitassetque hominem Charmides Epicureus perfamiliaris et tristis exiret, Mane, quaeso, inquit, Charmide noster; Aut pertinacissimus fueris, si in eo perstiteris ad corpus ea, quae dixi, referri, aut deserueris totam Epicuri voluptatem, si negaveris. Dolor ergo, id est summum malum, metuetur semper, etiamsi non aderit; Aliter homines, aliter philosophos loqui putas oportere? Dolere malum est: in crucem qui agitur, beatus esse non potest. Septem autem illi non suo, sed populorum suffragio omnium nominati sunt. Quam multa vitiosa! summum enim bonum et malum vagiens puer utra voluptate diiudicabit, stante an movente? Superiores tres erant, quae esse possent, quarum est una sola defensa, eaque vehementer. Sed tu istuc dixti bene Latine, parum plane. Que Manilium, ab iisque M.\@par}
+
+\create@par{Quarum cum una sit, qua mores conformari putantur, differo eam partem, quae quasi stirps ets huius quaestionis. Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. At enim, qua in vita est aliquid mali, ea beata esse non potest. An ea, quae per vinitorem antea consequebatur, per se ipsa curabit? Quare obscurentur etiam haec, quae secundum naturam esse dicimus, in vita beata; Quamquam in hac divisione rem ipsam prorsus probo, elegantiam desidero. Tum ille: Tu autem cum ipse tantum librorum habeas, quos hic tandem requiris? Sin laboramus, quis est, qui alienae modum statuat industriae? Traditur, inquit, ab Epicuro ratio neglegendi doloris. Ego autem tibi, Piso, assentior usu hoc venire, ut acrius aliquanto et attentius de claris viris locorum admonitu cogitemus. Sed virtutem ipsam inchoavit, nihil amplius. Itaque eo, quale sit, breviter, ut tempus postulat, constituto accedam ad omnia tua, Torquate, nisi memoria forte defecerit.\@par}
+
+\create@par{Non est enim vitium in oratione solum, sed etiam in moribus. Poterat autem inpune; Aliena dixit in physicis nec ea ipsa, quae tibi probarentur; Qui autem de summo bono dissentit de tota philosophiae ratione dissentit. Sit hoc ultimum bonorum, quod nunc a me defenditur; Polemoni et iam ante Aristoteli ea prima visa sunt, quae paulo ante dixi. In his igitur partibus duabus nihil erat, quod Zeno commutare gestiret. Beatus autem esse in maximarum rerum timore nemo potest. Hoc etsi multimodis reprehendi potest, tamen accipio, quod dant. Totum genus hoc Zeno et qui ab eo sunt aut non potuerunt aut noluerunt, certe reliquerunt. Sed tu, ut dignum est tua erga me et philosophiam voluntate ab adolescentulo suscepta, fac ut Metrodori tueare liberos. Ut enim consuetudo loquitur, id solum dicitur honestum, quod est populari fama gloriosum. Quia, cum a Zenone, inquam, hoc magnifice tamquam ex oraculo editur: Virtus ad beate vivendum se ipsa contenta est, et Quare?\@par}
+
+\create@par{Quae cum essent dicta, discessimus. Nunc ita separantur, ut disiuncta sint, quo nihil potest esse perversius. Venit enim mihi Platonis in mentem, quem accepimus primum hic disputare solitum; Heri, inquam, ludis commissis ex urbe profectus veni ad vesperum. Qui si omnes veri erunt, ut Epicuri ratio docet, tum denique poterit aliquid cognosci et percipi. Sed tu istuc dixti bene Latine, parum plane. Quia dolori non voluptas contraria est, sed doloris privatio. Sic enim maiores nostri labores non fugiendos tristissimo tamen verbo aerumnas etiam in deo nominaverunt. Teneo, inquit, finem illi videri nihil dolere. Ita similis erit ei finis boni, atque antea fuerat, neque idem tamen; Etiam inchoatum, ut, si iuste depositum reddere in recte factis sit, in officiis ponatur depositum reddere; Quid, cum fictas fabulas, e quibus utilitas nulla elici potest, cum voluptate legimus? Nunc ita separantur, ut disiuncta sint, quo nihil potest esse perversius. Qui autem esse poteris, nisi te amor ipse ceperit?\@par}
+
+\create@par{Egone non intellego, quid sit don Graece, Latine voluptas? Deinde concludebas summum malum esse dolorem, summum bonum voluptatem! Lucius Thorius Balbus fuit, Lanuvinus, quem meminisse tu non potes. Si vero id etiam explanare velles apertiusque diceres nihil eum fecisse nisi voluptatis causa, quo modo eum tandem laturum fuisse existimas? Itaque homo in primis ingenuus et gravis, dignus illa familiaritate Scipionis et Laelii, Panaetius, cum ad Q. Graecis hoc modicum est: Leonidas, Epaminondas, tres aliqui aut quattuor; Quia, si mala sunt, is, qui erit in iis, beatus non erit. Videamus animi partes, quarum est conspectus illustrior; Aut, si esses Orestes, Pyladem refelleres, te indicares et, si id non probares, quo minus ambo una necaremini non precarere? Quod quidem nobis non saepe contingit. Ergo adhuc, quantum equidem intellego, causa non videtur fuisse mutandi nominis. Laelius clamores sofòw ille so lebat Edere compellans gumias ex ordine nostros. Pauca mutat vel plura sane;\@par}
+
+\create@par{Effluit igitur voluptas corporis et prima quaeque avolat saepiusque relinquit causam paenitendi quam recordandi. Hoc est vim afferre, Torquate, sensibus, extorquere ex animis cognitiones verborum, quibus inbuti sumus. Quid ei reliquisti, nisi te, quoquo modo loqueretur, intellegere, quid diceret? Itaque a sapientia praecipitur se ipsam, si usus sit, sapiens ut relinquat. Cum sciret confestim esse moriendum eamque mortem ardentiore studio peteret, quam Epicurus voluptatem petendam putat. At modo dixeras nihil in istis rebus esse, quod interesset. Sed virtutem ipsam inchoavit, nihil amplius. Quae si potest singula consolando levare, universa quo modo sustinebit? Utinam quidem dicerent alium alio beatiorem! Iam ruinas videres. Ergo hoc quidem apparet, nos ad agendum esse natos. Nec vero audiendus Hieronymus, cui summum bonum est idem, quod vos interdum vel potius nimium saepe dicitis, nihil dolere. Causa autem fuit huc veniendi ut quosdam hinc libros promerem.\@par}
+
+\create@par{Quem enim ardorem studii censetis fuisse in Archimede, qui dum in pulvere quaedam describit attentius, ne patriam quidem captam esse senserit? Atque ab his initiis profecti omnium virtutum et originem et progressionem persecuti sunt. Nam prius a se poterit quisque discedere quam appetitum earum rerum, quae sibi conducant, amittere. Num igitur dubium est, quin, si in re ipsa nihil peccatur a superioribus, verbis illi commodius utantur? Istic sum, inquit. Ut necesse sit omnium rerum, quae natura vigeant, similem esse finem, non eundem. Aristoteles, Xenocrates, tota illa familia non dabit, quippe qui valitudinem, vires, divitias, gloriam, multa alia bona esse dicant, laudabilia non dicant. Neque enim disputari sine reprehensione nec cum iracundia aut pertinacia recte disputari potest. Aliter enim nosmet ipsos nosse non possumus. Frater et T. Atqui perspicuum est hominem e corpore animoque constare, cum primae sint animi partes, secundae corporis.\@par}
+
+\create@par{Quid ergo aliud intellegetur nisi uti ne quae pars naturae neglegatur? Bonum appello quicquid secundurn naturam est, quod contra malum, nec ego solus, sed tu etiam, Chrysippe, in foro, domi; Et nunc quidem quod eam tuetur, ut de vite potissimum loquar, est id extrinsecus; Collatio igitur ista te nihil iuvat. Itaque dicunt nec dubitant: mihi sic usus est, tibi ut opus est facto, fac. Tu autem, si tibi illa probabantur, cur non propriis verbis ea tenebas? Propter nos enim illam, non propter eam nosmet ipsos diligimus. Qui est in parvis malis. Ergo infelix una molestia, fellx rursus, cum is ipse anulus in praecordiis piscis inventus est? Inde sermone vario sex illa a Dipylo stadia confecimus. Ita enim vivunt quidam, ut eorum vita refellatur oratio. Aeque enim contingit omnibus fidibus, ut incontentae sint. Vides igitur te aut ea sumere, quae non concedantur, aut ea, quae etiam concessa te nihil iuvent. Semper enim ex eo, quod maximas partes continet latissimeque funditur, tota res appellatur.\@par}
+
+\create@par{Aut haec tibi, Torquate, sunt vituperanda aut patrocinium voluptatis repudiandum. Atque etiam ad iustitiam colendam, ad tuendas amicitias et reliquas caritates quid natura valeat haec una cognitio potest tradere. Est igitur officium eius generis, quod nec in bonis ponatur nec in contrariis. Potius inflammat, ut coercendi magis quam dedocendi esse videantur. His similes sunt omnes, qui virtuti student levantur vitiis, levantur erroribus, nisi forte censes Ti. Ad quorum et cognitionem et usum iam corroborati natura ipsa praeeunte deducimur. Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Sed si duo honesta proposita sint, alterum cum valitudine, alterum cum morbo, non esse dubium, ad utrum eorum natura nos ipsa deductura sit. In parvis enim saepe, qui nihil eorum cogitant, si quando iis ludentes minamur praecipitaturos alicunde, extimescunt. Erit enim mecum, si tecum erit. Ab hoc autem quaedam non melius quam veteres, quaedam omnino relicta.\@par}
+
+\create@par{Et harum quidem rerum facilis est et expedita distinctio. Itaque a sapientia praecipitur se ipsam, si usus sit, sapiens ut relinquat. Idem iste, inquam, de voluptate quid sentit? Bonum appello quicquid secundurn naturam est, quod contra malum, nec ego solus, sed tu etiam, Chrysippe, in foro, domi; Quodsi vultum tibi, si incessum fingeres, quo gravior viderere, non esses tui similis; Omnes, qui non sint sapientes, aeque miseros esse, sapientes omnes summe beatos, recte facta omnia aequalia, omnia peccata paria; Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat. Quicquid enim a sapientia proficiscitur, id continuo debet expletum esse omnibus suis partibus; Antiquorum autem sententiam Antiochus noster mihi videtur persequi diligentissime, quam eandem Aristoteli fuisse et Polemonis docet. Nunc omni virtuti vitium contrario nomine opponitur.\@par}
+
+\create@par{Eorum enim est haec querela, qui sibi cari sunt seseque diligunt. Huic ego, si negaret quicquam interesse ad beate vivendum quali uteretur victu, concederem, laudarem etiam; Hic quoque suus est de summoque bono dissentiens dici vere Peripateticus non potest. Idem etiam dolorem saepe perpetiuntur, ne, si id non faciant, incidant in maiorem. Portenta haec esse dicit, neque ea ratione ullo modo posse vivi; Ita enim vivunt quidam, ut eorum vita refellatur oratio. Summum ením bonum exposuit vacuitatem doloris; Et quoniam haec deducuntur de corpore quid est cur non recte pulchritudo etiam ipsa propter se expetenda ducatur? Idem fecisset Epicurus, si sententiam hanc, quae nunc Hieronymi est, coniunxisset cum Aristippi vetere sententia. Atque adhuc ea dixi, causa cur Zenoni non fuisset, quam ob rem a superiorum auctoritate discederet. Istam voluptatem perpetuam quis potest praestare sapienti? Equidem soleo etiam quod uno Graeci, si aliter non possum, idem pluribus verbis exponere.\@par}
+
+\create@par{De malis autem et bonis ab iis animalibus, quae nondum depravata sint, ait optime iudicari. Itaque quantum adiit periculum! ad honestatem enim illum omnem conatum suum referebat, non ad voluptatem. Age, inquies, ista parva sunt. Nam prius a se poterit quisque discedere quam appetitum earum rerum, quae sibi conducant, amittere. Idemque diviserunt naturam hominis in animum et corpus. Ratio enim nostra consentit, pugnat oratio. Disserendi artem nullam habuit. Cur, nisi quod turpis oratio est? Sit enim idem caecus, debilis. Ut pompa, ludis atque eius modi spectaculis teneantur ob eamque rem vel famem et sitim perferant? In omni enim animante est summum aliquid atque optimum, ut in equis, in canibus, quibus tamen et dolore vacare opus est et valere; Sunt enim quasi prima elementa naturae, quibus ubertas orationis adhiberi vix potest, nec equidem eam cogito consectari. Facit igitur Lucius noster prudenter, qui audire de summo bono potissimum velit; Nemo nostrum istius generis asotos iucunde putat vivere.\@par}
+
+\create@par{Quae est igitur causa istarum angustiarum? Quid enim necesse est, tamquam meretricem in matronarum coetum, sic voluptatem in virtutum concilium adducere? Itaque homo in primis ingenuus et gravis, dignus illa familiaritate Scipionis et Laelii, Panaetius, cum ad Q. Ita fit cum gravior, tum etiam splendidior oratio. Universa enim illorum ratione cum tota vestra confligendum puto. Cupit enim dícere nihil posse ad beatam vitam deesse sapienti. Quae cum essent dicta, finem fecimus et ambulandi et disputandi. Suam denique cuique naturam esse ad vivendum ducem. Hosne igitur laudas et hanc eorum, inquam, sententiam sequi nos censes oportere? Rhetorice igitur, inquam, nos mavis quam dialectice disputare? Parvi enim primo ortu sic iacent, tamquam omnino sine animo sint. Si enim ad populum me vocas, eum. Sin autem est in ea, quod quidam volunt, nihil impedit hanc nostram comprehensionem summi boni. Venit enim mihi Platonis in mentem, quem accepimus primum hic disputare solitum;\@par}
+
+\create@par{Non enim ipsa genuit hominem, sed accepit a natura inchoatum. Hoc est non modo cor non habere, sed ne palatum quidem. Cuius etiam illi hortuli propinqui non memoriam solum mihi afferunt, sed ipsum videntur in conspectu meo ponere. Sed memento te, quae nos sentiamus, omnia probare, nisi quod verbis aliter utamur, mihi autem vestrorum nihil probari. Deinde disputat, quod cuiusque generis animantium statui deceat extremum. Ex eorum enim scriptis et institutis cum omnis doctrina liberalis, omnis historia. Hanc quoque iucunditatem, si vis, transfer in animum; Hoc enim constituto in philosophia constituta sunt omnia. Restincta enim sitis stabilitatem voluptatis habet, inquit, illa autem voluptas ipsius restinctionis in motu est. Facit enim ille duo seiuncta ultima bonorum, quae ut essent vera, coniungi debuerunt; Sic enim maiores nostri labores non fugiendos tristissimo tamen verbo aerumnas etiam in deo nominaverunt. Quis non odit sordidos, vanos, leves, futtiles?\@par}
+
+\create@par{Deinde qui fit, ut ego nesciam, sciant omnes, quicumque Epicurei esse voluerunt? Ut proverbia non nulla veriora sint quam vestra dogmata. Parvi enim primo ortu sic iacent, tamquam omnino sine animo sint. Nihil enim desiderabile concupiscunt, plusque in ipsa iniuria detrimenti est quam in iis rebus emolumenti, quae pariuntur iniuria. Et ille ridens: Video, inquit, quid agas; Itaque eos id agere, ut a se dolores, morbos, debilitates repellant. Legimus tamen Diogenem, Antipatrum, Mnesarchum, Panaetium, multos alios in primisque familiarem nostrum Posidonium. Ex ea difficultate illae fallaciloquae, ut ait Accius, malitiae natae sunt. Sin ea non neglegemus neque tamen ad finem summi boni referemus, non multum ab Erilli levitate aberrabimus. Neque solum ea communia, verum etiam paria esse dixerunt. An est aliquid, quod te sua sponte delectet? Sed haec ab Antiocho, familiari nostro, dicuntur multo melius et fortius, quam a Stasea dicebantur. Teneo, inquit, finem illi videri nihil dolere.\@par}
+
+\create@par{Ut scias me intellegere, primum idem esse dico voluptatem, quod ille don. Atqui iste locus est, Piso, tibi etiam atque etiam confirmandus, inquam; Portenta haec esse dicit, neque ea ratione ullo modo posse vivi; Ergo illi intellegunt quid Epicurus dicat, ego non intellego? Pudebit te, inquam, illius tabulae, quam Cleanthes sane commode verbis depingere solebat. Nam et ille apud Trabeam voluptatem animi nimiam laetitiam dicit eandem, quam ille Caecilianus, qui omnibus laetitiis laetum esse se narrat. Qua ex cognitione facilior facta est investigatio rerum occultissimarum. Quae quidem vel cum periculo est quaerenda vobis; O magnam vim ingenii causamque iustam, cur nova existeret disciplina! Perge porro. Amicitiae vero locus ubi esse potest aut quis amicus esse cuiquam, quem non ipsum amet propter ipsum? Nam, ut sint illa vendibiliora, haec uberiora certe sunt. Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es?\@par}
+
+\create@par{Quo minus animus a se ipse dissidens secumque discordans gustare partem ullam liquidae voluptatis et liberae potest. His singulis copiose responderi solet, sed quae perspicua sunt longa esse non debent. Cetera illa adhibebat, quibus demptis negat se Epicurus intellegere quid sit bonum. Nam Metrodorum non puto ipsum professum, sed, cum appellaretur ab Epicuro, repudiare tantum beneficium noluisse; Num igitur utiliorem tibi hunc Triarium putas esse posse, quam si tua sint Puteolis granaria? Illud urgueam, non intellegere eum quid sibi dicendum sit, cum dolorem summum malum esse dixerit. Illa videamus, quae a te de amicitia dicta sunt. Illud quaero, quid ei, qui in voluptate summum bonum ponat, consentaneum sit dicere. Sed quid minus probandum quam esse aliquem beatum nec satis beatum? Ergo adhuc, quantum equidem intellego, causa non videtur fuisse mutandi nominis. De malis autem et bonis ab iis animalibus, quae nondum depravata sint, ait optime iudicari.\@par}
+
+\create@par{Primum cur ista res digna odio est, nisi quod est turpis? Nihil enim arbitror esse magna laude dignum, quod te praetermissurum credam aut mortis aut doloris metu. Magni enim aestimabat pecuniam non modo non contra leges, sed etiam legibus partam. Hic, qui utrumque probat, ambobus debuit uti, sicut facit re, neque tamen dividit verbis. Praeterea et appetendi et refugiendi et omnino rerum gerendarum initia proficiscuntur aut a voluptate aut a dolore. Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es? Immo sit sane nihil melius, inquam-nondum enim id quaero-, num propterea idem voluptas est, quod, ut ita dicam, indolentia? In qua quid est boni praeter summam voluptatem, et eam sempiternam? Magno hic ingenio, sed res se tamen sic habet, ut nimis imperiosi philosophi sit vetare meminisse. Summus dolor plures dies manere non potest? Quacumque enim ingredimur, in aliqua historia vestigium ponimus. Naturales divitias dixit parabiles esse, quod parvo esset natura contenta.\@par}
+
+\create@par{Quae contraria sunt his, malane? Audax negotium, dicerem impudens, nisi hoc institutum postea translatum ad philosophos nostros esset. Haec et tu ita posuisti, et verba vestra sunt. Duo enim genera quae erant, fecit tria. Aliis esse maiora, illud dubium, ad id, quod summum bonum dicitis, ecquaenam possit fieri accessio. Quoniamque in iis rebus, quae neque in virtutibus sunt neque in vitiis, est tamen quiddam, quod usui possit esse, tollendum id non est. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet, ut et voluptates repudiandae sint et molestiae non recusandae. Nec enim, dum metuit, iustus est, et certe, si metuere destiterit, non erit; Nec enim, omnes avaritias si aeque avaritias esse dixerimus, sequetur ut etiam aequas esse dicamus. Atqui, inquam, Cato, si istud optinueris, traducas me ad te totum licebit. Huic ego, si negaret quicquam interesse ad beate vivendum quali uteretur victu, concederem, laudarem etiam;\@par}
+
+\create@par{Quacumque enim ingredimur, in aliqua historia vestigium ponimus. Qui potest igitur habitare in beata vita summi mali metus? Sunt enim quasi prima elementa naturae, quibus ubertas orationis adhiberi vix potest, nec equidem eam cogito consectari. Sed id ne cogitari quidem potest quale sit, ut non repugnet ipsum sibi. Hoc est non modo cor non habere, sed ne palatum quidem. Sic, et quidem diligentius saepiusque ista loquemur inter nos agemusque communiter. De quibus etsi a Chrysippo maxime est elaboratum, tamen a Zenone minus multo quam ab antiquis; Ita relinquet duas, de quibus etiam atque etiam consideret. Illud mihi a te nimium festinanter dictum videtur, sapientis omnis esse semper beatos; Suo genere perveniant ad extremum; Quid, cum fictas fabulas, e quibus utilitas nulla elici potest, cum voluptate legimus? Estne, quaeso, inquam, sitienti in bibendo voluptas? Quid in isto egregio tuo officio et tanta fide-sic enim existimo-ad corpus refers? Quod quidem iam fit etiam in Academia.\@par}
+
+\create@par{Idemque diviserunt naturam hominis in animum et corpus. In omni enim arte vel studio vel quavis scientia vel in ipsa virtute optimum quidque rarissimum est. Non dolere, inquam, istud quam vim habeat postea videro; An id exploratum cuiquam potest esse, quo modo se hoc habiturum sit corpus, non dico ad annum, sed ad vesperum? Estne, quaeso, inquam, sitienti in bibendo voluptas? Ut pompa, ludis atque eius modi spectaculis teneantur ob eamque rem vel famem et sitim perferant? Inquit, respondet: Quia, nisi quod honestum est, nullum est aliud bonum! Non quaero iam verumne sit; Oculorum, inquit Plato, est in nobis sensus acerrimus, quibus sapientiam non cernimus. Iam quae corporis sunt, ea nec auctoritatem cum animi partibus, comparandam et cognitionem habent faciliorem. Quamquam id quidem, infinitum est in hac urbe; Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Quod cum ita sit, perspicuum est omnis rectas res atque laudabilis eo referri, ut cum voluptate vivatur.\@par}
+
+\create@par{Multa sunt dicta ab antiquis de contemnendis ac despiciendis rebus humanis; Eorum enim omnium multa praetermittentium, dum eligant aliquid, quod sequantur, quasi curta sententia; Res enim fortasse verae, certe graves, non ita tractantur, ut debent, sed aliquanto minutius. At modo dixeras nihil in istis rebus esse, quod interesset. Atqui reperies, inquit, in hoc quidem pertinacem; Fadio Gallo, cuius in testamento scriptum esset se ab eo rogatum ut omnis hereditas ad filiam perveniret. Habes, inquam, Cato, formam eorum, de quibus loquor, philosophorum. Mihi enim erit isdem istis fortasse iam utendum. Non quam nostram quidem, inquit Pomponius iocans; Nunc dicam de voluptate, nihil scilicet novi, ea tamen, quae te ipsum probaturum esse confidam. Nec vero audiendus Hieronymus, cui summum bonum est idem, quod vos interdum vel potius nimium saepe dicitis, nihil dolere. Est igitur officium eius generis, quod nec in bonis ponatur nec in contrariis.\@par}
+
+\create@par{Certe, nisi voluptatem tanti aestimaretis. Non risu potius quam oratione eiciendum? Quis est autem dignus nomine hominis, qui unum diem totum velit esse in genere isto voluptatis? Quem quidem vos, cum improbis poenam proponitis, inpetibilem facitis, cum sapientem semper boni plus habere vultis, tolerabilem. Itaque hic ipse iam pridem est reiectus; Atque hoc loco similitudines eas, quibus illi uti solent, dissimillimas proferebas. Commoda autem et incommoda in eo genere sunt, quae praeposita et reiecta diximus; Negare non possum. Atqui pugnantibus et contrariis studiis consiliisque semper utens nihil quieti videre, nihil tranquilli potest. Nec enim, dum metuit, iustus est, et certe, si metuere destiterit, non erit; Quasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit. Sit hoc ultimum bonorum, quod nunc a me defenditur; Quis enim redargueret? Nec enim ignoras his istud honestum non summum modo, sed etiam, ut tu vis, solum bonum videri.\@par}
+
+\create@par{Quae fere omnia appellantur uno ingenii nomine, easque virtutes qui habent, ingeniosi vocantur. Utrum enim sit voluptas in iis rebus, quas primas secundum naturam esse diximus, necne sit ad id, quod agimus, nihil interest. Negat enim tenuissimo victu, id est contemptissimis escis et potionibus, minorem voluptatem percipi quam rebus exquisitissimis ad epulandum. Aliis esse maiora, illud dubium, ad id, quod summum bonum dicitis, ecquaenam possit fieri accessio. Fadio Gallo, cuius in testamento scriptum esset se ab eo rogatum ut omnis hereditas ad filiam perveniret. Incommoda autem et commoda-ita enim estmata et dustmata appello-communia esse voluerunt, paria noluerunt. Princeps huius civitatis Phalereus Demetrius cum patria pulsus esset iniuria, ad Ptolomaeum se regem Alexandream contulit. Quodsi ipsam honestatem undique pertectam atque absolutam. Nam, ut sint illa vendibiliora, haec uberiora certe sunt. Quo modo autem philosophus loquitur? Non enim ipsa genuit hominem, sed accepit a natura inchoatum.\@par}
+
+% MEDIUM-LENGHT paragraphs
+\create@par{Stoici autem, quod finem bonorum in una virtute ponunt, similes sunt illorum; Erat enim Polemonis. Ut optime, secundum naturam affectum esse possit. Negat esse eam, inquit, propter se expetendam. Beatus autem esse in maximarum rerum timore nemo potest. Idem iste, inquam, de voluptate quid sentit? Non est ista, inquam, Piso, magna dissensio.\@par}
+
+\create@par{Non ergo Epicurus ineruditus, sed ii indocti, qui, quae pueros non didicisse turpe est, ea putant usque ad senectutem esse discenda. Hoc ille tuus non vult omnibusque ex rebus voluptatem quasi mercedem exigit. Etsi ea quidem, quae adhuc dixisti, quamvis ad aetatem recte isto modo dicerentur. Nemo nostrum istius generis asotos iucunde putat vivere.\@par}
+
+\create@par{Quorum sine causa fieri nihil putandum est. A primo, ut opinor, animantium ortu petitur origo summi boni. Ita enim vivunt quidam, ut eorum vita refellatur oratio. Eam tum adesse, cum dolor omnis absit; Verba tu fingas et ea dicas, quae non sentias? His singulis copiose responderi solet, sed quae perspicua sunt longa esse non debent.\@par}
+
+\create@par{Est tamen ea secundum naturam multoque nos ad se expetendam magis hortatur quam superiora omnia. Iubet igitur nos Pythius Apollo noscere nosmet ipsos. Tuo vero id quidem, inquam, arbitratu. Haec quo modo conveniant, non sane intellego. Cur fortior sit, si illud, quod tute concedis, asperum et vix ferendum putabit? Sullae consulatum?\@par}
+
+\create@par{Diodorus, eius auditor, adiungit ad honestatem vacuitatem doloris. Mihi quidem Antiochum, quem audis, satis belle videris attendere. Conferam tecum, quam cuique verso rem subicias; Sed quot homines, tot sententiae; Videamus animi partes, quarum est conspectus illustrior; An me, inquam, nisi te audire vellem, censes haec dicturum fuisse?\@par}
+
+\create@par{Non est ista, inquam, Piso, magna dissensio. Faceres tu quidem, Torquate, haec omnia; Quae fere omnia appellantur uno ingenii nomine, easque virtutes qui habent, ingeniosi vocantur. Hunc vos beatum; Virtutibus igitur rectissime mihi videris et ad consuetudinem nostrae orationis vitia posuisse contraria. Tu vero, inquam, ducas licet, si sequetur;\@par}
+
+\create@par{Tecum optime, deinde etiam cum mediocri amico. Perge porro; Nam, ut sint illa vendibiliora, haec uberiora certe sunt. Equidem etiam Epicurum, in physicis quidem, Democriteum puto. Dolere malum est: in crucem qui agitur, beatus esse non potest. At ille pellit, qui permulcet sensum voluptate. Nihil opus est exemplis hoc facere longius.\@par}
+
+\create@par{Quae autem natura suae primae institutionis oblita est? Ita fit cum gravior, tum etiam splendidior oratio. Non autem hoc: igitur ne illud quidem. Eaedem res maneant alio modo. Videamus animi partes, quarum est conspectus illustrior; Qui-vere falsone, quaerere mittimus-dicitur oculis se privasse; Animum autem reliquis rebus ita perfecit, ut corpus;\@par}
+
+\create@par{Ut id aliis narrare gestiant? Traditur, inquit, ab Epicuro ratio neglegendi doloris. Sin aliud quid voles, postea. Nunc vides, quid faciat. Nunc ita separantur, ut disiuncta sint, quo nihil potest esse perversius. Quantum Aristoxeni ingenium consumptum videmus in musicis? Itaque sensibus rationem adiunxit et ratione effecta sensus non reliquit.\@par}
+
+\create@par{Traditur, inquit, ab Epicuro ratio neglegendi doloris. Paupertas si malum est, mendicus beatus esse nemo potest, quamvis sit sapiens. Nunc haec primum fortasse audientis servire debemus. Omnia contraria, quos etiam insanos esse vultis. Quid ergo hoc loco intellegit honestum? In qua si nihil est praeter rationem, sit in una virtute finis bonorum;\@par}
+
+\create@par{Ea possunt paria non esse. Haec dicuntur inconstantissime. Huius, Lyco, oratione locuples, rebus ipsis ielunior. Sed quia studebat laudi et dignitati, multum in virtute processerat. Nec vero intermittunt aut admirationem earum rerum, quae sunt ab antiquis repertae, aut investigationem novarum. Sed tu istuc dixti bene Latine, parum plane.\@par}
+
+\create@par{Non igitur potestis voluptate omnia dirigentes aut tueri aut retinere virtutem. Nec lapathi suavitatem acupenseri Galloni Laelius anteponebat, sed suavitatem ipsam neglegebat; Gerendus est mos, modo recte sentiat. Quod cum dixissent, ille contra. Quamquam id quidem, infinitum est in hac urbe; Ut non sine causa ex iis memoriae ducta sit disciplina.\@par}
+
+\create@par{Id Sextilius factum negabat. Quid, quod res alia tota est? Qui enim existimabit posse se miserum esse beatus non erit. Ita relinquet duas, de quibus etiam atque etiam consideret. Atqui eorum nihil est eius generis, ut sit in fine atque extrerno bonorum. Certe non potest. Maximas vero virtutes iacere omnis necesse est voluptate dominante.\@par}
+
+\create@par{In qua quid est boni praeter summam voluptatem, et eam sempiternam? Aliena dixit in physicis nec ea ipsa, quae tibi probarentur; Quippe: habes enim a rhetoribus; Invidiosum nomen est, infame, suspectum. Eadem nunc mea adversum te oratio est. Sed haec ab Antiocho, familiari nostro, dicuntur multo melius et fortius, quam a Stasea dicebantur.\@par}
+
+\create@par{Ego vero volo in virtute vim esse quam maximam; Aliena dixit in physicis nec ea ipsa, quae tibi probarentur; Quaesita enim virtus est, non quae relinqueret naturam, sed quae tueretur. Polycratem Samium felicem appellabant. Vide igitur ne non debeas verbis nostris uti, sententiis tuis. Quae similitudo in genere etiam humano apparet.\@par}
+
+\create@par{Ut nemo dubitet, eorum omnia officia quo spectare, quid sequi, quid fugere debeant? Itaque illa non dico me expetere, sed legere, nec optare, sed sumere, contraria autem non fugere, sed quasi secernere. Ac tamen hic mallet non dolere. Hoc loco tenere se Triarius non potuit. Quid iudicant sensus? Ergo hoc quidem apparet, nos ad agendum esse natos.\@par}
+
+\create@par{Nondum autem explanatum satis, erat, quid maxime natura vellet. Ita redarguitur ipse a sese, convincunturque scripta eius probitate ipsius ac moribus. Cenasti in vita numquam bene, cum omnia in ista Consumis squilla atque acupensere cum decimano. Nam et a te perfici istam disputationem volo, nec tua mihi oratio longa videri potest.\@par}
+
+\create@par{Cave putes quicquam esse verius. Quos nisi redarguimus, omnis virtus, omne decus, omnis vera laus deserenda est. Dicimus aliquem hilare vivere; Nos commodius agimus. Dici enim nihil potest verius. Et ille ridens: Video, inquit, quid agas; Eam tum adesse, cum dolor omnis absit; Ut id aliis narrare gestiant? Tibi hoc incredibile, quod beatissimum.\@par}
+
+\create@par{Igitur ne dolorem quidem. Sed quod proximum fuit non vidit. Itaque primos congressus copulationesque et consuetudinum instituendarum voluntates fieri propter voluptatem; Quid igitur dubitamus in tota eius natura quaerere quid sit effectum? Ita enim vivunt quidam, ut eorum vita refellatur oratio. Hoc Hieronymus summum bonum esse dixit.\@par}
+
+\create@par{Collige omnia, quae soletis: Praesidium amicorum. Gerendus est mos, modo recte sentiat. In schola desinis. Est enim effectrix multarum et magnarum voluptatum. Beatus autem esse in maximarum rerum timore nemo potest. Obsecro, inquit, Torquate, haec dicit Epicurus? Laboro autem non sine causa; Quae cum dixisset paulumque institisset, Quid est?\@par}
+
+\create@par{Deinde prima illa, quae in congressu solemus: Quid tu, inquit, huc? Quid ergo hoc loco intellegit honestum? Sed quia studebat laudi et dignitati, multum in virtute processerat. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant. At cum de plurimis eadem dicit, tum certe de maximis. Prodest, inquit, mihi eo esse animo.\@par}
+
+\create@par{Ita multa dicunt, quae vix intellegam. Est enim effectrix multarum et magnarum voluptatum. At iam decimum annum in spelunca iacet. Omnes enim iucundum motum, quo sensus hilaretur. Bonum negas esse divitias, praeposìtum esse dicis? Cur iustitia laudatur? Quamquam id quidem, infinitum est in hac urbe; Hoc loco tenere se Triarius non potuit.\@par}
+
+\create@par{Nullus est igitur cuiusquam dies natalis. Qui-vere falsone, quaerere mittimus-dicitur oculis se privasse; Sed quae tandem ista ratio est? Quis suae urbis conservatorem Codrum, quis Erechthei filias non maxime laudat? Nam adhuc, meo fortasse vitio, quid ego quaeram non perspicis. Videamus animi partes, quarum est conspectus illustrior;\@par}
+
+\create@par{Quid enim tanto opus est instrumento in optimis artibus comparandis? Videmus igitur ut conquiescere ne infantes quidem possint. Sed quanta sit alias, nunc tantum possitne esse tanta. Qualem igitur hominem natura inchoavit? Si alia sentit, inquam, alia loquitur, numquam intellegam quid sentiat; Cur id non ita fit? Ego vero isti, inquam, permitto.\@par}
+
+\create@par{Sed quanta sit alias, nunc tantum possitne esse tanta. Quod non faceret, si in voluptate summum bonum poneret. Restinguet citius, si ardentem acceperit. Sin dicit obscurari quaedam nec apparere, quia valde parva sint, nos quoque concedimus; An eiusdem modi? Non est igitur summum malum dolor. Ita graviter et severe voluptatem secrevit a bono.\@par}
+
+\create@par{Idem iste, inquam, de voluptate quid sentit? Qui ita affectus, beatum esse numquam probabis; Miserum hominem! Si dolor summum malum est, dici aliter non potest. Quae similitudo in genere etiam humano apparet. Ita graviter et severe voluptatem secrevit a bono. Quod totum contra est. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant.\@par}
+
+\create@par{Hoc est non dividere, sed frangere. Similiter sensus, cum accessit ad naturam, tuetur illam quidem, sed etiam se tuetur; Hoc est dicere: Non reprehenderem asotos, si non essent asoti. Et si in ipsa gubernatione neglegentia est navis eversa, maius est peccatum in auro quam in palea. Quae in controversiam veniunt, de iis, si placet, disseramus.\@par}
+
+\create@par{Quantum Aristoxeni ingenium consumptum videmus in musicis? Gloriosa ostentatio in constituendo summo bono. Quamquam te quidem video minime esse deterritum. Est autem officium, quod ita factum est, ut eius facti probabilis ratio reddi possit. Cum id fugiunt, re eadem defendunt, quae Peripatetici, verba. Quid est enim aliud esse versutum?\@par}
+
+\create@par{Num igitur eum postea censes anxio animo aut sollicito fuisse? Virtutibus igitur rectissime mihi videris et ad consuetudinem nostrae orationis vitia posuisse contraria. Non est igitur summum malum dolor. Huius, Lyco, oratione locuples, rebus ipsis ielunior. Duae sunt enim res quoque, ne tu verba solum putes. Primum divisit ineleganter;\@par}
+
+\create@par{Beatus autem esse in maximarum rerum timore nemo potest. Expressa vero in iis aetatibus, quae iam confirmatae sunt. Igitur neque stultorum quisquam beatus neque sapientium non beatus. Ut optime, secundum naturam affectum esse possit. Honesta oratio, Socratica, Platonis etiam. Aliter homines, aliter philosophos loqui putas oportere?\@par}
+
+\create@par{Heri, inquam, ludis commissis ex urbe profectus veni ad vesperum. In eo autem voluptas omnium Latine loquentium more ponitur, cum percipitur ea, quae sensum aliquem moveat, iucunditas. Addo etiam illud, multa iam mihi dare signa puerum et pudoris et ingenii, sed aetatem vides. At tu eadem ista dic in iudicio aut, si coronam times, dic in senatu.\@par}
+
+\create@par{Esse enim quam vellet iniquus iustus poterat inpune. Quid ergo? Sed erat aequius Triarium aliquid de dissensione nostra iudicare. Iam in altera philosophiae parte. Quod autem ratione actum est, id officium appellamus. Cur id non ita fit? Quae in controversiam veniunt, de iis, si placet, disseramus. Qualem igitur hominem natura inchoavit?\@par}
+
+\create@par{Non igitur potestis voluptate omnia dirigentes aut tueri aut retinere virtutem. Age nunc isti doceant, vel tu potius quis enim ista melius? Indicant pueri, in quibus ut in speculis natura cernitur. Quod autem satis est, eo quicquid accessit, nimium est; Hoc mihi cum tuo fratre convenit. Bonum negas esse divitias, praeposìtum esse dicis?\@par}
+
+\create@par{Consequentia exquirere, quoad sit id, quod volumus, effectum. Quae cum dixisset paulumque institisset, Quid est? Mihi vero, inquit, placet agi subtilius et, ut ipse dixisti, pressius. Sed potestne rerum maior esse dissensio? At iam decimum annum in spelunca iacet. Atque hoc loco similitudines eas, quibus illi uti solent, dissimillimas proferebas.\@par}
+
+\create@par{Sit sane ista voluptas. Expressa vero in iis aetatibus, quae iam confirmatae sunt. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant. Tum Quintus: Est plane, Piso, ut dicis, inquit. Rhetorice igitur, inquam, nos mavis quam dialectice disputare? Ergo adhuc, quantum equidem intellego, causa non videtur fuisse mutandi nominis.\@par}
+
+\create@par{Teneo, inquit, finem illi videri nihil dolere. Satisne vobis videor pro meo iure in vestris auribus commentatus? Non semper, inquam; Beatus sibi videtur esse moriens. Minime vero, inquit ille, consentit. Poterat autem inpune; Illum mallem levares, quo optimum atque humanissimum virum, Cn. De vacuitate doloris eadem sententia erit.\@par}
+
+\create@par{An eum discere ea mavis, quae cum plane perdidiceriti nihil sciat? Neque enim civitas in seditione beata esse potest nec in discordia dominorum domus; Quid turpius quam sapientis vitam ex insipientium sermone pendere? Esse enim, nisi eris, non potes. Ait enim se, si uratur, Quam hoc suave! dicturum. Inde igitur, inquit, ordiendum est. Quo modo?\@par}
+
+\create@par{Nam et complectitur verbis, quod vult, et dicit plane, quod intellegam; Quid ergo aliud intellegetur nisi uti ne quae pars naturae neglegatur? Atque haec coniunctio confusioque virtutum tamen a philosophis ratione quadam distinguitur. Num igitur dubium est, quin, si in re ipsa nihil peccatur a superioribus, verbis illi commodius utantur?\@par}
+
+\create@par{Hoc est non dividere, sed frangere. Summae mihi videtur inscitiae. Graccho, eius fere, aequalí? Mihi enim satis est, ipsis non satis. Illud quaero, quid ei, qui in voluptate summum bonum ponat, consentaneum sit dicere. Bonum integritas corporis: misera debilitas. Sed ad bona praeterita redeamus. Nobis aliter videtur, recte secusne, postea;\@par}
+
+\create@par{Potius inflammat, ut coercendi magis quam dedocendi esse videantur. Frater et T. Non quaeritur autem quid naturae tuae consentaneum sit, sed quid disciplinae. Haec dicuntur inconstantissime. Is ita vivebat, ut nulla tam exquisita posset inveniri voluptas, qua non abundaret. Diodorus, eius auditor, adiungit ad honestatem vacuitatem doloris.\@par}
+
+\create@par{Quae quidem vel cum periculo est quaerenda vobis; Hoc loco tenere se Triarius non potuit. Virtutis, magnitudinis animi, patientiae, fortitudinis fomentis dolor mitigari solet. Maximas vero virtutes iacere omnis necesse est voluptate dominante. Omnia peccata paria dicitis. Miserum hominem! Si dolor summum malum est, dici aliter non potest.\@par}
+
+\create@par{Ne in odium veniam, si amicum destitero tueri. Sed quanta sit alias, nunc tantum possitne esse tanta. Hanc ergo intuens debet institutum illud quasi signum absolvere. Mihi enim erit isdem istis fortasse iam utendum. Quo plebiscito decreta a senatu est consuli quaestio Cn. Qui autem de summo bono dissentit de tota philosophiae ratione dissentit.\@par}
+
+\create@par{Quae cum dixisset, finem ille. Adsint etiam formosi pueri, qui ministrent, respondeat his vestis, argentum, Corinthium, locus ipse, aedificium-hos ergo asotos bene quidem vivere aut beate numquam dixerim. Quia dolori non voluptas contraria est, sed doloris privatio. Quasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit.\@par}
+
+\create@par{Cetera illa adhibebat, quibus demptis negat se Epicurus intellegere quid sit bonum. De hominibus dici non necesse est. Duarum enim vitarum nobis erunt instituta capienda. Color egregius, integra valitudo, summa gratia, vita denique conferta voluptatum omnium varietate. Ego vero volo in virtute vim esse quam maximam; Sed quae tandem ista ratio est?\@par}
+
+\create@par{Illa argumenta propria videamus, cur omnia sint paria peccata. Dic in quovis conventu te omnia facere, ne doleas. Innumerabilia dici possunt in hanc sententiam, sed non necesse est. Non enim iam stirpis bonum quaeret, sed animalis. Tum mihi Piso: Quid ergo? Audio equidem philosophi vocem, Epicure, sed quid tibi dicendum sit oblitus es.\@par}
+
+\create@par{Apud ceteros autem philosophos, qui quaesivit aliquid, tacet; Traditur, inquit, ab Epicuro ratio neglegendi doloris. Bona autem corporis huic sunt, quod posterius posui, similiora. Apud ceteros autem philosophos, qui quaesivit aliquid, tacet; Contineo me ab exemplis. Si quidem, inquit, tollerem, sed relinquo. Eam tum adesse, cum dolor omnis absit;\@par}
+
+\create@par{Zenonis est, inquam, hoc Stoici. At enim sequor utilitatem. Nunc agendum est subtilius. Illum mallem levares, quo optimum atque humanissimum virum, Cn. Teneo, inquit, finem illi videri nihil dolere. Sed haec quidem liberius ab eo dicuntur et saepius. Disserendi artem nullam habuit. Sed ad haec, nisi molestum est, habeo quae velim.\@par}
+
+\create@par{Quamquam tu hanc copiosiorem etiam soles dicere. Quod quidem iam fit etiam in Academia. Non igitur bene. Hoc est non dividere, sed frangere. Non ego tecum iam ita iocabor, ut isdem his de rebus, cum L. Cave putes quicquam esse verius. Atque haec ita iustitiae propria sunt, ut sint virtutum reliquarum communia. Quare ad ea primum, si videtur;\@par}
+
+\create@par{Sin aliud quid voles, postea. Quasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit. Odium autem et invidiam facile vitabis. Si longus, levis. Varietates autem iniurasque fortunae facile veteres philosophorum praeceptis instituta vita superabat. Quae animi affectio suum cuique tribuens atque hanc, quam dico.\@par}
+
+\create@par{Rationis enim perfectio est virtus; Istam voluptatem perpetuam quis potest praestare sapienti? Non est ista, inquam, Piso, magna dissensio. Sed quid minus probandum quam esse aliquem beatum nec satis beatum? Ab hoc autem quaedam non melius quam veteres, quaedam omnino relicta. Cur id non ita fit? Quamquam id quidem, infinitum est in hac urbe;\@par}
+
+\create@par{Igitur neque stultorum quisquam beatus neque sapientium non beatus. Quid de Platone aut de Democrito loquar? Scisse enim te quis coarguere possit? Mihi enim satis est, ipsis non satis. Sed quot homines, tot sententiae; Sic, et quidem diligentius saepiusque ista loquemur inter nos agemusque communiter. Inde igitur, inquit, ordiendum est.\@par}
+
+\create@par{Itaque contra est, ac dicitis; Est enim effectrix multarum et magnarum voluptatum. Huius, Lyco, oratione locuples, rebus ipsis ielunior. Serpere anguiculos, nare anaticulas, evolare merulas, cornibus uti videmus boves, nepas aculeis. Nunc ita separantur, ut disiuncta sint, quo nihil potest esse perversius. Itaque hic ipse iam pridem est reiectus;\@par}
+
+\create@par{Quamquam id quidem, infinitum est in hac urbe; At multis se probavit. Septem autem illi non suo, sed populorum suffragio omnium nominati sunt. Ergo hoc quidem apparet, nos ad agendum esse natos. Sint modo partes vitae beatae. Hoc non est positum in nostra actione. Quis animo aequo videt eum, quem inpure ac flagitiose putet vivere?\@par}
+
+\create@par{Quis non odit sordidos, vanos, leves, futtiles? Aliter enim explicari, quod quaeritur, non potest. Consequens enim est et post oritur, ut dixi. His singulis copiose responderi solet, sed quae perspicua sunt longa esse non debent. Sed tempus est, si videtur, et recta quidem ad me. Hoc dixerit potius Ennius: Nimium boni est, cui nihil est mali.\@par}
+
+\create@par{Quae quo sunt excelsiores, eo dant clariora indicia naturae. Non est igitur summum malum dolor. Quid ad utilitatem tantae pecuniae? Quae cum dixisset, finem ille. Suo genere perveniant ad extremum; At eum nihili facit; Nihil minus, contraque illa hereditate dives ob eamque rem laetus. Quantum Aristoxeni ingenium consumptum videmus in musicis?\@par}
+
+\create@par{Tria genera cupiditatum, naturales et necessariae, naturales et non necessariae, nec naturales nec necessariae. Ita ceterorum sententiis semotis relinquitur non mihi cum Torquato, sed virtuti cum voluptate certatio. Sed quia studebat laudi et dignitati, multum in virtute processerat. Iubet igitur nos Pythius Apollo noscere nosmet ipsos.\@par}
+
+\create@par{Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Etenim semper illud extra est, quod arte comprehenditur. Cum id fugiunt, re eadem defendunt, quae Peripatetici, verba. Fortemne possumus dicere eundem illum Torquatum? Et ille ridens: Video, inquit, quid agas; Cupiditates non Epicuri divisione finiebat, sed sua satietate.\@par}
+
+\create@par{In schola desinis. Isto modo ne improbos quidem, si essent boni viri. Deinde dolorem quem maximum? Et quod est munus, quod opus sapientiae? Cur igitur easdem res, inquam, Peripateticis dicentibus verbum nullum est, quod non intellegatur? Hic ambiguo ludimur. Eam si varietatem diceres, intellegerem, ut etiam non dicente te intellego;\@par}
+
+\create@par{Itaque in rebus minime obscuris non multus est apud eos disserendi labor. Itaque si aut requietem natura non quaereret aut eam posset alia quadam ratione consequi. Dici enim nihil potest verius. Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Est enim effectrix multarum et magnarum voluptatum. Tum mihi Piso: Quid ergo?\@par}
+
+\create@par{Sed quot homines, tot sententiae; Qui ita affectus, beatum esse numquam probabis; Itaque dicunt nec dubitant: mihi sic usus est, tibi ut opus est facto, fac. Praeclare hoc quidem. Philosophi autem in suis lectulis plerumque moriuntur. Quare conare, quaeso. Oculorum, inquit Plato, est in nobis sensus acerrimus, quibus sapientiam non cernimus.\@par}
+
+\create@par{Non laboro, inquit, de nomine. Ac tamen hic mallet non dolere. Equidem etiam Epicurum, in physicis quidem, Democriteum puto. Iam id ipsum absurdum, maximum malum neglegi. Et quidem, inquit, vehementer errat; Et non ex maxima parte de tota iudicabis? Quamquam id quidem licebit iis existimare, qui legerint. Tum Torquatus: Prorsus, inquit, assentior;\@par}
+
+\create@par{Ergo ita: non posse honeste vivi, nisi honeste vivatur? In eo enim positum est id, quod dicimus esse expetendum. Age, inquies, ista parva sunt. Piso, familiaris noster, et alia multa et hoc loco Stoicos irridebat: Quid enim? Cum autem in quo sapienter dicimus, id a primo rectissime dicitur. Quamquam tu hanc copiosiorem etiam soles dicere.\@par}
+
+\create@par{Cum id quoque, ut cupiebat, audivisset, evelli iussit eam, qua erat transfixus, hastam. Hinc ceteri particulas arripere conati suam quisque videro voluit afferre sententiam. Urgent tamen et nihil remittunt. Quo tandem modo? Si longus, levis. Sed tempus est, si videtur, et recta quidem ad me. Aliter enim explicari, quod quaeritur, non potest.\@par}
+
+\create@par{Sin aliud quid voles, postea. Ego vero volo in virtute vim esse quam maximam; Expressa vero in iis aetatibus, quae iam confirmatae sunt. Laelius clamores sofòw ille so lebat Edere compellans gumias ex ordine nostros. Negare non possum. Refert tamen, quo modo. Immo alio genere; Quicquid porro animo cernimus, id omne oritur a sensibus;\@par}
+
+\create@par{Sin autem ad animum, falsum est, quod negas animi ullum esse gaudium, quod non referatur ad corpus. Cur tantas regiones barbarorum pedibus obiit, tot maria transmisit? Res enim fortasse verae, certe graves, non ita tractantur, ut debent, sed aliquanto minutius. Semper enim ita adsumit aliquid, ut ea, quae prima dederit, non deserat.\@par}
+
+\create@par{At certe gravius. Conferam tecum, quam cuique verso rem subicias; Quamquam in hac divisione rem ipsam prorsus probo, elegantiam desidero. Efficiens dici potest. Nec enim, dum metuit, iustus est, et certe, si metuere destiterit, non erit; Nonne igitur tibi videntur, inquit, mala? Sed quid attinet de rebus tam apertis plura requirere?\@par}
+
+\create@par{Stoici autem, quod finem bonorum in una virtute ponunt, similes sunt illorum; Ille incendat? Hoc loco tenere se Triarius non potuit. Nemo nostrum istius generis asotos iucunde putat vivere. Hoc dixerit potius Ennius: Nimium boni est, cui nihil est mali. Scrupulum, inquam, abeunti; Nihil minus, contraque illa hereditate dives ob eamque rem laetus.\@par}
+
+\create@par{Huic ego, si negaret quicquam interesse ad beate vivendum quali uteretur victu, concederem, laudarem etiam; Virtutis, magnitudinis animi, patientiae, fortitudinis fomentis dolor mitigari solet. Esse enim, nisi eris, non potes. Consequens enim est et post oritur, ut dixi. Luxuriam non reprehendit, modo sit vacua infinita cupiditate et timore.\@par}
+
+\create@par{An tu me de L. Suo genere perveniant ad extremum; Bestiarum vero nullum iudicium puto. Hoc sic expositum dissimile est superiori. Nam memini etiam quae nolo, oblivisci non possum quae volo. Certe, nisi voluptatem tanti aestimaretis. Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Age, inquies, ista parva sunt.\@par}
+
+\create@par{Qua tu etiam inprudens utebare non numquam. Vidit Homerus probari fabulam non posse, si cantiunculis tantus irretitus vir teneretur; Utilitatis causa amicitia est quaesita. An hoc usque quaque, aliter in vita? Confecta res esset. Si enim ita est, vide ne facinus facias, cum mori suadeas. Ut in geometria, prima si dederis, danda sunt omnia.\@par}
+
+\create@par{Si enim ad populum me vocas, eum. Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Tamen a proposito, inquam, aberramus. Non dolere, inquam, istud quam vim habeat postea videro; Nam si propter voluptatem, quae est ista laus, quae possit e macello peti? Ergo hoc quidem apparet, nos ad agendum esse natos. A mene tu?\@par}
+
+\create@par{Ut necesse sit omnium rerum, quae natura vigeant, similem esse finem, non eundem. Nam adhuc, meo fortasse vitio, quid ego quaeram non perspicis. Primum cur ista res digna odio est, nisi quod est turpis? Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Id mihi magnum videtur. Prioris generis est docilitas, memoria;\@par}
+
+\create@par{Eadem nunc mea adversum te oratio est. Fortemne possumus dicere eundem illum Torquatum? Ergo id est convenienter naturae vivere, a natura discedere. Fortitudinis quaedam praecepta sunt ac paene leges, quae effeminari virum vetant in dolore. Non laboro, inquit, de nomine. Nihil opus est exemplis hoc facere longius. Hic nihil fuit, quod quaereremus.\@par}
+
+\create@par{Tu vero, inquam, ducas licet, si sequetur; Sint modo partes vitae beatae. Ego vero isti, inquam, permitto. Quid, cum fictas fabulas, e quibus utilitas nulla elici potest, cum voluptate legimus? Addo etiam illud, multa iam mihi dare signa puerum et pudoris et ingenii, sed aetatem vides. Haec et tu ita posuisti, et verba vestra sunt.\@par}
+
+\create@par{Claudii libidini, qui tum erat summo ne imperio, dederetur. Quid ergo attinet dicere: Nihil haberem, quod reprehenderem, si finitas cupiditates haberent? Verum hoc idem saepe faciamus. Re mihi non aeque satisfacit, et quidem locis pluribus. Sed ad haec, nisi molestum est, habeo quae velim. Tecum optime, deinde etiam cum mediocri amico.\@par}
+
+\create@par{Num igitur dubium est, quin, si in re ipsa nihil peccatur a superioribus, verbis illi commodius utantur? Te enim iudicem aequum puto, modo quae dicat ille bene noris. Egone non intellego, quid sit don Graece, Latine voluptas? Tria genera bonorum; Ut in geometria, prima si dederis, danda sunt omnia. Quae contraria sunt his, malane?\@par}
+
+\create@par{Vidit Homerus probari fabulam non posse, si cantiunculis tantus irretitus vir teneretur; Fortasse id optimum, sed ubi illud: Plus semper voluptatis? Illud non continuo, ut aeque incontentae. Tum Piso: Quoniam igitur aliquid omnes, quid Lucius noster? Quod autem principium officii quaerunt, melius quam Pyrrho; Que Manilium, ab iisque M.\@par}
+
+\create@par{Et quod est munus, quod opus sapientiae? Quid turpius quam sapientis vitam ex insipientium sermone pendere? Quo studio Aristophanem putamus aetatem in litteris duxisse? Serpere anguiculos, nare anaticulas, evolare merulas, cornibus uti videmus boves, nepas aculeis. An nisi populari fama? Fortemne possumus dicere eundem illum Torquatum?\@par}
+
+\create@par{Qui autem diffidet perpetuitati bonorum suorum, timeat necesse est, ne aliquando amissis illis sit miser. Polemoni et iam ante Aristoteli ea prima visa sunt, quae paulo ante dixi. Conclusum est enim contra Cyrenaicos satis acute, nihil ad Epicurum. Sin dicit obscurari quaedam nec apparere, quia valde parva sint, nos quoque concedimus;\@par}
+
+\create@par{Negat enim summo bono afferre incrementum diem. Sed quid attinet de rebus tam apertis plura requirere? Sin aliud quid voles, postea. Non dolere, inquam, istud quam vim habeat postea videro; Age, inquies, ista parva sunt. Aliter enim explicari, quod quaeritur, non potest. Si quae forte-possumus. Aliter enim explicari, quod quaeritur, non potest.\@par}
+
+\create@par{Sed quoniam et advesperascit et mihi ad villam revertendum est, nunc quidem hactenus; Aliter enim nosmet ipsos nosse non possumus. Quae cum dixisset, finem ille. Nihil enim hoc differt. Compensabatur, inquit, cum summis doloribus laetitia. Duo enim genera quae erant, fecit tria. Cur igitur, inquam, res tam dissimiles eodem nomine appellas?\@par}
+
+\create@par{Maximus dolor, inquit, brevis est. Nunc haec primum fortasse audientis servire debemus. Utinam quidem dicerent alium alio beatiorem! Iam ruinas videres. Unum nescio, quo modo possit, si luxuriosus sit, finitas cupiditates habere. Apparet statim, quae sint officia, quae actiones. Illud dico, ea, quae dicat, praeclare inter se cohaerere.\@par}
+
+\create@par{Ait enim se, si uratur, Quam hoc suave! dicturum. Dicet pro me ipsa virtus nec dubitabit isti vestro beato M. Hoc non est positum in nostra actione. Certe nihil nisi quod possit ipsum propter se iure laudari. Quid ad utilitatem tantae pecuniae? Tertium autem omnibus aut maximis rebus iis, quae secundum naturam sint, fruentem vivere.\@par}
+
+\create@par{Quibus ego vehementer assentior. Num igitur eum postea censes anxio animo aut sollicito fuisse? Nam quid possumus facere melius? Sed tamen intellego quid velit. Faceres tu quidem, Torquate, haec omnia; An est aliquid per se ipsum flagitiosum, etiamsi nulla comitetur infamia? Idemne potest esse dies saepius, qui semel fuit? Poterat autem inpune;\@par}
+
+\create@par{Quid enim est a Chrysippo praetermissum in Stoicis? Sine ea igitur iucunde negat posse se vivere? Prave, nequiter, turpiter cenabat; Tu vero, inquam, ducas licet, si sequetur; Nihilne est in his rebus, quod dignum libero aut indignum esse ducamus? Atque ab his initiis profecti omnium virtutum et originem et progressionem persecuti sunt.\@par}
+
+\create@par{Erit enim mecum, si tecum erit. Universa enim illorum ratione cum tota vestra confligendum puto. Non est enim vitium in oratione solum, sed etiam in moribus. Illis videtur, qui illud non dubitant bonum dicere -; Claudii libidini, qui tum erat summo ne imperio, dederetur. Ne amores quidem sanctos a sapiente alienos esse arbitrantur.\@par}
+
+\create@par{Ut non sine causa ex iis memoriae ducta sit disciplina. Primum in nostrane potestate est, quid meminerimus? Naturales divitias dixit parabiles esse, quod parvo esset natura contenta. Sin te auctoritas commovebat, nobisne omnibus et Platoni ipsi nescio quem illum anteponebas? Quonam, inquit, modo? Quam si explicavisset, non tam haesitaret.\@par}
+
+\create@par{Sed tamen intellego quid velit. Id enim natura desiderat. Erit enim mecum, si tecum erit. At ille non pertimuit saneque fidenter: Istis quidem ipsis verbis, inquit; Quacumque enim ingredimur, in aliqua historia vestigium ponimus. Illud dico, ea, quae dicat, praeclare inter se cohaerere. Quod autem principium officii quaerunt, melius quam Pyrrho;\@par}
+
+\create@par{Quo modo autem philosophus loquitur? Haec igitur Epicuri non probo, inquam. Scaevola tribunus plebis ferret ad plebem vellentne de ea re quaeri. Mihi enim satis est, ipsis non satis. Hic ambiguo ludimur. Ne amores quidem sanctos a sapiente alienos esse arbitrantur. At hoc in eo M. Quicquid porro animo cernimus, id omne oritur a sensibus;\@par}
+
+\create@par{Tum ille: Tu autem cum ipse tantum librorum habeas, quos hic tandem requiris? Satis est ad hoc responsum. Sed hoc summum bonum, quod tertia significatione intellegitur, eaque vita, quae ex summo bono degitur, quia coniuncta ei virtus est. Color egregius, integra valitudo, summa gratia, vita denique conferta voluptatum omnium varietate.\@par}
+
+\create@par{Non laboro, inquit, de nomine. Quid de Platone aut de Democrito loquar? Quae cum dixisset paulumque institisset, Quid est? Primum Theophrasti, Strato, physicum se voluit; Ita relinquet duas, de quibus etiam atque etiam consideret. At iam decimum annum in spelunca iacet. Septem autem illi non suo, sed populorum suffragio omnium nominati sunt.\@par}
+
+\create@par{Aliud igitur esse censet gaudere, aliud non dolere. Qui ita affectus, beatum esse numquam probabis; Maximas vero virtutes iacere omnis necesse est voluptate dominante. Oratio me istius philosophi non offendit; Hoc ne statuam quidem dicturam pater aiebat, si loqui posset. Habent enim et bene longam et satis litigiosam disputationem.\@par}
+
+\create@par{At ille non pertimuit saneque fidenter: Istis quidem ipsis verbis, inquit; Vide igitur ne non debeas verbis nostris uti, sententiis tuis. Qui autem esse poteris, nisi te amor ipse ceperit? Hoc enim identidem dicitis, non intellegere nos quam dicatis voluptatem. Negare non possum. Ita credo. Sed in rebus apertissimis nimium longi sumus.\@par}
+
+\create@par{Sic enim censent, oportunitatis esse beate vivere. Duarum enim vitarum nobis erunt instituta capienda. Quarum ambarum rerum cum medicinam pollicetur, luxuriae licentiam pollicetur. Non enim, si omnia non sequebatur, idcirco non erat ortus illinc. Quoniam, si dis placet, ab Epicuro loqui discimus. Huius ego nunc auctoritatem sequens idem faciam.\@par}
+
+\create@par{Sint modo partes vitae beatae. Non est ista, inquam, Piso, magna dissensio. Qui autem esse poteris, nisi te amor ipse ceperit? Quid vero? Nec vero sum nescius esse utilitatem in historia, non modo voluptatem. Primum quid tu dicis breve? Nam Pyrrho, Aristo, Erillus iam diu abiecti. Quod non faceret, si in voluptate summum bonum poneret.\@par}
+
+\create@par{Sed hoc sane concedamus. Ut optime, secundum naturam affectum esse possit. Ergo hoc quidem apparet, nos ad agendum esse natos. Expressa vero in iis aetatibus, quae iam confirmatae sunt. Restatis igitur vos; Explanetur igitur. Vide, quantum, inquam, fallare, Torquate. Igitur ne dolorem quidem. Atqui reperies, inquit, in hoc quidem pertinacem;\@par}
+
+\create@par{At quicum ioca seria, ut dicitur, quicum arcana, quicum occulta omnia? Quamquam tu hanc copiosiorem etiam soles dicere. Atque haec coniunctio confusioque virtutum tamen a philosophis ratione quadam distinguitur. Quodsi vultum tibi, si incessum fingeres, quo gravior viderere, non esses tui similis; Idemne potest esse dies saepius, qui semel fuit?\@par}
+
+\create@par{Id Sextilius factum negabat. Ratio quidem vestra sic cogit. Si longus, levis. Sed quid sentiat, non videtis. Amicitiam autem adhibendam esse censent, quia sit ex eo genere, quae prosunt. Et hunc idem dico, inquieta sed ad virtutes et ad vitia nihil interesse. Qui autem de summo bono dissentit de tota philosophiae ratione dissentit.\@par}
+
+\create@par{Quae in controversiam veniunt, de iis, si placet, disseramus. Ut enim consuetudo loquitur, id solum dicitur honestum, quod est populari fama gloriosum. Tuo vero id quidem, inquam, arbitratu. Tollitur beneficium, tollitur gratia, quae sunt vincla concordiae. Egone quaeris, inquit, quid sentiam? Qua tu etiam inprudens utebare non numquam.\@par}
+
+\create@par{Deinde disputat, quod cuiusque generis animantium statui deceat extremum. Tum mihi Piso: Quid ergo? Nunc omni virtuti vitium contrario nomine opponitur. Mihi quidem Antiochum, quem audis, satis belle videris attendere. Haec igitur Epicuri non probo, inquam. Propter nos enim illam, non propter eam nosmet ipsos diligimus. Que Manilium, ab iisque M.\@par}
+
+% SHORT paragraphs
+\create@par{Inde igitur, inquit, ordiendum est. Tibi hoc incredibile, quod beatissimum.\@par}
+
+\create@par{Quid ergo hoc loco intellegit honestum? Recte, inquit, intellegis. Itaque fecimus.\@par}
+
+\create@par{Ita prorsus, inquam; Quibusnam praeteritis? Quare attende, quaeso.\@par}
+
+\create@par{Quae similitudo in genere etiam humano apparet. At certe gravius.\@par}
+
+\create@par{Quae ista amicitia est? Quonam, inquit, modo? Si quae forte-possumus.\@par}
+
+\create@par{Sit enim idem caecus, debilis. Idemne potest esse dies saepius, qui semel fuit?\@par}
+
+\create@par{Quare attende, quaeso. Efficiens dici potest. Hic ambiguo ludimur.\@par}
+
+\create@par{Tum mihi Piso: Quid ergo? Id enim natura desiderat. Sumenda potius quam expetenda.\@par}
+
+\create@par{Omnis enim est natura diligens sui. Qua tu etiam inprudens utebare non numquam.\@par}
+
+\create@par{Quae ista amicitia est? Poterat autem inpune; Quis istud possit, inquit, negare?\@par}
+
+\create@par{Primum divisit ineleganter; Si quae forte-possumus. Sullae consulatum?\@par}
+
+\create@par{Si quicquam extra virtutem habeatur in bonis. Egone quaeris, inquit, quid sentiam?\@par}
+
+\create@par{Quid est igitur, inquit, quod requiras? Summae mihi videtur inscitiae.\@par}
+
+\create@par{Quid, quod res alia tota est? Sed haec in pueris; Quibusnam praeteritis?\@par}
+
+\create@par{Quae duo sunt, unum facit. Minime vero, inquit ille, consentit.\@par}
+
+\create@par{Nam quid possumus facere melius? Si longus, levis. Illi enim inter se dissentiunt.\@par}
+
+\create@par{Sint ista Graecorum; Tum Torquatus: Prorsus, inquit, assentior;\@par}
+
+\create@par{Quod vestri non item. Quid enim? Istic sum, inquit. Primum quid tu dicis breve?\@par}
+
+\create@par{Recte dicis; Sed quid sentiat, non videtis. Eam stabilem appellas.\@par}
+
+\create@par{Mihi, inquam, qui te id ipsum rogavi? At hoc in eo M. Nos commodius agimus.\@par}
+
+\create@par{Paria sunt igitur. Sedulo, inquam, faciam. Sint ista Graecorum;\@par}
+
+\create@par{Quis est tam dissimile homini. Satis est ad hoc responsum. Stoicos roga.\@par}
+
+\create@par{Minime vero, inquit ille, consentit. Quae cum dixisset, finem ille.\@par}
+
+\create@par{Hic ambiguo ludimur. Ut pulsi recurrant? Certe non potest. Audeo dicere, inquit.\@par}
+
+\create@par{Et quod est munus, quod opus sapientiae? Hoc est non dividere, sed frangere.\@par}
+
+\create@par{Venit ad extremum; Quae cum dixisset, finem ille. Sit enim idem caecus, debilis.\@par}
+
+\create@par{Sed ego in hoc resisto; Equidem e Cn. Tuo vero id quidem, inquam, arbitratu.\@par}
+
+\create@par{At iam decimum annum in spelunca iacet. Itaque contra est, ac dicitis;\@par}
+
+\create@par{Sed nimis multa. Sed nunc, quod agimus; Praeteritis, inquit, gaudeo.\@par}
+
+\create@par{Obsecro, inquit, Torquate, haec dicit Epicurus? At hoc in eo M.\@par}
+
+\create@par{Sedulo, inquam, faciam. Quo igitur, inquit, modo? Graccho, eius fere, aequalí?\@par}
+
+\create@par{Quae quidem vel cum periculo est quaerenda vobis; Sed ad rem redeamus;\@par}
+
+\create@par{Minime vero, inquit ille, consentit. Suo genere perveniant ad extremum;\@par}
+
+\create@par{Quid sequatur, quid repugnet, vident. Honesta oratio, Socratica, Platonis etiam.\@par}
+
+\create@par{Nescio quo modo praetervolavit oratio. Videsne quam sit magna dissensio?\@par}
+
+\create@par{Sed quot homines, tot sententiae; Deinde dolorem quem maximum?\@par}
+
+\create@par{Si quidem, inquit, tollerem, sed relinquo. Suo genere perveniant ad extremum;\@par}
+
+\create@par{Verum hoc idem saepe faciamus. Cur deinde Metrodori liberos commendas?\@par}
+
+\create@par{Sed nimis multa. Certe non potest. Non semper, inquam; Haeret in salebra.\@par}
+
+\create@par{Si longus, levis dictata sunt. Istic sum, inquit. Efficiens dici potest.\@par}
+
+\create@par{Cur id non ita fit? Quis negat? Numquam facies. Quid nunc honeste dicit?\@par}
+
+\create@par{Confecta res esset. Nos commodius agimus. Minime vero, inquit ille, consentit.\@par}
+
+\create@par{Facete M. Tenent mordicus. Quae cum essent dicta, discessimus. Si longus, levis;\@par}
+
+\create@par{Nonne igitur tibi videntur, inquit, mala? Equidem, sed audistine modo de Carneade?\@par}
+
+\create@par{Quo igitur, inquit, modo? Certe, nisi voluptatem tanti aestimaretis.\@par}
+
+\create@par{Nihil ad rem! Ne sit sane; Res enim concurrent contrariae. Nihil enim hoc differt.\@par}
+
+\create@par{Cave putes quicquam esse verius. Quis est tam dissimile homini.\@par}
+
+\create@par{Certe, nisi voluptatem tanti aestimaretis. Non igitur bene. Sed nimis multa.\@par}
+
+\create@par{Nos cum te, M. Cur id non ita fit? Dat enim intervalla et relaxat.\@par}
+
+\create@par{Egone quaeris, inquit, quid sentiam? At certe gravius. Quae sequuntur igitur?\@par}
+
+\create@par{Sin aliud quid voles, postea. Qualem igitur hominem natura inchoavit?\@par}
+
+\create@par{At enim hic etiam dolore. Non igitur bene. An eiusdem modi? Quid iudicant sensus?\@par}
+
+\create@par{Sed ad rem redeamus; Si longus, levis. Nihil enim hoc differt.\@par}
+
+\create@par{Sint ista Graecorum; Primum quid tu dicis breve? Sed nimis multa. A mene tu?\@par}
+
+\create@par{Sed hoc sane concedamus. Quare attende, quaeso. Praeteritis, inquit, gaudeo.\@par}
+
+\create@par{Illi enim inter se dissentiunt. Quod quidem nobis non saepe contingit.\@par}
+
+\create@par{Non laboro, inquit, de nomine. Ita prorsus, inquam; Quare attende, quaeso.\@par}
+
+\create@par{Sed fac ista esse non inportuna; Non potes, nisi retexueris illa.\@par}
+
+\create@par{Est, ut dicis, inquit; Vestri haec verecundius, illi fortasse constantius.\@par}
+
+\create@par{Itaque fecimus. Quid ergo? Sullae consulatum? Quae cum dixisset, finem ille.\@par}
+
+\create@par{Tum Torquatus: Prorsus, inquit, assentior; Bonum incolumis acies: misera caecitas.\@par}
+
+\create@par{Videsne quam sit magna dissensio? Tamen a proposito, inquam, aberramus.\@par}
+
+\create@par{Praeclare hoc quidem. Memini vero, inquam; Torquatus, is qui consul cum Cn.\@par}
+
+\create@par{Urgent tamen et nihil remittunt. Prave, nequiter, turpiter cenabat;\@par}
+
+\create@par{Itaque contra est, ac dicitis; Rationis enim perfectio est virtus;\@par}
+
+\create@par{Cur iustitia laudatur? Tu vero, inquam, ducas licet, si sequetur;\@par}
+
+\create@par{Negat esse eam, inquit, propter se expetendam. Quid est enim aliud esse versutum?\@par}
+
+\create@par{Tenent mordicus. Sed ad rem redeamus; Beatum, inquit. Nos commodius agimus.\@par}
+
+\create@par{Itaque fecimus. Memini vero, inquam; Faceres tu quidem, Torquate, haec omnia;\@par}
+
+\create@par{Hoc est non dividere, sed frangere. Recte, inquit, intellegis. Quid vero?\@par}
+
+\create@par{Illa tamen simplicia, vestra versuta. Nihil opus est exemplis hoc facere longius.\@par}
+
+\create@par{Verum hoc idem saepe faciamus. Beatum, inquit. Memini vero, inquam;\@par}
+
+\create@par{Qui est in parvis malis. Minime vero, inquit ille, consentit. Erat enim Polemonis.\@par}
+
+\create@par{Idem adhuc; Quis istum dolorem timet? Cur haec eadem Democritus?\@par}
+
+\create@par{Iam enim adesse poterit. Quid Zeno? Nam de isto magna dissensio est.\@par}
+
+\create@par{Nunc vides, quid faciat. Illa tamen simplicia, vestra versuta.\@par}
+
+\create@par{Numquam facies. Itaque fecimus. Paria sunt igitur. Haeret in salebra.\@par}
+
+\create@par{Itaque contra est, ac dicitis; At certe gravius. Confecta res esset.\@par}
+
+\create@par{Pollicetur certe. Tubulo putas dicere? Omnia peccata paria dicitis.\@par}
+
+\create@par{Sit enim idem caecus, debilis. Sed videbimus. Conferam avum tuum Drusum cum C.\@par}
+
+\create@par{Ita nemo beato beatior. Hic ambiguo ludimur. Id Sextilius factum negabat.\@par}
+
+\create@par{Sed ad rem redeamus; Summum ením bonum exposuit vacuitatem doloris;\@par}
+
+\create@par{Quis istud, quaeso, nesciebat? At certe gravius. Quis hoc dicit?\@par}
+
+\create@par{Tibi hoc incredibile, quod beatissimum. Tuo vero id quidem, inquam, arbitratu.\@par}
+
+\create@par{Certe non potest. Zenonis est, inquam, hoc Stoici. Confecta res esset.\@par}
+
+\create@par{Quare attende, quaeso. Nos commodius agimus. Reguli reiciendam;\@par}
+
+\create@par{Qua tu etiam inprudens utebare non numquam. Deinde dolorem quem maximum?\@par}
+
+\create@par{Immo videri fortasse. Ut pulsi recurrant? Aliter autem vobis placet. Magna laus.\@par}
+
+\create@par{Praeclare hoc quidem. Venit ad extremum; Quis est tam dissimile homini.\@par}
+
+\create@par{Minime vero, inquit ille, consentit. Sed ad rem redeamus; Magna laus.\@par}
+
+\create@par{Tu quidem reddes; Numquam facies. Occultum facinus esse potuerit, gaudebit;\@par}
+
+\create@par{Invidiosum nomen est, infame, suspectum. Velut ego nunc moveor.\@par}
+
+\create@par{Age sane, inquam. Iam enim adesse poterit. Quis istum dolorem timet?\@par}
+
+\create@par{Graccho, eius fere, aequalí? Ut optime, secundum naturam affectum esse possit.\@par}
+
+\create@par{Duo enim genera quae erant, fecit tria. Eaedem res maneant alio modo.\@par}
+
+\create@par{Cur id non ita fit? Equidem e Cn. Tubulo putas dicere? Praeclare hoc quidem.\@par}
+
+\create@par{Quae quidem vel cum periculo est quaerenda vobis; Quid, quod res alia tota est?\@par}
+
+\create@par{Simus igitur contenti his. Nam ante Aristippus, et ille melius.\@par}
+
+\create@par{Tria genera bonorum; Quare attende, quaeso. Quid adiuvas? Quis negat?\@par}
+
+\create@par{Tria genera bonorum; Proclivi currit oratio. Sed nimis multa. Quid de Pythagora?\@par}
+
+@ Anyway, after so much work the format launch an echo of proudness in the
+[[.log]] file.
+<<echo>>=
+\@message{^^JP-lipsum: created
+ \number\c@parnumber\space paragraphs.^^J}
+@
+Before of the beginning of the interface building, in which the users will
+insert values, let's define some error messages.
+<<interface>>=
+\newhelp\optparams@error{%
+ Valid optional parameters are 's', 'short', 'm', 'medium', 'l', 'long'.}
+\newhelp\paramexcess@error{The best possible value is 100}
+@
+Once builded the foundations we can build the main macro of the format.
+[[\lipsum]] has a lot of behaviors:
+
+\begin{enumerate}
+\item if it is called with a single parameter (specifically a $\<number\>$),
+it expand to a single medium-lenght paragraph, namely the one that come at the
+$(\<number\> + 100)th$ place in the list of paragraphs.
+\item If it is called with two parameters $\<numbers\>$ separated by an hyphen
+it expands to the all the medium-lenght paragraphs having the number from the
+lower parameter to the higher ({\it plus} $100$), all the between included.
+\item It can be called with an optional parameter, alternatively
+[[s/short]] or [[m/medium]] or [[l/long]]. If the optional parameter is
+[[s]] or [[short]] the macro expands to the {\it short\/} paragraphs having the
+number from the lower parameter to the higher, all the between included. If
+the optional parameter is [[m]] or [[medium]] the macro expands to the {\it
+medium\/} paragraphs having the number from the lower parameter to the higher, all the between included. So the same for the optional parameters [[l]] or
+[[long]] ($\<number\> + 200$).
+\end{enumerate}
+
+So the details of the macro are simple (well, more or less): first the macro
+look for a square bracket into the parameter:
+<<interface>>=
+\newif\iflong
+\newif\ifmedium
+\newif\ifshort
+
+\def\lipsum{\futurelet\firstt@k\@lipsum}
+@
+If a square bracket is found then is called the macro [[\opt@par]], otherwise
+[[\noopt@par]]. If no square bracket is found it follows that the latin paragraphs have to be medium-lenght.
+<<interface>>=
+\def\@lipsum{%
+ \if[\firstt@k\let\next\opt@par
+ \else\mediumtrue
+ \let\next\no@opt@par\fi
+ \next}
+@
+If a square bracket is found the only thing to do is to set the various
+boolean values. As the macro [[\opt@par]] consumes the optional pameter,
+then it call the servant macro as if it would have been called without
+optional parameters at all.
+<<interface>>=
+\def\opt@par[#1]#2{\def\param@ne{#1}%
+ \def\@l@{l}\def\@long@{long}%
+ \def\@m@{m}\def\@medium@{medium}%
+ \def\@s@{s}\def\@short@{short}%
+ \ifx\param@ne\@l@\shortfalse\mediumfalse\longtrue
+ \else
+ \ifx\param@ne\@long@\shortfalse\mediumfalse\longtrue
+ \else
+ \ifx\param@ne\@m@\shortfalse\mediumtrue\longfalse
+ \else
+ \ifx\param@ne\@medium@\shortfalse\mediumtrue\longfalse
+ \else
+ \ifx\param@ne\@s@\shorttrue\mediumfalse\longfalse
+ \else
+ \ifx\param@ne\@short@\shorttrue\mediumfalse\longfalse
+ \else
+ \errhelp\optparams@error
+ \@errmessage{^^JP-lipsum: !! ERROR !!
+ Wrong optional parameter.^^J}
+ \fi\fi\fi\fi\fi\fi
+ \no@opt@par{#2}}
+@
+Now it is necessary to scan the parameter to ensure that there is an hyphen.
+In this case is called the macro [[\noopt@parA]], otherwise the macro
+[[\noopt@parB]]
+<<interface>>=
+\newif\ifhyphen
+
+\def\no@opt@par#1{\scan#1-;\end
+ \ifhyphen\noopt@parA#1\end\else\noopt@parB#1\end\fi}
+@
+[[\scan]] look for an hyphen into the argument of [[\lipsum]]. The tecnique
+is simple: [[\lipsum]] calls [[\scan]] referring to it its own parameter and
+adding an hyphen and a semicomma. This way [[\scan]] can be called --
+accordingly to the parameter of [[\lipsum]] -- alternatively in one of these
+forms:
+
+\begin{enumerate}
+\item [[\scan<par1>-;\end]]
+\item [[\scan<par1>-<par2>-;\end]]
+\end{enumerate}
+
+\noindent where the hyphens and the [[\end]] are delimiters of [[\scan]]. Now
+the problem is solved: if the second parameter of [[\scan]] is a semicomma the
+parameter passed to [[\lipsum]] has not hyphens and it's a single $\<number\>$.
+Otherwise the parameter passed to [[\lipsum]] contains an hyphen and is thus
+constituted by two $\<numbers\>$.
+
+The code is much simpler than the explanation.
+<<interface>>=
+\def\scan#1-#2\end{\ifx;#2\hyphenfalse\else\hyphentrue\fi}
+@
+Now everything is simple and the macros are self-explaining.
+
+If the parameter of [[\lipsum]] has an hyphen will be performed [[\noopt@parA]];
+otherwise [[\noopt@parB]].
+<<interface>>=
+\newcount\c@plipsumAone
+\newcount\c@plipsumAtwo
+\newcount\c@max
+
+\c@max\c@parnumber
+\divide\c@max by3\relax
+
+\def\noopt@parA#1-#2\end{{%
+ \global\c@plipsumAone=#1\relax
+ \global\c@plipsumAtwo=#2\relax
+ \ifnum\c@plipsumAone>\c@max
+ \errhelp\paramexcess@error
+ \@errmessage{^^JP-lipsum: ERROR at line \the\inputlineno. The
+ first parameter of \string\lipsum\space is too big.^^J}\fi
+ \ifnum\c@plipsumAtwo>\c@max
+ \errhelp\paramexcess@error
+ \@errmessage{^^JP-lipsum: ERROR at line \the\inputlineno. The
+ second parameter of \string\lipsum\space is too big.^^J}\fi
+ \ifmedium
+ \advance\c@plipsumAone by100\relax
+ \advance\c@plipsumAtwo by100\relax
+ \else\ifshort
+ \advance\c@plipsumAone by200\relax
+ \advance\c@plipsumAtwo by200\relax\fi\fi
+ \ifnum\c@plipsumAone>\c@plipsumAtwo
+ \count@=\c@plipsumAone
+ \c@plipsumAone=\c@plipsumAtwo
+ \c@plipsumAtwo=\count@\fi
+ \types@t}}
+
+\def\noopt@parB#1\end{%
+ \c@plipsumAone#1
+ \ifnum\c@plipsumAone>\c@max
+ \errhelp\paramexcess@error
+ \@errmessage{^^JP-lipsum: ERROR at line \the\inputlineno. The
+ parameter of \string\lipsum\space is too big.^^J}\fi
+ \ifmedium\advance\c@plipsumAone by100\relax
+ \else\ifshort\advance\c@plipsumAone by200\relax\fi\fi
+ \csname plips@\romannumeral\c@plipsumAone\endcsname}
+
+\def\types@t{\let\next\relax
+ \ifnum\c@plipsumAone>\c@plipsumAtwo\else
+ \csname plips@\romannumeral\the\c@plipsumAone\endcsname
+ \advance\c@plipsumAone by1\relax
+ \let\next\types@t\fi
+ \next}
+@
+That's all, folks.
+<<ending>>=
+\catcode`@=\beforeplipsumatcatcode
+\endinput
+@
+\part{An example}
+The format comes with a simple example ([[pliptest.tex]]) aimed to show the
+functionalities of the macros.
+<<banner>>=
+%% generated with the notangle utility.
+%% The original source file was: plipsum.nw.
+%% Copyright (C) 2013 by Sergio Spina
+@
+<<pliptest.tex>>=
+%% This is file `pliptest.tex'
+<<banner>>
+%%
+%% A few lines of code to show the macros
+%% supplied with the plipsum package.
+\input plipsum
+%~
+One short lipsum paragraph:\par
+\lipsum[s]{13}\vskip\baselineskip
+%~
+One medium-lenght lipsum paragraph:\par
+\lipsum{13}\vskip\baselineskip
+%~
+One long lipsum paragraph:\par
+\lipsum[long]{13}\vskip\baselineskip
+%~
+Three short lipsum paragraphs:\par
+\lipsum[short]{13-15}\vskip\baselineskip
+%~
+Three medium-lenght lipsum paragraphs:\par
+\lipsum[m]{13-15}\vskip\baselineskip
+%~
+Three long lipsum paragraphs:\par
+\lipsum[l]{13-15}\vskip\baselineskip
+%~
+A very long lipsum paragaph:\par
+{\nopar\lipsum[l]{13-31}}\vskip\baselineskip
+%~
+\bye
+%% end of file `pliptest.tex'
+@
+\part{The development tree of the code file}
+<<plipsum.tex>>=
+%% This is file `plipsum.tex'
+<<banner>>
+<<preliminaries>>
+<<collection>>
+<<paragraphs>>
+<<echo>>
+<<interface>>
+<<ending>>
+%% end of file `plipsum.tex'
+@
+\part{Indexes}
+\section{Chunks.}
+\nowebchunks
+\section{Identifiers.}
+\nowebindex
diff --git a/macros/plain/contrib/plipsum/plipsum.tex b/macros/plain/contrib/plipsum/plipsum.tex
new file mode 100644
index 0000000000..df93c2b1ce
--- /dev/null
+++ b/macros/plain/contrib/plipsum/plipsum.tex
@@ -0,0 +1,416 @@
+%% This is file `plipsum.tex'
+%% generated with the notangle utility.
+%% The original source file was: plipsum.nw.
+%% Copyright (C) 2013 by Sergio Spina
+\def\PLversion{4}
+\def\PLrevision{3}
+\def\PLrevisiondate{2013/05/08}
+\chardef\beforeplipsumatcatcode=\the\catcode`@
+\catcode`@=11
+\def\@message#1{{\newlinechar`\^^J\message{#1}}}
+\def\@errmessage#1{{\newlinechar`\^^J\errmessage{#1}}}
+\@message{^^JP-lipsum version
+\PLversion.\PLrevision\space-- revision \PLrevisiondate^^J}
+\newcount\c@parnumber \c@parnumber=0
+\def\create@par{\advance\c@parnumber by1
+\expandafter\def\csname plips@\romannumeral\the\c@parnumber\endcsname}
+\def\@par{\par}
+\def\nopar{\let\@par\space}
+\create@par{Quid enim necesse est, tamquam meretricem in matronarum coetum, sic
+voluptatem in virtutum concilium adducere? Nunc dicam de voluptate, nihil
+scilicet novi, ea tamen, quae te ipsum probaturum esse confidam. Iam quae
+corporis sunt, ea nec auctoritatem cum animi partibus, comparandam et
+cognitionem habent faciliorem. Si qua in iis corrigere voluit, deteriora fecit.
+Polemoni et iam ante Aristoteli ea prima visa sunt, quae paulo ante dixi. Neque
+solum ea communia, verum etiam paria esse dixerunt. Non enim quaero quid verum,
+sed quid cuique dicendum sit. Levatio igitur vitiorum magna fit in iis, qui
+habent ad virtutem progressionis aliquantum. A primo, ut opinor, animantium
+ortu petitur origo summi boni. Nam si quae sunt aliae, falsum est omnis animi
+voluptates esse e corporis societate. Quod est, ut dixi, habere ea, quae
+secundum naturam sint, vel omnia vel plurima et maxima. Praetereo multos, in
+bis doctum hominem et suavem, Hieronymum, quem iam cur Peripateticum appellem
+nescio.\@par}
+\create@par{Qua ex cognitione facilior facta est investigatio rerum
+occultissimarum. Conclusum est enim contra Cyrenaicos satis acute, nihil ad Epicurum. Quid, cum volumus nomina eorum, qui quid gesserint, nota nobis esse, parentes, patriam, multa praeterea minime necessaria? Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Cum ageremus, inquit, vitae beatum et eundem supremum diem, scribebamus haec. Sed quid attinet de rebus tam apertis plura requirere? Sit hoc ultimum bonorum, quod nunc a me defenditur; Minime vero probatur huic disciplinae, de qua loquor, aut iustitiam aut amicitiam propter utilitates adscisci aut probari. Ut ei, qui iucunde vixerit annos decem, si aeque vita iucunda menstrua addatur, quia momentum aliquod habeat ad iucundum accessio, bonum sit; Cupiditates non Epicuri divisione finiebat, sed sua satietate. Nunc dicam de voluptate, nihil scilicet novi, ea tamen, quae te ipsum probaturum esse confidam. Quarum ambarum rerum cum medicinam pollicetur, luxuriae licentiam pollicetur.\@par}
+\create@par{Alia quaedam dicent, credo, magna antiquorum esse peccata, quae ille veri investigandi cupidus nullo modo ferre potuerit. Is hoc melior, quam Pyrrho, quod aliquod genus appetendi dedit, deterior quam ceteri, quod penitus a natura recessit. Quid autem habent admirationis, cum prope accesseris? Cum praesertim illa perdiscere ludus esset. Quos nisi redarguimus, omnis virtus, omne decus, omnis vera laus deserenda est. Vide, ne magis, inquam, tuum fuerit, cum re idem tibi, quod mihi, videretur, non nova te rebus nomina inponere. Quorum sine causa fieri nihil putandum est. Verum esto: verbum ipsum voluptatis non habet dignitatem, nec nos fortasse intellegimus. Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Non quam nostram quidem, inquit Pomponius iocans; Deinceps videndum est, quoniam satis apertum est sibi quemque natura esse carum, quae sit hominis natura.\@par}
+\create@par{Nam memini etiam quae nolo, oblivisci non possum quae volo. Cum vero paulum processerunt, lusionibus vel laboriosis delectantur, ut ne verberibus quidem deterreri possint, eaque cupiditas agendi aliquid adolescit una cum aetatibus. Tu enim ista lenius, hic Stoicorum more nos vexat. Bonum incolumis acies: misera caecitas. Cur tantas regiones barbarorum pedibus obiit, tot maria transmisit? Et quidem Arcesilas tuus, etsi fuit in disserendo pertinacior, tamen noster fuit; Hoc dictum in una re latissime patet, ut in omnibus factis re, non teste moveamur. Itaque eos id agere, ut a se dolores, morbos, debilitates repellant. Non elogia monimentorum id significant, velut hoc ad portam: Hunc unum plurimae consentiunt gentes populi primarium fuisse virum. Iam quae corporis sunt, ea nec auctoritatem cum animi partibus, comparandam et cognitionem habent faciliorem. Consequens enim est et post oritur, ut dixi. Quamquam tu hanc copiosiorem etiam soles dicere.\@par}
+\create@par{Ita enim vivunt quidam, ut eorum vita refellatur oratio. Sed eum qui audiebant, quoad poterant, defendebant sententiam suam. Quid, si non sensus modo ei sit datus, verum etiam animus hominis? Stulti autem malorum memoria torquentur, sapientes bona praeterita grata recordatione renovata delectant. Non enim hilaritate nec lascivia nec risu aut ioco, comite levitatis, saepe etiam tristes firmitate et constantia sunt beati. Unum nescio, quo modo possit, si luxuriosus sit, finitas cupiditates habere. Cum audissem Antiochum, Brute, ut solebam, cum M. Nonne videmus quanta perturbatio rerum omnium consequatur, quanta confusio? Virtutibus igitur rectissime mihi videris et ad consuetudinem nostrae orationis vitia posuisse contraria. Cur igitur easdem res, inquam, Peripateticis dicentibus verbum nullum est, quod non intellegatur? Qui enim voluptatem ipsam contemnunt, iis licet dicere se acupenserem maenae non anteponere. Ut optime, secundum naturam affectum esse possit.\@par}
+\create@par{At quanta conantur! Mundum hunc omnem oppidum esse nostrum! Incendi igitur eos, qui audiunt, vides. Quid, cum volumus nomina eorum, qui quid gesserint, nota nobis esse, parentes, patriam, multa praeterea minime necessaria? Fieri, inquam, Triari, nullo pacto potest, ut non dicas, quid non probes eius, a quo dissentias. Sed finge non solum callidum eum, qui aliquid improbe faciat, verum etiam praepotentem, ut M. Illud dico, ea, quae dicat, praeclare inter se cohaerere. Aberat omnis dolor, qui si adesset, nec molliter ferret et tamen medicis plus quam philosophis uteretur. Quibus autem in rebus tanta obscuratio non fit, fieri tamen potest, ut id ipsum, quod interest, non sit magnum. Si quicquam extra virtutem habeatur in bonis. Nam illud quidem adduci vix possum, ut ea, quae senserit ille, tibi non vera videantur. Et nunc quidem quod eam tuetur, ut de vite potissimum loquar, est id extrinsecus; Nec vero pietas adversus deos nec quanta iis gratia debeatur sine explicatione naturae intellegi potest.\@par}
+\create@par{Non enim, si omnia non sequebatur, idcirco non erat ortus illinc. Portenta haec esse dicit, neque ea ratione ullo modo posse vivi; Quem ad modum quis ambulet, sedeat, qui ductus oris, qui vultus in quoque sit? Theophrasti igitur, inquit, tibi liber ille placet de beata vita? Quarum cum una sit, qua mores conformari putantur, differo eam partem, quae quasi stirps ets huius quaestionis. Bona autem corporis huic sunt, quod posterius posui, similiora. Nam quod ait sensibus ipsis iudicari voluptatem bonum esse, dolorem malum, plus tribuit sensibus, quam nobis leges permittunt, cum privatarum litium iudices sumus. Nihil enim desiderabile concupiscunt, plusque in ipsa iniuria detrimenti est quam in iis rebus emolumenti, quae pariuntur iniuria. Ut proverbia non nulla veriora sint quam vestra dogmata. Quaeque de virtutibus dicta sunt, quem ad modum eae semper voluptatibus inhaererent, eadem de amicitia dicenda sunt. Tum Torquatus: Prorsus, inquit, assentior;\@par}
+\create@par{Cur fortior sit, si illud, quod tute concedis, asperum et vix ferendum putabit? Tu quidem reddes; Haec non erant eius, qui innumerabilis mundos infinitasque regiones, quarum nulla esset ora, nulla extremitas, mente peragravisset. Nunc dicam de voluptate, nihil scilicet novi, ea tamen, quae te ipsum probaturum esse confidam. Ita fit beatae vitae domina fortuna, quam Epicurus ait exiguam intervenire sapienti. Themistocles quidem, cum ei Simonides an quis alius artem memoriae polliceretur, Oblivionis, inquit, mallem. Qui si ea, quae dicit, ita sentiret, ut verba significant, quid inter eum et vel Pyrrhonem vel Aristonem interesset? Hunc ipsum Zenonis aiunt esse finem declarantem illud, quod a te dictum est, convenienter naturae vivere. Semper enim ex eo, quod maximas partes continet latissimeque funditur, tota res appellatur. Fieri, inquam, Triari, nullo pacto potest, ut non dicas, quid non probes eius, a quo dissentias. Ne amores quidem sanctos a sapiente alienos esse arbitrantur. Si longus, levis dictata sunt.\@par}
+\create@par{Stoici autem, quod finem bonorum in una virtute ponunt, similes sunt illorum; Quod praeceptum quia maius erat, quam ut ab homine videretur, idcirco assignatum est deo. Expectoque quid ad id, quod quaerebam, respondeas. Et quidem saepe quaerimus verbum Latinum par Graeco et quod idem valeat; Tum ego: Non mehercule, inquam, soleo temere contra Stoicos, non quo illis admodum assentiar, sed pudore impedior; Idem etiam dolorem saepe perpetiuntur, ne, si id non faciant, incidant in maiorem. Quicquid porro animo cernimus, id omne oritur a sensibus; Sed non alienum est, quo facilius vis verbi intellegatur, rationem huius verbi faciendi Zenonis exponere. Quodsi Graeci leguntur a Graecis isdem de rebus alia ratione compositis, quid est, cur nostri a nostris non legantur? Quantum Aristoxeni ingenium consumptum videmus in musicis? Quis enim confidit semper sibi illud stabile et firmum permansurum, quod fragile et caducum sit? Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es?\@par}
+\create@par{Est enim perspicuum nullam artem ipsam in se versari, sed esse aliud artem ipsam, aliud quod propositum sit arti. Nam cum Academicis incerta luctatio est, qui nihil affirmant et quasi desperata cognitione certi id sequi volunt, quodcumque veri simile videatur. Mihi enim erit isdem istis fortasse iam utendum. Eorum enim omnium multa praetermittentium, dum eligant aliquid, quod sequantur, quasi curta sententia; Sin kakan malitiam dixisses, ad aliud nos unum certum vitium consuetudo Latina traduceret. Nec lapathi suavitatem acupenseri Galloni Laelius anteponebat, sed suavitatem ipsam neglegebat; Potius ergo illa dicantur: turpe esse, viri non esse debilitari dolore, frangi, succumbere. Teneo, inquit, finem illi videri nihil dolere. Age sane, inquam. Ita multo sanguine profuso in laetitia et in victoria est mortuus. Et quidem illud ipsum non nimium probo et tantum patior, philosophum loqui de cupiditatibus finiendis. Quid, cum fictas fabulas, e quibus utilitas nulla elici potest, cum voluptate legimus?\@par}
+\create@par{Nunc omni virtuti vitium contrario nomine opponitur. In quibus doctissimi illi veteres inesse quiddam caeleste et divinum putaverunt. Quaesita enim virtus est, non quae relinqueret naturam, sed quae tueretur. Sin est etiam corpus, ista explanatio naturae nempe hoc effecerit, ut ea, quae ante explanationem tenebamus, relinquamus. Vives, inquit Aristo, magnifice atque praeclare, quod erit cumque visum ages, numquam angere, numquam cupies, numquam timebis. Nihil est enim, de quo aliter tu sentias atque ego, modo commutatis verbis ipsas res conferamus. Negat esse eam, inquit, propter se expetendam. Esse enim quam vellet iniquus iustus poterat inpune. Ita similis erit ei finis boni, atque antea fuerat, neque idem tamen; Nec vero umquam summum bonum assequi quisquam posset, si omnia illa, quae sunt extra, quamquam expetenda, summo bono continerentur. Sin tantum modo ad indicia veteris memoriae cognoscenda, curiosorum. Sit hoc ultimum bonorum, quod nunc a me defenditur;\@par}
+\create@par{Sit ista in Graecorum levitate perversitas, qui maledictis insectantur eos, a quibus de veritate dissentiunt. Quid, cum fictas fabulas, e quibus utilitas nulla elici potest, cum voluptate legimus? Aut pertinacissimus fueris, si in eo perstiteris ad corpus ea, quae dixi, referri, aut deserueris totam Epicuri voluptatem, si negaveris. Quid affers, cur Thorius, cur Caius Postumius, cur omnium horum magister, Orata, non iucundissime vixerit? Quia, si mala sunt, is, qui erit in iis, beatus non erit. Si quae forte-possumus. Tantum dico, magis fuisse vestrum agere Epicuri diem natalem, quam illius testamento cavere ut ageretur. Ex quo, id quod omnes expetunt, beate vivendi ratio inveniri et comparari potest. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant. Quid censes in Latino fore? Curium putes loqui, interdum ita laudat, ut quid praeterea sit bonum neget se posse ne suspicari quidem. Tum ille: Tu autem cum ipse tantum librorum habeas, quos hic tandem requiris? Hic nihil fuit, quod quaereremus.\@par}
+\create@par{Nam prius a se poterit quisque discedere quam appetitum earum rerum, quae sibi conducant, amittere. Quamquam non negatis nos intellegere quid sit voluptas, sed quid ille dicat. Venit enim mihi Platonis in mentem, quem accepimus primum hic disputare solitum; Tum Torquatus: Prorsus, inquit, assentior; Quid enim de amicitia statueris utilitatis causa expetenda vides. Quaesita enim virtus est, non quae relinqueret naturam, sed quae tueretur. Quae iam oratio non a philosopho aliquo, sed a censore opprimenda est. Ergo opifex plus sibi proponet ad formarum quam civis excellens ad factorum pulchritudinem? Illa enim, quae prosunt aut quae nocent, aut bona sunt aut mala, quae sint paria necesse est. Est autem situm in nobis ut et adversa quasi perpetua oblivione obruamus et secunda iucunde ac suaviter meminerimus. Ergo in utroque exercebantur, eaque disciplina effecit tantam illorum utroque in genere dicendi copiam. Cur igitur, cum de re conveniat, non malumus usitate loqui?\@par}
+\create@par{Ne discipulum abducam, times. Itaque ne iustitiam quidem recte quis dixerit per se ipsam optabilem, sed quia iucunditatis vel plurimum afferat. Quid enim mihi potest esse optatius quam cum Catone, omnium virtutum auctore, de virtutibus disputare? At cum de plurimis eadem dicit, tum certe de maximis. Ex quo intellegitur nec intemperantiam propter se esse fugiendam temperantiamque expetendam, non quia voluptates fugiat, sed quia maiores consequatur. Propter nos enim illam, non propter eam nosmet ipsos diligimus. Sic enim maiores nostri labores non fugiendos tristissimo tamen verbo aerumnas etiam in deo nominaverunt. Haec qui audierit, ut ridere non curet, discedet tamen nihilo firmior ad dolorem ferendum, quam venerat. Quae etsi mihi nullo modo probantur, tamen Democritum laudatum a ceteris ab hoc, qui eum unum secutus esset, nollem vituperatum. Nosti, credo, illud: Nemo pius est, qui pietatem-; Huic mori optimum esse propter desperationem sapientiae, illi propter spem vivere.\@par}
+\create@par{Quid turpius quam sapientis vitam ex insipientium sermone pendere? Nescio quo modo praetervolavit oratio. Quis est enim, in quo sit cupiditas, quin recte cupidus dici possit? Respondebo me non quaerere, inquam, hoc tempore quid virtus efficere possit, sed quid constanter dicatur, quid ipsum a se dissentiat. Quid in isto egregio tuo officio et tanta fide-sic enim existimo-ad corpus refers? Quorum sine causa fieri nihil putandum est. Semper enim ex eo, quod maximas partes continet latissimeque funditur, tota res appellatur. Summum a vobis bonum voluptas dicitur. Sed emolumenta communia esse dicuntur, recte autem facta et peccata non habentur communia. De hominibus dici non necesse est. Si ad corpus pertinentibus, rationes tuas te video compensare cum istis doloribus, non memoriam corpore perceptarum voluptatum; Verum enim diceret, idque Socratem, qui voluptatem nullo loco numerat, audio dicentem, cibi condimentum esse famem, potionis sitim.\@par}
+\create@par{Quae adhuc, Cato, a te dicta sunt, eadem, inquam, dicere posses, si sequerere Pyrrhonem aut Aristonem. At certe gravius. Nihil enim iam habes, quod ad corpus referas; Quis enim potest istis, quae te, ut ais, delectant, brevibus et acutis auditis de sententia decedere? Quis nostrum dixerit, quos non pudet ea, quae Stoici aspera dicunt, mala dicere, melius esse turpiter aliquid facere cum voluptate quam honeste cum dolore? Utinam quidem dicerent alium alio beatiorem! Iam ruinas videres. Utrum igitur tibi litteram videor an totas paginas commovere? Curium putes loqui, interdum ita laudat, ut quid praeterea sit bonum neget se posse ne suspicari quidem. Intellegi quidem, ut propter aliam quampiam rem, verbi gratia propter voluptatem, nos amemus; Utrum igitur tibi non placet, inquit, virtutisne tantam esse vim, ut ad beate vivendum se ipsa contenta sit? Ne tum quidem te respicies et cogitabis sibi quemque natum esse et suis voluptatibus? Confecta res esset. Quod ea non occurrentia fingunt, vincunt Aristonem;\@par}
+\create@par{Quae diligentissime contra Aristonem dicuntur a Chryippo. Nam illud vehementer repugnat, eundem beatum esse et multis malis oppressum. Atqui perspicuum est hominem e corpore animoque constare, cum primae sint animi partes, secundae corporis. Ergo opifex plus sibi proponet ad formarum quam civis excellens ad factorum pulchritudinem? Sed nimis multa. Quid ad utilitatem tantae pecuniae? Res tota, Torquate, non doctorum hominum, velle post mortem epulis celebrari memoriam sui nominis. Sed tamen omne, quod de re bona dilucide dicitur, mihi praeclare dici videtur. Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Itaque eos id agere, ut a se dolores, morbos, debilitates repellant. Quod etsi ingeniis magnis praediti quidam dicendi copiam sine ratione consequuntur, ars tamen est dux certior quam natura. Vives, inquit Aristo, magnifice atque praeclare, quod erit cumque visum ages, numquam angere, numquam cupies, numquam timebis.\@par}
+\create@par{Itaque et manendi in vita et migrandi ratio omnis iis rebus, quas supra dixi, metienda. Apparet statim, quae sint officia, quae actiones. Hic ego: Etsi facit hic quidem, inquam, Piso, ut vides, ea, quae praecipis, tamen mihi grata hortatio tua est. His singulis copiose responderi solet, sed quae perspicua sunt longa esse non debent. Ita finis bonorum existit secundum naturam vivere sic affectum, ut optime is affici possit ad naturamque accommodatissime. An dolor longissimus quisque miserrimus, voluptatem non optabiliorem diuturnitas facit? Id est enim, de quo quaerimus. Vives, inquit Aristo, magnifice atque praeclare, quod erit cumque visum ages, numquam angere, numquam cupies, numquam timebis. Post enim Chrysippum eum non sane est disputatum. Dicam, inquam, et quidem discendi causa magis, quam quo te aut Epicurum reprehensum velim. At quanta conantur! Mundum hunc omnem oppidum esse nostrum! Incendi igitur eos, qui audiunt, vides. Non modo carum sibi quemque, verum etiam vehementer carum esse?\@par}
+\create@par{Quae cum praeponunt, ut sit aliqua rerum selectio, naturam videntur sequi; Crassus fuit, qui tamen solebat uti suo bono, ut hodie est noster Pompeius, cui recte facienti gratia est habenda; Ex quo intellegitur nec intemperantiam propter se esse fugiendam temperantiamque expetendam, non quia voluptates fugiat, sed quia maiores consequatur. Praeclare Laelius, et recte sofñw, illudque vere: O Publi, o gurges, Galloni! es homo miser, inquit. Quid, si reviviscant Platonis illi et deinceps qui eorum auditores fuerunt, et tecum ita loquantur? Quid enim ab antiquis ex eo genere, quod ad disserendum valet, praetermissum est? Non enim, si omnia non sequebatur, idcirco non erat ortus illinc. Sed ea mala virtuti magnitudine obruebantur. Quid, si reviviscant Platonis illi et deinceps qui eorum auditores fuerunt, et tecum ita loquantur? Si ad corpus pertinentibus, rationes tuas te video compensare cum istis doloribus, non memoriam corpore perceptarum voluptatum;\@par}
+\create@par{Crasso, quem semel ait in vita risisse Lucilius, non contigit, ut ea re minus agelastoj ut ait idem, vocaretur. Is cum arderet podagrae doloribus visitassetque hominem Charmides Epicureus perfamiliaris et tristis exiret, Mane, quaeso, inquit, Charmide noster; Potius ergo illa dicantur: turpe esse, viri non esse debilitari dolore, frangi, succumbere. Quia dolori non voluptas contraria est, sed doloris privatio. Addo etiam illud, multa iam mihi dare signa puerum et pudoris et ingenii, sed aetatem vides. Fortitudinis quaedam praecepta sunt ac paene leges, quae effeminari virum vetant in dolore. Is enim, qui occultus et tectus dicitur, tantum abest ut se indicet, perficiet etiam ut dolere alterius improbe facto videatur. Perspicuum est enim, nisi aequitas, fides, iustitia proficiscantur a natura, et si omnia haec ad utilitatem referantur, virum bonum non posse reperiri; Crassus fuit, qui tamen solebat uti suo bono, ut hodie est noster Pompeius, cui recte facienti gratia est habenda;\@par}
+\create@par{Nec vero pietas adversus deos nec quanta iis gratia debeatur sine explicatione naturae intellegi potest. Quaesita enim virtus est, non quae relinqueret naturam, sed quae tueretur. Non minor, inquit, voluptas percipitur ex vilissimis rebus quam ex pretiosissimis. Non enim, si malum est dolor, carere eo malo satis est ad bene vivendum. Sin autem est in ea, quod quidam volunt, nihil impedit hanc nostram comprehensionem summi boni. Non minor, inquit, voluptas percipitur ex vilissimis rebus quam ex pretiosissimis. Non risu potius quam oratione eiciendum? Non igitur potestis voluptate omnia dirigentes aut tueri aut retinere virtutem. Hi curatione adhibita levantur in dies, valet alter plus cotidie, alter videt. Quae enim dici Latine posse non arbitrabar, ea dicta sunt a te verbis aptis nec minus plane quam dicuntur a Graecis. Quam si explicavisset, non tam haesitaret. Illa sunt similia: hebes acies est cuipiam oculorum, corpore alius senescit;\@par}
+\create@par{Illa videamus, quae a te de amicitia dicta sunt. Illud quaero, quid ei, qui in voluptate summum bonum ponat, consentaneum sit dicere. Hos contra singulos dici est melius. Semper enim ita adsumit aliquid, ut ea, quae prima dederit, non deserat. Sin laboramus, quis est, qui alienae modum statuat industriae? Quas enim kakaw Graeci appellant, vitia malo quam malitias nominare. Illa argumenta propria videamus, cur omnia sint paria peccata. Non ego tecum iam ita iocabor, ut isdem his de rebus, cum L. Sin autem ad animum, falsum est, quod negas animi ullum esse gaudium, quod non referatur ad corpus. Nam, ut saepe iam dixi, in infirma aetate inbecillaque mente vis naturae quasi per caliginem cernitur; Amicitiae vero locus ubi esse potest aut quis amicus esse cuiquam, quem non ipsum amet propter ipsum? Quod si ita se habeat, non possit beatam praestare vitam sapientia. An, si id probas, fieri ita posse negas, ut ii, qui virtutis compotes sint, etiam malis quibusdam affecti beati sint?\@par}
+\create@par{Ne amores quidem sanctos a sapiente alienos esse arbitrantur. Quae est quaerendi ac disserendi, quae logikh dicitur, iste vester plane, ut mihi quidem videtur, inermis ac nudus est. Quae cum essent dicta, finem fecimus et ambulandi et disputandi. Incommoda autem et commoda-ita enim estmata et dustmata appello-communia esse voluerunt, paria noluerunt. Sed nonne merninisti licere mihi ista probare, quae sunt a te dicta? Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es? Si est nihil nisi corpus, summa erunt illa: valitudo, vacuitas doloris, pulchritudo, cetera. Hoc autem loco tantum explicemus haec honesta, quae dico, praeterquam quod nosmet ipsos diligamus, praeterea suapte natura per se esse expetenda. Quare attendo te studiose et, quaecumque rebus iis, de quibus hic sermo est, nomina inponis, memoriae mando; Ita fit cum gravior, tum etiam splendidior oratio. Eaedem enim utilitates poterunt eas labefactare atque pervertere.\@par}
+\create@par{Nam haec ipsa mihi erunt in promptu, quae modo audivi, nec ante aggrediar, quam te ab istis, quos dicis, instructum videro. Sed non sunt in eo genere tantae commoditates corporis tamque productae temporibus tamque multae. Estne, quaeso, inquam, sitienti in bibendo voluptas? Quo modo autem philosophus loquitur? Primum in nostrane potestate est, quid meminerimus? Et quidem, Cato, hanc totam copiam iam Lucullo nostro notam esse oportebit; Etiam inchoatum, ut, si iuste depositum reddere in recte factis sit, in officiis ponatur depositum reddere; Frater et T. Octavio fuit, cum illam severitatem in eo filio adhibuit, quem in adoptionem D. Quae animi affectio suum cuique tribuens atque hanc, quam dico. Sed hoc summum bonum, quod tertia significatione intellegitur, eaque vita, quae ex summo bono degitur, quia coniuncta ei virtus est. In qua si nihil est praeter rationem, sit in una virtute finis bonorum; Sic igitur in homine perfectio ista in eo potissimum, quod est optimum, id est in virtute, laudatur.\@par}
+\create@par{Ad eas enim res ab Epicuro praecepta dantur. Quid enim est a Chrysippo praetermissum in Stoicis? Sed id ne cogitari quidem potest quale sit, ut non repugnet ipsum sibi. Videsne igitur Zenonem tuum cum Aristone verbis concinere, re dissidere, cum Aristotele et illis re consentire, verbis discrepare? Ista ipsa, quae tu breviter: regem, dictatorem, divitem solum esse sapientem, a te quidem apte ac rotunde; Philosophi autem in suis lectulis plerumque moriuntur. Atqui, inquit, si Stoicis concedis ut virtus sola, si adsit vitam efficiat beatam, concedis etiam Peripateticis. Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Fatebuntur Stoici haec omnia dicta esse praeclare, neque eam causam Zenoni desciscendi fuisse. Atque ut a corpore ordiar, videsne ut, si quae in membris prava aut debilitata aut inminuta sint, occultent homines? Fortitudinis quaedam praecepta sunt ac paene leges, quae effeminari virum vetant in dolore. Huius ego nunc auctoritatem sequens idem faciam.\@par}
+\create@par{Quo minus animus a se ipse dissidens secumque discordans gustare partem ullam liquidae voluptatis et liberae potest. Illi enim inter se dissentiunt. Nam constitui virtus nullo modo potesti nisi ea, quae sunt prima naturae, ut ad summam pertinentia tenebit. Et hanc quidem primam exigam a te operam, ut audias me quae a te dicta sunt refellentem. Et quoniam haec deducuntur de corpore quid est cur non recte pulchritudo etiam ipsa propter se expetenda ducatur? Decius, princeps in ea familia consulatus, cum se devoverat et equo admisso in mediam aciem Latinorum irruebat, aliquid de voluptatibus suis cogitabat? Haec mihi videtur delicatior, ut ita dicam, molliorque ratio, quam virtutis vis gravitasque postulat. Iam id ipsum absurdum, maximum malum neglegi. Quis Aristidem non mortuum diligit? Nos quidem Virtutes sic natae sumus, ut tibi serviremus, aliud negotii nihil habemus. Quae cum dixissem, Habeo, inquit Torquatus, ad quos ista referam, et, quamquam aliquid ipse poteram, tamen invenire malo paratiores.\@par}
+\create@par{Contemnit enim disserendi elegantiam, confuse loquitur. Quo studio cum satiari non possint, omnium ceterarum rerum obliti níhil abiectum, nihil humile cogitant; Quae cum magnifice primo dici viderentur, considerata minus probabantur. Scripta sane et multa et polita, sed nescio quo pacto auctoritatem oratio non habet. Sed ad haec, nisi molestum est, habeo quae velim. Cur deinde Metrodori liberos commendas? At enim hic etiam dolore. Licet hic rursus ea commemores, quae optimis verbis ab Epicuro de laude amicitiae dicta sunt. Hoc mihi cum tuo fratre convenit. Venit enim mihi Platonis in mentem, quem accepimus primum hic disputare solitum; Atque etiam valítudinem, vires, vacuitatem doloris non propter utilitatem solum, sed etiam ipsas propter se expetemus. Cur fortior sit, si illud, quod tute concedis, asperum et vix ferendum putabit? Stuprata per vim Lucretia a regis filio testata civis se ipsa interemit. Inscite autem medicinae et gubernationis ultimum cum ultimo sapientiae comparatur.\@par}
+\create@par{Sed tempus est, si videtur, et recta quidem ad me. Quis enim potest istis, quae te, ut ais, delectant, brevibus et acutis auditis de sententia decedere? Stuprata per vim Lucretia a regis filio testata civis se ipsa interemit. Sed dum efficere vultis beatum sapientem, cum maximas animo voluptates percipiat omnibusque partibus maiores quam corpore, quid occurrat non videtis. Quid igitur dubitamus in tota eius natura quaerere quid sit effectum? Sed ille, ut dixi, vitiose. Nec vero pietas adversus deos nec quanta iis gratia debeatur sine explicatione naturae intellegi potest. Sed est forma eius disciplinae, sicut fere ceterarum, triplex: una pars est naturae, disserendi altera, vivendi tertia. Quod autem in homine praestantissimum atque optimum est, id deseruit. Indicant pueri, in quibus ut in speculis natura cernitur. Deinde prima illa, quae in congressu solemus: Quid tu, inquit, huc? Non est igitur voluptas bonum. Omnes enim iucundum motum, quo sensus hilaretur.\@par}
+\create@par{Innumerabilia dici possunt in hanc sententiam, sed non necesse est. An vero displicuit ea, quae tributa est animi virtutibus tanta praestantia? Quid, quod res alia tota est? Ergo in iis adolescentibus bonam spem esse dicemus et magnam indolem, quos suis commodis inservituros et quicquid ipsis expediat facturos arbitrabimur? Itaque si aut requietem natura non quaereret aut eam posset alia quadam ratione consequi. Id quaeris, inquam, in quo, utrum respondero, verses te huc atque illuc necesse est. Nec vero intermittunt aut admirationem earum rerum, quae sunt ab antiquis repertae, aut investigationem novarum. Et summatim quidem haec erant de corpore animoque dicenda, quibus quasi informatum est quid hominis natura postulet. Hic, qui utrumque probat, ambobus debuit uti, sicut facit re, neque tamen dividit verbis. Ergo id est convenienter naturae vivere, a natura discedere. Hic, qui utrumque probat, ambobus debuit uti, sicut facit re, neque tamen dividit verbis.\@par}
+\create@par{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Teneo, inquit, finem illi videri nihil dolere. His singulis copiose responderi solet, sed quae perspicua sunt longa esse non debent. Ut ad minora veniam, mathematici, poëtae, musici, medici denique ex hac tamquam omnium artificum officina profecti sunt. Ita finis bonorum existit secundum naturam vivere sic affectum, ut optime is affici possit ad naturamque accommodatissime. Confecta res esset. Et quidem, Cato, hanc totam copiam iam Lucullo nostro notam esse oportebit; Sic, et quidem diligentius saepiusque ista loquemur inter nos agemusque communiter. Duo Reges: constructio interrete. Quid vero? Ex quo illud efficitur, qui bene cenent omnis libenter cenare, qui libenter, non continuo bene. Non minor, inquit, voluptas percipitur ex vilissimis rebus quam ex pretiosissimis. Quae rursus dum sibi evelli ex ordine nolunt, horridiores evadunt, asperiores, duriores et oratione et moribus.\@par}
+\create@par{Teneamus enim illud necesse est, cum consequens aliquod falsum sit, illud, cuius id consequens sit, non posse esse verum. Cur deinde Metrodori liberos commendas? Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo. Ut nemo dubitet, eorum omnia officia quo spectare, quid sequi, quid fugere debeant? Isto modo, ne si avia quidem eius nata non esset. Sint modo partes vitae beatae. Ne tu, inquam, Cato, verbis illustribus et id, quod vis, declarantibus! itaque mihi videris Latine docere philosophiam et ei quasi civitatem dare. Partim cursu et peragratione laetantur, congregatione aliae coetum quodam modo civitatis imitantur; Placet igitur tibi, Cato, cum res sumpseris non concessas, ex illis efficere, quod velis? Quem si tenueris, non modo meum Ciceronem, sed etiam me ipsum abducas licebit. Ego autem tibi, Piso, assentior usu hoc venire, ut acrius aliquanto et attentius de claris viris locorum admonitu cogitemus. Huius ego nunc auctoritatem sequens idem faciam.\@par}
+\create@par{Sed venio ad inconstantiae crimen, ne saepius dicas me aberrare; Qui non moveatur et offensione turpitudinis et comprobatione honestatis? Res enim fortasse verae, certe graves, non ita tractantur, ut debent, sed aliquanto minutius. At habetur! Et ego id scilicet nesciebam! Sed ut sit, etiamne post mortem coletur? Atque ab his initiis profecti omnium virtutum et originem et progressionem persecuti sunt. Theophrastum tamen adhibeamus ad pleraque, dum modo plus in virtute teneamus, quam ille tenuit, firmitatis et roboris. Sed vobis voluptatum perceptarum recordatio vitam beatam facit, et quidem corpore perceptarum. Quod cum ille dixisset et satis disputatum videretur, in oppidum ad Pomponium perreximus omnes. Haec dicuntur fortasse ieiunius; Sed ne, dum huic obsequor, vobis molestus sim. Vadem te ad mortem tyranno dabis pro amico, ut Pythagoreus ille Siculo fecit tyranno? Quod cum ille dixisset et satis disputatum videretur, in oppidum ad Pomponium perreximus omnes.\@par}
+\create@par{Negat enim tenuissimo victu, id est contemptissimis escis et potionibus, minorem voluptatem percipi quam rebus exquisitissimis ad epulandum. Hoc non est positum in nostra actione. Cum id fugiunt, re eadem defendunt, quae Peripatetici, verba. Nam neque virtute retinetur ille in vita, nec iis, qui sine virtute sunt, mors est oppetenda. Is ita vivebat, ut nulla tam exquisita posset inveniri voluptas, qua non abundaret. Vidit Homerus probari fabulam non posse, si cantiunculis tantus irretitus vir teneretur; An, si id probas, fieri ita posse negas, ut ii, qui virtutis compotes sint, etiam malis quibusdam affecti beati sint? Quod autem magnum dolorem brevem, longinquum levem esse dicitis, id non intellego quale sit. Ita cum ea volunt retinere, quae superiori sententiae conveniunt, in Aristonem incidunt; At enim, qua in vita est aliquid mali, ea beata esse non potest. Nam illud quidem adduci vix possum, ut ea, quae senserit ille, tibi non vera videantur. Confecta res esset.\@par}
+\create@par{Gloriosa ostentatio in constituendo summo bono. Sic, et quidem diligentius saepiusque ista loquemur inter nos agemusque communiter. Idne consensisse de Calatino plurimas gentis arbitramur, primarium populi fuisse, quod praestantissimus fuisset in conficiendis voluptatibus? Nunc dicam de voluptate, nihil scilicet novi, ea tamen, quae te ipsum probaturum esse confidam. Restant Stoici, qui cum a Peripateticis et Academicis omnia transtulissent, nominibus aliis easdem res secuti sunt. Facit igitur Lucius noster prudenter, qui audire de summo bono potissimum velit; Nam haec ipsa mihi erunt in promptu, quae modo audivi, nec ante aggrediar, quam te ab istis, quos dicis, instructum videro. Negat enim summo bono afferre incrementum diem. Illum mallem levares, quo optimum atque humanissimum virum, Cn. Sed videbimus. Itaque hoc frequenter dici solet a vobis, non intellegere nos, quam dicat Epicurus voluptatem. Si ista mala sunt, in quae potest incidere sapiens, sapientem esse non esse ad beate vivendum satis.\@par}
+\create@par{Ita est quoddam commune officium sapientis et insipientis, ex quo efficitur versari in iis, quae media dicamus. Quodsi vultum tibi, si incessum fingeres, quo gravior viderere, non esses tui similis; Nec vero alia sunt quaerenda contra Carneadeam illam sententiam. O magnam vim ingenii causamque iustam, cur nova existeret disciplina! Perge porro. Nam de summo mox, ut dixi, videbimus et ad id explicandum disputationem omnem conferemus. Polycratem Samium felicem appellabant. Immo vero, inquit, ad beatissime vivendum parum est, ad beate vero satis. Quod dicit Epicurus etiam de voluptate, quae minime sint voluptates, eas obscurari saepe et obrui. Id enim volumus, id contendimus, ut officii fructus sit ipsum officium. Quod iam a me expectare noli. Itaque nostrum est-quod nostrum dico, artis est-ad ea principia, quae accepimus. Quod autem patrocinium aut quae ista causa est voluptatis, quae nec testes ullos e claris viris nec laudatores poterit adhibere? Igitur ne dolorem quidem.\@par}
+\create@par{Beatus sibi videtur esse moriens. Quamquam ab iis philosophiam et omnes ingenuas disciplinas habemus; Cur igitur, inquam, res tam dissimiles eodem nomine appellas? Sed quanta sit alias, nunc tantum possitne esse tanta. Ex quo illud efficitur, qui bene cenent omnis libenter cenare, qui libenter, non continuo bene. Nam et ille apud Trabeam voluptatem animi nimiam laetitiam dicit eandem, quam ille Caecilianus, qui omnibus laetitiis laetum esse se narrat. Si enim ita est, vide ne facinus facias, cum mori suadeas. Ita finis bonorum existit secundum naturam vivere sic affectum, ut optime is affici possit ad naturamque accommodatissime. Sit ista in Graecorum levitate perversitas, qui maledictis insectantur eos, a quibus de veritate dissentiunt. Superiores tres erant, quae esse possent, quarum est una sola defensa, eaque vehementer. Ac ne plura complectar-sunt enim innumerabilia-, bene laudata virtus voluptatis aditus intercludat necesse est.\@par}
+\create@par{Ab hoc autem quaedam non melius quam veteres, quaedam omnino relicta. Perturbationes autem nulla naturae vi commoventur, omniaque ea sunt opiniones ac iudicia levitatis. Addo etiam illud, multa iam mihi dare signa puerum et pudoris et ingenii, sed aetatem vides. Sic igitur in homine perfectio ista in eo potissimum, quod est optimum, id est in virtute, laudatur. Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Cum autem progrediens confirmatur animus, agnoscit ille quidem naturae vim, sed ita, ut progredi possit longius, per se sit tantum inchoata. Qui ita affectus, beatum esse numquam probabis; Quae cum magnifice primo dici viderentur, considerata minus probabantur. Stoici autem, quod finem bonorum in una virtute ponunt, similes sunt illorum; Facit enim ille duo seiuncta ultima bonorum, quae ut essent vera, coniungi debuerunt; Ergo opifex plus sibi proponet ad formarum quam civis excellens ad factorum pulchritudinem? Comprehensum, quod cognitum non habet?\@par}
+\create@par{Gracchum patrem non beatiorem fuisse quam fillum, cum alter stabilire rem publicam studuerit, alter evertere. Gracchum patrem non beatiorem fuisse quam fillum, cum alter stabilire rem publicam studuerit, alter evertere. His similes sunt omnes, qui virtuti student levantur vitiis, levantur erroribus, nisi forte censes Ti. Isto modo ne improbos quidem, si essent boni viri. Quamquam haec quidem praeposita recte et reiecta dicere licebit. Nec vero alia sunt quaerenda contra Carneadeam illam sententiam. Ita enim se Athenis collocavit, ut sit paene unus ex Atticis, ut id etiam cognomen videatur habiturus. Quas enim kakaw Graeci appellant, vitia malo quam malitias nominare. Ut alios omittam, hunc appello, quem ille unum secutus est. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant. Quid affers, cur Thorius, cur Caius Postumius, cur omnium horum magister, Orata, non iucundissime vixerit? Ut placet, inquit, etsi enim illud erat aptius, aequum cuique concedere.\@par}
+\create@par{Ergo in gubernando nihil, in officio plurimum interest, quo in genere peccetur. Quem quidem vos, cum improbis poenam proponitis, inpetibilem facitis, cum sapientem semper boni plus habere vultis, tolerabilem. Sed finge non solum callidum eum, qui aliquid improbe faciat, verum etiam praepotentem, ut M. Fortasse id optimum, sed ubi illud: Plus semper voluptatis? Quia voluptatem hanc esse sentiunt omnes, quam sensus accipiens movetur et iucunditate quadam perfunditur. Atque etiam valítudinem, vires, vacuitatem doloris non propter utilitatem solum, sed etiam ipsas propter se expetemus. Nam nisi hoc optineatur, id solum bonum esse, quod honestum sit, nullo modo probari possit beatam vitam virtute effici. Non risu potius quam oratione eiciendum? Itaque eos id agere, ut a se dolores, morbos, debilitates repellant. Eam tum adesse, cum dolor omnis absit; Cum id quoque, ut cupiebat, audivisset, evelli iussit eam, qua erat transfixus, hastam. An est aliquid, quod te sua sponte delectet?\@par}
+\create@par{Qui enim voluptatem ipsam contemnunt, iis licet dicere se acupenserem maenae non anteponere. Optime, inquam. Quamquam tu hanc copiosiorem etiam soles dicere. Nam si beatus umquam fuisset, beatam vitam usque ad illum a Cyro extructum rogum pertulisset. Restincta enim sitis stabilitatem voluptatis habet, inquit, illa autem voluptas ipsius restinctionis in motu est. Qui autem esse poteris, nisi te amor ipse ceperit? Conclusum est enim contra Cyrenaicos satis acute, nihil ad Epicurum. Sit ista in Graecorum levitate perversitas, qui maledictis insectantur eos, a quibus de veritate dissentiunt. Sed ita falsa sunt ea, quae consequuntur, ut illa, e quibus haec nata sunt, vera esse non possint. -, sed ut hoc iudicaremus, non esse in iis partem maximam positam beate aut secus vivendi. Quid est igitur, cur ita semper deum appellet Epicurus beatum et aeternum? Videamus animi partes, quarum est conspectus illustrior; Quae qui non vident, nihil umquam magnum ac cognitione dignum amaverunt.\@par}
+\create@par{Ita enim vivunt quidam, ut eorum vita refellatur oratio. Sed ita falsa sunt ea, quae consequuntur, ut illa, e quibus haec nata sunt, vera esse non possint. Quod ea non occurrentia fingunt, vincunt Aristonem; Cum sciret confestim esse moriendum eamque mortem ardentiore studio peteret, quam Epicurus voluptatem petendam putat. Si verbum sequimur, primum longius verbum praepositum quam bonum. Nam illud vehementer repugnat, eundem beatum esse et multis malis oppressum. Nummus in Croesi divitiis obscuratur, pars est tamen divitiarum. Nos paucis ad haec additis finem faciamus aliquando; Quocumque enim modo summum bonum sic exponitur, ut id vacet honestate, nec officia nec virtutes in ea ratione nec amicitiae constare possunt. Ut nemo dubitet, eorum omnia officia quo spectare, quid sequi, quid fugere debeant? Ipse negat, ut ante dixi, luxuriosorum vitam reprehendendam, nisi plane fatui sint, id est nisi aut cupiant aut metuant. Duae sunt enim res quoque, ne tu verba solum putes.\@par}
+\create@par{Haec non erant eius, qui innumerabilis mundos infinitasque regiones, quarum nulla esset ora, nulla extremitas, mente peragravisset. Quid est enim aliud esse versutum? Ista ipsa, quae tu breviter: regem, dictatorem, divitem solum esse sapientem, a te quidem apte ac rotunde; Nunc omni virtuti vitium contrario nomine opponitur. Et quod est munus, quod opus sapientiae? Illud quaero, quid ei, qui in voluptate summum bonum ponat, consentaneum sit dicere. Quod mihi quidem visus est, cum sciret, velle tamen confitentem audire Torquatum. Bona autem corporis huic sunt, quod posterius posui, similiora. Stuprata per vim Lucretia a regis filio testata civis se ipsa interemit. Mihi quidem Homerus huius modi quiddam vidisse videatur in iis, quae de Sirenum cantibus finxerit. Mene ergo et Triarium dignos existimas, apud quos turpiter loquare? Sed quoniam et advesperascit et mihi ad villam revertendum est, nunc quidem hactenus; Summum a vobis bonum voluptas dicitur. Qualem igitur hominem natura inchoavit?\@par}
+\create@par{Iam autem Callipho aut Diodorus quo modo poterunt tibi istud concedere, qui ad honestatem aliud adiungant, quod ex eodem genere non sit? Cuius etiam illi hortuli propinqui non memoriam solum mihi afferunt, sed ipsum videntur in conspectu meo ponere. Nihilne te delectat umquam -video, quicum loquar-, te igitur, Torquate, ipsum per se nihil delectat? Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Quid enim possumus hoc agere divinius? Immo istud quidem, inquam, quo loco quidque, nisi iniquum postulo, arbitratu meo. Itaque et vivere vitem et mori dicimus arboremque et novellan et vetulam et vigere et senescere. Praetereo multos, in bis doctum hominem et suavem, Hieronymum, quem iam cur Peripateticum appellem nescio. Potius inflammat, ut coercendi magis quam dedocendi esse videantur. Potius ergo illa dicantur: turpe esse, viri non esse debilitari dolore, frangi, succumbere. Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo.\@par}
+\create@par{Itaque ne iustitiam quidem recte quis dixerit per se ipsam optabilem, sed quia iucunditatis vel plurimum afferat. Quam ob rem tandem, inquit, non satisfacit? Miserum hominem! Si dolor summum malum est, dici aliter non potest. At quanta conantur! Mundum hunc omnem oppidum esse nostrum! Incendi igitur eos, qui audiunt, vides. Haec non erant eius, qui innumerabilis mundos infinitasque regiones, quarum nulla esset ora, nulla extremitas, mente peragravisset. Quod maxime efficit Theophrasti de beata vita liber, in quo multum admodum fortunae datur. Immo istud quidem, inquam, quo loco quidque, nisi iniquum postulo, arbitratu meo. Ita finis bonorum existit secundum naturam vivere sic affectum, ut optime is affici possit ad naturamque accommodatissime. Si est nihil nisi corpus, summa erunt illa: valitudo, vacuitas doloris, pulchritudo, cetera. Rapior illuc, revocat autem Antiochus, nec est praeterea, quem audiamus. At vero illa, quae Peripatetici, quae Stoici dicunt, semper tibi in ore sunt in iudiciis, in senatu.\@par}
+\create@par{Qui igitur convenit ab alia voluptate dicere naturam proficisci, in alia summum bonum ponere? Experiamur igitur, inquit, etsi habet haec Stoicorum ratio difficilius quiddam et obscurius. Cuius quidem, quoniam Stoicus fuit, sententia condemnata mihi videtur esse inanitas ista verborum. Licet hic rursus ea commemores, quae optimis verbis ab Epicuro de laude amicitiae dicta sunt. Quem ad modum quis ambulet, sedeat, qui ductus oris, qui vultus in quoque sit? Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Dulce amarum, leve asperum, prope longe, stare movere, quadratum rotundum. Collatio igitur ista te nihil iuvat. Cuius tanta tormenta sunt, ut in iis beata vita, si modo dolor summum malum est, esse non possit. Negat enim summo bono afferre incrementum diem. Sed tamen intellego quid velit. Dic in quovis conventu te omnia facere, ne doleas. Ita multo sanguine profuso in laetitia et in victoria est mortuus. Illi enim inter se dissentiunt.\@par}
+\create@par{Aeque enim contingit omnibus fidibus, ut incontentae sint. Quod autem principium officii quaerunt, melius quam Pyrrho; An, partus ancillae sitne in fructu habendus, disseretur inter principes civitatis, P. Nec lapathi suavitatem acupenseri Galloni Laelius anteponebat, sed suavitatem ipsam neglegebat; Quamquam scripsit artem rhetoricam Cleanthes, Chrysippus etiam, sed sic, ut, si quis obmutescere concupierit, nihil aliud legere debeat. Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Quae fere omnia appellantur uno ingenii nomine, easque virtutes qui habent, ingeniosi vocantur. O magnam vim ingenii causamque iustam, cur nova existeret disciplina! Perge porro. Deinde prima illa, quae in congressu solemus: Quid tu, inquit, huc? Est tamen ea secundum naturam multoque nos ad se expetendam magis hortatur quam superiora omnia. Placet igitur tibi, Cato, cum res sumpseris non concessas, ex illis efficere, quod velis? At enim, qua in vita est aliquid mali, ea beata esse non potest.\@par}
+\create@par{Erit enim mecum, si tecum erit. Theophrastus mediocriterne delectat, cum tractat locos ab Aristotele ante tractatos? Eorum enim est haec querela, qui sibi cari sunt seseque diligunt. An eum locum libenter invisit, ubi Demosthenes et Aeschines inter se decertare soliti sunt? Quia nec honesto quic quam honestius nec turpi turpius. An dolor longissimus quisque miserrimus, voluptatem non optabiliorem diuturnitas facit? Semper enim ita adsumit aliquid, ut ea, quae prima dederit, non deserat. Possumusne ergo in vita summum bonum dicere, cum id ne in cena quidem posse videamur? Idque testamento cavebit is, qui nobis quasi oraculum ediderit nihil post mortem ad nos pertinere? Praeclare Laelius, et recte sofñw, illudque vere: O Publi, o gurges, Galloni! es homo miser, inquit. Sin kakan malitiam dixisses, ad aliud nos unum certum vitium consuetudo Latina traduceret. Nam aliquando posse recte fieri dicunt nulla expectata nec quaesita voluptate.\@par}
+\create@par{Dic in quovis conventu te omnia facere, ne doleas. Ac ne plura complectar-sunt enim innumerabilia-, bene laudata virtus voluptatis aditus intercludat necesse est. Ut enim consuetudo loquitur, id solum dicitur honestum, quod est populari fama gloriosum. Quid igitur dubitamus in tota eius natura quaerere quid sit effectum? Paulum, cum regem Persem captum adduceret, eodem flumine invectio? Mihi, inquam, qui te id ipsum rogavi? Sed quanta sit alias, nunc tantum possitne esse tanta. Verum tamen cum de rebus grandioribus dicas, ipsae res verba rapiunt; Sedulo, inquam, faciam. Erillus autem ad scientiam omnia revocans unum quoddam bonum vidit, sed nec optimum nec quo vita gubernari possit. Id quaeris, inquam, in quo, utrum respondero, verses te huc atque illuc necesse est. Si quicquam extra virtutem habeatur in bonis. Sit, inquam, tam facilis, quam vultis, comparatio voluptatis, quid de dolore dicemus? Vide ne ista sint Manliana vestra aut maiora etiam, si imperes quod facere non possim.\@par}
+\create@par{Tollit definitiones, nihil de dividendo ac partiendo docet, non quo modo efficiatur concludaturque ratio tradit, non qua via captiosa solvantur ambigua distinguantur ostendit; Sed quod proximum fuit non vidit. Huius ego nunc auctoritatem sequens idem faciam. Sed haec quidem liberius ab eo dicuntur et saepius. De malis autem et bonis ab iis animalibus, quae nondum depravata sint, ait optime iudicari. Comprehensum, quod cognitum non habet? Ita finis bonorum existit secundum naturam vivere sic affectum, ut optime is affici possit ad naturamque accommodatissime. Quia nec honesto quic quam honestius nec turpi turpius. Nunc omni virtuti vitium contrario nomine opponitur. Ergo opifex plus sibi proponet ad formarum quam civis excellens ad factorum pulchritudinem? Nam prius a se poterit quisque discedere quam appetitum earum rerum, quae sibi conducant, amittere. Itaque hoc frequenter dici solet a vobis, non intellegere nos, quam dicat Epicurus voluptatem.\@par}
+\create@par{Quod praeceptum quia maius erat, quam ut ab homine videretur, idcirco assignatum est deo. Etenim nec iustitia nec amicitia esse omnino poterunt, nisi ipsae per se expetuntur. Id enim volumus, id contendimus, ut officii fructus sit ipsum officium. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant. Nunc ita separantur, ut disiuncta sint, quo nihil potest esse perversius. Res enim fortasse verae, certe graves, non ita tractantur, ut debent, sed aliquanto minutius. De malis autem et bonis ab iis animalibus, quae nondum depravata sint, ait optime iudicari. Tenesne igitur, inquam, Hieronymus Rhodius quid dicat esse summum bonum, quo putet omnia referri oportere? Plane idem, inquit, et maxima quidem, qua fieri nulla maior potest. Quod cum ita sit, perspicuum est omnis rectas res atque laudabilis eo referri, ut cum voluptate vivatur. Traditur, inquit, ab Epicuro ratio neglegendi doloris. Intellegi quidem, ut propter aliam quampiam rem, verbi gratia propter voluptatem, nos amemus;\@par}
+\create@par{Primum cur ista res digna odio est, nisi quod est turpis? Non dolere, inquam, istud quam vim habeat postea videro; Cuius similitudine perspecta in formarum specie ac dignitate transitum est ad honestatem dictorum atque factorum. Vos autem cum perspicuis dubia debeatis illustrare, dubiis perspicua conamini tollere. Hunc vos beatum; Ex quo, id quod omnes expetunt, beate vivendi ratio inveniri et comparari potest. Quo plebiscito decreta a senatu est consuli quaestio Cn. Quae fere omnia appellantur uno ingenii nomine, easque virtutes qui habent, ingeniosi vocantur. Quod praeceptum quia maius erat, quam ut ab homine videretur, idcirco assignatum est deo. Non enim, si omnia non sequebatur, idcirco non erat ortus illinc. Ergo adhuc, quantum equidem intellego, causa non videtur fuisse mutandi nominis. Itaque his sapiens semper vacabit. Cum autem in quo sapienter dicimus, id a primo rectissime dicitur. Itaque haec cum illis est dissensio, cum Peripateticis nulla sane.\@par}
+\create@par{Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Huius ego nunc auctoritatem sequens idem faciam. Aliam vero vim voluptatis esse, aliam nihil dolendi, nisi valde pertinax fueris, concedas necesse est. Id quaeris, inquam, in quo, utrum respondero, verses te huc atque illuc necesse est. Ait enim se, si uratur, Quam hoc suave! dicturum. Fadio Gallo, cuius in testamento scriptum esset se ab eo rogatum ut omnis hereditas ad filiam perveniret. Vide igitur ne non debeas verbis nostris uti, sententiis tuis. Peccata autem partim esse tolerabilia, partim nullo modo, propterea quod alia peccata plures, alia pauciores quasi numeros officii praeterirent. O magnam vim ingenii causamque iustam, cur nova existeret disciplina! Perge porro. Legimus tamen Diogenem, Antipatrum, Mnesarchum, Panaetium, multos alios in primisque familiarem nostrum Posidonium. Sed id ne cogitari quidem potest quale sit, ut non repugnet ipsum sibi. In qua si nihil est praeter rationem, sit in una virtute finis bonorum;\@par}
+\create@par{Te ipsum, dignissimum maioribus tuis, voluptasne induxit, ut adolescentulus eriperes P. Callipho ad virtutem nihil adiunxit nisi voluptatem, Diodorus vacuitatem doloris. Nemo igitur esse beatus potest. Quod mihi quidem visus est, cum sciret, velle tamen confitentem audire Torquatum. Is ita vivebat, ut nulla tam exquisita posset inveniri voluptas, qua non abundaret. Satisne igitur videor vim verborum tenere, an sum etiam nunc vel Graece loqui vel Latine docendus? Sed tamen omne, quod de re bona dilucide dicitur, mihi praeclare dici videtur. Deinde concludebas summum malum esse dolorem, summum bonum voluptatem! Lucius Thorius Balbus fuit, Lanuvinus, quem meminisse tu non potes. Quid me istud rogas? Multoque hoc melius nos veriusque quam Stoici. Quo minus animus a se ipse dissidens secumque discordans gustare partem ullam liquidae voluptatis et liberae potest. Quod idem cum vestri faciant, non satis magnam tribuunt inventoribus gratiam.\@par}
+\create@par{Fortitudinis quaedam praecepta sunt ac paene leges, quae effeminari virum vetant in dolore. Satisne ergo pudori consulat, si quis sine teste libidini pareat? Sed id ne cogitari quidem potest quale sit, ut non repugnet ipsum sibi. Gracchum patrem non beatiorem fuisse quam fillum, cum alter stabilire rem publicam studuerit, alter evertere. Quod si ita sit, cur opera philosophiae sit danda nescio. Quae in controversiam veniunt, de iis, si placet, disseramus. Restincta enim sitis stabilitatem voluptatis habet, inquit, illa autem voluptas ipsius restinctionis in motu est. Quia nec honesto quic quam honestius nec turpi turpius. Quid interest, nisi quod ego res notas notis verbis appello, illi nomina nova quaerunt, quibus idem dicant? Indicant pueri, in quibus ut in speculis natura cernitur. Nullum inveniri verbum potest quod magis idem declaret Latine, quod Graece, quam declarat voluptas. Sic enim maiores nostri labores non fugiendos tristissimo tamen verbo aerumnas etiam in deo nominaverunt.\@par}
+\create@par{Cuius etiam illi hortuli propinqui non memoriam solum mihi afferunt, sed ipsum videntur in conspectu meo ponere. Quis suae urbis conservatorem Codrum, quis Erechthei filias non maxime laudat? At Zeno eum non beatum modo, sed etiam divitem dicere ausus est. Quid iudicant sensus? Nos quidem Virtutes sic natae sumus, ut tibi serviremus, aliud negotii nihil habemus. Nemo enim est, qui aliter dixerit quin omnium naturarum simile esset id, ad quod omnia referrentur, quod est ultimum rerum appetendarum. Quos nisi redarguimus, omnis virtus, omne decus, omnis vera laus deserenda est. Licet hic rursus ea commemores, quae optimis verbis ab Epicuro de laude amicitiae dicta sunt. Aliter homines, aliter philosophos loqui putas oportere? Atque etiam ad iustitiam colendam, ad tuendas amicitias et reliquas caritates quid natura valeat haec una cognitio potest tradere. De hominibus dici non necesse est. Et quidem illud ipsum non nimium probo et tantum patior, philosophum loqui de cupiditatibus finiendis.\@par}
+\create@par{In omni enim arte vel studio vel quavis scientia vel in ipsa virtute optimum quidque rarissimum est. Et quae per vim oblatum stuprum volontaria morte lueret inventa est et qui interficeret filiam, ne stupraretur. Bonum incolumis acies: misera caecitas. Ex quo intellegitur officium medium quiddam esse, quod neque in bonis ponatur neque in contrariis. Amicitiam autem adhibendam esse censent, quia sit ex eo genere, quae prosunt. Cum enim summum bonum in voluptate ponat, negat infinito tempore aetatis voluptatem fieri maiorem quam finito atque modico. Ita multo sanguine profuso in laetitia et in victoria est mortuus. Plane idem, inquit, et maxima quidem, qua fieri nulla maior potest. Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo. Nosti, credo, illud: Nemo pius est, qui pietatem-; Tamen aberramus a proposito, et, ne longius, prorsus, inquam, Piso, si ista mala sunt, placet. Expectoque quid ad id, quod quaerebam, respondeas.\@par}
+\create@par{Ne vitationem quidem doloris ipsam per se quisquam in rebus expetendis putavit, nisi etiam evitare posset. Deinde prima illa, quae in congressu solemus: Quid tu, inquit, huc? Quin etiam ferae, inquit Pacuvius, quíbus abest, ad praécavendum intéllegendi astútia, iniecto terrore mortis horrescunt. Nonne videmus quanta perturbatio rerum omnium consequatur, quanta confusio? Haec non erant eius, qui innumerabilis mundos infinitasque regiones, quarum nulla esset ora, nulla extremitas, mente peragravisset. Qualis ista philosophia est, quae non interitum afferat pravitatis, sed sit contenta mediocritate vitiorum? Ego, quam ille praeponendam et magis eligendam, beatiorem hanc appello nec ullo minimo momento plus ei vitae tribuo quam Stoici. Virtutis, magnitudinis animi, patientiae, fortitudinis fomentis dolor mitigari solet. Praeterea sublata cognitione et scientia tollitur omnis ratio et vitae degendae et rerum gerendarum. Res enim se praeclare habebat, et quidem in utraque parte.\@par}
+\create@par{Potius ergo illa dicantur: turpe esse, viri non esse debilitari dolore, frangi, succumbere. Quid in isto egregio tuo officio et tanta fide-sic enim existimo-ad corpus refers? Quod, inquit, quamquam voluptatibus quibusdam est saepe iucundius, tamen expetitur propter voluptatem. Aut haec tibi, Torquate, sunt vituperanda aut patrocinium voluptatis repudiandum. Ampulla enim sit necne sit, quis non iure optimo irrideatur, si laboret? In ipsa enim parum magna vis inest, ut quam optime se habere possit, si nulla cultura adhibeatur. Fortasse id optimum, sed ubi illud: Plus semper voluptatis? Itaque quantum adiit periculum! ad honestatem enim illum omnem conatum suum referebat, non ad voluptatem. Sed eum qui audiebant, quoad poterant, defendebant sententiam suam. Sic enim maiores nostri labores non fugiendos tristissimo tamen verbo aerumnas etiam in deo nominaverunt. Stuprata per vim Lucretia a regis filio testata civis se ipsa interemit. An tu me de L.\@par}
+\create@par{Illum mallem levares, quo optimum atque humanissimum virum, Cn. An eum locum libenter invisit, ubi Demosthenes et Aeschines inter se decertare soliti sunt? Cum id quoque, ut cupiebat, audivisset, evelli iussit eam, qua erat transfixus, hastam. Aut unde est hoc contritum vetustate proverbium: quicum in tenebris? Sed haec ab Antiocho, familiari nostro, dicuntur multo melius et fortius, quam a Stasea dicebantur. Ad corpus diceres pertinere-, sed ea, quae dixi, ad corpusne refers? Aut unde est hoc contritum vetustate proverbium: quicum in tenebris? Nec vero intermittunt aut admirationem earum rerum, quae sunt ab antiquis repertae, aut investigationem novarum. Sed isti ipsi, qui voluptate et dolore omnia metiuntur, nonne clamant sapienti plus semper adesse quod velit quam quod nolit? Quibus natura iure responderit non esse verum aliunde finem beate vivendi, a se principia rei gerendae peti; An dubium est, quin virtus ita maximam partem optineat in rebus humanis, ut reliquas obruat?\@par}
+\create@par{Hi curatione adhibita levantur in dies, valet alter plus cotidie, alter videt. Quid ei reliquisti, nisi te, quoquo modo loqueretur, intellegere, quid diceret? Numquam hoc ita defendit Epicurus neque Metrodorus aut quisquam eorum, qui aut saperet aliquid aut ista didicisset. Ut pompa, ludis atque eius modi spectaculis teneantur ob eamque rem vel famem et sitim perferant? Egone quaeris, inquit, quid sentiam? Hoc ipsum elegantius poni meliusque potuit. Parvi enim primo ortu sic iacent, tamquam omnino sine animo sint. Nec lapathi suavitatem acupenseri Galloni Laelius anteponebat, sed suavitatem ipsam neglegebat; Si ista mala sunt, in quae potest incidere sapiens, sapientem esse non esse ad beate vivendum satis. Luxuriam non reprehendit, modo sit vacua infinita cupiditate et timore. Et quidem illud ipsum non nimium probo et tantum patior, philosophum loqui de cupiditatibus finiendis. Tenesne igitur, inquam, Hieronymus Rhodius quid dicat esse summum bonum, quo putet omnia referri oportere?\@par}
+\create@par{Quae sunt igitur communia vobis cum antiquis, iis sic utamur quasi concessis; Ad eas enim res ab Epicuro praecepta dantur. Refert tamen, quo modo. Non enim, si omnia non sequebatur, idcirco non erat ortus illinc. Est enim tanti philosophi tamque nobilis audacter sua decreta defendere. Quamquam ex omnibus philosophis Stoici plurima novaverunt, Zenoque, eorum princeps, non tam rerum inventor fuit quam verborum novorum. Nam, ut saepe iam dixi, in infirma aetate inbecillaque mente vis naturae quasi per caliginem cernitur; Ut enim consuetudo loquitur, id solum dicitur honestum, quod est populari fama gloriosum. Dici enim nihil potest verius. Quam si explicavisset, non tam haesitaret. Quasi ego id curem, quid ille aiat aut neget. Quicquid porro animo cernimus, id omne oritur a sensibus; Scis enim me quodam tempore Metapontum venisse tecum neque ad hospitem ante devertisse, quam Pythagorae ipsum illum locum, ubi vitam ediderat, sedemque viderim. Quid igitur dubitamus in tota eius natura quaerere quid sit effectum?\@par}
+\create@par{Aliam vero vim voluptatis esse, aliam nihil dolendi, nisi valde pertinax fueris, concedas necesse est. Licet hic rursus ea commemores, quae optimis verbis ab Epicuro de laude amicitiae dicta sunt. Huic ego, si negaret quicquam interesse ad beate vivendum quali uteretur victu, concederem, laudarem etiam; Quare hoc videndum est, possitne nobis hoc ratio philosophorum dare. Facit enim ille duo seiuncta ultima bonorum, quae ut essent vera, coniungi debuerunt; Fortitudinis quaedam praecepta sunt ac paene leges, quae effeminari virum vetant in dolore. Tum ego: Non mehercule, inquam, soleo temere contra Stoicos, non quo illis admodum assentiar, sed pudore impedior; Sed venio ad inconstantiae crimen, ne saepius dicas me aberrare; Quam tu ponis in verbis, ego positam in re putabam. Immo istud quidem, inquam, quo loco quidque, nisi iniquum postulo, arbitratu meo. Nos quidem Virtutes sic natae sumus, ut tibi serviremus, aliud negotii nihil habemus. Quod cum dixissent, ille contra.\@par}
+\create@par{Quae cum magnifice primo dici viderentur, considerata minus probabantur. Experiamur igitur, inquit, etsi habet haec Stoicorum ratio difficilius quiddam et obscurius. Ergo instituto veterum, quo etiam Stoici utuntur, hinc capiamus exordium. Quippe, inquieta cum tam docuerim gradus istam rem non habere quam virtutem, in qua sit ipsum etíam beatum. Cur tantas regiones barbarorum pedibus obiit, tot maria transmisit? Etsi ea quidem, quae adhuc dixisti, quamvis ad aetatem recte isto modo dicerentur. Sed haec quidem liberius ab eo dicuntur et saepius. Sin autem eos non probabat, quid attinuit cum iis, quibuscum re concinebat, verbis discrepare? Quae sunt igitur communia vobis cum antiquis, iis sic utamur quasi concessis; Qui non moveatur et offensione turpitudinis et comprobatione honestatis? Cuius similitudine perspecta in formarum specie ac dignitate transitum est ad honestatem dictorum atque factorum. Si enim non fuit eorum iudicii, nihilo magis hoc non addito illud est iudicatum-.\@par}
+\create@par{Varietates autem iniurasque fortunae facile veteres philosophorum praeceptis instituta vita superabat. Prave, nequiter, turpiter cenabat; Et tamen tantis vectigalibus ad liberalitatem utens etiam sine hac Pyladea amicitia multorum te benivolentia praeclare tuebere et munies. Restat locus huic disputationi vel maxime necessarius de amicitia, quam, si voluptas summum sit bonum, affirmatis nullam omnino fore. Illa videamus, quae a te de amicitia dicta sunt. Sed eum qui audiebant, quoad poterant, defendebant sententiam suam. Hoc est non modo cor non habere, sed ne palatum quidem. Mihi quidem Homerus huius modi quiddam vidisse videatur in iis, quae de Sirenum cantibus finxerit. Sed memento te, quae nos sentiamus, omnia probare, nisi quod verbis aliter utamur, mihi autem vestrorum nihil probari. Animi enim quoque dolores percipiet omnibus partibus maiores quam corporis. Fortemne possumus dicere eundem illum Torquatum? Hoc non est positum in nostra actione.\@par}
+\create@par{Aliud est enim poëtarum more verba fundere, aliud ea, quae dicas, ratione et arte distinguere. Nec enim, dum metuit, iustus est, et certe, si metuere destiterit, non erit; Hi curatione adhibita levantur in dies, valet alter plus cotidie, alter videt. Idem fecisset Epicurus, si sententiam hanc, quae nunc Hieronymi est, coniunxisset cum Aristippi vetere sententia. Itaque et manendi in vita et migrandi ratio omnis iis rebus, quas supra dixi, metienda. Piso igitur hoc modo, vir optimus tuique, ut scis, amantissimus. Hoc autem tempore, etsi multa in omni parte Athenarum sunt in ipsis locis indicia summorum virorum, tamen ego illa moveor exhedra. Ubi ut eam caperet aut quando? Illud urgueam, non intellegere eum quid sibi dicendum sit, cum dolorem summum malum esse dixerit. Et ego: Piso, inquam, si est quisquam, qui acute in causis videre soleat quae res agatur. Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo.\@par}
+\create@par{Incommoda autem et commoda-ita enim estmata et dustmata appello-communia esse voluerunt, paria noluerunt. In qua si nihil est praeter rationem, sit in una virtute finis bonorum; Quos quidem dies quem ad modum agatis et in quantam hominum facetorum urbanitatem incurratis, non diconihil opus est litibus-; Egone quaeris, inquit, quid sentiam? Summum ením bonum exposuit vacuitatem doloris; Itaque et manendi in vita et migrandi ratio omnis iis rebus, quas supra dixi, metienda. Quod quidem iam fit etiam in Academia. Sed existimo te, sicut nostrum Triarium, minus ab eo delectari, quod ista Platonis, Aristoteli, Theophrasti orationis ornamenta neglexerit. Quid turpius quam sapientis vitam ex insipientium sermone pendere? Ego vero volo in virtute vim esse quam maximam; Mihi autem nihil tam perspicuum videtur, quam has sententias eorum philosophorum re inter se magis quam verbis dissidere; An vero, inquit, quisquam potest probare, quod perceptfum, quod.\@par}
+\create@par{Quid enim mihi potest esse optatius quam cum Catone, omnium virtutum auctore, de virtutibus disputare? Nec vero sum nescius esse utilitatem in historia, non modo voluptatem. Quid igitur dubitamus in tota eius natura quaerere quid sit effectum? Quae in controversiam veniunt, de iis, si placet, disseramus. Non igitur de improbo, sed de callido improbo quaerimus, qualis Q. Duarum enim vitarum nobis erunt instituta capienda. Sunt etiam turpitudines plurimae, quae, nisi honestas natura plurimum valeat, cur non cadant in sapientem non est facile defendere. Graecis hoc modicum est: Leonidas, Epaminondas, tres aliqui aut quattuor; Sed haec ab Antiocho, familiari nostro, dicuntur multo melius et fortius, quam a Stasea dicebantur. Tu autem inter haec tantam multitudinem hominum interiectam non vides nec laetantium nec dolentium? Illud urgueam, non intellegere eum quid sibi dicendum sit, cum dolorem summum malum esse dixerit. Hoc loco discipulos quaerere videtur, ut, qui asoti esse velint, philosophi ante fiant.\@par}
+\create@par{Eorum enim omnium multa praetermittentium, dum eligant aliquid, quod sequantur, quasi curta sententia; Non potes ergo ista tueri, Torquate, mihi crede, si te ipse et tuas cogitationes et studia perspexeris; Aliter enim explicari, quod quaeritur, non potest. Cum autem in quo sapienter dicimus, id a primo rectissime dicitur. Tertium autem omnibus aut maximis rebus iis, quae secundum naturam sint, fruentem vivere. Ita fit ut, quanta differentia est in principiis naturalibus, tanta sit in finibus bonorum malorumque dissimilitudo. -delector enim, quamquam te non possum, ut ais, corrumpere, delector, inquam, et familia vestra et nomine. Somnum denique nobis, nisi requietem corporibus et is medicinam quandam laboris afferret, contra naturam putaremus datum; Tum mihi Piso: Quid ergo? Scaevola tribunus plebis ferret ad plebem vellentne de ea re quaeri. At enim hic etiam dolore. Sed quamvis comis in amicis tuendis fuerit, tamen, si haec vera sunt-nihil enim affirmo-, non satis acutus fuit.\@par}
+\create@par{Reliqui sibi constiterunt, ut extrema cum initiis convenirent, ut Aristippo voluptas, Hieronymo doloris vacuitas, Carneadi frui principiis naturalibus esset extremum. Itaque mihi non satis videmini considerare quod iter sit naturae quaeque progressio. Sed audiamus ipsum: Compensabatur, inquit, tamen cum his omnibus animi laetitia, quam capiebam memoria rationum inventorumque nostrorum. Res tota, Torquate, non doctorum hominum, velle post mortem epulis celebrari memoriam sui nominis. Non ego tecum iam ita iocabor, ut isdem his de rebus, cum L. Quod autem principium officii quaerunt, melius quam Pyrrho; Itaque vides, quo modo loquantur, nova verba fingunt, deserunt usitata. Te ipsum, dignissimum maioribus tuis, voluptasne induxit, ut adolescentulus eriperes P. Itaque vides, quo modo loquantur, nova verba fingunt, deserunt usitata. Re mihi non aeque satisfacit, et quidem locis pluribus. Hos contra singulos dici est melius. Igitur neque stultorum quisquam beatus neque sapientium non beatus.\@par}
+\create@par{Comprehensum, quod cognitum non habet? Nec vero audiendus Hieronymus, cui summum bonum est idem, quod vos interdum vel potius nimium saepe dicitis, nihil dolere. Nam Metrodorum non puto ipsum professum, sed, cum appellaretur ab Epicuro, repudiare tantum beneficium noluisse; Sed haec ab Antiocho, familiari nostro, dicuntur multo melius et fortius, quam a Stasea dicebantur. Pungunt quasi aculeis interrogatiunculis angustis, quibus etiam qui assentiuntur nihil commutantur animo et idem abeunt, qui venerant. Voluptatem cum summum bonum diceret, primum in eo ipso parum vidit, deinde hoc quoque alienum; Hoc positum in Phaedro a Platone probavit Epicurus sensitque in omni disputatione id fieri oportere. Aliam vero vim voluptatis esse, aliam nihil dolendi, nisi valde pertinax fueris, concedas necesse est. Videsne quam sit magna dissensio? Sin te auctoritas commovebat, nobisne omnibus et Platoni ipsi nescio quem illum anteponebas? Facillimum id quidem est, inquam. Quonam, inquit, modo?\@par}
+\create@par{Scientiam pollicentur, quam non erat mirum sapientiae cupido patria esse cariorem. An est aliquid per se ipsum flagitiosum, etiamsi nulla comitetur infamia? Quo minus animus a se ipse dissidens secumque discordans gustare partem ullam liquidae voluptatis et liberae potest. Themistocles quidem, cum ei Simonides an quis alius artem memoriae polliceretur, Oblivionis, inquit, mallem. Is cum arderet podagrae doloribus visitassetque hominem Charmides Epicureus perfamiliaris et tristis exiret, Mane, quaeso, inquit, Charmide noster; Itaque mihi non satis videmini considerare quod iter sit naturae quaeque progressio. Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo. Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et luxuriosus eodem modo. Diodorus, eius auditor, adiungit ad honestatem vacuitatem doloris. Atque haec coniunctio confusioque virtutum tamen a philosophis ratione quadam distinguitur. Ut proverbia non nulla veriora sint quam vestra dogmata.\@par}
+\create@par{Praeclare Laelius, et recte sofñw, illudque vere: O Publi, o gurges, Galloni! es homo miser, inquit. Theophrasti igitur, inquit, tibi liber ille placet de beata vita? Nihilne te delectat umquam -video, quicum loquar-, te igitur, Torquate, ipsum per se nihil delectat? Huic mori optimum esse propter desperationem sapientiae, illi propter spem vivere. Primum cur ista res digna odio est, nisi quod est turpis? Quicquid enim a sapientia proficiscitur, id continuo debet expletum esse omnibus suis partibus; Propter nos enim illam, non propter eam nosmet ipsos diligimus. Quae dici eadem de ceteris virtutibus possunt, quarum omnium fundamenta vos in voluptate tamquam in aqua ponitis. Quis tibi ergo istud dabit praeter Pyrrhonem, Aristonem eorumve similes, quos tu non probas? Et quidem illud ipsum non nimium probo et tantum patior, philosophum loqui de cupiditatibus finiendis. Neminem videbis ita laudatum, ut artifex callidus comparandarum voluptatum diceretur.\@par}
+\create@par{Iis igitur est difficilius satis facere, qui se Latina scripta dicunt contemnere. Quod quidem iam fit etiam in Academia. Sed tamen est aliquid, quod nobis non liceat, liceat illis. Nam, ut sint illa vendibiliora, haec uberiora certe sunt. Cur ipse Pythagoras et Aegyptum lustravit et Persarum magos adiit? Te autem hortamur omnes, currentem quidem, ut spero, ut eos, quos novisse vis, imitari etiam velis. In eo autem voluptas omnium Latine loquentium more ponitur, cum percipitur ea, quae sensum aliquem moveat, iucunditas. Esse enim, nisi eris, non potes. Nam de summo mox, ut dixi, videbimus et ad id explicandum disputationem omnem conferemus. Non quaeritur autem quid naturae tuae consentaneum sit, sed quid disciplinae. Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es? Diodorus, eius auditor, adiungit ad honestatem vacuitatem doloris. Quodsi vultum tibi, si incessum fingeres, quo gravior viderere, non esses tui similis; Dolere malum est: in crucem qui agitur, beatus esse non potest.\@par}
+\create@par{Vide, ne magis, inquam, tuum fuerit, cum re idem tibi, quod mihi, videretur, non nova te rebus nomina inponere. Nec lapathi suavitatem acupenseri Galloni Laelius anteponebat, sed suavitatem ipsam neglegebat; Quod non faceret, si in voluptate summum bonum poneret. Sin ea non neglegemus neque tamen ad finem summi boni referemus, non multum ab Erilli levitate aberrabimus. Illa sunt similia: hebes acies est cuipiam oculorum, corpore alius senescit; Tamen aberramus a proposito, et, ne longius, prorsus, inquam, Piso, si ista mala sunt, placet. Videamus igitur sententias eorum, tum ad verba redeamus. Ita fit ut, quanta differentia est in principiis naturalibus, tanta sit in finibus bonorum malorumque dissimilitudo. Non igitur de improbo, sed de callido improbo quaerimus, qualis Q. Cum id fugiunt, re eadem defendunt, quae Peripatetici, verba. Et hi quidem ita non sola virtute finem bonorum contineri putant, ut rebus tamen omnibus virtutem anteponant;\@par}
+\create@par{Aufidio, praetorio, erudito homine, oculis capto, saepe audiebam, cum se lucis magis quam utilitatis desiderio moveri diceret. Aristoteles, Xenocrates, tota illa familia non dabit, quippe qui valitudinem, vires, divitias, gloriam, multa alia bona esse dicant, laudabilia non dicant. Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Immo alio genere; Ergo hoc quidem apparet, nos ad agendum esse natos. Hanc quoque iucunditatem, si vis, transfer in animum; Iam illud quale tandem est, bona praeterita non effluere sapienti, mala meminisse non oportere? Hanc se tuus Epicurus omnino ignorare dicit quam aut qualem esse velint qui honestate summum bonum metiantur. In eo enim positum est id, quod dicimus esse expetendum. Huic ego, si negaret quicquam interesse ad beate vivendum quali uteretur victu, concederem, laudarem etiam; Ita graviter et severe voluptatem secrevit a bono. At tu eadem ista dic in iudicio aut, si coronam times, dic in senatu.\@par}
+\create@par{Piso igitur hoc modo, vir optimus tuique, ut scis, amantissimus. In quibus doctissimi illi veteres inesse quiddam caeleste et divinum putaverunt. Et ille ridens: Video, inquit, quid agas; Videmus igitur ut conquiescere ne infantes quidem possint. Ad eas enim res ab Epicuro praecepta dantur. Et hanc quidem primam exigam a te operam, ut audias me quae a te dicta sunt refellentem. Quid, si etiam iucunda memoria est praeteritorum malorum? Sic vester sapiens magno aliquo emolumento commotus cicuta, si opus erit, dimicabit. Atque haec ita iustitiae propria sunt, ut sint virtutum reliquarum communia. Quis est enim aut quotus quisque, cui, mora cum adpropinquet, non refugiat timido sanguen átque exalbescát metu? Ex quo intellegitur nec intemperantiam propter se esse fugiendam temperantiamque expetendam, non quia voluptates fugiat, sed quia maiores consequatur. Quid ei reliquisti, nisi te, quoquo modo loqueretur, intellegere, quid diceret?\@par}
+\create@par{Id et fieri posse et saepe esse factum et ad voluptates percipiendas maxime pertinere. Ad corpus diceres pertinere-, sed ea, quae dixi, ad corpusne refers? Is cum arderet podagrae doloribus visitassetque hominem Charmides Epicureus perfamiliaris et tristis exiret, Mane, quaeso, inquit, Charmide noster; Aut pertinacissimus fueris, si in eo perstiteris ad corpus ea, quae dixi, referri, aut deserueris totam Epicuri voluptatem, si negaveris. Dolor ergo, id est summum malum, metuetur semper, etiamsi non aderit; Aliter homines, aliter philosophos loqui putas oportere? Dolere malum est: in crucem qui agitur, beatus esse non potest. Septem autem illi non suo, sed populorum suffragio omnium nominati sunt. Quam multa vitiosa! summum enim bonum et malum vagiens puer utra voluptate diiudicabit, stante an movente? Superiores tres erant, quae esse possent, quarum est una sola defensa, eaque vehementer. Sed tu istuc dixti bene Latine, parum plane. Que Manilium, ab iisque M.\@par}
+\create@par{Quarum cum una sit, qua mores conformari putantur, differo eam partem, quae quasi stirps ets huius quaestionis. Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. At enim, qua in vita est aliquid mali, ea beata esse non potest. An ea, quae per vinitorem antea consequebatur, per se ipsa curabit? Quare obscurentur etiam haec, quae secundum naturam esse dicimus, in vita beata; Quamquam in hac divisione rem ipsam prorsus probo, elegantiam desidero. Tum ille: Tu autem cum ipse tantum librorum habeas, quos hic tandem requiris? Sin laboramus, quis est, qui alienae modum statuat industriae? Traditur, inquit, ab Epicuro ratio neglegendi doloris. Ego autem tibi, Piso, assentior usu hoc venire, ut acrius aliquanto et attentius de claris viris locorum admonitu cogitemus. Sed virtutem ipsam inchoavit, nihil amplius. Itaque eo, quale sit, breviter, ut tempus postulat, constituto accedam ad omnia tua, Torquate, nisi memoria forte defecerit.\@par}
+\create@par{Non est enim vitium in oratione solum, sed etiam in moribus. Poterat autem inpune; Aliena dixit in physicis nec ea ipsa, quae tibi probarentur; Qui autem de summo bono dissentit de tota philosophiae ratione dissentit. Sit hoc ultimum bonorum, quod nunc a me defenditur; Polemoni et iam ante Aristoteli ea prima visa sunt, quae paulo ante dixi. In his igitur partibus duabus nihil erat, quod Zeno commutare gestiret. Beatus autem esse in maximarum rerum timore nemo potest. Hoc etsi multimodis reprehendi potest, tamen accipio, quod dant. Totum genus hoc Zeno et qui ab eo sunt aut non potuerunt aut noluerunt, certe reliquerunt. Sed tu, ut dignum est tua erga me et philosophiam voluntate ab adolescentulo suscepta, fac ut Metrodori tueare liberos. Ut enim consuetudo loquitur, id solum dicitur honestum, quod est populari fama gloriosum. Quia, cum a Zenone, inquam, hoc magnifice tamquam ex oraculo editur: Virtus ad beate vivendum se ipsa contenta est, et Quare?\@par}
+\create@par{Quae cum essent dicta, discessimus. Nunc ita separantur, ut disiuncta sint, quo nihil potest esse perversius. Venit enim mihi Platonis in mentem, quem accepimus primum hic disputare solitum; Heri, inquam, ludis commissis ex urbe profectus veni ad vesperum. Qui si omnes veri erunt, ut Epicuri ratio docet, tum denique poterit aliquid cognosci et percipi. Sed tu istuc dixti bene Latine, parum plane. Quia dolori non voluptas contraria est, sed doloris privatio. Sic enim maiores nostri labores non fugiendos tristissimo tamen verbo aerumnas etiam in deo nominaverunt. Teneo, inquit, finem illi videri nihil dolere. Ita similis erit ei finis boni, atque antea fuerat, neque idem tamen; Etiam inchoatum, ut, si iuste depositum reddere in recte factis sit, in officiis ponatur depositum reddere; Quid, cum fictas fabulas, e quibus utilitas nulla elici potest, cum voluptate legimus? Nunc ita separantur, ut disiuncta sint, quo nihil potest esse perversius. Qui autem esse poteris, nisi te amor ipse ceperit?\@par}
+\create@par{Egone non intellego, quid sit don Graece, Latine voluptas? Deinde concludebas summum malum esse dolorem, summum bonum voluptatem! Lucius Thorius Balbus fuit, Lanuvinus, quem meminisse tu non potes. Si vero id etiam explanare velles apertiusque diceres nihil eum fecisse nisi voluptatis causa, quo modo eum tandem laturum fuisse existimas? Itaque homo in primis ingenuus et gravis, dignus illa familiaritate Scipionis et Laelii, Panaetius, cum ad Q. Graecis hoc modicum est: Leonidas, Epaminondas, tres aliqui aut quattuor; Quia, si mala sunt, is, qui erit in iis, beatus non erit. Videamus animi partes, quarum est conspectus illustrior; Aut, si esses Orestes, Pyladem refelleres, te indicares et, si id non probares, quo minus ambo una necaremini non precarere? Quod quidem nobis non saepe contingit. Ergo adhuc, quantum equidem intellego, causa non videtur fuisse mutandi nominis. Laelius clamores sofòw ille so lebat Edere compellans gumias ex ordine nostros. Pauca mutat vel plura sane;\@par}
+\create@par{Effluit igitur voluptas corporis et prima quaeque avolat saepiusque relinquit causam paenitendi quam recordandi. Hoc est vim afferre, Torquate, sensibus, extorquere ex animis cognitiones verborum, quibus inbuti sumus. Quid ei reliquisti, nisi te, quoquo modo loqueretur, intellegere, quid diceret? Itaque a sapientia praecipitur se ipsam, si usus sit, sapiens ut relinquat. Cum sciret confestim esse moriendum eamque mortem ardentiore studio peteret, quam Epicurus voluptatem petendam putat. At modo dixeras nihil in istis rebus esse, quod interesset. Sed virtutem ipsam inchoavit, nihil amplius. Quae si potest singula consolando levare, universa quo modo sustinebit? Utinam quidem dicerent alium alio beatiorem! Iam ruinas videres. Ergo hoc quidem apparet, nos ad agendum esse natos. Nec vero audiendus Hieronymus, cui summum bonum est idem, quod vos interdum vel potius nimium saepe dicitis, nihil dolere. Causa autem fuit huc veniendi ut quosdam hinc libros promerem.\@par}
+\create@par{Quem enim ardorem studii censetis fuisse in Archimede, qui dum in pulvere quaedam describit attentius, ne patriam quidem captam esse senserit? Atque ab his initiis profecti omnium virtutum et originem et progressionem persecuti sunt. Nam prius a se poterit quisque discedere quam appetitum earum rerum, quae sibi conducant, amittere. Num igitur dubium est, quin, si in re ipsa nihil peccatur a superioribus, verbis illi commodius utantur? Istic sum, inquit. Ut necesse sit omnium rerum, quae natura vigeant, similem esse finem, non eundem. Aristoteles, Xenocrates, tota illa familia non dabit, quippe qui valitudinem, vires, divitias, gloriam, multa alia bona esse dicant, laudabilia non dicant. Neque enim disputari sine reprehensione nec cum iracundia aut pertinacia recte disputari potest. Aliter enim nosmet ipsos nosse non possumus. Frater et T. Atqui perspicuum est hominem e corpore animoque constare, cum primae sint animi partes, secundae corporis.\@par}
+\create@par{Quid ergo aliud intellegetur nisi uti ne quae pars naturae neglegatur? Bonum appello quicquid secundurn naturam est, quod contra malum, nec ego solus, sed tu etiam, Chrysippe, in foro, domi; Et nunc quidem quod eam tuetur, ut de vite potissimum loquar, est id extrinsecus; Collatio igitur ista te nihil iuvat. Itaque dicunt nec dubitant: mihi sic usus est, tibi ut opus est facto, fac. Tu autem, si tibi illa probabantur, cur non propriis verbis ea tenebas? Propter nos enim illam, non propter eam nosmet ipsos diligimus. Qui est in parvis malis. Ergo infelix una molestia, fellx rursus, cum is ipse anulus in praecordiis piscis inventus est? Inde sermone vario sex illa a Dipylo stadia confecimus. Ita enim vivunt quidam, ut eorum vita refellatur oratio. Aeque enim contingit omnibus fidibus, ut incontentae sint. Vides igitur te aut ea sumere, quae non concedantur, aut ea, quae etiam concessa te nihil iuvent. Semper enim ex eo, quod maximas partes continet latissimeque funditur, tota res appellatur.\@par}
+\create@par{Aut haec tibi, Torquate, sunt vituperanda aut patrocinium voluptatis repudiandum. Atque etiam ad iustitiam colendam, ad tuendas amicitias et reliquas caritates quid natura valeat haec una cognitio potest tradere. Est igitur officium eius generis, quod nec in bonis ponatur nec in contrariis. Potius inflammat, ut coercendi magis quam dedocendi esse videantur. His similes sunt omnes, qui virtuti student levantur vitiis, levantur erroribus, nisi forte censes Ti. Ad quorum et cognitionem et usum iam corroborati natura ipsa praeeunte deducimur. Quid enim me prohiberet Epicureum esse, si probarem, quae ille diceret? Sed si duo honesta proposita sint, alterum cum valitudine, alterum cum morbo, non esse dubium, ad utrum eorum natura nos ipsa deductura sit. In parvis enim saepe, qui nihil eorum cogitant, si quando iis ludentes minamur praecipitaturos alicunde, extimescunt. Erit enim mecum, si tecum erit. Ab hoc autem quaedam non melius quam veteres, quaedam omnino relicta.\@par}
+\create@par{Et harum quidem rerum facilis est et expedita distinctio. Itaque a sapientia praecipitur se ipsam, si usus sit, sapiens ut relinquat. Idem iste, inquam, de voluptate quid sentit? Bonum appello quicquid secundurn naturam est, quod contra malum, nec ego solus, sed tu etiam, Chrysippe, in foro, domi; Quodsi vultum tibi, si incessum fingeres, quo gravior viderere, non esses tui similis; Omnes, qui non sint sapientes, aeque miseros esse, sapientes omnes summe beatos, recte facta omnia aequalia, omnia peccata paria; Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat. Quicquid enim a sapientia proficiscitur, id continuo debet expletum esse omnibus suis partibus; Antiquorum autem sententiam Antiochus noster mihi videtur persequi diligentissime, quam eandem Aristoteli fuisse et Polemonis docet. Nunc omni virtuti vitium contrario nomine opponitur.\@par}
+\create@par{Eorum enim est haec querela, qui sibi cari sunt seseque diligunt. Huic ego, si negaret quicquam interesse ad beate vivendum quali uteretur victu, concederem, laudarem etiam; Hic quoque suus est de summoque bono dissentiens dici vere Peripateticus non potest. Idem etiam dolorem saepe perpetiuntur, ne, si id non faciant, incidant in maiorem. Portenta haec esse dicit, neque ea ratione ullo modo posse vivi; Ita enim vivunt quidam, ut eorum vita refellatur oratio. Summum ením bonum exposuit vacuitatem doloris; Et quoniam haec deducuntur de corpore quid est cur non recte pulchritudo etiam ipsa propter se expetenda ducatur? Idem fecisset Epicurus, si sententiam hanc, quae nunc Hieronymi est, coniunxisset cum Aristippi vetere sententia. Atque adhuc ea dixi, causa cur Zenoni non fuisset, quam ob rem a superiorum auctoritate discederet. Istam voluptatem perpetuam quis potest praestare sapienti? Equidem soleo etiam quod uno Graeci, si aliter non possum, idem pluribus verbis exponere.\@par}
+\create@par{De malis autem et bonis ab iis animalibus, quae nondum depravata sint, ait optime iudicari. Itaque quantum adiit periculum! ad honestatem enim illum omnem conatum suum referebat, non ad voluptatem. Age, inquies, ista parva sunt. Nam prius a se poterit quisque discedere quam appetitum earum rerum, quae sibi conducant, amittere. Idemque diviserunt naturam hominis in animum et corpus. Ratio enim nostra consentit, pugnat oratio. Disserendi artem nullam habuit. Cur, nisi quod turpis oratio est? Sit enim idem caecus, debilis. Ut pompa, ludis atque eius modi spectaculis teneantur ob eamque rem vel famem et sitim perferant? In omni enim animante est summum aliquid atque optimum, ut in equis, in canibus, quibus tamen et dolore vacare opus est et valere; Sunt enim quasi prima elementa naturae, quibus ubertas orationis adhiberi vix potest, nec equidem eam cogito consectari. Facit igitur Lucius noster prudenter, qui audire de summo bono potissimum velit; Nemo nostrum istius generis asotos iucunde putat vivere.\@par}
+\create@par{Quae est igitur causa istarum angustiarum? Quid enim necesse est, tamquam meretricem in matronarum coetum, sic voluptatem in virtutum concilium adducere? Itaque homo in primis ingenuus et gravis, dignus illa familiaritate Scipionis et Laelii, Panaetius, cum ad Q. Ita fit cum gravior, tum etiam splendidior oratio. Universa enim illorum ratione cum tota vestra confligendum puto. Cupit enim dícere nihil posse ad beatam vitam deesse sapienti. Quae cum essent dicta, finem fecimus et ambulandi et disputandi. Suam denique cuique naturam esse ad vivendum ducem. Hosne igitur laudas et hanc eorum, inquam, sententiam sequi nos censes oportere? Rhetorice igitur, inquam, nos mavis quam dialectice disputare? Parvi enim primo ortu sic iacent, tamquam omnino sine animo sint. Si enim ad populum me vocas, eum. Sin autem est in ea, quod quidam volunt, nihil impedit hanc nostram comprehensionem summi boni. Venit enim mihi Platonis in mentem, quem accepimus primum hic disputare solitum;\@par}
+\create@par{Non enim ipsa genuit hominem, sed accepit a natura inchoatum. Hoc est non modo cor non habere, sed ne palatum quidem. Cuius etiam illi hortuli propinqui non memoriam solum mihi afferunt, sed ipsum videntur in conspectu meo ponere. Sed memento te, quae nos sentiamus, omnia probare, nisi quod verbis aliter utamur, mihi autem vestrorum nihil probari. Deinde disputat, quod cuiusque generis animantium statui deceat extremum. Ex eorum enim scriptis et institutis cum omnis doctrina liberalis, omnis historia. Hanc quoque iucunditatem, si vis, transfer in animum; Hoc enim constituto in philosophia constituta sunt omnia. Restincta enim sitis stabilitatem voluptatis habet, inquit, illa autem voluptas ipsius restinctionis in motu est. Facit enim ille duo seiuncta ultima bonorum, quae ut essent vera, coniungi debuerunt; Sic enim maiores nostri labores non fugiendos tristissimo tamen verbo aerumnas etiam in deo nominaverunt. Quis non odit sordidos, vanos, leves, futtiles?\@par}
+\create@par{Deinde qui fit, ut ego nesciam, sciant omnes, quicumque Epicurei esse voluerunt? Ut proverbia non nulla veriora sint quam vestra dogmata. Parvi enim primo ortu sic iacent, tamquam omnino sine animo sint. Nihil enim desiderabile concupiscunt, plusque in ipsa iniuria detrimenti est quam in iis rebus emolumenti, quae pariuntur iniuria. Et ille ridens: Video, inquit, quid agas; Itaque eos id agere, ut a se dolores, morbos, debilitates repellant. Legimus tamen Diogenem, Antipatrum, Mnesarchum, Panaetium, multos alios in primisque familiarem nostrum Posidonium. Ex ea difficultate illae fallaciloquae, ut ait Accius, malitiae natae sunt. Sin ea non neglegemus neque tamen ad finem summi boni referemus, non multum ab Erilli levitate aberrabimus. Neque solum ea communia, verum etiam paria esse dixerunt. An est aliquid, quod te sua sponte delectet? Sed haec ab Antiocho, familiari nostro, dicuntur multo melius et fortius, quam a Stasea dicebantur. Teneo, inquit, finem illi videri nihil dolere.\@par}
+\create@par{Ut scias me intellegere, primum idem esse dico voluptatem, quod ille don. Atqui iste locus est, Piso, tibi etiam atque etiam confirmandus, inquam; Portenta haec esse dicit, neque ea ratione ullo modo posse vivi; Ergo illi intellegunt quid Epicurus dicat, ego non intellego? Pudebit te, inquam, illius tabulae, quam Cleanthes sane commode verbis depingere solebat. Nam et ille apud Trabeam voluptatem animi nimiam laetitiam dicit eandem, quam ille Caecilianus, qui omnibus laetitiis laetum esse se narrat. Qua ex cognitione facilior facta est investigatio rerum occultissimarum. Quae quidem vel cum periculo est quaerenda vobis; O magnam vim ingenii causamque iustam, cur nova existeret disciplina! Perge porro. Amicitiae vero locus ubi esse potest aut quis amicus esse cuiquam, quem non ipsum amet propter ipsum? Nam, ut sint illa vendibiliora, haec uberiora certe sunt. Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es?\@par}
+\create@par{Quo minus animus a se ipse dissidens secumque discordans gustare partem ullam liquidae voluptatis et liberae potest. His singulis copiose responderi solet, sed quae perspicua sunt longa esse non debent. Cetera illa adhibebat, quibus demptis negat se Epicurus intellegere quid sit bonum. Nam Metrodorum non puto ipsum professum, sed, cum appellaretur ab Epicuro, repudiare tantum beneficium noluisse; Num igitur utiliorem tibi hunc Triarium putas esse posse, quam si tua sint Puteolis granaria? Illud urgueam, non intellegere eum quid sibi dicendum sit, cum dolorem summum malum esse dixerit. Illa videamus, quae a te de amicitia dicta sunt. Illud quaero, quid ei, qui in voluptate summum bonum ponat, consentaneum sit dicere. Sed quid minus probandum quam esse aliquem beatum nec satis beatum? Ergo adhuc, quantum equidem intellego, causa non videtur fuisse mutandi nominis. De malis autem et bonis ab iis animalibus, quae nondum depravata sint, ait optime iudicari.\@par}
+\create@par{Primum cur ista res digna odio est, nisi quod est turpis? Nihil enim arbitror esse magna laude dignum, quod te praetermissurum credam aut mortis aut doloris metu. Magni enim aestimabat pecuniam non modo non contra leges, sed etiam legibus partam. Hic, qui utrumque probat, ambobus debuit uti, sicut facit re, neque tamen dividit verbis. Praeterea et appetendi et refugiendi et omnino rerum gerendarum initia proficiscuntur aut a voluptate aut a dolore. Sed utrum hortandus es nobis, Luci, inquit, an etiam tua sponte propensus es? Immo sit sane nihil melius, inquam-nondum enim id quaero-, num propterea idem voluptas est, quod, ut ita dicam, indolentia? In qua quid est boni praeter summam voluptatem, et eam sempiternam? Magno hic ingenio, sed res se tamen sic habet, ut nimis imperiosi philosophi sit vetare meminisse. Summus dolor plures dies manere non potest? Quacumque enim ingredimur, in aliqua historia vestigium ponimus. Naturales divitias dixit parabiles esse, quod parvo esset natura contenta.\@par}
+\create@par{Quae contraria sunt his, malane? Audax negotium, dicerem impudens, nisi hoc institutum postea translatum ad philosophos nostros esset. Haec et tu ita posuisti, et verba vestra sunt. Duo enim genera quae erant, fecit tria. Aliis esse maiora, illud dubium, ad id, quod summum bonum dicitis, ecquaenam possit fieri accessio. Quoniamque in iis rebus, quae neque in virtutibus sunt neque in vitiis, est tamen quiddam, quod usui possit esse, tollendum id non est. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet, ut et voluptates repudiandae sint et molestiae non recusandae. Nec enim, dum metuit, iustus est, et certe, si metuere destiterit, non erit; Nec enim, omnes avaritias si aeque avaritias esse dixerimus, sequetur ut etiam aequas esse dicamus. Atqui, inquam, Cato, si istud optinueris, traducas me ad te totum licebit. Huic ego, si negaret quicquam interesse ad beate vivendum quali uteretur victu, concederem, laudarem etiam;\@par}
+\create@par{Quacumque enim ingredimur, in aliqua historia vestigium ponimus. Qui potest igitur habitare in beata vita summi mali metus? Sunt enim quasi prima elementa naturae, quibus ubertas orationis adhiberi vix potest, nec equidem eam cogito consectari. Sed id ne cogitari quidem potest quale sit, ut non repugnet ipsum sibi. Hoc est non modo cor non habere, sed ne palatum quidem. Sic, et quidem diligentius saepiusque ista loquemur inter nos agemusque communiter. De quibus etsi a Chrysippo maxime est elaboratum, tamen a Zenone minus multo quam ab antiquis; Ita relinquet duas, de quibus etiam atque etiam consideret. Illud mihi a te nimium festinanter dictum videtur, sapientis omnis esse semper beatos; Suo genere perveniant ad extremum; Quid, cum fictas fabulas, e quibus utilitas nulla elici potest, cum voluptate legimus? Estne, quaeso, inquam, sitienti in bibendo voluptas? Quid in isto egregio tuo officio et tanta fide-sic enim existimo-ad corpus refers? Quod quidem iam fit etiam in Academia.\@par}
+\create@par{Idemque diviserunt naturam hominis in animum et corpus. In omni enim arte vel studio vel quavis scientia vel in ipsa virtute optimum quidque rarissimum est. Non dolere, inquam, istud quam vim habeat postea videro; An id exploratum cuiquam potest esse, quo modo se hoc habiturum sit corpus, non dico ad annum, sed ad vesperum? Estne, quaeso, inquam, sitienti in bibendo voluptas? Ut pompa, ludis atque eius modi spectaculis teneantur ob eamque rem vel famem et sitim perferant? Inquit, respondet: Quia, nisi quod honestum est, nullum est aliud bonum! Non quaero iam verumne sit; Oculorum, inquit Plato, est in nobis sensus acerrimus, quibus sapientiam non cernimus. Iam quae corporis sunt, ea nec auctoritatem cum animi partibus, comparandam et cognitionem habent faciliorem. Quamquam id quidem, infinitum est in hac urbe; Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Quod cum ita sit, perspicuum est omnis rectas res atque laudabilis eo referri, ut cum voluptate vivatur.\@par}
+\create@par{Multa sunt dicta ab antiquis de contemnendis ac despiciendis rebus humanis; Eorum enim omnium multa praetermittentium, dum eligant aliquid, quod sequantur, quasi curta sententia; Res enim fortasse verae, certe graves, non ita tractantur, ut debent, sed aliquanto minutius. At modo dixeras nihil in istis rebus esse, quod interesset. Atqui reperies, inquit, in hoc quidem pertinacem; Fadio Gallo, cuius in testamento scriptum esset se ab eo rogatum ut omnis hereditas ad filiam perveniret. Habes, inquam, Cato, formam eorum, de quibus loquor, philosophorum. Mihi enim erit isdem istis fortasse iam utendum. Non quam nostram quidem, inquit Pomponius iocans; Nunc dicam de voluptate, nihil scilicet novi, ea tamen, quae te ipsum probaturum esse confidam. Nec vero audiendus Hieronymus, cui summum bonum est idem, quod vos interdum vel potius nimium saepe dicitis, nihil dolere. Est igitur officium eius generis, quod nec in bonis ponatur nec in contrariis.\@par}
+\create@par{Certe, nisi voluptatem tanti aestimaretis. Non risu potius quam oratione eiciendum? Quis est autem dignus nomine hominis, qui unum diem totum velit esse in genere isto voluptatis? Quem quidem vos, cum improbis poenam proponitis, inpetibilem facitis, cum sapientem semper boni plus habere vultis, tolerabilem. Itaque hic ipse iam pridem est reiectus; Atque hoc loco similitudines eas, quibus illi uti solent, dissimillimas proferebas. Commoda autem et incommoda in eo genere sunt, quae praeposita et reiecta diximus; Negare non possum. Atqui pugnantibus et contrariis studiis consiliisque semper utens nihil quieti videre, nihil tranquilli potest. Nec enim, dum metuit, iustus est, et certe, si metuere destiterit, non erit; Quasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit. Sit hoc ultimum bonorum, quod nunc a me defenditur; Quis enim redargueret? Nec enim ignoras his istud honestum non summum modo, sed etiam, ut tu vis, solum bonum videri.\@par}
+\create@par{Quae fere omnia appellantur uno ingenii nomine, easque virtutes qui habent, ingeniosi vocantur. Utrum enim sit voluptas in iis rebus, quas primas secundum naturam esse diximus, necne sit ad id, quod agimus, nihil interest. Negat enim tenuissimo victu, id est contemptissimis escis et potionibus, minorem voluptatem percipi quam rebus exquisitissimis ad epulandum. Aliis esse maiora, illud dubium, ad id, quod summum bonum dicitis, ecquaenam possit fieri accessio. Fadio Gallo, cuius in testamento scriptum esset se ab eo rogatum ut omnis hereditas ad filiam perveniret. Incommoda autem et commoda-ita enim estmata et dustmata appello-communia esse voluerunt, paria noluerunt. Princeps huius civitatis Phalereus Demetrius cum patria pulsus esset iniuria, ad Ptolomaeum se regem Alexandream contulit. Quodsi ipsam honestatem undique pertectam atque absolutam. Nam, ut sint illa vendibiliora, haec uberiora certe sunt. Quo modo autem philosophus loquitur? Non enim ipsa genuit hominem, sed accepit a natura inchoatum.\@par}
+\create@par{Stoici autem, quod finem bonorum in una virtute ponunt, similes sunt illorum; Erat enim Polemonis. Ut optime, secundum naturam affectum esse possit. Negat esse eam, inquit, propter se expetendam. Beatus autem esse in maximarum rerum timore nemo potest. Idem iste, inquam, de voluptate quid sentit? Non est ista, inquam, Piso, magna dissensio.\@par}
+\create@par{Non ergo Epicurus ineruditus, sed ii indocti, qui, quae pueros non didicisse turpe est, ea putant usque ad senectutem esse discenda. Hoc ille tuus non vult omnibusque ex rebus voluptatem quasi mercedem exigit. Etsi ea quidem, quae adhuc dixisti, quamvis ad aetatem recte isto modo dicerentur. Nemo nostrum istius generis asotos iucunde putat vivere.\@par}
+\create@par{Quorum sine causa fieri nihil putandum est. A primo, ut opinor, animantium ortu petitur origo summi boni. Ita enim vivunt quidam, ut eorum vita refellatur oratio. Eam tum adesse, cum dolor omnis absit; Verba tu fingas et ea dicas, quae non sentias? His singulis copiose responderi solet, sed quae perspicua sunt longa esse non debent.\@par}
+\create@par{Est tamen ea secundum naturam multoque nos ad se expetendam magis hortatur quam superiora omnia. Iubet igitur nos Pythius Apollo noscere nosmet ipsos. Tuo vero id quidem, inquam, arbitratu. Haec quo modo conveniant, non sane intellego. Cur fortior sit, si illud, quod tute concedis, asperum et vix ferendum putabit? Sullae consulatum?\@par}
+\create@par{Diodorus, eius auditor, adiungit ad honestatem vacuitatem doloris. Mihi quidem Antiochum, quem audis, satis belle videris attendere. Conferam tecum, quam cuique verso rem subicias; Sed quot homines, tot sententiae; Videamus animi partes, quarum est conspectus illustrior; An me, inquam, nisi te audire vellem, censes haec dicturum fuisse?\@par}
+\create@par{Non est ista, inquam, Piso, magna dissensio. Faceres tu quidem, Torquate, haec omnia; Quae fere omnia appellantur uno ingenii nomine, easque virtutes qui habent, ingeniosi vocantur. Hunc vos beatum; Virtutibus igitur rectissime mihi videris et ad consuetudinem nostrae orationis vitia posuisse contraria. Tu vero, inquam, ducas licet, si sequetur;\@par}
+\create@par{Tecum optime, deinde etiam cum mediocri amico. Perge porro; Nam, ut sint illa vendibiliora, haec uberiora certe sunt. Equidem etiam Epicurum, in physicis quidem, Democriteum puto. Dolere malum est: in crucem qui agitur, beatus esse non potest. At ille pellit, qui permulcet sensum voluptate. Nihil opus est exemplis hoc facere longius.\@par}
+\create@par{Quae autem natura suae primae institutionis oblita est? Ita fit cum gravior, tum etiam splendidior oratio. Non autem hoc: igitur ne illud quidem. Eaedem res maneant alio modo. Videamus animi partes, quarum est conspectus illustrior; Qui-vere falsone, quaerere mittimus-dicitur oculis se privasse; Animum autem reliquis rebus ita perfecit, ut corpus;\@par}
+\create@par{Ut id aliis narrare gestiant? Traditur, inquit, ab Epicuro ratio neglegendi doloris. Sin aliud quid voles, postea. Nunc vides, quid faciat. Nunc ita separantur, ut disiuncta sint, quo nihil potest esse perversius. Quantum Aristoxeni ingenium consumptum videmus in musicis? Itaque sensibus rationem adiunxit et ratione effecta sensus non reliquit.\@par}
+\create@par{Traditur, inquit, ab Epicuro ratio neglegendi doloris. Paupertas si malum est, mendicus beatus esse nemo potest, quamvis sit sapiens. Nunc haec primum fortasse audientis servire debemus. Omnia contraria, quos etiam insanos esse vultis. Quid ergo hoc loco intellegit honestum? In qua si nihil est praeter rationem, sit in una virtute finis bonorum;\@par}
+\create@par{Ea possunt paria non esse. Haec dicuntur inconstantissime. Huius, Lyco, oratione locuples, rebus ipsis ielunior. Sed quia studebat laudi et dignitati, multum in virtute processerat. Nec vero intermittunt aut admirationem earum rerum, quae sunt ab antiquis repertae, aut investigationem novarum. Sed tu istuc dixti bene Latine, parum plane.\@par}
+\create@par{Non igitur potestis voluptate omnia dirigentes aut tueri aut retinere virtutem. Nec lapathi suavitatem acupenseri Galloni Laelius anteponebat, sed suavitatem ipsam neglegebat; Gerendus est mos, modo recte sentiat. Quod cum dixissent, ille contra. Quamquam id quidem, infinitum est in hac urbe; Ut non sine causa ex iis memoriae ducta sit disciplina.\@par}
+\create@par{Id Sextilius factum negabat. Quid, quod res alia tota est? Qui enim existimabit posse se miserum esse beatus non erit. Ita relinquet duas, de quibus etiam atque etiam consideret. Atqui eorum nihil est eius generis, ut sit in fine atque extrerno bonorum. Certe non potest. Maximas vero virtutes iacere omnis necesse est voluptate dominante.\@par}
+\create@par{In qua quid est boni praeter summam voluptatem, et eam sempiternam? Aliena dixit in physicis nec ea ipsa, quae tibi probarentur; Quippe: habes enim a rhetoribus; Invidiosum nomen est, infame, suspectum. Eadem nunc mea adversum te oratio est. Sed haec ab Antiocho, familiari nostro, dicuntur multo melius et fortius, quam a Stasea dicebantur.\@par}
+\create@par{Ego vero volo in virtute vim esse quam maximam; Aliena dixit in physicis nec ea ipsa, quae tibi probarentur; Quaesita enim virtus est, non quae relinqueret naturam, sed quae tueretur. Polycratem Samium felicem appellabant. Vide igitur ne non debeas verbis nostris uti, sententiis tuis. Quae similitudo in genere etiam humano apparet.\@par}
+\create@par{Ut nemo dubitet, eorum omnia officia quo spectare, quid sequi, quid fugere debeant? Itaque illa non dico me expetere, sed legere, nec optare, sed sumere, contraria autem non fugere, sed quasi secernere. Ac tamen hic mallet non dolere. Hoc loco tenere se Triarius non potuit. Quid iudicant sensus? Ergo hoc quidem apparet, nos ad agendum esse natos.\@par}
+\create@par{Nondum autem explanatum satis, erat, quid maxime natura vellet. Ita redarguitur ipse a sese, convincunturque scripta eius probitate ipsius ac moribus. Cenasti in vita numquam bene, cum omnia in ista Consumis squilla atque acupensere cum decimano. Nam et a te perfici istam disputationem volo, nec tua mihi oratio longa videri potest.\@par}
+\create@par{Cave putes quicquam esse verius. Quos nisi redarguimus, omnis virtus, omne decus, omnis vera laus deserenda est. Dicimus aliquem hilare vivere; Nos commodius agimus. Dici enim nihil potest verius. Et ille ridens: Video, inquit, quid agas; Eam tum adesse, cum dolor omnis absit; Ut id aliis narrare gestiant? Tibi hoc incredibile, quod beatissimum.\@par}
+\create@par{Igitur ne dolorem quidem. Sed quod proximum fuit non vidit. Itaque primos congressus copulationesque et consuetudinum instituendarum voluntates fieri propter voluptatem; Quid igitur dubitamus in tota eius natura quaerere quid sit effectum? Ita enim vivunt quidam, ut eorum vita refellatur oratio. Hoc Hieronymus summum bonum esse dixit.\@par}
+\create@par{Collige omnia, quae soletis: Praesidium amicorum. Gerendus est mos, modo recte sentiat. In schola desinis. Est enim effectrix multarum et magnarum voluptatum. Beatus autem esse in maximarum rerum timore nemo potest. Obsecro, inquit, Torquate, haec dicit Epicurus? Laboro autem non sine causa; Quae cum dixisset paulumque institisset, Quid est?\@par}
+\create@par{Deinde prima illa, quae in congressu solemus: Quid tu, inquit, huc? Quid ergo hoc loco intellegit honestum? Sed quia studebat laudi et dignitati, multum in virtute processerat. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant. At cum de plurimis eadem dicit, tum certe de maximis. Prodest, inquit, mihi eo esse animo.\@par}
+\create@par{Ita multa dicunt, quae vix intellegam. Est enim effectrix multarum et magnarum voluptatum. At iam decimum annum in spelunca iacet. Omnes enim iucundum motum, quo sensus hilaretur. Bonum negas esse divitias, praeposìtum esse dicis? Cur iustitia laudatur? Quamquam id quidem, infinitum est in hac urbe; Hoc loco tenere se Triarius non potuit.\@par}
+\create@par{Nullus est igitur cuiusquam dies natalis. Qui-vere falsone, quaerere mittimus-dicitur oculis se privasse; Sed quae tandem ista ratio est? Quis suae urbis conservatorem Codrum, quis Erechthei filias non maxime laudat? Nam adhuc, meo fortasse vitio, quid ego quaeram non perspicis. Videamus animi partes, quarum est conspectus illustrior;\@par}
+\create@par{Quid enim tanto opus est instrumento in optimis artibus comparandis? Videmus igitur ut conquiescere ne infantes quidem possint. Sed quanta sit alias, nunc tantum possitne esse tanta. Qualem igitur hominem natura inchoavit? Si alia sentit, inquam, alia loquitur, numquam intellegam quid sentiat; Cur id non ita fit? Ego vero isti, inquam, permitto.\@par}
+\create@par{Sed quanta sit alias, nunc tantum possitne esse tanta. Quod non faceret, si in voluptate summum bonum poneret. Restinguet citius, si ardentem acceperit. Sin dicit obscurari quaedam nec apparere, quia valde parva sint, nos quoque concedimus; An eiusdem modi? Non est igitur summum malum dolor. Ita graviter et severe voluptatem secrevit a bono.\@par}
+\create@par{Idem iste, inquam, de voluptate quid sentit? Qui ita affectus, beatum esse numquam probabis; Miserum hominem! Si dolor summum malum est, dici aliter non potest. Quae similitudo in genere etiam humano apparet. Ita graviter et severe voluptatem secrevit a bono. Quod totum contra est. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant.\@par}
+\create@par{Hoc est non dividere, sed frangere. Similiter sensus, cum accessit ad naturam, tuetur illam quidem, sed etiam se tuetur; Hoc est dicere: Non reprehenderem asotos, si non essent asoti. Et si in ipsa gubernatione neglegentia est navis eversa, maius est peccatum in auro quam in palea. Quae in controversiam veniunt, de iis, si placet, disseramus.\@par}
+\create@par{Quantum Aristoxeni ingenium consumptum videmus in musicis? Gloriosa ostentatio in constituendo summo bono. Quamquam te quidem video minime esse deterritum. Est autem officium, quod ita factum est, ut eius facti probabilis ratio reddi possit. Cum id fugiunt, re eadem defendunt, quae Peripatetici, verba. Quid est enim aliud esse versutum?\@par}
+\create@par{Num igitur eum postea censes anxio animo aut sollicito fuisse? Virtutibus igitur rectissime mihi videris et ad consuetudinem nostrae orationis vitia posuisse contraria. Non est igitur summum malum dolor. Huius, Lyco, oratione locuples, rebus ipsis ielunior. Duae sunt enim res quoque, ne tu verba solum putes. Primum divisit ineleganter;\@par}
+\create@par{Beatus autem esse in maximarum rerum timore nemo potest. Expressa vero in iis aetatibus, quae iam confirmatae sunt. Igitur neque stultorum quisquam beatus neque sapientium non beatus. Ut optime, secundum naturam affectum esse possit. Honesta oratio, Socratica, Platonis etiam. Aliter homines, aliter philosophos loqui putas oportere?\@par}
+\create@par{Heri, inquam, ludis commissis ex urbe profectus veni ad vesperum. In eo autem voluptas omnium Latine loquentium more ponitur, cum percipitur ea, quae sensum aliquem moveat, iucunditas. Addo etiam illud, multa iam mihi dare signa puerum et pudoris et ingenii, sed aetatem vides. At tu eadem ista dic in iudicio aut, si coronam times, dic in senatu.\@par}
+\create@par{Esse enim quam vellet iniquus iustus poterat inpune. Quid ergo? Sed erat aequius Triarium aliquid de dissensione nostra iudicare. Iam in altera philosophiae parte. Quod autem ratione actum est, id officium appellamus. Cur id non ita fit? Quae in controversiam veniunt, de iis, si placet, disseramus. Qualem igitur hominem natura inchoavit?\@par}
+\create@par{Non igitur potestis voluptate omnia dirigentes aut tueri aut retinere virtutem. Age nunc isti doceant, vel tu potius quis enim ista melius? Indicant pueri, in quibus ut in speculis natura cernitur. Quod autem satis est, eo quicquid accessit, nimium est; Hoc mihi cum tuo fratre convenit. Bonum negas esse divitias, praeposìtum esse dicis?\@par}
+\create@par{Consequentia exquirere, quoad sit id, quod volumus, effectum. Quae cum dixisset paulumque institisset, Quid est? Mihi vero, inquit, placet agi subtilius et, ut ipse dixisti, pressius. Sed potestne rerum maior esse dissensio? At iam decimum annum in spelunca iacet. Atque hoc loco similitudines eas, quibus illi uti solent, dissimillimas proferebas.\@par}
+\create@par{Sit sane ista voluptas. Expressa vero in iis aetatibus, quae iam confirmatae sunt. Haec bene dicuntur, nec ego repugno, sed inter sese ipsa pugnant. Tum Quintus: Est plane, Piso, ut dicis, inquit. Rhetorice igitur, inquam, nos mavis quam dialectice disputare? Ergo adhuc, quantum equidem intellego, causa non videtur fuisse mutandi nominis.\@par}
+\create@par{Teneo, inquit, finem illi videri nihil dolere. Satisne vobis videor pro meo iure in vestris auribus commentatus? Non semper, inquam; Beatus sibi videtur esse moriens. Minime vero, inquit ille, consentit. Poterat autem inpune; Illum mallem levares, quo optimum atque humanissimum virum, Cn. De vacuitate doloris eadem sententia erit.\@par}
+\create@par{An eum discere ea mavis, quae cum plane perdidiceriti nihil sciat? Neque enim civitas in seditione beata esse potest nec in discordia dominorum domus; Quid turpius quam sapientis vitam ex insipientium sermone pendere? Esse enim, nisi eris, non potes. Ait enim se, si uratur, Quam hoc suave! dicturum. Inde igitur, inquit, ordiendum est. Quo modo?\@par}
+\create@par{Nam et complectitur verbis, quod vult, et dicit plane, quod intellegam; Quid ergo aliud intellegetur nisi uti ne quae pars naturae neglegatur? Atque haec coniunctio confusioque virtutum tamen a philosophis ratione quadam distinguitur. Num igitur dubium est, quin, si in re ipsa nihil peccatur a superioribus, verbis illi commodius utantur?\@par}
+\create@par{Hoc est non dividere, sed frangere. Summae mihi videtur inscitiae. Graccho, eius fere, aequalí? Mihi enim satis est, ipsis non satis. Illud quaero, quid ei, qui in voluptate summum bonum ponat, consentaneum sit dicere. Bonum integritas corporis: misera debilitas. Sed ad bona praeterita redeamus. Nobis aliter videtur, recte secusne, postea;\@par}
+\create@par{Potius inflammat, ut coercendi magis quam dedocendi esse videantur. Frater et T. Non quaeritur autem quid naturae tuae consentaneum sit, sed quid disciplinae. Haec dicuntur inconstantissime. Is ita vivebat, ut nulla tam exquisita posset inveniri voluptas, qua non abundaret. Diodorus, eius auditor, adiungit ad honestatem vacuitatem doloris.\@par}
+\create@par{Quae quidem vel cum periculo est quaerenda vobis; Hoc loco tenere se Triarius non potuit. Virtutis, magnitudinis animi, patientiae, fortitudinis fomentis dolor mitigari solet. Maximas vero virtutes iacere omnis necesse est voluptate dominante. Omnia peccata paria dicitis. Miserum hominem! Si dolor summum malum est, dici aliter non potest.\@par}
+\create@par{Ne in odium veniam, si amicum destitero tueri. Sed quanta sit alias, nunc tantum possitne esse tanta. Hanc ergo intuens debet institutum illud quasi signum absolvere. Mihi enim erit isdem istis fortasse iam utendum. Quo plebiscito decreta a senatu est consuli quaestio Cn. Qui autem de summo bono dissentit de tota philosophiae ratione dissentit.\@par}
+\create@par{Quae cum dixisset, finem ille. Adsint etiam formosi pueri, qui ministrent, respondeat his vestis, argentum, Corinthium, locus ipse, aedificium-hos ergo asotos bene quidem vivere aut beate numquam dixerim. Quia dolori non voluptas contraria est, sed doloris privatio. Quasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit.\@par}
+\create@par{Cetera illa adhibebat, quibus demptis negat se Epicurus intellegere quid sit bonum. De hominibus dici non necesse est. Duarum enim vitarum nobis erunt instituta capienda. Color egregius, integra valitudo, summa gratia, vita denique conferta voluptatum omnium varietate. Ego vero volo in virtute vim esse quam maximam; Sed quae tandem ista ratio est?\@par}
+\create@par{Illa argumenta propria videamus, cur omnia sint paria peccata. Dic in quovis conventu te omnia facere, ne doleas. Innumerabilia dici possunt in hanc sententiam, sed non necesse est. Non enim iam stirpis bonum quaeret, sed animalis. Tum mihi Piso: Quid ergo? Audio equidem philosophi vocem, Epicure, sed quid tibi dicendum sit oblitus es.\@par}
+\create@par{Apud ceteros autem philosophos, qui quaesivit aliquid, tacet; Traditur, inquit, ab Epicuro ratio neglegendi doloris. Bona autem corporis huic sunt, quod posterius posui, similiora. Apud ceteros autem philosophos, qui quaesivit aliquid, tacet; Contineo me ab exemplis. Si quidem, inquit, tollerem, sed relinquo. Eam tum adesse, cum dolor omnis absit;\@par}
+\create@par{Zenonis est, inquam, hoc Stoici. At enim sequor utilitatem. Nunc agendum est subtilius. Illum mallem levares, quo optimum atque humanissimum virum, Cn. Teneo, inquit, finem illi videri nihil dolere. Sed haec quidem liberius ab eo dicuntur et saepius. Disserendi artem nullam habuit. Sed ad haec, nisi molestum est, habeo quae velim.\@par}
+\create@par{Quamquam tu hanc copiosiorem etiam soles dicere. Quod quidem iam fit etiam in Academia. Non igitur bene. Hoc est non dividere, sed frangere. Non ego tecum iam ita iocabor, ut isdem his de rebus, cum L. Cave putes quicquam esse verius. Atque haec ita iustitiae propria sunt, ut sint virtutum reliquarum communia. Quare ad ea primum, si videtur;\@par}
+\create@par{Sin aliud quid voles, postea. Quasi vero, inquit, perpetua oratio rhetorum solum, non etiam philosophorum sit. Odium autem et invidiam facile vitabis. Si longus, levis. Varietates autem iniurasque fortunae facile veteres philosophorum praeceptis instituta vita superabat. Quae animi affectio suum cuique tribuens atque hanc, quam dico.\@par}
+\create@par{Rationis enim perfectio est virtus; Istam voluptatem perpetuam quis potest praestare sapienti? Non est ista, inquam, Piso, magna dissensio. Sed quid minus probandum quam esse aliquem beatum nec satis beatum? Ab hoc autem quaedam non melius quam veteres, quaedam omnino relicta. Cur id non ita fit? Quamquam id quidem, infinitum est in hac urbe;\@par}
+\create@par{Igitur neque stultorum quisquam beatus neque sapientium non beatus. Quid de Platone aut de Democrito loquar? Scisse enim te quis coarguere possit? Mihi enim satis est, ipsis non satis. Sed quot homines, tot sententiae; Sic, et quidem diligentius saepiusque ista loquemur inter nos agemusque communiter. Inde igitur, inquit, ordiendum est.\@par}
+\create@par{Itaque contra est, ac dicitis; Est enim effectrix multarum et magnarum voluptatum. Huius, Lyco, oratione locuples, rebus ipsis ielunior. Serpere anguiculos, nare anaticulas, evolare merulas, cornibus uti videmus boves, nepas aculeis. Nunc ita separantur, ut disiuncta sint, quo nihil potest esse perversius. Itaque hic ipse iam pridem est reiectus;\@par}
+\create@par{Quamquam id quidem, infinitum est in hac urbe; At multis se probavit. Septem autem illi non suo, sed populorum suffragio omnium nominati sunt. Ergo hoc quidem apparet, nos ad agendum esse natos. Sint modo partes vitae beatae. Hoc non est positum in nostra actione. Quis animo aequo videt eum, quem inpure ac flagitiose putet vivere?\@par}
+\create@par{Quis non odit sordidos, vanos, leves, futtiles? Aliter enim explicari, quod quaeritur, non potest. Consequens enim est et post oritur, ut dixi. His singulis copiose responderi solet, sed quae perspicua sunt longa esse non debent. Sed tempus est, si videtur, et recta quidem ad me. Hoc dixerit potius Ennius: Nimium boni est, cui nihil est mali.\@par}
+\create@par{Quae quo sunt excelsiores, eo dant clariora indicia naturae. Non est igitur summum malum dolor. Quid ad utilitatem tantae pecuniae? Quae cum dixisset, finem ille. Suo genere perveniant ad extremum; At eum nihili facit; Nihil minus, contraque illa hereditate dives ob eamque rem laetus. Quantum Aristoxeni ingenium consumptum videmus in musicis?\@par}
+\create@par{Tria genera cupiditatum, naturales et necessariae, naturales et non necessariae, nec naturales nec necessariae. Ita ceterorum sententiis semotis relinquitur non mihi cum Torquato, sed virtuti cum voluptate certatio. Sed quia studebat laudi et dignitati, multum in virtute processerat. Iubet igitur nos Pythius Apollo noscere nosmet ipsos.\@par}
+\create@par{Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Etenim semper illud extra est, quod arte comprehenditur. Cum id fugiunt, re eadem defendunt, quae Peripatetici, verba. Fortemne possumus dicere eundem illum Torquatum? Et ille ridens: Video, inquit, quid agas; Cupiditates non Epicuri divisione finiebat, sed sua satietate.\@par}
+\create@par{In schola desinis. Isto modo ne improbos quidem, si essent boni viri. Deinde dolorem quem maximum? Et quod est munus, quod opus sapientiae? Cur igitur easdem res, inquam, Peripateticis dicentibus verbum nullum est, quod non intellegatur? Hic ambiguo ludimur. Eam si varietatem diceres, intellegerem, ut etiam non dicente te intellego;\@par}
+\create@par{Itaque in rebus minime obscuris non multus est apud eos disserendi labor. Itaque si aut requietem natura non quaereret aut eam posset alia quadam ratione consequi. Dici enim nihil potest verius. Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Est enim effectrix multarum et magnarum voluptatum. Tum mihi Piso: Quid ergo?\@par}
+\create@par{Sed quot homines, tot sententiae; Qui ita affectus, beatum esse numquam probabis; Itaque dicunt nec dubitant: mihi sic usus est, tibi ut opus est facto, fac. Praeclare hoc quidem. Philosophi autem in suis lectulis plerumque moriuntur. Quare conare, quaeso. Oculorum, inquit Plato, est in nobis sensus acerrimus, quibus sapientiam non cernimus.\@par}
+\create@par{Non laboro, inquit, de nomine. Ac tamen hic mallet non dolere. Equidem etiam Epicurum, in physicis quidem, Democriteum puto. Iam id ipsum absurdum, maximum malum neglegi. Et quidem, inquit, vehementer errat; Et non ex maxima parte de tota iudicabis? Quamquam id quidem licebit iis existimare, qui legerint. Tum Torquatus: Prorsus, inquit, assentior;\@par}
+\create@par{Ergo ita: non posse honeste vivi, nisi honeste vivatur? In eo enim positum est id, quod dicimus esse expetendum. Age, inquies, ista parva sunt. Piso, familiaris noster, et alia multa et hoc loco Stoicos irridebat: Quid enim? Cum autem in quo sapienter dicimus, id a primo rectissime dicitur. Quamquam tu hanc copiosiorem etiam soles dicere.\@par}
+\create@par{Cum id quoque, ut cupiebat, audivisset, evelli iussit eam, qua erat transfixus, hastam. Hinc ceteri particulas arripere conati suam quisque videro voluit afferre sententiam. Urgent tamen et nihil remittunt. Quo tandem modo? Si longus, levis. Sed tempus est, si videtur, et recta quidem ad me. Aliter enim explicari, quod quaeritur, non potest.\@par}
+\create@par{Sin aliud quid voles, postea. Ego vero volo in virtute vim esse quam maximam; Expressa vero in iis aetatibus, quae iam confirmatae sunt. Laelius clamores sofòw ille so lebat Edere compellans gumias ex ordine nostros. Negare non possum. Refert tamen, quo modo. Immo alio genere; Quicquid porro animo cernimus, id omne oritur a sensibus;\@par}
+\create@par{Sin autem ad animum, falsum est, quod negas animi ullum esse gaudium, quod non referatur ad corpus. Cur tantas regiones barbarorum pedibus obiit, tot maria transmisit? Res enim fortasse verae, certe graves, non ita tractantur, ut debent, sed aliquanto minutius. Semper enim ita adsumit aliquid, ut ea, quae prima dederit, non deserat.\@par}
+\create@par{At certe gravius. Conferam tecum, quam cuique verso rem subicias; Quamquam in hac divisione rem ipsam prorsus probo, elegantiam desidero. Efficiens dici potest. Nec enim, dum metuit, iustus est, et certe, si metuere destiterit, non erit; Nonne igitur tibi videntur, inquit, mala? Sed quid attinet de rebus tam apertis plura requirere?\@par}
+\create@par{Stoici autem, quod finem bonorum in una virtute ponunt, similes sunt illorum; Ille incendat? Hoc loco tenere se Triarius non potuit. Nemo nostrum istius generis asotos iucunde putat vivere. Hoc dixerit potius Ennius: Nimium boni est, cui nihil est mali. Scrupulum, inquam, abeunti; Nihil minus, contraque illa hereditate dives ob eamque rem laetus.\@par}
+\create@par{Huic ego, si negaret quicquam interesse ad beate vivendum quali uteretur victu, concederem, laudarem etiam; Virtutis, magnitudinis animi, patientiae, fortitudinis fomentis dolor mitigari solet. Esse enim, nisi eris, non potes. Consequens enim est et post oritur, ut dixi. Luxuriam non reprehendit, modo sit vacua infinita cupiditate et timore.\@par}
+\create@par{An tu me de L. Suo genere perveniant ad extremum; Bestiarum vero nullum iudicium puto. Hoc sic expositum dissimile est superiori. Nam memini etiam quae nolo, oblivisci non possum quae volo. Certe, nisi voluptatem tanti aestimaretis. Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Age, inquies, ista parva sunt.\@par}
+\create@par{Qua tu etiam inprudens utebare non numquam. Vidit Homerus probari fabulam non posse, si cantiunculis tantus irretitus vir teneretur; Utilitatis causa amicitia est quaesita. An hoc usque quaque, aliter in vita? Confecta res esset. Si enim ita est, vide ne facinus facias, cum mori suadeas. Ut in geometria, prima si dederis, danda sunt omnia.\@par}
+\create@par{Si enim ad populum me vocas, eum. Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Tamen a proposito, inquam, aberramus. Non dolere, inquam, istud quam vim habeat postea videro; Nam si propter voluptatem, quae est ista laus, quae possit e macello peti? Ergo hoc quidem apparet, nos ad agendum esse natos. A mene tu?\@par}
+\create@par{Ut necesse sit omnium rerum, quae natura vigeant, similem esse finem, non eundem. Nam adhuc, meo fortasse vitio, quid ego quaeram non perspicis. Primum cur ista res digna odio est, nisi quod est turpis? Quae cum ita sint, effectum est nihil esse malum, quod turpe non sit. Id mihi magnum videtur. Prioris generis est docilitas, memoria;\@par}
+\create@par{Eadem nunc mea adversum te oratio est. Fortemne possumus dicere eundem illum Torquatum? Ergo id est convenienter naturae vivere, a natura discedere. Fortitudinis quaedam praecepta sunt ac paene leges, quae effeminari virum vetant in dolore. Non laboro, inquit, de nomine. Nihil opus est exemplis hoc facere longius. Hic nihil fuit, quod quaereremus.\@par}
+\create@par{Tu vero, inquam, ducas licet, si sequetur; Sint modo partes vitae beatae. Ego vero isti, inquam, permitto. Quid, cum fictas fabulas, e quibus utilitas nulla elici potest, cum voluptate legimus? Addo etiam illud, multa iam mihi dare signa puerum et pudoris et ingenii, sed aetatem vides. Haec et tu ita posuisti, et verba vestra sunt.\@par}
+\create@par{Claudii libidini, qui tum erat summo ne imperio, dederetur. Quid ergo attinet dicere: Nihil haberem, quod reprehenderem, si finitas cupiditates haberent? Verum hoc idem saepe faciamus. Re mihi non aeque satisfacit, et quidem locis pluribus. Sed ad haec, nisi molestum est, habeo quae velim. Tecum optime, deinde etiam cum mediocri amico.\@par}
+\create@par{Num igitur dubium est, quin, si in re ipsa nihil peccatur a superioribus, verbis illi commodius utantur? Te enim iudicem aequum puto, modo quae dicat ille bene noris. Egone non intellego, quid sit don Graece, Latine voluptas? Tria genera bonorum; Ut in geometria, prima si dederis, danda sunt omnia. Quae contraria sunt his, malane?\@par}
+\create@par{Vidit Homerus probari fabulam non posse, si cantiunculis tantus irretitus vir teneretur; Fortasse id optimum, sed ubi illud: Plus semper voluptatis? Illud non continuo, ut aeque incontentae. Tum Piso: Quoniam igitur aliquid omnes, quid Lucius noster? Quod autem principium officii quaerunt, melius quam Pyrrho; Que Manilium, ab iisque M.\@par}
+\create@par{Et quod est munus, quod opus sapientiae? Quid turpius quam sapientis vitam ex insipientium sermone pendere? Quo studio Aristophanem putamus aetatem in litteris duxisse? Serpere anguiculos, nare anaticulas, evolare merulas, cornibus uti videmus boves, nepas aculeis. An nisi populari fama? Fortemne possumus dicere eundem illum Torquatum?\@par}
+\create@par{Qui autem diffidet perpetuitati bonorum suorum, timeat necesse est, ne aliquando amissis illis sit miser. Polemoni et iam ante Aristoteli ea prima visa sunt, quae paulo ante dixi. Conclusum est enim contra Cyrenaicos satis acute, nihil ad Epicurum. Sin dicit obscurari quaedam nec apparere, quia valde parva sint, nos quoque concedimus;\@par}
+\create@par{Negat enim summo bono afferre incrementum diem. Sed quid attinet de rebus tam apertis plura requirere? Sin aliud quid voles, postea. Non dolere, inquam, istud quam vim habeat postea videro; Age, inquies, ista parva sunt. Aliter enim explicari, quod quaeritur, non potest. Si quae forte-possumus. Aliter enim explicari, quod quaeritur, non potest.\@par}
+\create@par{Sed quoniam et advesperascit et mihi ad villam revertendum est, nunc quidem hactenus; Aliter enim nosmet ipsos nosse non possumus. Quae cum dixisset, finem ille. Nihil enim hoc differt. Compensabatur, inquit, cum summis doloribus laetitia. Duo enim genera quae erant, fecit tria. Cur igitur, inquam, res tam dissimiles eodem nomine appellas?\@par}
+\create@par{Maximus dolor, inquit, brevis est. Nunc haec primum fortasse audientis servire debemus. Utinam quidem dicerent alium alio beatiorem! Iam ruinas videres. Unum nescio, quo modo possit, si luxuriosus sit, finitas cupiditates habere. Apparet statim, quae sint officia, quae actiones. Illud dico, ea, quae dicat, praeclare inter se cohaerere.\@par}
+\create@par{Ait enim se, si uratur, Quam hoc suave! dicturum. Dicet pro me ipsa virtus nec dubitabit isti vestro beato M. Hoc non est positum in nostra actione. Certe nihil nisi quod possit ipsum propter se iure laudari. Quid ad utilitatem tantae pecuniae? Tertium autem omnibus aut maximis rebus iis, quae secundum naturam sint, fruentem vivere.\@par}
+\create@par{Quibus ego vehementer assentior. Num igitur eum postea censes anxio animo aut sollicito fuisse? Nam quid possumus facere melius? Sed tamen intellego quid velit. Faceres tu quidem, Torquate, haec omnia; An est aliquid per se ipsum flagitiosum, etiamsi nulla comitetur infamia? Idemne potest esse dies saepius, qui semel fuit? Poterat autem inpune;\@par}
+\create@par{Quid enim est a Chrysippo praetermissum in Stoicis? Sine ea igitur iucunde negat posse se vivere? Prave, nequiter, turpiter cenabat; Tu vero, inquam, ducas licet, si sequetur; Nihilne est in his rebus, quod dignum libero aut indignum esse ducamus? Atque ab his initiis profecti omnium virtutum et originem et progressionem persecuti sunt.\@par}
+\create@par{Erit enim mecum, si tecum erit. Universa enim illorum ratione cum tota vestra confligendum puto. Non est enim vitium in oratione solum, sed etiam in moribus. Illis videtur, qui illud non dubitant bonum dicere -; Claudii libidini, qui tum erat summo ne imperio, dederetur. Ne amores quidem sanctos a sapiente alienos esse arbitrantur.\@par}
+\create@par{Ut non sine causa ex iis memoriae ducta sit disciplina. Primum in nostrane potestate est, quid meminerimus? Naturales divitias dixit parabiles esse, quod parvo esset natura contenta. Sin te auctoritas commovebat, nobisne omnibus et Platoni ipsi nescio quem illum anteponebas? Quonam, inquit, modo? Quam si explicavisset, non tam haesitaret.\@par}
+\create@par{Sed tamen intellego quid velit. Id enim natura desiderat. Erit enim mecum, si tecum erit. At ille non pertimuit saneque fidenter: Istis quidem ipsis verbis, inquit; Quacumque enim ingredimur, in aliqua historia vestigium ponimus. Illud dico, ea, quae dicat, praeclare inter se cohaerere. Quod autem principium officii quaerunt, melius quam Pyrrho;\@par}
+\create@par{Quo modo autem philosophus loquitur? Haec igitur Epicuri non probo, inquam. Scaevola tribunus plebis ferret ad plebem vellentne de ea re quaeri. Mihi enim satis est, ipsis non satis. Hic ambiguo ludimur. Ne amores quidem sanctos a sapiente alienos esse arbitrantur. At hoc in eo M. Quicquid porro animo cernimus, id omne oritur a sensibus;\@par}
+\create@par{Tum ille: Tu autem cum ipse tantum librorum habeas, quos hic tandem requiris? Satis est ad hoc responsum. Sed hoc summum bonum, quod tertia significatione intellegitur, eaque vita, quae ex summo bono degitur, quia coniuncta ei virtus est. Color egregius, integra valitudo, summa gratia, vita denique conferta voluptatum omnium varietate.\@par}
+\create@par{Non laboro, inquit, de nomine. Quid de Platone aut de Democrito loquar? Quae cum dixisset paulumque institisset, Quid est? Primum Theophrasti, Strato, physicum se voluit; Ita relinquet duas, de quibus etiam atque etiam consideret. At iam decimum annum in spelunca iacet. Septem autem illi non suo, sed populorum suffragio omnium nominati sunt.\@par}
+\create@par{Aliud igitur esse censet gaudere, aliud non dolere. Qui ita affectus, beatum esse numquam probabis; Maximas vero virtutes iacere omnis necesse est voluptate dominante. Oratio me istius philosophi non offendit; Hoc ne statuam quidem dicturam pater aiebat, si loqui posset. Habent enim et bene longam et satis litigiosam disputationem.\@par}
+\create@par{At ille non pertimuit saneque fidenter: Istis quidem ipsis verbis, inquit; Vide igitur ne non debeas verbis nostris uti, sententiis tuis. Qui autem esse poteris, nisi te amor ipse ceperit? Hoc enim identidem dicitis, non intellegere nos quam dicatis voluptatem. Negare non possum. Ita credo. Sed in rebus apertissimis nimium longi sumus.\@par}
+\create@par{Sic enim censent, oportunitatis esse beate vivere. Duarum enim vitarum nobis erunt instituta capienda. Quarum ambarum rerum cum medicinam pollicetur, luxuriae licentiam pollicetur. Non enim, si omnia non sequebatur, idcirco non erat ortus illinc. Quoniam, si dis placet, ab Epicuro loqui discimus. Huius ego nunc auctoritatem sequens idem faciam.\@par}
+\create@par{Sint modo partes vitae beatae. Non est ista, inquam, Piso, magna dissensio. Qui autem esse poteris, nisi te amor ipse ceperit? Quid vero? Nec vero sum nescius esse utilitatem in historia, non modo voluptatem. Primum quid tu dicis breve? Nam Pyrrho, Aristo, Erillus iam diu abiecti. Quod non faceret, si in voluptate summum bonum poneret.\@par}
+\create@par{Sed hoc sane concedamus. Ut optime, secundum naturam affectum esse possit. Ergo hoc quidem apparet, nos ad agendum esse natos. Expressa vero in iis aetatibus, quae iam confirmatae sunt. Restatis igitur vos; Explanetur igitur. Vide, quantum, inquam, fallare, Torquate. Igitur ne dolorem quidem. Atqui reperies, inquit, in hoc quidem pertinacem;\@par}
+\create@par{At quicum ioca seria, ut dicitur, quicum arcana, quicum occulta omnia? Quamquam tu hanc copiosiorem etiam soles dicere. Atque haec coniunctio confusioque virtutum tamen a philosophis ratione quadam distinguitur. Quodsi vultum tibi, si incessum fingeres, quo gravior viderere, non esses tui similis; Idemne potest esse dies saepius, qui semel fuit?\@par}
+\create@par{Id Sextilius factum negabat. Ratio quidem vestra sic cogit. Si longus, levis. Sed quid sentiat, non videtis. Amicitiam autem adhibendam esse censent, quia sit ex eo genere, quae prosunt. Et hunc idem dico, inquieta sed ad virtutes et ad vitia nihil interesse. Qui autem de summo bono dissentit de tota philosophiae ratione dissentit.\@par}
+\create@par{Quae in controversiam veniunt, de iis, si placet, disseramus. Ut enim consuetudo loquitur, id solum dicitur honestum, quod est populari fama gloriosum. Tuo vero id quidem, inquam, arbitratu. Tollitur beneficium, tollitur gratia, quae sunt vincla concordiae. Egone quaeris, inquit, quid sentiam? Qua tu etiam inprudens utebare non numquam.\@par}
+\create@par{Deinde disputat, quod cuiusque generis animantium statui deceat extremum. Tum mihi Piso: Quid ergo? Nunc omni virtuti vitium contrario nomine opponitur. Mihi quidem Antiochum, quem audis, satis belle videris attendere. Haec igitur Epicuri non probo, inquam. Propter nos enim illam, non propter eam nosmet ipsos diligimus. Que Manilium, ab iisque M.\@par}
+\create@par{Inde igitur, inquit, ordiendum est. Tibi hoc incredibile, quod beatissimum.\@par}
+\create@par{Quid ergo hoc loco intellegit honestum? Recte, inquit, intellegis. Itaque fecimus.\@par}
+\create@par{Ita prorsus, inquam; Quibusnam praeteritis? Quare attende, quaeso.\@par}
+\create@par{Quae similitudo in genere etiam humano apparet. At certe gravius.\@par}
+\create@par{Quae ista amicitia est? Quonam, inquit, modo? Si quae forte-possumus.\@par}
+\create@par{Sit enim idem caecus, debilis. Idemne potest esse dies saepius, qui semel fuit?\@par}
+\create@par{Quare attende, quaeso. Efficiens dici potest. Hic ambiguo ludimur.\@par}
+\create@par{Tum mihi Piso: Quid ergo? Id enim natura desiderat. Sumenda potius quam expetenda.\@par}
+\create@par{Omnis enim est natura diligens sui. Qua tu etiam inprudens utebare non numquam.\@par}
+\create@par{Quae ista amicitia est? Poterat autem inpune; Quis istud possit, inquit, negare?\@par}
+\create@par{Primum divisit ineleganter; Si quae forte-possumus. Sullae consulatum?\@par}
+\create@par{Si quicquam extra virtutem habeatur in bonis. Egone quaeris, inquit, quid sentiam?\@par}
+\create@par{Quid est igitur, inquit, quod requiras? Summae mihi videtur inscitiae.\@par}
+\create@par{Quid, quod res alia tota est? Sed haec in pueris; Quibusnam praeteritis?\@par}
+\create@par{Quae duo sunt, unum facit. Minime vero, inquit ille, consentit.\@par}
+\create@par{Nam quid possumus facere melius? Si longus, levis. Illi enim inter se dissentiunt.\@par}
+\create@par{Sint ista Graecorum; Tum Torquatus: Prorsus, inquit, assentior;\@par}
+\create@par{Quod vestri non item. Quid enim? Istic sum, inquit. Primum quid tu dicis breve?\@par}
+\create@par{Recte dicis; Sed quid sentiat, non videtis. Eam stabilem appellas.\@par}
+\create@par{Mihi, inquam, qui te id ipsum rogavi? At hoc in eo M. Nos commodius agimus.\@par}
+\create@par{Paria sunt igitur. Sedulo, inquam, faciam. Sint ista Graecorum;\@par}
+\create@par{Quis est tam dissimile homini. Satis est ad hoc responsum. Stoicos roga.\@par}
+\create@par{Minime vero, inquit ille, consentit. Quae cum dixisset, finem ille.\@par}
+\create@par{Hic ambiguo ludimur. Ut pulsi recurrant? Certe non potest. Audeo dicere, inquit.\@par}
+\create@par{Et quod est munus, quod opus sapientiae? Hoc est non dividere, sed frangere.\@par}
+\create@par{Venit ad extremum; Quae cum dixisset, finem ille. Sit enim idem caecus, debilis.\@par}
+\create@par{Sed ego in hoc resisto; Equidem e Cn. Tuo vero id quidem, inquam, arbitratu.\@par}
+\create@par{At iam decimum annum in spelunca iacet. Itaque contra est, ac dicitis;\@par}
+\create@par{Sed nimis multa. Sed nunc, quod agimus; Praeteritis, inquit, gaudeo.\@par}
+\create@par{Obsecro, inquit, Torquate, haec dicit Epicurus? At hoc in eo M.\@par}
+\create@par{Sedulo, inquam, faciam. Quo igitur, inquit, modo? Graccho, eius fere, aequalí?\@par}
+\create@par{Quae quidem vel cum periculo est quaerenda vobis; Sed ad rem redeamus;\@par}
+\create@par{Minime vero, inquit ille, consentit. Suo genere perveniant ad extremum;\@par}
+\create@par{Quid sequatur, quid repugnet, vident. Honesta oratio, Socratica, Platonis etiam.\@par}
+\create@par{Nescio quo modo praetervolavit oratio. Videsne quam sit magna dissensio?\@par}
+\create@par{Sed quot homines, tot sententiae; Deinde dolorem quem maximum?\@par}
+\create@par{Si quidem, inquit, tollerem, sed relinquo. Suo genere perveniant ad extremum;\@par}
+\create@par{Verum hoc idem saepe faciamus. Cur deinde Metrodori liberos commendas?\@par}
+\create@par{Sed nimis multa. Certe non potest. Non semper, inquam; Haeret in salebra.\@par}
+\create@par{Si longus, levis dictata sunt. Istic sum, inquit. Efficiens dici potest.\@par}
+\create@par{Cur id non ita fit? Quis negat? Numquam facies. Quid nunc honeste dicit?\@par}
+\create@par{Confecta res esset. Nos commodius agimus. Minime vero, inquit ille, consentit.\@par}
+\create@par{Facete M. Tenent mordicus. Quae cum essent dicta, discessimus. Si longus, levis;\@par}
+\create@par{Nonne igitur tibi videntur, inquit, mala? Equidem, sed audistine modo de Carneade?\@par}
+\create@par{Quo igitur, inquit, modo? Certe, nisi voluptatem tanti aestimaretis.\@par}
+\create@par{Nihil ad rem! Ne sit sane; Res enim concurrent contrariae. Nihil enim hoc differt.\@par}
+\create@par{Cave putes quicquam esse verius. Quis est tam dissimile homini.\@par}
+\create@par{Certe, nisi voluptatem tanti aestimaretis. Non igitur bene. Sed nimis multa.\@par}
+\create@par{Nos cum te, M. Cur id non ita fit? Dat enim intervalla et relaxat.\@par}
+\create@par{Egone quaeris, inquit, quid sentiam? At certe gravius. Quae sequuntur igitur?\@par}
+\create@par{Sin aliud quid voles, postea. Qualem igitur hominem natura inchoavit?\@par}
+\create@par{At enim hic etiam dolore. Non igitur bene. An eiusdem modi? Quid iudicant sensus?\@par}
+\create@par{Sed ad rem redeamus; Si longus, levis. Nihil enim hoc differt.\@par}
+\create@par{Sint ista Graecorum; Primum quid tu dicis breve? Sed nimis multa. A mene tu?\@par}
+\create@par{Sed hoc sane concedamus. Quare attende, quaeso. Praeteritis, inquit, gaudeo.\@par}
+\create@par{Illi enim inter se dissentiunt. Quod quidem nobis non saepe contingit.\@par}
+\create@par{Non laboro, inquit, de nomine. Ita prorsus, inquam; Quare attende, quaeso.\@par}
+\create@par{Sed fac ista esse non inportuna; Non potes, nisi retexueris illa.\@par}
+\create@par{Est, ut dicis, inquit; Vestri haec verecundius, illi fortasse constantius.\@par}
+\create@par{Itaque fecimus. Quid ergo? Sullae consulatum? Quae cum dixisset, finem ille.\@par}
+\create@par{Tum Torquatus: Prorsus, inquit, assentior; Bonum incolumis acies: misera caecitas.\@par}
+\create@par{Videsne quam sit magna dissensio? Tamen a proposito, inquam, aberramus.\@par}
+\create@par{Praeclare hoc quidem. Memini vero, inquam; Torquatus, is qui consul cum Cn.\@par}
+\create@par{Urgent tamen et nihil remittunt. Prave, nequiter, turpiter cenabat;\@par}
+\create@par{Itaque contra est, ac dicitis; Rationis enim perfectio est virtus;\@par}
+\create@par{Cur iustitia laudatur? Tu vero, inquam, ducas licet, si sequetur;\@par}
+\create@par{Negat esse eam, inquit, propter se expetendam. Quid est enim aliud esse versutum?\@par}
+\create@par{Tenent mordicus. Sed ad rem redeamus; Beatum, inquit. Nos commodius agimus.\@par}
+\create@par{Itaque fecimus. Memini vero, inquam; Faceres tu quidem, Torquate, haec omnia;\@par}
+\create@par{Hoc est non dividere, sed frangere. Recte, inquit, intellegis. Quid vero?\@par}
+\create@par{Illa tamen simplicia, vestra versuta. Nihil opus est exemplis hoc facere longius.\@par}
+\create@par{Verum hoc idem saepe faciamus. Beatum, inquit. Memini vero, inquam;\@par}
+\create@par{Qui est in parvis malis. Minime vero, inquit ille, consentit. Erat enim Polemonis.\@par}
+\create@par{Idem adhuc; Quis istum dolorem timet? Cur haec eadem Democritus?\@par}
+\create@par{Iam enim adesse poterit. Quid Zeno? Nam de isto magna dissensio est.\@par}
+\create@par{Nunc vides, quid faciat. Illa tamen simplicia, vestra versuta.\@par}
+\create@par{Numquam facies. Itaque fecimus. Paria sunt igitur. Haeret in salebra.\@par}
+\create@par{Itaque contra est, ac dicitis; At certe gravius. Confecta res esset.\@par}
+\create@par{Pollicetur certe. Tubulo putas dicere? Omnia peccata paria dicitis.\@par}
+\create@par{Sit enim idem caecus, debilis. Sed videbimus. Conferam avum tuum Drusum cum C.\@par}
+\create@par{Ita nemo beato beatior. Hic ambiguo ludimur. Id Sextilius factum negabat.\@par}
+\create@par{Sed ad rem redeamus; Summum ením bonum exposuit vacuitatem doloris;\@par}
+\create@par{Quis istud, quaeso, nesciebat? At certe gravius. Quis hoc dicit?\@par}
+\create@par{Tibi hoc incredibile, quod beatissimum. Tuo vero id quidem, inquam, arbitratu.\@par}
+\create@par{Certe non potest. Zenonis est, inquam, hoc Stoici. Confecta res esset.\@par}
+\create@par{Quare attende, quaeso. Nos commodius agimus. Reguli reiciendam;\@par}
+\create@par{Qua tu etiam inprudens utebare non numquam. Deinde dolorem quem maximum?\@par}
+\create@par{Immo videri fortasse. Ut pulsi recurrant? Aliter autem vobis placet. Magna laus.\@par}
+\create@par{Praeclare hoc quidem. Venit ad extremum; Quis est tam dissimile homini.\@par}
+\create@par{Minime vero, inquit ille, consentit. Sed ad rem redeamus; Magna laus.\@par}
+\create@par{Tu quidem reddes; Numquam facies. Occultum facinus esse potuerit, gaudebit;\@par}
+\create@par{Invidiosum nomen est, infame, suspectum. Velut ego nunc moveor.\@par}
+\create@par{Age sane, inquam. Iam enim adesse poterit. Quis istum dolorem timet?\@par}
+\create@par{Graccho, eius fere, aequalí? Ut optime, secundum naturam affectum esse possit.\@par}
+\create@par{Duo enim genera quae erant, fecit tria. Eaedem res maneant alio modo.\@par}
+\create@par{Cur id non ita fit? Equidem e Cn. Tubulo putas dicere? Praeclare hoc quidem.\@par}
+\create@par{Quae quidem vel cum periculo est quaerenda vobis; Quid, quod res alia tota est?\@par}
+\create@par{Simus igitur contenti his. Nam ante Aristippus, et ille melius.\@par}
+\create@par{Tria genera bonorum; Quare attende, quaeso. Quid adiuvas? Quis negat?\@par}
+\create@par{Tria genera bonorum; Proclivi currit oratio. Sed nimis multa. Quid de Pythagora?\@par}
+\@message{^^JP-lipsum: created
+\number\c@parnumber\space paragraphs.^^J}
+\newhelp\optparams@error{%
+Valid optional parameters are 's', 'short', 'm', 'medium', 'l', 'long'.}
+\newhelp\paramexcess@error{The best possible value is 100}
+\newif\iflong
+\newif\ifmedium
+\newif\ifshort
+\def\lipsum{\futurelet\firstt@k\@lipsum}
+\def\@lipsum{%
+\if[\firstt@k\let\next\opt@par
+\else\mediumtrue
+\let\next\no@opt@par\fi
+\next}
+\def\opt@par[#1]#2{\def\param@ne{#1}%
+\def\@l@{l}\def\@long@{long}%
+\def\@m@{m}\def\@medium@{medium}%
+\def\@s@{s}\def\@short@{short}%
+\ifx\param@ne\@l@\shortfalse\mediumfalse\longtrue
+\else
+\ifx\param@ne\@long@\shortfalse\mediumfalse\longtrue
+\else
+\ifx\param@ne\@m@\shortfalse\mediumtrue\longfalse
+\else
+\ifx\param@ne\@medium@\shortfalse\mediumtrue\longfalse
+\else
+\ifx\param@ne\@s@\shorttrue\mediumfalse\longfalse
+\else
+\ifx\param@ne\@short@\shorttrue\mediumfalse\longfalse
+\else
+\errhelp\optparams@error
+\@errmessage{^^JP-lipsum: !! ERROR !!
+Wrong optional parameter.^^J}
+\fi\fi\fi\fi\fi\fi
+\no@opt@par{#2}}
+\newif\ifhyphen
+\def\no@opt@par#1{\scan#1-;\end
+\ifhyphen\noopt@parA#1\end\else\noopt@parB#1\end\fi}
+\def\scan#1-#2\end{\ifx;#2\hyphenfalse\else\hyphentrue\fi}
+\newcount\c@plipsumAone
+\newcount\c@plipsumAtwo
+\newcount\c@max
+\c@max\c@parnumber
+\divide\c@max by3\relax
+\def\noopt@parA#1-#2\end{{%
+\global\c@plipsumAone=#1\relax
+\global\c@plipsumAtwo=#2\relax
+\ifnum\c@plipsumAone>\c@max
+\errhelp\paramexcess@error
+\@errmessage{^^JP-lipsum: ERROR at line \the\inputlineno. The
+first parameter of \string\lipsum\space is too big.^^J}\fi
+\ifnum\c@plipsumAtwo>\c@max
+\errhelp\paramexcess@error
+\@errmessage{^^JP-lipsum: ERROR at line \the\inputlineno. The
+second parameter of \string\lipsum\space is too big.^^J}\fi
+\ifmedium
+\advance\c@plipsumAone by100\relax
+\advance\c@plipsumAtwo by100\relax
+\else\ifshort
+\advance\c@plipsumAone by200\relax
+\advance\c@plipsumAtwo by200\relax\fi\fi
+\ifnum\c@plipsumAone>\c@plipsumAtwo
+\count@=\c@plipsumAone
+\c@plipsumAone=\c@plipsumAtwo
+\c@plipsumAtwo=\count@\fi
+\types@t}}
+\def\noopt@parB#1\end{%
+\c@plipsumAone#1
+\ifnum\c@plipsumAone>\c@max
+\errhelp\paramexcess@error
+\@errmessage{^^JP-lipsum: ERROR at line \the\inputlineno. The
+parameter of \string\lipsum\space is too big.^^J}\fi
+\ifmedium\advance\c@plipsumAone by100\relax
+\else\ifshort\advance\c@plipsumAone by200\relax\fi\fi
+\csname plips@\romannumeral\c@plipsumAone\endcsname}
+\def\types@t{\let\next\relax
+\ifnum\c@plipsumAone>\c@plipsumAtwo\else
+\csname plips@\romannumeral\the\c@plipsumAone\endcsname
+\advance\c@plipsumAone by1\relax
+\let\next\types@t\fi
+\next}
+\catcode`@=\beforeplipsumatcatcode
+\endinput
+%% end of file `plipsum.tex'
diff --git a/macros/plain/contrib/plipsum/pliptest.tex b/macros/plain/contrib/plipsum/pliptest.tex
new file mode 100644
index 0000000000..8ba1b362ae
--- /dev/null
+++ b/macros/plain/contrib/plipsum/pliptest.tex
@@ -0,0 +1,32 @@
+%% This is file `pliptest.tex'
+%% generated with the notangle utility.
+%% The original source file was: plipsum.nw.
+%% Copyright (C) 2013 by Sergio Spina
+%%
+%% A few lines of code to show the macros
+%% supplied with the plipsum package.
+\input plipsum
+%~
+One short lipsum paragraph:\par
+\lipsum[s]{13}\vskip\baselineskip
+%~
+One medium-lenght lipsum paragraph:\par
+\lipsum{13}\vskip\baselineskip
+%~
+One long lipsum paragraph:\par
+\lipsum[long]{13}\vskip\baselineskip
+%~
+Three short lipsum paragraphs:\par
+\lipsum[short]{13-15}\vskip\baselineskip
+%~
+Three medium-lenght lipsum paragraphs:\par
+\lipsum[m]{13-15}\vskip\baselineskip
+%~
+Three long lipsum paragraphs:\par
+\lipsum[l]{13-15}\vskip\baselineskip
+%~
+A very long lipsum paragaph:\par
+{\nopar\lipsum[l]{13-31}}\vskip\baselineskip
+%~
+\bye
+%% end of file `pliptest.tex'
diff --git a/macros/plain/contrib/plipsum/stripc b/macros/plain/contrib/plipsum/stripc
new file mode 100755
index 0000000000..7e35f0355e
--- /dev/null
+++ b/macros/plain/contrib/plipsum/stripc
@@ -0,0 +1,13 @@
+#!/usr/bin/python
+
+import sys
+for i in sys.stdin.readlines():
+ line = i.strip()
+ if (line.startswith("% ")):
+ pass
+ elif (line == ""):
+ pass
+ elif (line == "\n"):
+ pass
+ else:
+ print line
diff --git a/macros/plain/contrib/plstmary/README b/macros/plain/contrib/plstmary/README
new file mode 100644
index 0000000000..59fda31371
--- /dev/null
+++ b/macros/plain/contrib/plstmary/README
@@ -0,0 +1,50 @@
+plstmary: St. Mary's Road symbols for plainTeX
+----------------------------------------------
+
+LEGAL STUFF:
+
+ This is public domain software. All files of the plstmary distribution
+ (listed below) may be distributed and/or modified without restriction.
+
+ While every effort has been made to make plstmary useful, it comes
+ with no warranty, expressed or implied.
+
+MANIFEST:
+
+This distribution consists of the files
+
+ * stmary.tex Macros for use in plain TeX.
+ * README What you are reading now.
+ * plstmary-doc.pdf Documentation.
+ * plstmary-doc.tex Documentation source (tex, etex or pdftex).
+
+DESCRIPTION:
+
+(See plstmary-doc for more details.)
+
+The command names used to produce the symbols are the same as those used
+in the stmaryrd package for LaTeX.
+
+The file stmary.tex loads amssym.tex. Three of the commands defined in
+amssym.tex are redefined by stmary.tex, but the originals are saved
+under different names.
+
+By default, the symbols are provided for use in 10 point documents.
+Commands for selecting different sizes are defined. These commands also
+affect the size of the AMS symbols, but have no effect on other math
+fonts nor on the text fonts.
+
+VERSIONS:
+ 0.5 -- 2013/05/09 Autoloading of amssym, size changing for AMS
+ fonts, and saving of changed AMS commands.
+ 0.4 -- 2013/04/16 Correct \lbag, \Lbag, \binampersand and
+ \bindnasrepma
+ 0.3 -- 2013/03/28 Complete reorganization of internal macros,
+ 0.2 -- 2010/12/05 Typos corrected
+ 0.1 -- 2007/04/02 Initial version
+
+--
+Dan Luecking luecking at uark dot edu
+Department of Mathematical Sciences
+1 University of Arkansas
+Fayetteville, AR 72701 USA
diff --git a/macros/plain/contrib/plstmary/plstmary-doc.pdf b/macros/plain/contrib/plstmary/plstmary-doc.pdf
new file mode 100644
index 0000000000..1bfa27753c
--- /dev/null
+++ b/macros/plain/contrib/plstmary/plstmary-doc.pdf
Binary files differ
diff --git a/macros/plain/contrib/plstmary/plstmary-doc.tex b/macros/plain/contrib/plstmary/plstmary-doc.tex
new file mode 100644
index 0000000000..8b7c99cd7e
--- /dev/null
+++ b/macros/plain/contrib/plstmary/plstmary-doc.tex
@@ -0,0 +1,463 @@
+\input stmary
+\def\br{\hfil\break}
+\def\cmd#1{{\tt\string#1}}
+\font\headfont=cmr12
+\font\headsf=cmss12
+\hsize 6.5in \vsize 8.9in \hoffset 0pt \voffset 0pt
+
+\centerline{\headsf
+ plstmary: \headfont St.\ Mary's Road Font for Plain \TeX}
+\centerline{Version: \plstmaryversion}
+\medskip
+\centerline{Dan Luecking}
+\centerline{\tt luecking $\inplus$ uark $\boxdot$ edu}
+\bigskip
+
+\noindent The plstmary package provides plain TeX support for the St.\
+Mary's Road symbol font. After inputting the macro file {\tt
+stmary.tex}, all the symbols in the tables below become defined. The two
+commands {\cmd\oast} and {\cmd\ocircle} require the AMS symbol font {\tt
+msam}, so {\tt stmary.tex} automatically inputs {\tt amssym.tex}. (These
+symbols are the same as {\cmd\circledast} and {\cmd\circledcirc},
+defined in {\tt amssym.tex}. The point of defining them is to have
+matching `{\cmd\o}\dots' and `{\cmd\varo}\dots' pairs for all circles.)
+
+All the command names are the same as those in the LaTeX package {\tt
+stmaryrd.sty}. More details on the symbols and their usage may be found
+in the documentation of the LaTeX stmaryrd package.
+
+Some command names defined in the {\tt stmary.tex} overwrite command
+names in the {\tt amssym.tex}. The original definitions are stored in
+alternative commands. The affected commands are {\cmd\bigtriangledown},
+{\cmd\bigtriangleup} and {\cmd\boxdot}. The AMS versions are obtained
+with {\tt \string\amsbigtriangledown}, {\cmd\amsbigtriangleup} and
+{\cmd\amsboxdot}.
+
+The plstmary package allows minimal size changing. By default it
+produces symbols intended for ten point documents. It also supports
+eight, nine, eleven, and twelve point sizes. Use one of the following
+commands to change size:\hfil\break
+\indent{\cmd\stmaryrdeightpoint},\quad
+{\tt\ \string\stmaryrdninepoint},\br
+\indent{\cmd\stmaryrdelevenpoint},\quad
+{\cmd\stmaryrdtwelvepoint},\br
+\indent{\cmd\stmaryrdtenpoint} \ (to restore the default if it has been
+changed).\br
+These commands affect only the St.\ Mary Road symbols and, for
+convenience, the AMS fonts. They have no effect on the body text font
+nor on any other mathematical fonts. For changing the sizes of standard
+plain TeX fonts, you must either load a package for that purpose, of
+define your own macros.
+
+In order to get actual error-free output from these commands, one needs
+to have the St.\ Mary Road fonts and the AMS fonts installed, but those
+are available in all the major free TeX distributions: TeX Live, MiKTeX
+and MacTeX.
+
+\bigskip
+\leftline{\bf Legal stuff}
+
+\medskip
+\noindent The St.\ Mary's Road metafont code is copyright \copyright
+1991-1994 by Jeremy Gibbons and Alan Jeffrey. The fonts in PS type1
+format (i.e., {\tt .afm} and {\tt .pfb} files) are copyright \copyright
+1998 by Taco Hoekwater. All rights are reserved to the respective
+authors.
+
+This plstmary distribution is placed in the public domain. Do with it as
+you wish.
+
+While every effort has been made to make plstmary useful, it comes with
+no warranty, expressed or implied.
+
+\bigskip
+\leftline{\bf Acknowledgements}
+I am indebted to the creators of the fonts and of the stmaryrd
+LaTeX package. The file {\tt stmary.tex} is largely a reduction to plain
+TeX macros and TeX primitives of the code in {\tt stmaryrd.sty}.
+
+\bigskip
+\leftline{\bf Caveats}
+
+\medskip
+\noindent Some features of the LaTeX package have not been implemented
+in plstmary. For example, normally the symbol obtained with
+{\cmd\oplus} has thin strokes while {\cmd\varoplus} has
+thicker strokes. The LaTeX package can be loaded with the {\tt
+heavycircles} option to reverse this for all the circled symbols. This
+is not implemented in plstmary. Also, the LaTeX package has the {\tt
+only} option, allowing selected commands to be defined and no others.
+This is not implemented in plstmary.
+
+Also, I have made the following corrections (or possibly mistakes).
+(1)~In {\tt stmaryrd.sty}, the commands {\cmd\lbag} and
+{\cmd\rbag} are defined as binary operations, but the
+documentation says they are delimiters. In {\tt stmary.tex}, I have
+defined them as delimiters. (2)~In {\tt stmaryrd.sty}, the commands
+{\cmd\binampersand} and {\cmd\bindnasrepma} are defined as
+delimiters, but their names clearly imply that they are intended to be
+binary operations (and the stmaryrd package documentation does not list
+them among the delimiters). In {\tt stmary.tex}, I have defined them as
+binary operations. I have no idea if I have chosen the correct usages
+for these four commands, and I would be happy to change them back if
+someone would let me know.
+
+\medskip
+\bigskip
+\filbreak
+\halign{%
+\strut\quad\tt#\hfil\quad
+& #\hfil\qquad
+& \tt#\hfil\quad
+& #\hfil\enspace\cr
+\bf Binary operations\hidewidth\cr
+\noalign{\smallskip\hrule\smallskip}
+ \string\Yup
+&$\Yup$
+&\string\Ydown
+&$\Ydown$\cr
+ \string\Yleft
+&$\Yleft$
+&\string\Yright
+&$\Yright$\cr
+ \string\binampersand
+&$\binampersand$
+&\string\bindnasrepma
+&$\bindnasrepma$\cr
+ \string\varcurlyvee
+&$\varcurlyvee$
+&\string\varcurlywedge
+&$\varcurlywedge$\cr
+ \string\minuso
+&$\minuso$
+&\string\baro
+&$\baro$\cr
+ \string\sslash
+&$\sslash$
+&\string\bbslash
+&$\bbslash$\cr
+ \string\moo
+&$\moo$
+&\string\merge
+&$\merge$\cr
+ \string\nplus
+&$\nplus$
+&\string\boxbar
+&$\boxbar$\cr
+ \string\boxdot
+&$\boxdot$
+&\string\amsboxdot
+&$\amsboxdot$\cr
+ \string\boxslash
+&$\boxslash$
+&\string\boxbslash
+&$\boxbslash$\cr
+ \string\boxcircle
+&$\boxcircle$
+&\string\boxbox
+&$\boxbox$\cr
+ \string\boxempty
+&$\boxempty$
+&\string\boxast
+&$\boxast$\cr
+ \string\vartimes
+&$\vartimes$
+&\string\fatsemi
+&$\fatsemi$\cr
+ \string\fatslash
+&$\fatslash$
+&\string\fatbslash
+&$\fatbslash$\cr
+ \string\varbigcirc
+&$\varbigcirc$
+&\string\leftslice
+&$\leftslice$\cr
+ \string\rightslice
+&$\rightslice$
+&\string\varotimes
+&$\varotimes$\cr
+ \string\oast
+&$\oast$
+&\string\varoast
+&$\varoast$\cr
+ \string\obar
+&$\obar$
+&\string\varobar
+&$\varobar$\cr
+ \string\obslash
+&$\obslash$
+&\string\varobslash
+&$\varobslash$\cr
+ \string\ocircle
+&$\ocircle$
+&\string\varocircle
+&$\varocircle$\cr
+ \string\varoplus
+&$\varoplus$
+&\string\varominus
+&$\varominus$\cr
+ \string\olessthan
+&$\olessthan$
+&\string\varolessthan
+&$\varolessthan$\cr
+ \string\ogreaterthan
+&$\ogreaterthan$
+&\string\varogreaterthan
+&$\varogreaterthan$\cr
+ \string\ovee
+&$\ovee$
+&\string\varovee
+&$\varovee$\cr
+ \string\owedge
+&$\owedge$
+&\string\varowedge
+&$\varowedge$\cr
+ \string\varoslash
+&$\varoslash$
+&\string\varodot
+&$\varodot$\cr
+ \string\oblong
+&$\oblong$
+&\string\talloblong
+&$\talloblong$\cr
+ \string\interleave
+&$\interleave$
+&&\cr
+\noalign{\smallskip\hrule}
+}
+
+\medskip
+\bigskip
+\filbreak
+\halign{%
+\strut\quad \tt#\hfil\quad & #\hfil\qquad
+ & \tt#\hfil\quad & #\hfil\enspace\cr
+\bf Relations\hidewidth\cr
+\noalign{\smallskip\hrule\smallskip}
+%
+ \string\inplus
+&$\inplus$
+&\string\niplus
+&$\niplus$\cr
+ \string\subsetplus
+&$\subsetplus$
+&\string\supsetplus
+&$\supsetplus$\cr
+ \string\subsetpluseq
+&$\subsetpluseq$
+&\string\supsetpluseq
+&$\supsetpluseq$\cr
+ \string\shortuparrow
+&$\shortuparrow$
+&\string\shortdownarrow
+&$\shortdownarrow$\cr
+ \string\nnwarrow
+&$\nnwarrow$
+&\string\nnearrow
+&$\nnearrow$\cr
+ \string\sswarrow
+&$\sswarrow$
+&\string\ssearrow
+&$\ssearrow$\cr
+ \string\curlywedgeuparrow
+&$\curlywedgeuparrow$
+&\string\curlywedgedownarrow
+&$\curlywedgedownarrow$\cr
+ \string\curlyveedownarrow
+&$\curlyveedownarrow$
+&\string\curlyveeuparrow
+&$\curlyveeuparrow$\cr
+ \string\trianglelefteqslant
+&$\trianglelefteqslant$
+&\string\trianglerighteqslant
+&$\trianglerighteqslant$\cr
+ \string\ntrianglelefteqslant
+&$\ntrianglelefteqslant$
+&\string\ntrianglerighteqslant
+&$\ntrianglerighteqslant$\cr
+\noalign{\smallskip\hrule}
+}
+
+\medskip
+\bigskip
+\filbreak
+\halign{%
+\strut\quad \tt#\hfil\quad & #\hfil\qquad
+ & \tt#\hfil\quad & #\hfil\enspace\cr
+\bf Arrows\hidewidth\cr
+\noalign{\smallskip\hrule\smallskip}
+%
+ \string\leftrightarroweq
+&$\leftrightarroweq$
+&\string\shortrightarrow
+&$\shortrightarrow$\cr
+ \string\shortleftarrow
+&$\shortleftarrow$
+&\string\rightarrowtriangle
+&$\rightarrowtriangle$\cr
+ \string\leftarrowtriangle
+&$\leftarrowtriangle$
+&\string\leftrightarrowtriangle
+&$\leftrightarrowtriangle$\cr
+\string\Mapsto
+&$\Mapsto$
+&\string\Longmapsto
+&$\Longmapsto$\cr
+\string\mapsfrom
+&$\mapsfrom$
+&\string\Mapsfrom
+&$\Mapsfrom$\cr
+\string\longmapsfrom
+&$\longmapsfrom$
+&\string\Longmapsfrom
+&$\Longmapsfrom$\cr
+\noalign{\smallskip\hrule}
+}
+
+\medskip
+\bigskip
+\noindent The commands {\cmd\arrownot} and {\cmd\Arrownot}
+can be placed in front of horizontal arrows to negate them:
+{\cmd\arrownot\cmd\rightarrow} produces
+ $\arrownot\rightarrow$ and
+ {\cmd\Arrownot\cmd\Rightarrow} produces
+ $\Arrownot\Rightarrow$.
+For long arrows, there are {\cmd\longarrownot}{\cmd\longrightarrow}:
+$\longarrownot\longrightarrow$ \ and {\cmd\Longarrownot}{\cmd\Longrightarrow}:
+ $\Longarrownot\Longrightarrow$.
+\medskip
+\bigskip
+\filbreak
+\halign{%
+\strut\quad \tt#\hfil\quad & #\hfil\qquad
+ &\tt#\hfil\quad & #\hfil\enspace\cr
+\bf Big operators\hidewidth\cr
+\noalign{\smallskip\hrule\smallskip}
+ \string\bigtriangledown
+&$\bigtriangledown$
+&\string\bigtriangleup
+&$\bigtriangleup$\cr
+ \string\amsbigtriangledown
+&$\amsbigtriangledown$
+&\string\amsbigtriangleup
+&$\amsbigtriangleup$\cr
+ \string\bigcurlyvee
+&$\bigcurlyvee$
+&\string\bigcurlywedge
+&$\bigcurlywedge$\cr
+ \string\bigsqcap
+&$\bigsqcap$
+&\string\bigbox
+&$\bigbox$\cr
+ \string\bigparallel
+&$\bigparallel$
+&\string\biginterleave
+&$\biginterleave$\cr
+ \string\bignplus
+&$\bignplus$\cr
+\noalign{\smallskip\hrule}
+}
+
+\medskip
+\bigskip
+\filbreak
+\halign{%
+\strut\quad \tt#\hfil\quad & #\hfil\qquad
+ &\tt#\hfil\quad & #\hfil\enspace\cr
+\bf Delimiters\hidewidth\cr
+\noalign{\smallskip\hrule\smallskip}
+ \string\lbag
+&$\lbag$
+&\string\rbag
+&$\rbag$\cr
+ \string\Lbag
+&$\Lbag$
+&\string\Rbag
+&$\Rbag$\cr
+ \string\llparenthesis
+&$\llparenthesis$
+&\string\rrparenthesis
+&$\rrparenthesis$\cr
+ \string\llfloor
+&$\llfloor$
+&\string\rrfloor
+&$\rrfloor$\cr
+ \string\llceil
+&$\llceil$
+&\string\rrceil
+&$\rrceil$\cr
+\noalign{\smallskip\hrule}
+}
+
+\medskip
+\bigskip
+\filbreak
+\halign{%
+\strut\quad \tt#\hfil\quad & #\hfil\qquad
+ &\tt#\hfil\quad & #\hfil\enspace\cr
+\bf Expandable delimiters\hidewidth\cr
+\noalign{\smallskip\hrule\smallskip}
+ \string\llbracket
+&$\llbracket$
+&\string\rrbracket
+&$\rrbracket$\cr
+\noalign{\smallskip\hrule}
+}
+
+\vskip-\baselineskip
+\noindent
+Examples of expanded double brackets:\quad
+$
+\left\llbracket \matrix{a\cr} \right\rrbracket\quad
+\left\llbracket \matrix{a\cr b\cr} \right\rrbracket\quad
+\left\llbracket \matrix{a\cr b\cr c\cr} \right\rrbracket\quad
+\left\llbracket \matrix{a\cr b\cr c\cr d\cr} \right\rrbracket\quad
+\left\llbracket \matrix{a\cr b\cr c\cr d\cr e\cr} \right\rrbracket\quad
+\left\llbracket \matrix{a\cr b\cr c\cr d\cr e\cr f\cr} \right\rrbracket
+$
+
+\vskip-\baselineskip
+\filbreak
+\halign{%
+\strut\quad \tt#\hfil\quad & #\hfil\qquad
+ &\tt#\hfil\quad & #\hfil\enspace\cr
+\bf Miscellaneous\hidewidth\cr
+\noalign{\smallskip\hrule\smallskip}
+ \string\lightning
+&$\lightning$
+&\string\varcopyright
+&$\varcopyright$\cr
+\noalign{\smallskip\hrule}
+}
+
+\medskip
+\bigskip
+\filbreak
+\noindent
+\leftline{\bf Size changing}
+
+\medskip\noindent
+{8pt: \stmaryrdeightpoint $\lbag x \inplus a \rbag \amsboxdot b$.\quad
+ 9pt: \stmaryrdninepoint$\lbag x \inplus a \rbag \amsboxdot b$.\quad
+10pt: \stmaryrdtenpoint$\lbag x \inplus a \rbag \amsboxdot b$.\quad
+11pt: \stmaryrdelevenpoint$\lbag x \inplus a \rbag \amsboxdot b$.\quad
+12pt: \stmaryrdtwelvepoint$\lbag x \inplus a \rbag \amsboxdot b$.}
+
+\bigskip
+\leftline{\bf Version history}
+
+\medskip
+\noindent
+ 0.5 --- 2013/05/09\quad Autoloading AMS symbols. Size changing for
+ AMS, saving AMS definitions.\br
+ 0.4 --- 2013/04/16\quad Corrected \cmd\lbag, \cmd\Lbag,
+ \cmd\binampersand{} and \cmd\bindnasrepma\br
+ 0.3 --- 2013/03/28\quad Reorganized internal macros\br
+ 0.2 --- 2010/12/05\quad Typos corrected\br
+ 0.1 --- 2007/04/02\quad Initial version
+
+
+\medskip
+\noindent
+
+\bye
diff --git a/macros/plain/contrib/plstmary/stmary.tex b/macros/plain/contrib/plstmary/stmary.tex
new file mode 100644
index 0000000000..076cab1d1e
--- /dev/null
+++ b/macros/plain/contrib/plstmary/stmary.tex
@@ -0,0 +1,260 @@
+% Loads stmaryrd symbols for 10pt plain TeX documents.
+%
+\ifx\plstmaryversion\UndEfInEd\else\expandafter\endinput\fi
+\def\plstmaryversion{0.5c}%
+\edef\stmaryrestorecatcodes{%
+ \catcode`\noexpand\@=\number\catcode`\@\relax
+ \catcode`\noexpand\!=\number\catcode`\!\relax
+ \newlinechar=\number\newlinechar\relax
+}%
+% Announce ourself
+\newlinechar`\^^J
+\immediate\write16{%
+plstmary package: plain TeX macros for St. Mary's Road symbol font.^^J}
+%
+\newfam\stmaryrdfam
+%
+\font\stmaryfive stmary5
+\font\stmarysix stmary6
+\font\stmaryseven stmary7
+\font\stmaryeight stmary8
+\font\stmarynine stmary9
+\font\stmaryten stmary10
+\font\stmaryeleven stmary10 at10.95pt
+\font\stmarytwelve stmary10 at12pt
+%
+% AMS fonts: 10, 7 and 5 pt sizes loaded in amssym.tex.
+% St. Mary Road only needs msam, but we load msbm as well.
+%
+\input amssym
+\font\twelvemsa = msam10 at 12pt
+\font\elevenmsa = msam10 at 10.95pt
+\font\ninemsa = msam9
+\font\eightmsa = msam8
+\font\sixmsa = msam6
+\font\twelvemsb = msbm10 at 12pt
+\font\elevenmsb = msbm10 at 10.95pt
+\font\ninemsb = msbm9
+\font\eightmsb = msbm8
+\font\sixmsb = msbm6
+%
+\def\stmaryrdeightpoint{%
+ \textfont\stmaryrdfam \stmaryeight
+ \scriptfont\stmaryrdfam \stmarysix
+ \scriptscriptfont\stmaryrdfam \stmaryfive
+ \amseightpoint
+}%
+\def\amseightpoint{%
+ \textfont\msafam \eightmsa
+ \scriptfont\msafam \sixmsa
+ \scriptscriptfont\msafam \fivemsa
+ \textfont\msbfam \eightmsb
+ \scriptfont\msbfam \sixmsb
+ \scriptscriptfont\msbfam \fivemsb
+}%
+%
+\def\stmaryrdninepoint{%
+ \textfont\stmaryrdfam \stmarynine
+ \scriptfont\stmaryrdfam \stmaryseven
+ \scriptscriptfont\stmaryrdfam \stmaryfive
+ \amsninepoint
+}%
+\def\amsninepoint{%
+ \textfont\msafam \ninemsa
+ \scriptfont\msafam \sevenmsa
+ \scriptscriptfont\msafam \fivemsa
+ \textfont\msbfam \ninemsb
+ \scriptfont\msbfam \sevenmsb
+ \scriptscriptfont\msbfam \fivemsb
+}%
+%
+\def\stmaryrdtenpoint{%
+ \textfont\stmaryrdfam \stmaryten
+ \scriptfont\stmaryrdfam \stmaryseven
+ \scriptscriptfont\stmaryrdfam \stmaryfive
+ \amstenpoint
+}%
+\def\amstenpoint{%
+ \textfont\msafam \tenmsa
+ \scriptfont\msafam \sevenmsa
+ \scriptscriptfont\msafam \fivemsa
+ \textfont\msbfam \tenmsb
+ \scriptfont\msbfam \sevenmsb
+ \scriptscriptfont\msbfam \fivemsb
+}%
+%
+\def\stmaryrdelevenpoint{%
+ \textfont\stmaryrdfam \stmaryeleven
+ \scriptfont\stmaryrdfam \stmaryeight
+ \scriptscriptfont\stmaryrdfam \stmarysix
+ \amselevenpoint
+}%
+\def\amselevenpoint{%
+ \textfont\msafam \elevenmsa
+ \scriptfont\msafam \eightmsa
+ \scriptscriptfont\msafam \sixmsa
+ \textfont\msbfam \elevenmsb
+ \scriptfont\msbfam \eightmsb
+ \scriptscriptfont\msbfam \sixmsb
+}%
+%
+\def\stmaryrdtwelvepoint{%
+ \textfont\stmaryrdfam \stmarytwelve
+ \scriptfont\stmaryrdfam \stmaryeight
+ \scriptscriptfont\stmaryrdfam \stmarysix
+ \amstwelvepoint
+}%
+\def\amstwelvepoint{%
+ \textfont\msafam \twelvemsa
+ \scriptfont\msafam \eightmsa
+ \scriptscriptfont\msafam \sixmsa
+ \textfont\msbfam \twelvemsb
+ \scriptfont\msbfam \eightmsb
+ \scriptscriptfont\msbfam \sixmsb
+}%
+\let\amsboxdot\boxdot
+\let\amsbigtriangledown\bigtriangledown
+\let\amsbigtriangleup\bigtriangleup
+%
+\catcode`\@=11
+%
+\catcode`\!\active
+\edef!{\ifcase\stmaryrdfam
+ 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}%
+%
+\def\stm@op #1#2{\mathchardef#1"1!#2}%
+\def\stm@bin #1#2{\mathchardef#1"2!#2}%
+\def\stm@rel #1#2{\mathchardef#1"3!#2}%
+\def\stm@open #1#2{\mathchardef#1"4!#2}%
+\def\stm@close#1#2{\mathchardef#1"5!#2}%
+\stm@rel \shortleftarrow{00}%
+\stm@rel \shortrightarrow{01}%
+\stm@rel \shortuparrow{02}%
+\stm@rel \shortdownarrow{03}%
+\stm@bin \Yup{04}%
+\stm@bin \Ydown{05}%
+\stm@bin \Yleft{06}%
+\stm@bin \Yright{07}%
+\stm@bin \varcurlyvee{08}%
+\stm@bin \varcurlywedge{09}%
+\stm@bin \minuso{0A}%
+\stm@bin \baro{0B}%
+\stm@bin \sslash{0C}%
+\stm@bin \bbslash{0D}%
+\stm@bin \moo{0E}%
+\stm@bin \varotimes{0F}%
+\stm@bin \varoast{10}%
+\stm@bin \varobar{11}%
+\stm@bin \varodot{12}%
+\stm@bin \varoslash{13}%
+\stm@bin \varobslash{14}%
+\stm@bin \varocircle{15}%
+\stm@bin \varoplus{16}%
+\stm@bin \varominus{17}%
+\stm@bin \boxast{18}%
+\stm@bin \boxbar{19}%
+\stm@bin \boxdot{1A}%
+\stm@bin \boxslash{1B}%
+\stm@bin \boxbslash{1C}%
+\stm@bin \boxcircle{1D}%
+\stm@bin \boxbox{1E}%
+\stm@bin \boxempty{1F}%
+\mathchardef\lightning"0!20
+\stm@bin \merge{21}%
+\stm@bin \vartimes{22}%
+\stm@bin \fatsemi{23}%
+\stm@rel \sswarrow{24}%
+\stm@rel \ssearrow{25}%
+\stm@rel \curlywedgeuparrow{26}%
+\stm@rel \curlywedgedownarrow{27}%
+\stm@bin \fatslash{28}%
+\stm@bin \fatbslash{29}%
+\stm@open \lbag{2A}%
+\stm@close\rbag{2B}%
+\stm@bin \varbigcirc{2C}%
+\stm@rel \leftrightarroweq{2D}%
+\stm@rel \curlyveedownarrow{2E}%
+\stm@rel \curlyveeuparrow{2F}%
+\stm@rel \nnwarrow{30}%
+\stm@rel \nnearrow{31}%
+\stm@bin \leftslice{32}%
+\stm@bin \rightslice{33}%
+\stm@bin \varolessthan{34}%
+\stm@bin \varogreaterthan{35}%
+\stm@bin \varovee{36}%
+\stm@bin \varowedge{37}%
+\stm@bin \talloblong{38}%
+\stm@bin \interleave{39}%
+\stm@bin \obar{3A}%
+\stm@bin \obslash{3B}%
+\stm@bin \olessthan{3C}%
+\stm@bin \ogreaterthan{3D}%
+\stm@bin \ovee{3E}%
+\stm@bin \owedge{3F}%
+\stm@bin \oblong{40}%
+\stm@rel \inplus{41}%
+\stm@rel \niplus{42}%
+\stm@bin \nplus{43}%
+\stm@rel \subsetplus{44}%
+\stm@rel \supsetplus{45}%
+\stm@rel \subsetpluseq{46}%
+\stm@rel \supsetpluseq{47}%
+\stm@open \Lbag{48}%
+\stm@close\Rbag{49}%
+\edef\llbracket{\delimiter"4!4A!71}%
+\edef\rrbracket{\delimiter"5!4B!79}%
+\stm@open \llparenthesis{4C}%
+\stm@close\rrparenthesis{4D}%
+\stm@bin \binampersand{4E}%
+\stm@bin \bindnasrepma{4F}%
+\stm@rel \trianglelefteqslant{50}%
+\stm@rel \trianglerighteqslant{51}%
+\stm@rel \ntrianglelefteqslant{52}%
+\stm@rel \ntrianglerighteqslant{53}%
+\stm@open \llfloor{54}%
+\stm@close\rrfloor{55}%
+\stm@open \llceil{56}%
+\stm@close\rrceil{57}%
+\stm@rel \arrownot{58}%
+\stm@rel \Arrownot{59}%
+\stm@rel \Mapstochar{5A}%
+\stm@rel \mapsfromchar{5B}%
+\stm@rel \Mapsfromchar{5C}%
+\stm@rel \leftrightarrowtriangle{5D}%
+\stm@rel \leftarrowtriangle{5E}%
+\stm@rel \rightarrowtriangle{5F}%
+\stm@op \bigtriangledown{60}%
+\stm@op \bigtriangleup{61}%
+\stm@op \bigcurlyvee{62}%
+\stm@op \bigcurlywedge{63}%
+\stm@op \bigsqcap{64}%
+\stm@op \bigbox{65}%
+\stm@op \bigparallel{66}%
+\stm@op \biginterleave{67}%
+\stm@op \bignplus{70}%
+%
+\let\oast\circledast % msam "7E
+\let\ocircle\circledcirc % msam "7D
+%
+\def\@tempa#1{%
+ \def\varcopyright{%
+ {\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox#12C}}}}%
+\expandafter\@tempa!%
+%
+% The long arrow negations.
+%
+\def\longarrownot{\mathrel{\mkern5.5mu\arrownot\mkern-5.5mu}}%
+\def\Longarrownot{\mathrel{\mkern5.5mu\Arrownot\mkern-5.5mu}}%
+%
+% The variants on \mapsto:
+%
+\def\Mapsto{\Mapstochar\Rightarrow}%
+\def\mapsfrom{\leftarrow\mapsfromchar}%
+\def\Mapsfrom{\Leftarrow\Mapsfromchar}%
+\def\Longmapsto{\Mapstochar\Longrightarrow}%
+\def\longmapsfrom{\longleftarrow\mapsfromchar}%
+\def\Longmapsfrom{\Longleftarrow\Mapsfromchar}%
+%
+\stmaryrestorecatcodes
+\stmaryrdtenpoint
diff --git a/macros/plain/contrib/prepr/prepr.tex b/macros/plain/contrib/prepr/prepr.tex
new file mode 100644
index 0000000000..b4a366e4af
--- /dev/null
+++ b/macros/plain/contrib/prepr/prepr.tex
@@ -0,0 +1,130 @@
+\newbox\leftpage
+\newdimen\fullhsize
+\newdimen\hstitle
+\newdimen\hsbody
+\tolerance=1000\hfuzz=2pt
+
+\def\bigans{b }
+\message{ big or little (b/l)? }\read-1 to\answ
+
+\ifx\answ\bigans\message{(This will come out unreduced.}
+\magnification=1200\baselineskip=14pt
+\font\bigfnt=cmbx10 \global\let\absfnt=\tenrm
+\hsbody=\hsize \hstitle=\hsize %take default values for unreduced format
+
+\else\message{(This will be reduced.}
+\let\lr=L
+\special{landscape}
+\font\bigfnt=cmbx10 scaled\magstep1
+\font\absfnt=cmr10 scaled\magstep1
+\def\almostshipout#1{\if L\lr \count1=1
+ \global\setbox\leftpage=#1 \global\let\lr=R
+ \else \count1=2
+ \shipout\vbox{\hbox to\fullhsize{\box\leftpage\hfil#1}}
+ \global\let\lr=L\fi}
+
+\output={\ifnum\count0=1 %%% This is the HUTP version
+ \shipout\vbox{\hbox to \fullhsize{\hfill\pagebody\hfill}}\advancepageno
+ \else
+ \almostshipout{\leftline{\vbox{\pagebody\makefootline}}}\advancepageno
+ \fi}
+
+\magnification=1000\baselineskip=14pt\voffset=-.31truein\hoffset=.05truein
+\hstitle=8truein\hsbody=4.75truein\vsize=7truein\fullhsize=10truein
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\def\tit#1#2{\nopagenumbers\hsize=\hstitle\null%
+\vskip 5.5truecm\bigfnt\centerline{#1}\medskip\centerline{#2}
+\absfnt\vskip 0.8truecm\message{#1}\message{#2}}
+
+
+\def\date#1{\ifnum\folio=2\footline={\hss\tenrm\folio\hss}\fi
+\vfill\line{ASTRPD \hfill #1}\tenrm\supereject\hsize=\hsbody%
+\footline={\hss\tenrm\folio\hss}} % restores pagenumbers
+
+
+% tagged sec numbers
+\global\newcount\secno \global\secno=0
+\global\newcount\meqno \global\meqno=1
+\global\newcount\subsecno \global\subsecno=0
+
+\def\section#1{\global\advance\secno by1\global\meqno=1\global\subsecno=0
+\ifx\answ\bigans \vfill\eject
+\else\bigbreak\bigskip\fi% (combination \goodbreak\bigskip\bigskip)
+\noindent{\bf\the\secno. #1}\par\nobreak\medskip\nobreak\message{#1}}
+
+\def\subsec#1{\global\advance\subsecno by1\bigskip\noindent
+{\bf\the\secno.\the\subsecno\ #1}\par\nobreak\smallskip\nobreak\message{#1}}
+
+
+% \eqn\label{a+b=c} gives a displayed equation with number
+% chosen consecutively within sections.
+% \eqnn and \eqna define labels in advance
+\newwrite\efile \let\firsteqn=T
+\def\writeqno#1%
+{\if T\firsteqn \immediate\openout\efile=eqns.tmp\global\let\firsteqn=F\fi%
+\immediate\write\efile{#1 \string#1}\global\advance\meqno by1}
+
+\def\eqnn#1{\xdef #1{(\the\secno.\the\meqno)}\writeqno#1}
+\def\eqna#1{\xdef #1##1{(\the\secno.\the\meqno##1)}\writeqno{#1{}}}
+
+\def\eqn#1#2{\xdef #1{(\the\secno.\the\meqno)}%
+$$#2\eqno(\the\secno.\the\meqno)$$\writeqno#1}
+
+% footnotes
+\global\newcount\ftno \global\ftno=1
+\def\foot#1{\footnote{$^{\the\ftno}$}{#1}\ %
+\global\advance\ftno by1}
+
+
+% \fig\label{text}
+% generates a number, assigns it to \label, generates an entry.
+% To list the figs on a separate page, \listfigs
+
+\global\newcount\figno \global\figno=1
+\newwrite\ffile
+
+%\def\fig#1#2{\item{Figure #1: }#2}
+
+\def\fig#1#2{\the\figno\nfig#1{#2}}
+\def\nfig#1#2{\xdef#1{\the\figno}%
+\ifnum\figno=1\immediate\openout\ffile=figs.tmp\fi%
+\immediate\write\ffile {\noexpand \item{Fig. \noexpand#1 :\ }#2}%
+\global\advance\figno by1}
+
+\def\semi{;\hfil\noexpand\break}
+
+\def\listfigs{\vfill\eject\immediate\closeout\ffile%\parindent=20pt
+\centerline{\bf Figure Captions}\bigskip\parindent=40pt%
+\input figs.tmp\vfill\eject\parindent=20pt}
+%
+% \ref\label{text}
+% generates a number, assigns it to \label, generates an entry.
+% To list the refs on a separate page, \listrefs
+
+\global\newcount\refno \global\refno=1
+\newwrite\rfile
+
+\def\ref#1#2{[\the\refno]\nref#1{#2}}
+\def\nref#1#2{\xdef#1{[\the\refno]}%
+\ifnum\refno=1\immediate\openout\rfile=refs.tmp\fi%
+\immediate\write\rfile{\noexpand\item{\noexpand#1\ }#2.}%
+\global\advance\refno by1}
+
+\def\listrefs{\vfill\eject\immediate\closeout\rfile%\parindent=20pt
+\centerline{{\bf References}}\bigskip\frenchspacing%
+\input refs.tmp\vfill\eject\nonfrenchspacing}
+
+
+%and finally acknowledgments
+
+\def\ack#1{\vskip 4truecm\centerline{\bf Acknowledgments}\par\nobreak
+\bigskip\nobreak #1}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\grad#1{\,\nabla\!_{{#1}}\,}
+\def\om#1#2{\omega^#1{}_#2}
diff --git a/macros/plain/contrib/prepr/preprint.pdf b/macros/plain/contrib/prepr/preprint.pdf
new file mode 100644
index 0000000000..baa30e69b4
--- /dev/null
+++ b/macros/plain/contrib/prepr/preprint.pdf
Binary files differ
diff --git a/macros/plain/contrib/prepr/preprint.tex b/macros/plain/contrib/prepr/preprint.tex
new file mode 100644
index 0000000000..fd035de90d
--- /dev/null
+++ b/macros/plain/contrib/prepr/preprint.tex
@@ -0,0 +1,280 @@
+
+%
+\input dub0:[tex.samples]prepr.tex % system dependent!
+%
+\tit{Come usare il Tex}{per scrivere i preprints}
+
+\centerline{\it Massimo Calvani}
+\bigskip\centerline{Istituto di Astronomia}
+\centerline{Universit\`a di Padova}
+\centerline{Padova}
+\vskip 2.5truecm
+
+
+Questo esempio illustra come usare i comandi macro contenuti nel file
+$$\hbox{\it dra0:[tex.tex201.samples]prepr.tex}$$ per scrivere preprints col Tex in
+modo non troppo complicato. Ovviamente la semplicit\`a va a scapito della
+flessibilit\`a.
+
+Tuttavia si ha la possibilit\`a di avere la numerazione automatica
+delle equazioni, delle figure, dei riferimenti, dei paragrafi e sottoparagrafi,
+ nonch\`e la lista automatica dei riferimenti citati e delle figure. Questo
+\`e molto comodo quando si devono aggiungere o togliere pezzi, senza doversi
+preoccupare di rinumerare tutto.
+
+Inoltre le equazioni, le figure ed i riferimenti vengono \it identificati
+\rm con
+nomi simbolici, che vengono usati per richiamare il numero corrispondente.
+
+
+\date{06/86}
+
+
+\section{Introduzione}
+La prima cosa da fare \`e mettere come istruzione iniziale nel vostro file
+(dal nome, ad es. {\it preprint.tex}) la seguente macro:
+
+\centerline{\it $\backslash$input dra0:[tex.tex201.samples]prepr.tex}
+
+In tal modo vengono inizializzati i comandi che vi descrivo.
+
+\subsec{La prima pagina}
+La prima pagina del preprint contiene il titolo del lavoro, nonch\`e autori,
+indirizzi ed abstract.
+
+Il titolo viene scritto in grassetto usando la macro
+$$\hbox{\it $\backslash$tit$\{$ $\}$ $\{$ $\}$}$$
+che permette di scrivere un titolo al massimo di due righe; il primo rigo
+del titolo va messo nella prima serie di parentesi graffe
+ed il secondo, ovviamente, nella seconda.
+\it
+\`E comunque
+necessario mettere la seconda serie di parentesi quando il
+ titolo \`e lungo un solo rigo.
+\rm
+Ad esempio il titolo del presente sommario \`e stato fatto con
+$$\hbox{\it $\backslash$tit$\{$Come usare il Tex$\}$$\{$per scrivere
+i preprints$\}$}$$
+
+Per gli autori e gli indirizzi non ho creato una macro, essendo questo troppo
+variabile. Per cui, dopo il titolo, dovete usare le macro del Tex per
+centrare nomi ed indirizzo. Ad esempio
+
+\leftline{$\backslash$centerline$\{$ $\backslash$it Massimo Calvani$\}$}
+\leftline{$\backslash$bigskip$\backslash$centerline$\{$Istituto
+ di Astronomia$\}$}
+\leftline{$\backslash$centerline$\{$Universit\`a di Padova$\}$}
+\leftline{$\backslash$centerline$\{$Padova$\}$}
+\leftline{$\backslash$vskip 2.5truecm}
+
+\noindent dovete regolare voi qust'ultima distanza in modo tale che il titolo
+e l'indirizzo entrino nella finestrella della copertina dei preprints.
+
+Segue poi l'abstract, al termine del quale dovete usare la macro
+$$\hbox{\it $\backslash$date$\{$data che volete$\}$}$$ la quale termina la prima pagina,
+e scrive la sigla ASTRPD nell'ultimo rigo.
+
+\section{I paragrafi ed i sottoparagrafi}
+I paragrafi ed i sottoparagrafi vengono numerati in successione
+automaticamente. Per iniziare un paragrafo si usa la macro
+$$\hbox{\it $\backslash$section$\{$nome del paragrafo$\}$}$$
+che scrive il titolo in grassetto ed inizia una pagina
+nuova.
+
+Analogamente per i sottoparagrafi si usa la macro
+$$\hbox{{\it $\backslash$subsec$\{$Nome del sottoparagrafo$\}$}}$$
+che scrive il titolo in grassetto e continua nella stessa
+pagina.
+
+\subsec{Le note}
+Naturalmente non sono quelle musicali.
+
+Le note a pi\`e di pagina vengono scritte con la macro
+$$\hbox{\it $\backslash$foot$\{$nota$\}$}$$
+che le numera e le scrive al posto giusto (o almeno lo spero).
+\foot{Questo \`e un esempio.}
+\section{Citazioni}
+\subsec{References}
+I riferimenti vengono fatti usando la macro
+$$\hbox{\it $\backslash$ref$\backslash$nome$\{$riferimento$\}$}$$
+dove {\it nome} \`e un nome simbolico a vostra scelta che vi permetter\`a di
+richiamare il numero associato al riferimento, senza sapere quale numero gli
+\`e stato assegnato. \it Attenzione: \rm\ il {\it nome} deve contenere solo
+lettere e \it non \rm\ numeri! (Questo vale anche per le figure e le
+equazioni).
+
+State attenti che i comandi del Tex sono delle stringhe che iniziano con
+$\backslash$\ ,
+per cui usate dei nomi che non siano le sequenze di controllo del Tex
+(vanno bene nomi quali runo, rdue, rtre etc.).
+
+Ad esempio scrivendo $$\hbox{\it
+$\backslash$ref$\backslash$rrr$\{$Tex Willer, $\{$ $\backslash$it
+Journ. Applied Shooting$\}$, $\{$ $\backslash$bf 12$\}$,1986$\}$}$$ ottenete
+il numeretto che segue
+\ref\rrr{Tex Willer,{\it Journ. Applied Shooting}, {\bf 12},1986}.
+
+Ogna volta che volete citare questo lavoro fondamentale,
+basta citarlo come t in ref. $\backslash$rrr, e vi compare \rrr.
+
+
+Vi ricordo che le sequenze $\backslash$it e $\backslash$rm servono per
+scrivere in grassetto oppure in corsivo. La loro azione \`e limitata a
+quanto compreso tra le parentesi graffe.
+
+Se non volete che compaia il numero appena citate un lavoro, ma lo volete solo
+memorizzare, usate la macro
+$$\hbox{\it $\backslash$nref$\backslash$nome$\{$reference$\}$}$$
+Ad esempio, qua scrivo il secondo riferimento, che comparir\`a alla fine
+nell'elenco, e che chiamo $\backslash$rma.
+\nref\rma{M. Calv, Jour. Appl. Texnology, 1986}
+Naturalmente nel rif. \rma\ vi sono cose importanti.
+
+Fate attenzione che una delle idiosincrasie del Tex \`e quella di ignorare
+gli spazi dopo le sequenze di controllo, per cui conviene scrivere
+$\backslash$nome$\backslash$ \ cio\`e mettere anche una
+backslash $\backslash$ seguita da uno spazio, che forza il Tex a fare uno spazio (
+questo serve quando, dopo il comando, continuate col testo e non avete
+punteggiatura).
+
+Per fare poi stampare alla fine del vostro articolo la pagina con le references
+mettete alla fine del testo il comando:
+$$\hbox{\it $\backslash$listrefs}$$
+
+Viene inoltre creato un file {\it refs.tmp} in cui \`e contenuta la
+bibliografia (potete cos\`\i\ controllare di averla scritta giusta) ed i
+nomi che voi avete associato.
+
+Se volete citare pi\`u lavori in un unico riferimento esiste la macro
+$$\hbox{\it $\backslash$semi}$$
+che viene usata cos\`\i\ :
+
+\noindent
+$\backslash$ref
+$\backslash$IAG$\{$L. Alvarez-Gaum\'e and P. Ginsparg, ``The Structure of
+Gauge and Gravitational Anomalies,'' Harvard preprint HUTP-84/A016,
+to appear in Ann. Phys.$\backslash$semi
+L. Alvarez-Gaum\'e and P. Ginsparg, Nucl. Phys. B243 (1984) 449$\}$.
+
+\noindent Nelle references vedete cosa succede
+\nref
+\IAG{L. Alvarez-Gaum\'e and P. Ginsparg, ``The Structure of
+Gauge and Gravitational Anomalies,'' Harvard preprint HUTP-84/A016,
+to appear in Ann. Phys.\semi
+L. Alvarez-Gaum\'e and P. Ginsparg, Nucl. Phys. B243 (1984) 449}.
+
+\subsec{Figure captions}
+Le didascalie vengono fatte con comandi analoghi a quelli descritti per
+i riferimenti. In particolare con:
+$$\hbox{\it $\backslash$fig$\backslash$nomefig$\{$Questa \`e
+una bella figura$\}$} $$
+che potete richiamare con
+\nfig\faa{Questa \`e una bella figura.} vedi fig. $\backslash$nomefig (esempio
+vedi fig. \faa)
+\nfig\fbb{Questa non tanto.}
+oppure vedi la fig. \fig\fab{Molto interessante.}.
+Ovviamente vi sono i comandi
+$$\hbox{\it $\backslash$nfig$\backslash$nome$\{$testo$\}$} $$
+se volete solo memorizzare la didascalia ed il numero associato.
+
+Per avere l'elenco delle didascalie, usate alla fine del lavoro la macro
+$$\hbox{\it $\backslash$listfigs} $$
+
+Viene anche creato il file {\it figs.tmp}, in cui sono riportati i nomi
+simbolici e le didascalie.
+
+\section{Le equazioni}
+Anche le equazioni vengono numerate in modo automatico. Vi \`e per\`o
+qualche {\it sottigliezza} da utilizzare nei comandi. Vi sono in effetti
+tre comandi possibili:
+$$\hbox{\it $\backslash$eqn$\backslash$nomeeq$\{$equazione$\}$} $$
+$$\hbox{\it $\backslash$eqna$\backslash$nomeeq$\{$equazione$\}$} $$
+$$\hbox{\it $\backslash$eqnn$\backslash$nomeeq$\{$equazione$\}$} $$
+La differenza tra di essi pu\`o sembrare sottile ma \`e importante.
+Se avete una equazione isolata allora usate la prima macro. Ad es.
+
+\noindent
+$\backslash$eqn$\backslash$eli$\{$r\^{}a\_b = d + ac$\backslash$wedge cb$\}$
+
+
+\noindent produce
+\eqn\eli{r^a_b=d+ac\wedge cb}
+e viene citata come eq. $\backslash$eli (vedi eq. \eli).
+
+I due comandi $\backslash$eqna ed $\backslash$eqnn servono quando si devono allineare pi\`u
+equazioni, alcune delle quali hanno un numero di riferimento
+seguito da una lettera. In tal caso prima si dichiarano
+i nomi associati alle equazioni come in \par\noindent
+\leftline{$\backslash$eqna$\backslash$eIIi}
+\leftline{$\backslash$eqnn$\backslash$eIIii}
+
+\noindent
+\eqna\eIIi
+\eqnn\eIIii
+%
+e poi si allineano con il comando Tex $\backslash$equalignno (consultare il
+manuale!), come in\par\noindent
+%
+\$\$ $\backslash$eqalignno$\{$
+$\backslash$left($\backslash$int
+$\backslash$\_$\{$-$\backslash$infty$\}$\^{} $\backslash$infty
+e\^{} $\{$-x\^{}2 $\}$ $\backslash$right)\^{}2 $\backslash$,dx
+\par\noindent
+\&=$\{$ $\backslash$rm something$\}$\&$\backslash$eIIi a$\backslash$cr
+\par\noindent
+\&=$\{$ $\backslash$rm something$\backslash$ else$\}$ $\backslash$cr
+\par\noindent
+\&=$\backslash$pi\&$\backslash$eIIi b$\backslash$cr \par\noindent
+\&=2$\backslash$pi/2.\&$\backslash$eIIii$\backslash$cr$\}$ \$\$
+\par\noindent
+%
+che produce
+
+%
+$$\eqalignno{\left(\int_{-\infty}^\infty e^{-x^2}\right)^2\,dx
+&={\rm something}&\eIIi a\cr
+&={\rm something\ else}\cr
+&=\pi&\eIIi b\cr
+&=2\pi/2.&\eIIii\cr}$$
+%
+
+Si pu\`o poi facilmente riferirsi alle equazioni come
+$\eIIii$ o $\eIIi{a}$ (ottenuta con $\backslash$eIIi$\{$a$\}$) oppure
+$\eIIi{a,b}$ ($\backslash$eqna definisce una {\it etichetta} con argomento
+ $\{a,b,\ldots\}$\ )
+Oppure si ha semplicemente
+
+\eqn\eIIx{2+2=4}
+
+\noindent
+ottenuta con\par
+\leftline{$\backslash$eqn$\backslash$eIIx$\{$2+2=4$\}$}
+\noindent
+e richiamata con eq.$\backslash$eIIx (vedi eq.\eIIx).
+
+Naturalmente viene creato un file {\it refs.tmp} in cui sono associati i nomi
+simbolici ai numeri assegnati.\foot{Le parentesi attorno ai numeri delle equazioni
+vengono messe automaticamente}
+
+\subsec{Niente}
+Soltanto per mostrare che la numerazione funziona!\foot{Anche per le note.}
+
+\section{Ringraziamenti}
+Vi \`e anche una macro per questi. Basta scrivere
+$$\hbox{\it $\backslash$ack$\{$Grazie$\}$}$$
+come vedrete tra poco.
+
+
+Non dimenticatevi di terminare il vostro testo con le istruzioni (eventuali)
+$\backslash$listrefs, $\backslash$listfigs e naturalmente con
+$$\hbox{\it $\backslash$bye}$$
+
+Un ultimo avvertimento: quando processerete il vostro file con il Tex, vi
+viene chiesto se volete il formato normale (big) di stampa o ridotto
+(little); attualmente funziona solo il normale, per cui rispondete b.
+
+\ack{Ringrazio Donald Knuth per avere fatto il Tex. Per\`o poteva farlo
+pi\`u semplice.}
+\listrefs
+\listfigs
+\bye
diff --git a/macros/plain/contrib/present/HowToTalkTeX.lp b/macros/plain/contrib/present/HowToTalkTeX.lp
new file mode 100644
index 0000000000..209e3ef4b6
--- /dev/null
+++ b/macros/plain/contrib/present/HowToTalkTeX.lp
@@ -0,0 +1 @@
+20
diff --git a/macros/plain/contrib/present/HowToTalkTeX.pdf b/macros/plain/contrib/present/HowToTalkTeX.pdf
new file mode 100644
index 0000000000..9378058099
--- /dev/null
+++ b/macros/plain/contrib/present/HowToTalkTeX.pdf
Binary files differ
diff --git a/macros/plain/contrib/present/HowToTalkTeX.tex b/macros/plain/contrib/present/HowToTalkTeX.tex
new file mode 100644
index 0000000000..06619702df
--- /dev/null
+++ b/macros/plain/contrib/present/HowToTalkTeX.tex
@@ -0,0 +1,482 @@
+%
+%
+% HOW TO DO A TALK IN TeX
+%
+% Author: Matthias Meister
+% Version 2.2.1, February 2019
+%
+% This file is part of a work distributed under the LaTeX Project Public License
+%
+
+\input present % Load presentation specific macros
+\input present-transitions % Load macros for transitions.
+
+\setcolour\textcolour
+\setbgcolour\backgroundcolour
+\overfullrule=0pt
+%\WideAspect
+\vskip20mm plus 5mm minus 5mm
+\line{\pagelink{NextPage}{\hfil\titlefont How To Do A Talk In \TeX\hfil}}
+\vskip 5mm plus 2mm minus 1mm
+\line{\hfil\font\subtitlefont=cmssbx10 at 15pt\subtitlefont One Of Many Solutions\hfil}
+\vskip 5mm plus 2mm minus 1mm
+\line{\hfil\linkbarfont Version 2.2.1\hfil}
+\vskip 20mm plus 2mm minus 1mm
+\line{\hfil\normalfont Matthias Meister\hfil}\target{title}
+\vskip 5mm plus 2mm minus 1mm
+\line{\hfil\normalfont February 2019\hfil}
+\NewSlide
+\pageno=1% Don't want to count the titlepage
+\normalfont
+\def\LinkBar{} % LinkBar is left part of the footline, and currently is empty
+%%
+%%
+%%
+\SlideTitle{\hfill Motivation}%
+\SlideFoot % "Activates" the footline, titlepage had an empty footline
+\vglue7mm
+\leftskip5mm
+\item{$\bullet$}Make it possible to prepare presentations in \TeX
+\vskip3mm
+\item{$\bullet$}Without having to learn lots of extra syntax
+\vskip3mm
+\item{$\bullet$}By using simple macros that can easily be adapted to one's needs, maybe for each presentation prepared
+\vskip3mm
+\item{$\bullet$}Without restricting the possibilities that \TeX\ offers
+\NewSlide
+\SlideTitle{\hfil Requirements}
+\font\cdfo=cmtt12
+\def\codecolour{1.0 0.0 1.0}
+\def\cf{\setcolour\codecolour\cdfo}
+\leftskip0pt
+You need the program {\cf pdftex}, which probably is included in your \TeX-distribution.
+\vskip3mm
+You need the file {\cf present.tex}, which is to be {\cf\char'134input} at the beginning of your source code.
+The file can for example be obtained from \weblink{http://www.ctan.org}{ctan.org}.
+\vskip3mm
+You furthermore need a pdf-viewer with fullscreen display capabilities, e.g. {\cf xpdf}.
+\vskip5pt
+\att{Warning: Some pdf-viewers do not handle links in a document properly.}
+%%
+%%
+%%
+\NewSlide
+\SlideTitle{\hfil Basic Examples}
+You can type text as usual, inline equations $a^2+b^2=c^2$, displayed equations
+$$
+\exp(z)=\sum_{n=0}^\infty {z^n\over n!}=\lim_{n\to\infty}\Big(1+{z\over n}\Big)^n
+$$
+and tables
+\vskip0.5\baselineskip
+\moveright2cm\vbox{\offinterlineskip
+\halign{\vrule width 0pt height12pt depth3pt\kern5pt # &\vrule\hfil\kern5pt #\kern5pt\hfil
+&\vrule\hfil\kern5pt #\kern5pt\hfil\cr
+& $x$ & $\Delta x$\cr
+\noalign{\hrule}
+A & 1.03 & 0.07 \cr
+\noalign{\hrule}
+B & 2.05 & 0.06 \cr
+}}\vskip5pt
+So you probably can use \TeX\ in the ordinary fashion; just run {\cf pdftex} on your source instead of {\cf tex}.
+\NewSlide
+You can include images easily:\vskip20pt plus 3pt minus 10pt
+\hbox{\image[width3cm]{Stern.png}\hskip5mm plus 2mm minus 2mm A pixel image (png)}
+\vskip10pt\hrule
+\hbox{A vector image (pdf)\hskip5mm plus 2mm minus 2mm\image[width3cm]{Sagnac.pdf}}
+\NewSlide
+%%%
+%%%
+%%%
+\SlideTitle{\hfil Ordinary stuff}
+You type text, equations, and so on as usual in \TeX. Keep in mind, though, that the effective paper size is
+rather small (12cm wide, 9cm high in standard configuration).
+\vskip10pt plus 5pt minus 10pt
+The paper size is small, because you rely on the fullscreen mode of your pdf-viewer to blow the slide up to full
+screen size, thus also automatically enlarging the fonts.
+\vskip10pt plus 5pt minus 10pt
+Your macros should work (unless there is a collision of names), because what you are doing is creating an ordinary
+pdf-file with {\cf pdftex}, for viewing it with a pdf-viewer.
+\vskip10pt plus 5pt minus 10pt
+You start a new slide with {\cf\char'134 NewSlide}. If you use {\cf\char'134 NewFrame}, it has almost the same effect, only
+the slide number doesn't get increased.
+\NewSlide
+%%%
+%%%
+%%%
+\SlideTitle{\hfil Fonts}
+{\cf present.tex} defines the following fonts:\vskip5pt
+{\openup2pt
+\halign{#\hfil\kern5pt&#\hfil\kern5pt&#\hfil\cr
+Font Command & Purpose & Default Value\cr
+{\cf\char'134 titlefont} & presentation title & {\cf cmssbx10 at 20pt}\cr
+{\cf\char'134 slidetitlefont} & title of a slide & {\cf cmssbx10}\cr
+{\cf\char'134 normalfont} & ordinary text & {\cf cmss12}\cr
+{\cf\char'134 linkbarfont} & text in {\cf\char'134 LinkBar} & {\cf cmss8}\cr
+{\cf\char'134 it} & italic text & {\cf cmti12}\cr
+{\cf\char'134 rm} & roman text in math & {\cf cmr}\cr
+}}
+\vskip10pt
+Of course you can define further font commands or redefine the existing ones.
+The default fonts are used in this presentation, so you see what they look like.
+\NewSlide
+%%%
+%%%
+%%%
+\SlideTitle{\hfil Colours}
+Colours are defined as control sequences, e.g.
+\vskip5pt
+{\cf\char'134def\char'134mycolour\char'173}{\it R G B\/}{\cf\char'175}
+\vskip5pt
+where {\it R G B} are the red, green, and blue values of the colour defined, with
+$0\leq R, G, B\leq 1$.
+\vskip5pt
+Colours are used in these ways:
+\vskip5pt
+{\cf\char'134setcolour\char'134mycolour}
+
+to set the colour of following text, grouping is respected
+\vskip5pt
+{\cf\char'134coloured\char'134mycolour\char'173}{\it Stuff\/}{\cf\char'175}
+
+to set {\it Stuff} in colour {\cf\char'134mycolour}
+\vskip5pt
+{\cf\char'134setbgcolour\char'134mycolour}
+
+to set the colour of the background
+\NewSlide
+%%%
+%%%
+%%%
+The following colours are
+defined in {\cf present.tex}:
+\vskip5pt
+{\cf \char'134backgroundcolour}, for the slide background
+\vskip5pt
+{\cf \char'134textcolour}, for the text, and
+\vskip5pt
+{\cf \char'134attentioncolour}, an \att{attention} colour.
+
+You draw attention to \att{Stuff} by saying
+{\cf\char'134att\char'173}{\it Stuff\/}{\cf\char'175}.
+\vskip5pt
+If a predefined colour is redefined, {\cf\char'134setcolour}
+must also be used for the change to take effect for text.
+\NewSlide
+%%%
+%%%
+%%%
+\SlideTitle{\hfil Paper Size}
+The paper size is determined by the dimensions
+\vskip3pt {\cf\char'134 pdfpagewidth} and
+{\cf\char'134 pdfpageheight}.
+\vskip10pt
+If you say {\cf\char'134 StandardAspect}, you get a page 120mm wide and 90mm high.
+\vskip10pt
+If you say {\cf\char'134 WideAspect}, you get a page 144mm wide and 90mm high.
+\NewSlide
+%%%
+%%%
+%%%
+\SlideTitle{\vbox to 0pt{\kern-5mm\image[width10mm]{Stern.png}\vss}\hfil Images}
+Images can be included with
+\vskip5pt
+{\cf\char'134 image[}{\it dimensions}{\cf]\char'173}{\it filename}{\cf\char'175}
+\vskip5pt
+where {\it dimensions} are {\cf height}, {\cf depth}, and {\cf width}, familiar from \TeX.
+\vskip5pt
+\hbox{%
+\image[width3mm]{Stern.png}
+\image[width6mm]{Stern.png}
+\image[width9mm]{Stern.png}
+\image[height9mm]{Stern.png}
+\image[height3mm depth6mm]{Stern.png}
+\image[height9mm width4mm]{Stern.png}
+\image[width5mm]{Sagnac.pdf}\image[width10mm height4mm]{Sagnac.pdf}
+\image[width15mm depth 5mm]{Sagnac.pdf}
+}
+\vskip5pt
+If only {\cf width} is given, the image is scaled with the aspect ratio preserved.\target{Images}
+
+Image files need to be in a format that can be handled by the pdf-viewer and by {\cf pdftex}.
+E.g. pdf, png, jpg should work.
+\NewSlide
+%%%
+%%%
+%%%
+\SlideTitle{\hfil Slide Structure}
+Each slide has a headline, a body, and a footline.
+\vskip5pt
+The headline holds the slide title, which is set by
+\vskip5pt
+{\cf\char'134 SlideTitle\char'173}{\it TITLE\/}{\cf\char'175}
+\vskip5pt
+The footline is defined by
+{\cf\char'134 SlideFoot}, of which several versions are contained in {\cf present.tex}. Uncomment the one you want,
+or define further ones.
+\vskip5pt
+The version used here shows the number of the current slide and the total number of slides in the centre (the latter is
+provided by the {\cf\char'134 LP} macro), and the {\cf\char'134 PageBar} on the right.
+\vskip5pt
+The {\cf\char'134 PageBar}-symbols \PageBar move to the previous or following page, or move back and forth in the
+page history.
+\NewSlide
+%%%
+%%%
+%%%
+The page history is relevant if cross-references are used in the presentation. These will be discussed later.
+\vskip5pt
+\phantom{With cross-references or links, also the {\cf\char'134 LinkBar} can be useful. In the {\cf\char'134 SlideFoot}-version
+used, it is shown on the left side of the footline, but currently is defined to be empty.}
+\vskip5pt
+\phantom{The {\cf\char'134 LinkBar} is intended to hold links to various places in the presentation you might want to jump to.}
+\vskip5pt
+\phantom{This slide has been shown incrementally by a copy-paste procedure when writing the source (have a look at it).
+It is straightforward, very flexible, one might occasionally lose track, and it may be tedious to introduce
+changes later. A further possibility is shown on the next slides.}
+\NewFrame
+The page history is relevant if cross-references are used in the presentation. These will be discussed later.
+\vskip5pt
+With cross-references or links, also the {\cf\char'134 LinkBar} can be useful. In the {\cf\char'134 SlideFoot}-version
+used, it is shown on the left side of the footline, but currently is defined to be empty.
+\vskip5pt
+\phantom{The {\cf\char'134 LinkBar} is intended to hold links to various places in the presentation you might want to jump to.}
+\vskip5pt
+\phantom{This slide has been shown incrementally by a copy-paste procedure when writing the source (have a look at it).
+It is straightforward, very flexible, one might occasionally lose track, and it may be tedious to introduce
+changes later. A further possibility is shown on the next slides.}
+\NewFrame
+The page history is relevant if cross-references are used in the presentation. These will be discussed later.
+\vskip5pt
+With cross-references or links, also the {\cf\char'134 LinkBar} can be useful. In the {\cf\char'134 SlideFoot}-version
+used, it is shown on the left side of the footline, but currently is defined to be empty.
+\vskip5pt
+The {\cf\char'134 LinkBar} is intended to hold links to various places in the presentation you might want to jump to.
+\vskip5pt
+\phantom{This slide has been shown incrementally by a copy-paste procedure when writing the source (have a look at it).
+It is straightforward, very flexible, one might occasionally lose track, and it may be tedious to introduce
+changes later. A further possibility is shown on the next slides.}
+\NewFrame
+The page history is relevant if cross-references are used in the presentation. These will be discussed later.
+\vskip5pt
+With cross-references or links, also the {\cf\char'134 LinkBar} can be useful. In the {\cf\char'134 SlideFoot}-version
+used, it is shown on the left side of the footline, but currently is defined to be empty.
+\vskip5pt
+The {\cf\char'134 LinkBar} is intended to hold links to various places in the presentation you might want to jump to.
+\vskip5pt
+This slide has been shown incrementally by a copy-paste procedure when writing the source (have a look at it).
+It is straightforward, very flexible, one might occasionally lose track, and it may be tedious to introduce
+changes later. A further possibility is shown on the next slides.
+\NewSlide
+\def\hl{\setcolour\attentioncolour}
+%%%
+%%%
+%%%
+\Frames5{%
+\SlideTitle{\hfill {\onframe1\hl Slides} {\onframe2\hl Step} {\onframe3\hl by} {\onframe4\hl Step}}
+A slide can be shown incrementally using
+\vskip1pt
+\beforeframe2\hide{\afterframe1\cf
+\char'134 NewSlide\par
+\char'134 Frames\char'173}{\it num}{\afterframe1\cf\char'175\char'173}%
+{\it CONTENT}
+{\afterframe1\cf\char'175\char'134 endFrames\par
+\char'134NewSlide}
+\vskip1pt
+\beforeframe3\hide By the above, the {\it CONTENT} of the slide, enclosed between
+{\afterframe2\cf\char'134begingroup} \dots{\afterframe2\cf\char'134endgroup},
+is repeated {\it num} times, with a
+{\afterframe2\cf\char'134NewFrame} between subsequent repetitions.
+\vskip1pt
+\beforeframe4\hide Due to this grouping, definitions are local to the body of a frame.
+{\afterframe3\cf\char'134global} is used in the replacement texts of {\afterframe3\cf\char'134SlideTitle}
+and {\afterframe3\cf\char'134SlideFoot} to allow frame-dependent changes here, too.
+\vskip1pt
+\beforeframe5\hide
+{\onframe5\cf\char'134hide}, defined as {\onframe5\cf\char'134setcolour\char'134backgroundcolour}, can be used
+to hide parts of the slide on a monochromatic background.}
+\endFrames
+%%%
+%%%
+%%%
+\NewSlide
+\Frames5{%
+Incremental showing or modification of content is achieved by
+\vskip1pt
+\beforeframe2\hide{\afterframe1\cf\char'134 onframe\char'173}{\it fn}{\afterframe1\cf\char'175\char'173}{\it arg}%
+{\afterframe1\cf\char'175}\par
+which evaluates to {\it arg} on frame number {\it fn} and to {\afterframe1\cf\char'134relax} otherwise (frames are counted from 1).
+\vskip1pt
+\beforeframe3\hide{\afterframe2\cf\char'134 afterframe\char'173}{\it fn}{\afterframe2\cf\char'175\char'173}%
+{\it arg}{\afterframe2\cf\char'175}\par
+which evaluates to {\it arg} after frame {\it fn} and to {\afterframe2\cf\char'134relax} before and on frame {\it fn}.
+\vskip1pt
+\beforeframe4\hide{\afterframe3\cf\char'134 beforeframe\char'173}{\it fn}{\afterframe3\cf\char'175\char'173}{\it arg}%
+{\afterframe3\cf\char'175}\par
+which evaluates to {\it arg} before frame {\it fn} and to {\afterframe3\cf\char'134relax} on and after frame {\it fn}.
+\vskip1pt
+\beforeframe5\hide If {\it arg} is a single token, no braces are necessary. The same applies if {\it fn} or {\it num}
+is a single digit number.}%
+\endFrames
+\NewSlide
+%%%
+%%%
+%%%
+\SlideTitle{\hfil Links}
+{\cf\char'134 target\char'173}{\it NAME\/}{\cf\char'175} creates a target named {\it NAME} for a link at the position in
+the presentation where it is used.
+\vskip5pt
+{\cf\char'134 link\char'173}{\it NAME\/}{\cf\char'175\char'173}{\it Stuff\/}{\cf\char'175}
+turns {\it Stuff} into a link to the target named {\it NAME}.
+\vskip5pt
+{\cf\char'134 weblink\char'173}{\it URI\/}{\cf\char'175\char'173}{\it Stuff\/}{\cf\char'175}
+makes {\it Stuff} a link to the specified {\it URI}.
+\vskip5pt
+{\cf\char'134 filelink\char'173}{\it file}{\cf\char'175\char'173}{\it filedest}{\cf\char'175\char'173}{\it Stuff\/}{\cf\char'175}
+makes {\it Stuff} a link to destination {\it filedest} in {\it file}.
+
+{\it filedest} for example can be {\cf [}{\it page} {\cf/Fit]}, with {\it page} the page number (starting at 0).
+\vskip10pt
+A further possibility can be found \link{Further}{here (click)}.
+\def\LinkBar{%
+\link{Images}{\linkbarfont Images}
+\link{Further}{\linkbarfont Area}
+\link{title}{\linkbarfont Title}
+}
+\NewSlide
+%%%
+%%%
+%%%
+{\cf\char'134 linkarea\char'173}{\it dest}{\cf\char'175\char'173}{\it rect}{\cf\char'175\char'173}{\it border}{\cf
+\char'175\char'173}{\it colour}{\cf\char'175}\target{Further}
+\vskip5pt
+Creates a rectangular area which is a link to target {\it dest}; {\it rect} consists of
+four space-separated numbers for lower left and upper right corner, {\it border} is the border width, and {\it colour} is the
+border colour, specified as three space-separated values for red, green, and blue, all between 0 and 1.
+\vskip5pt
+\linkarea{title}{150 30 180 60}{2}{0.8 0 0}
+\image[width 2cm]{Stern.png}
+\vskip5pt
+Notice also that {\cf\char'134 LinkBar} has been redefined (on the previous slide already)
+\linkarea{Images}{10 100 50 120}{2}{0.8 0 1}
+\NewSlide
+%%%
+%%%
+%%%
+\SlideTitle{\hfill Transition Effects}
+\UseTrans
+\SetTrans{Fade}
+\SetDuration{2}
+\def\satt{\setcolour\attentioncolour}
+\def\sumcol{0 0 0}
+\def\sscol{\setcolour\sumcol}
+\Frames{6}{%
+Transition effects for a presentation
+can be provided by the macros in {\cf present-transitions.tex}
+to be {\cf\char'134input} after {\cf present.tex}.
+
+\beforeframe2\hide
+Transitions are activated with {\afterframe1\cf\char'134UseTrans} and deactivated with
+{\afterframe1\cf\char'134NoTrans}.
+
+\beforeframe3\hide
+The type of a transition effect is selected with {\afterframe2\cf\char'134SetTrans\char'173}{\it TYPE\/}{\afterframe2\cf\char'175},
+the duration of a transition effect
+with {\afterframe2\cf\char'134SetDuration\char'173}{\it num}{\afterframe2\cf\char'175}.
+
+\beforeframe4\hide
+Possible values for {\it TYPE} are {\afterframe3\cf Split},
+{\afterframe3\cf Blinds},
+{\afterframe3\cf Box},
+{\afterframe3\cf Wipe},
+{\afterframe3\cf Dissolve},
+{\afterframe3\cf Glitter},
+{\afterframe3\cf R},
+{\afterframe3\cf Fly},
+{\afterframe3\cf Push},
+{\afterframe3\cf Cover},
+{\afterframe3\cf Uncover},
+{\afterframe3\cf Fade}.
+See the PDF Reference for details.
+\beforeframe5\hide
+{\it num} specifies the duration of the transition effect in seconds.
+
+\beforeframe6\hide{\afterframe5\satt Only
+some transition effects may be supported by your pdf-viewer}.}%
+\endFrames
+\NewSlide
+\SetTrans{Push}
+\Frames{15}{%
+Compare
+$$
+\Gamma^{{\onframe3\satt a}}_{{\onframe4\satt b}{\onframe5\satt c}}=
+{\textstyle{1\over2}}
+g^{{\onframe3\satt a}{\afterframe1\sscol u}}
+\Big(\partial_{\onframe4\satt b}
+g_{{\afterframe1\sscol u}{\onframe5\satt c}}
++\partial_{\onframe5\satt c}g_{{\onframe4\satt b}{\afterframe1\sscol u}}
+-\partial_{\afterframe1\sscol u}g_{{\onframe4\satt b}{\onframe5\satt c}}\Big)
+$$
+\beforeframe6\hide
+\onframe{5}\NoTrans
+with
+$$
+\Gamma^{{\onframe{8}\satt a}}_{{\onframe{9}\satt b}{\onframe{10}\satt c}}=
+{\textstyle{1\over2}}
+g^{{\onframe{8}\satt a}{\afterframe6\sscol u}}
+\Big(\partial_{\onframe{9}\satt b}
+g_{{\afterframe6\sscol u}{\onframe{10}\satt c}}
++\partial_{\onframe{10}\satt c}g_{{\onframe{9}\satt b}{\afterframe6\sscol u}}
+-\partial_{\afterframe6\sscol u}g_{{\onframe{9}\satt b}{\onframe{10}\satt c}}\Big)
+$$
+\onframe{11}\UseTrans
+\beforeframe{11}\hide\onframe{11}{\SetTrans{Dissolve}}%
+Are transition effects an advantage didactically?
+\vskip5pt
+\beforeframe{12}\hide\onframe{12}{\SetTrans{Fade}}
+Sometimes {\afterframe{12}\satt\onframe{12}\hide transition} effects may be {\afterframe{12}\satt\onframe{12}\hide helpful}.
+\vskip3pt
+Sometimes they {\beforeframe{14}\hide\afterframe{13}\satt distract}
+the {\beforeframe{14}\hide\afterframe{13}\satt audience}
+from the {\beforeframe{14}\hide\afterframe{13}\satt content} of the slide.
+\vskip3pt
+\onframe{14}{\SetTrans{Dissolve}\SetDuration{5}}
+\beforeframe{15}\hide Use links or {\onframe{15}\cf \char'134PageBar}-symbols for navigation in order to
+see transition effects.
+}\endFrames
+\NewSlide
+\NoTrans
+%%%
+%%%
+%%%
+\SlideTitle{\hfil Background Images}
+\SetBackground{background.png}
+You can set images for the background with
+\vskip5pt
+{\cf\char'134 SetBackground\char'173}{\it filename}{\cf\char'175}
+\vskip5pt
+where
+{\it filename} is the name of the image file.
+\vskip5pt
+The background image is unset (i.e. the background colour will show again) with {\cf\char'134 UnsetBackground}.
+\vskip5pt
+The background image is scaled to width and height of the slide. It should have an appropriate aspect ratio.
+\vskip5pt
+\att{As you see some combinations of text colour and background image can cause visibility problems.}
+\NewSlide
+\UnsetBackground
+%%%
+%%%
+%%%
+\SlideTitle{\hfil Concluding Remarks}
+PDF provides the possibility to include movies, and to launch applications (which could be a movie player) via clickable
+elements. The usability for a presentation depends on how to manage the player together with a fullscreen display of the
+slides. Movie support is not officially included in {\cf present.tex}.
+\vskip5pt
+If you prepare a pdf-image for a presentation which is to be shown on some different computer, it would be best to
+embed fonts used in the image into the image file. For example, if you have a file {\cf image.eps}, you need to
+convert it to pdf, in order to use it with {\cf pdftex}. You can embed the fonts by
+\vskip5pt
+{\cf ps2pdf -dEPSCrop=true -dPDFA image.eps}
+\vskip5pt
+A look at {\cf present.tex} is recommended.
+\bye
diff --git a/macros/plain/contrib/present/Pfeil1.pdf b/macros/plain/contrib/present/Pfeil1.pdf
new file mode 100644
index 0000000000..8e28f5c1cc
--- /dev/null
+++ b/macros/plain/contrib/present/Pfeil1.pdf
Binary files differ
diff --git a/macros/plain/contrib/present/Pfeil2.pdf b/macros/plain/contrib/present/Pfeil2.pdf
new file mode 100644
index 0000000000..9873536d99
--- /dev/null
+++ b/macros/plain/contrib/present/Pfeil2.pdf
Binary files differ
diff --git a/macros/plain/contrib/present/Pfeil3.pdf b/macros/plain/contrib/present/Pfeil3.pdf
new file mode 100644
index 0000000000..746ba5f450
--- /dev/null
+++ b/macros/plain/contrib/present/Pfeil3.pdf
Binary files differ
diff --git a/macros/plain/contrib/present/Pfeil4.pdf b/macros/plain/contrib/present/Pfeil4.pdf
new file mode 100644
index 0000000000..fdccf86b70
--- /dev/null
+++ b/macros/plain/contrib/present/Pfeil4.pdf
Binary files differ
diff --git a/macros/plain/contrib/present/README b/macros/plain/contrib/present/README
new file mode 100644
index 0000000000..a8f6bf42a5
--- /dev/null
+++ b/macros/plain/contrib/present/README
@@ -0,0 +1,69 @@
+present.tex
+Version 2.2.1, February 2019
+
+Some simple macros for preparing presentations in TeX
+Copyright 2010-2019 Matthias Meister
+Distributed under the LaTeX Project Public License
+
+present.tex
+holds the macros, and is simply \input in a file
+
+HowToTalkTeX.pdf
+is a presentation on present.tex done with the macros
+
+HowToTalkTeX.tex
+is the corresponding source; together with the pdf it
+is an example of how the macros are used to prepare a talk.
+
+Required: pdftex
+
+The macros in present.tex allow the user to:
++) set a colour for the background and for the text
++) set background images
++) include links between parts of the presentation
++) include weblinks
++) include links to local files
++) include images
++) show slides incrementally
+
+The macros as such are simple enough so that users should
+not find it difficult to adapt them to their needs.
+
+A documentation for pdftex and the PDF-Reference might
+occasionally be useful in the context of those macros
+which have PDF-code in their replacement text.
+
+-----------------------
+Changes
+
+From 2.2 to 2.2.1:
+
+Merely updated contact details in files.
+No changes to the macros.
+
+
+From 2.1 to 2.2:
+
+Added macros \Frames, \endFrames, \onframe, \afterframe,
+\beforeframe to support the incremental showing of a slide
+as a sequence of frames.
+
+The additional source file present-transitions.tex
+contains macro definitions which allow to use transition
+effects between slides / frames.
+
+
+From 2.0 to 2.1:
+
+Fixed a bug which caused complaints about unknown
+operators 0.0RG and 0.0rg with some pdf-viewers.
+
+
+From 1.0 to 2.0:
+
+*) An image can be set on the slide background.
+*) Added control word \rm for using roman type
+ at correct size within math.
+*) Rewritten colour support; miniltx.tex, color.tex,
+ color.sty no longer required. As a result, control
+ sequences for handling colour have changed.
diff --git a/macros/plain/contrib/present/Sagnac.pdf b/macros/plain/contrib/present/Sagnac.pdf
new file mode 100644
index 0000000000..d7fc7cae23
--- /dev/null
+++ b/macros/plain/contrib/present/Sagnac.pdf
Binary files differ
diff --git a/macros/plain/contrib/present/Stern.png b/macros/plain/contrib/present/Stern.png
new file mode 100644
index 0000000000..b94b6646d0
--- /dev/null
+++ b/macros/plain/contrib/present/Stern.png
Binary files differ
diff --git a/macros/plain/contrib/present/background.png b/macros/plain/contrib/present/background.png
new file mode 100644
index 0000000000..d78f8b107c
--- /dev/null
+++ b/macros/plain/contrib/present/background.png
Binary files differ
diff --git a/macros/plain/contrib/present/present-transitions.tex b/macros/plain/contrib/present/present-transitions.tex
new file mode 100644
index 0000000000..fe28fa50e4
--- /dev/null
+++ b/macros/plain/contrib/present/present-transitions.tex
@@ -0,0 +1,53 @@
+%
+%
+% present-transitions.tex
+%
+% Author: Matthias Meister (tex@flamma-mentis.eu)
+% Version 1.0, April 2012
+%
+% This file is part of a work distributed under the LaTeX Project Public License.
+% The macros in this file are a supplement to the macros in present.tex.
+%
+\catcode`\@=11
+\let\simplelink=\link
+\let\simplelinkarea=\linkarea
+\let\simplepagelink=\pagelink
+
+\def\Tr@ns{Push}
+\def\D@r{2}
+
+\def\tl@nk#1#2{%
+\pdfstartlink attr {/Border [0 0 0]} user {/Subtype /Link /A <</S /GoTo /D /#1 /Next <</S /Trans /Trans << /S /\Tr@ns /D \D@r >> >> >>}#2%
+\pdfendlink}
+
+\def\tl@nkarea#1#2#3#4{%
+\pdfannot{%
+/Subtype /Link
+/Rect [#2]
+/Border [0 0 #3]
+/C [#4]
+/A << /S /GoTo /D (#1) /Next << /S /Trans /Trans << /S /\Tr@ns /D \D@r >> >> >>}}
+
+\def\tpagel@nk#1#2{%
+\pdfstartlink
+attr {/Border [0 0 0]} user {/Subtype /Link /A <</S /Named /N /#1 /Next << /S /Trans /Trans << /S /\Tr@ns /D \D@r>> >> >>}%
+#2%
+\pdfendlink}
+
+\def\NoTrans{%
+\global\let\link=\simplelink
+\global\let\pagelink=\simplepagelink
+\global\let\linkarea=\simplelinkarea
+}
+
+\def\UseTrans{%
+\global\let\link=\tl@nk
+\global\let\pagelink=\tpagel@nk
+\global\let\linkarea=\tl@nkarea
+}
+
+\def\SetDuration#1{\gdef\D@r{#1}}
+\def\SetTrans#1{\gdef\Tr@ns{#1}}
+
+\NoTrans
+\catcode`\@=12
diff --git a/macros/plain/contrib/present/present.tex b/macros/plain/contrib/present/present.tex
new file mode 100644
index 0000000000..30f94cde7a
--- /dev/null
+++ b/macros/plain/contrib/present/present.tex
@@ -0,0 +1,297 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% present.tex
+% Some macros for preparing presentations in TeX, using pdftex
+% Version 2.2.1
+% Copyright 2010-2019 Matthias Meister
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+%
+% This work has the LPPL maintenance status 'maintained'.
+%
+% The Current Maintainer of this work is:
+%
+% Matthias Meister (tex@flamma-mentis.eu)
+%
+% The work consists of the following files:
+% present.tex (the macro collection)
+% present-transitions.tex (additional macros, providing transition effects)
+% HowToTalkTeX.tex (an example of present.tex in use and a documentation)
+% HowToTalkTeX.pdf (pdf obtained from HowToTalkTex.tex with pdftex)
+% Stern.png (auxiliary file)
+% Sagnac.pdf (auxiliary file)
+% Pfeil1.pdf (auxiliary file)
+% Pfeil2.pdf (auxiliary file)
+% Pfeil3.pdf (auxiliary file)
+% Pfeil4.pdf (auxiliary file)
+% background.png (auxiliary file)
+%
+% (The auxiliary files are used in present.tex and HowToTalkTeX.tex, and
+% therefore should remain unchanged, too)
+%
+% With reference to the definitions in the LaTeX Project Public License, for the
+% purposes of this work a 'Base Interpreter' is a program implementing the TeX
+% language.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\catcode`\@=11
+
+
+\parindent0pt % Indentation probably not good for presentation
+\parskip0pt % Neither is automatic extra space between paragraphs
+
+\def\StandardAspect{% % Define "slide format", basically determined
+\pdfpagewidth=120mm % by aspect ratio of screen
+\pdfpageheight=90mm % StandardAspect gives 4:3 aspect ratio
+\vsize=67mm %
+\hsize=110mm % If you change these values,
+\hoffset=-20.4mm % do so with care.
+\voffset=-12.4mm %
+}
+
+\def\WideAspect{% % WideAspect gives 144:90 aspect ratio
+\pdfpagewidth=144mm %
+\pdfpageheight=90mm %
+\vsize=67mm % If you change these values,
+\hsize=134mm % do so with care
+\hoffset=-20.4mm %
+\voffset=-12.4mm %
+}
+
+
+%
+% Set some fonts
+%
+\font\titlefont=cmssbx10 at 20pt % Define fonts for title of presentation
+\font\normalfont=cmss12 % ordinary text
+\font\slidetitlefont=cmssbx10 % title of a slide
+\font\linkbarfont=cmss8 % the LinkBar (see below)
+\font\it=cmti12
+%
+\baselineskip=15pt
+% %% Below fonts for math are adapted to 12pt size
+\font\tfont=cmr12
+\font\sfont=cmr9
+\font\ssfont=cmr7
+\font\tifont=cmmi12
+\font\sifont=cmmi9
+\font\ssifont=cmmi7
+\font\tsyfont=cmsy10 at 12pt
+\font\ssyfont=cmsy9
+\font\sssyfont=cmsy7
+\font\texfont=cmex10 at 12 pt
+\font\sexfont=cmex9
+\font\ssexfont=cmex7
+%
+\textfont0=\tfont
+\scriptfont0=\sfont
+\scriptscriptfont0=\ssfont
+\textfont1=\tifont
+\scriptfont1=\sifont
+\scriptscriptfont1=\ssifont
+\textfont2=\tsyfont
+\scriptfont2=\ssyfont
+\scriptscriptfont2=\sssyfont
+\textfont3=\texfont
+\scriptfont3=\sexfont
+\scriptscriptfont3=\ssexfont
+%
+
+%
+% Definitions to allow referencing the last page of a document
+%
+\newwrite\wl@stpage
+\newread\rl@stpage
+\def\bye{%
+\immediate\openout\wl@stpage=\jobname.lp% The number of the last slide is written in a file
+\write\wl@stpage{\the\pageno}% % with extension .lp
+\closeout\wl@stpage
+\par\vfill
+\supereject
+\end
+}
+\def\LP{undef}
+\openin\rl@stpage=\jobname.lp
+\ifeof\rl@stpage\closein\rl@stpage\message{RUN AGAIN to get correct number of last page!}
+\else\read\rl@stpage to \LP\fi
+
+%
+% Define some colours
+%
+% The commands below handle colour without color.tex, directly with pdftex
+% Added October 3rd, 2010
+
+% Define colours
+\def\backgroundcolour{1.0 1.0 1.0} % Colour of page background
+\def\textcolour{0.0 0.0 1.0} % Colour of text
+\def\attentioncolour{1 0 0} % Colour for "Attention"
+
+\newdimen\vsh@ft % vertical shift for background image, vsh@ft+\voffset=-25.4mm
+\newdimen\hsh@ft % horizontal shift for background image, hsh@ft+\hoffset=-25.4mm
+\vsh@ft=-13mm
+\hsh@ft=-5mm
+
+\def\bl@nk{ } % Introduced this
+\newcount\colst@ck
+\colst@ck=\pdfcolorstackinit page {\textcolour\bl@nk rg \textcolour\bl@nk RG} % and modified this on March 20, 2012
+\def\popst@ck{\pdfcolorstack\colst@ck pop}
+\def\setcolour#1{\pdfcolorstack\colst@ck push {#1 rg #1 RG}\aftergroup\popst@ck}
+\long\def\coloured#1#2{{\setcolour#1#2}}
+\long\def\att#1{\coloured\attentioncolour{#1}}
+\def\bgc@lset{\relax}
+\def\setbgcolour#1{\def\bgc@lset{\begingroup\pdfcolorstack\colst@ck push {#1 rg #1 RG}\aftergroup\popst@ck
+\vbox to 0pt{\kern\vsh@ft\hbox to 0pt{%
+\kern\hsh@ft\vrule depth0pt height\pdfpageheight width\pdfpagewidth\hss}\vss}
+\nointerlineskip
+\endgroup}}
+
+
+\def\NewSlide{\vfill\eject} % Begin a new slide; slide number increases
+
+\def\NewFrame{\vfill\eject\advance\pageno by -1} % Begin new frame ("same" slide, with changes)
+ % slide number does not change
+
+\def\SlideTitle#1{% % Set the slide title, show it as the headline
+\global\headline{% % of the slide in slidetitlefont, with a
+\vbox to 5mm{% % horizontal line separating the headline from
+\hbox to \hsize{\slidetitlefont #1}% % the main body of the slide
+\vskip3pt plus 1fil minus 1fil
+\hrule height 1pt depth 0pt
+}}}
+
+\def\SlideFoot{% % Set the footline of the slide, separated by
+\global\footline{% % a horizontal slide from the main body of the
+\vbox to 5mm {% % slide. This macro takes no argument.
+\hrule height 1pt depth 0pt % Several possibilities are provided below.
+\vskip3pt plus 1fil minus 1fil % Only one of the following options should be
+\hbox to \hsize{% % uncommented.
+\rlap{\LinkBar}\phantom{\PageBar}\hfil{\normalfont\the\pageno/\LP}\hfil\PageBar% Links to sections,
+% %slide number, page navigation
+%\hfil\the\pageno/\LP\hfil% % Slide number; \LP is number of last slide
+%% % empty
+}}}}
+
+\def\LinkBar{% % If you use LinkBar, you have to define it and possibly redefine
+LinkBar} % it at several places in your talk. The definition given
+ % just prints "LinkBar", in order to show where it goes.
+
+\def\PageBar{% % This provides page navigation: Next page, previous page,
+\hbox{% % going back and forth in page history
+\pagelink{PrevPage}{\image[width4mm]{Pfeil2.pdf}}\kern2mm
+\pagelink{NextPage}{\image[width4mm]{Pfeil1.pdf}}\kern2mm
+\pagelink{GoBack}{\image[width4mm]{Pfeil3.pdf}}\kern2mm
+\pagelink{GoForward}{\image[width4mm]{Pfeil4.pdf}}
+}}
+
+%
+% Make #2 a link to the destination named #1 in the presentation.
+% A destination is created and named with the \target control word.
+%
+\def\link#1#2{%
+\pdfstartlink attr {/Border [0 0 0]} goto name {#1}
+#2%
+\pdfendlink}
+
+%
+% Creates named destination at position where it is issued. #1 is name of destination.
+%
+\def\target#1{%
+\pdfdest name {#1} xyz\relax}
+
+%
+% Used in the PageBar. Uses the predefined actions PrevPage etc.
+%
+\def\pagelink#1#2{%
+\pdfstartlink
+attr {/Border [0 0 0]} user {/Subtype /Link /A <</S /Named /N /#1>>}%
+#2%
+\pdfendlink}
+
+%
+% Sets a rectangular area of the screen to be a link to a destination.
+% #1 is the destination (in the same document); it can be a named or other destination
+% #2 defines the rectangle which is the active link area, specified by
+% four space separated numbers corresponding to lower left and upper right corners
+% #3 is the border width (in "default user-space units")
+% #4 is the RGB-color, specified as three space separated numbers R G B between 0 and 1
+%
+\def\linkarea#1#2#3#4{%
+\pdfannot{%
+/Subtype /Link
+/Rect [#2]
+/Border [0 0 #3]
+/C [#4]
+/A << /S /GoTo /D (#1) >>}}
+
+%
+% Make #2 a link to the web destination #1
+%
+\def\weblink#1#2{%
+\pdfstartlink attr {/Border [0 0 0]} user {/Subtype /Link /A << /S /URI /URI (#1) >>}%
+#2\pdfendlink}
+
+%
+% Make #3 a link to destination #2 in file #1 (a pdf-file). One of several possible forms of a destination
+% is [page /Fit], where "page" is the page number in the file, counting from 0
+% Named destinations are also possible
+%
+\def\filelink#1#2#3{%
+\pdfstartlink attr {/Border [0 0 0]} user {/Subtype /Link /A << /S /GoToR /F (#1) /D #2 /NewWindow true >>}%
+#3\pdfendlink}
+
+%
+% Includes an image. The image file name is #2, and #1 is a specification of the dimension of the
+% image (will be scaled accordingly) in the usual TeX syntax (width, height, depth).
+%
+\def\image[#1]#2{%
+\pdfximage #1 {#2}\pdfrefximage\pdflastximage}
+
+%\def\movie#1#2#3{%
+%\pdfstartlink attr {/Border [0 0 0]} user {/Subtype /Link /A << /S /Launch /F (mplayer -noborder -ontop -geometry #2 #1) >>}%
+%#3\pdfendlink}
+
+\footline{} % Set some
+\StandardAspect % default values
+
+%
+% Added 28. August 2010. Not part of version 1.0
+%
+% Setting / unsetting a background image. If no background image is used, the background shows background colour
+%
+\def\h@lpr{\relax}
+\def\BIM@G{\relax}
+\def\SetBackground#1{\def\BIM@G{#1}}
+\def\UnsetBackground{\def\BIM@G{\relax}}
+\output{%
+\shipout\vbox{%
+\bgc@lset
+\ifx\BIM@G\h@lpr \else
+{\vbox to 0pt{\kern\vsh@ft\hbox to 0pt{\kern\hsh@ft\image[width\pdfpagewidth height\pdfpageheight]{\BIM@G}\hss}\vss}%
+\nointerlineskip}\fi
+\makeheadline
+\pagebody
+\makefootline}
+\advancepageno
+\ifnum\outputpenalty>-20000\else\dosupereject\fi}
+
+\def\rm{\fam=0} %% Added 14. September 2010. Use roman font in math.
+
+%%%
+%%% Macros for incremental showing of slides (frames).
+%%% Added 29. March 2012
+%%%
+\newcount\ind@x
+\newcount\m@xind
+\long\def\Frames#1#2{\m@xind=#1\long\def\Fr@mes{#2}}
+\def\endFrames{\ind@x=0%
+\loop\advance\ind@x by 1\begingroup\Fr@mes\endgroup\ifnum\ind@x<\m@xind\NewFrame\repeat}
+\def\onframe#1#2{\ifnum\ind@x=#1#2\else\relax\fi}
+\def\afterframe#1#2{\ifnum\ind@x>#1#2\else\relax\fi}
+\def\beforeframe#1#2{\ifnum\ind@x<#1#2\else\relax\fi}
+\def\hide{\setcolour\backgroundcolour}
+\catcode`\@=12
diff --git a/macros/plain/contrib/resumemac/README b/macros/plain/contrib/resumemac/README
new file mode 100644
index 0000000000..78147db365
--- /dev/null
+++ b/macros/plain/contrib/resumemac/README
@@ -0,0 +1,3 @@
+resumemac provides plain TeX macros for typesetting a resume. The package was originally written by Dan Hoesk and is public domain.
+
+This README added by Clea F. Rees 2008/11/16.
diff --git a/macros/plain/contrib/resumemac/resumemac.tex b/macros/plain/contrib/resumemac/resumemac.tex
new file mode 100644
index 0000000000..27ea483957
--- /dev/null
+++ b/macros/plain/contrib/resumemac/resumemac.tex
@@ -0,0 +1,270 @@
+% This file is public domain.
+% Originally written 1992, Don Hosek.
+% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Resume macro file for plain.TeX.
+%
+% To Use:
+% \input resumemac
+% \magnification=\magstep0 % (Or whatever size is desired)
+% % Setting \magnification is optional.
+% \name{Your Name Here}
+% \address{Separated by \\
+% Type your address\\
+% In this space.}
+% \date{Either type it yourself, or use \today}
+% \tag{Whatever the category is}
+% Information for this item...
+% .
+% .
+% .
+% \endtag
+% Repeat \tag...\endtag as necessary.
+% Inside of \tag...\endtag, you may use \(dates)what happened then\\ for
+% itemized lists.
+%
+% To set the heading format say:
+% \centerheading (for centered headings)
+% \leftheading (for left justified headings)
+% \rightheading (for right justified headings) or
+% \specialheading (for a special ``letterhead'' style heading.)
+% Before you enter the heading commands
+%
+% Use \magnification to modify text sizes.
+%
+% Written By Don Hosek <DHOSEK@HMCVAX.BITNET>
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%
+%%% Initializations...
+%%%
+\catcode`\@=11
+
+\newskip\interTAGskip
+
+\newbox\TAGbox \newbox\INFObox
+\newdimen\TAGboxhsize \newdimen\INFOboxhsize \newdimen\INFOboxlength
+\newdimen\DATEhsize \newdimen\DATEINFOhsize \newdimen\@datesepamount
+\hsize=6.5truein \vsize=9.0truein \interTAGskip=12pt
+\parindent=0pt
+\TAGboxhsize=0.9truein \INFOboxhsize=5.3truein % Take care that TAGboxhsize +
+ % INFOboxhsize = hsize - 0.1in
+\DATEhsize=.75truein \DATEINFOhsize=4.4truein % Take care that DATEhsize +
+\@datesepamount=.15truein % DATEINFOhsize is <=
+ % INFOboxhsize
+\let\wheretoputit=c \let\\=\cr
+\nopagenumbers
+
+%%%
+%%% Fonts...
+%%% Change am.. to cm.. if you are using that series of fonts.
+%%% System wizards may modify this section to conform to system needs and
+%%% user desires.
+%%%
+\font\NAMEfont=cmbx10 scaled 1200 \font\TAGfont=cmbxsl10
+\font\smallADDRESSfont=cmr9
+
+%%%
+%%% The top macros...
+%%%
+%%% First off is the ever-popular \today macro...
+%%% (cribbed from LaTeX's Letter format.) Basically a long \ifcase on the
+%%% \month register.
+%%%
+\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}
+
+%%%
+%%% \specialline is a special version of \line that permits you to select
+%%% centered, right or left adjusting via an option in []s. We call this in
+%%% the right-, left-, and centerheadings styles.
+%%%
+\def\specialline[#1]#2{
+ \ifx#1l\leftline{#2}
+ \else\ifx#1r\rightline{#2}
+ \else\centerline{#2}
+ \fi
+ \fi}
+
+%%%
+%%% \name, \address, \date put the parameter information into \@ whatever
+%%%
+\def\name#1{\def\@name{#1}}
+\def\address#1{\ifx\@address\undefined % allow multiple addresses...
+ \def\@address{#1}
+ \else
+ \def\@@address{#1}
+ \fi}
+\def\date#1{\def\@date{#1}}
+
+%%%
+%%% Now for the meat and potatoes macro: \tag...\endtag
+%%%
+%%% \tag
+%%% Check to see if this is the first tag... If it is, then we want to
+%%% print the header information at the top.
+%%% We put the first parameter in \TAGinfo, to be used later, and then
+%%% begin to put the remainder of the text in a box (the box will be removed
+%%% later on for flexibility in making page breaks).
+%%%
+\def\tag#1{\ifx\@headerprinted\undefined % check to see if this is the first tag
+ \let\@headerprinted=X %change status of @headerprinted
+ \printheader % print the header
+ \fi
+ \def\TAGinfo{#1} % Communication to \endtag
+ \setbox\INFObox=\vbox\bgroup\hsize=\INFOboxhsize}
+
+%%%
+%%% \endtag
+%%% \endtag finishes off the box begun by \tag and and prints the entry
+%%% in the resume using valign.
+%%%
+\def\endtag{\egroup
+ \vskip\interTAGskip
+ \setbox\TAGbox=\vbox{\hsize=\TAGboxhsize
+ \raggedright\hyphenchar\TAGfont=-1
+ \tolerance=20000 % Don't get uptight about lines.
+ \hbadness=10000 % And don't talk about it either.
+ \TAGfont \TAGinfo \vfill}
+ \valign{##\vfill\cr
+ \unvbox\TAGbox\cr
+ \noalign{\hfill}
+ \unvbox\INFObox\cr}}
+
+%%%
+%%% Now that wasn't too bad, now was it?
+%%% Next we create the \(...)... macro to make a few other things
+%%% easier
+%%%
+
+%%%
+%%% \(dates)
+%%% whatever happened during that time\\
+%%% This macro also uses valign to align its text.
+%%%
+\def\(#1)#2\\{\par
+ {\tabskip=0pt %change tabskip only inside this macro.
+ \vskip4pt plus 2pt minus3pt
+ \valign{##\vfill\cr
+ \vbox{\hsize=\DATEhsize\leftskip=0pt plus1fill#1}\cr
+ \noalign{\hskip\@datesepamount}
+ \vbox{\hsize=\DATEINFOhsize#2}\cr
+ \noalign{\hfill}}}
+ \par}
+
+%%%
+%%% Heading options:
+%%%
+%%% \leftheading
+%%%
+\def\leftheading{\let\@hstyle=l}
+
+%%%
+%%% \rightheading
+%%%
+\def\rightheading{\let\@hstyle=r}
+
+%%%
+%%% \centerheading
+%%%
+\def\centerheading{\let\@hstyle=c}
+
+%%%
+%%% \specialheading
+%%%
+\def\specialheading{\let\@hstyle=s}
+
+%%%
+%%% \heading{heading_type}
+%%%
+%%% LaTeX-style command for specifying headig type... use something
+%%% along the lines of \heading{right} to set the heading type.
+\def\heading#1{\csname#1heading\endcsname}
+
+%%%
+%%% \printheader
+%%% internal macro for printing the header. Should not be called by user!
+%%% uses information set by the heading commands.
+%%%
+\def\printheader{\ifx\@date\undefined
+ \def\@date{\today} %if date was not specified, use today's date.
+ \fi
+ \ifx\@hstyle s
+ \begingroup
+ \def\\{, }
+ \line{{\NAMEfont\@name}\hfil{\smallADDRESSfont\@address}}
+ \ifx\@@address\undefined\relax\else %two addresses !
+ \line{\hfil{\smallADDRESSfont\@@address}}
+ \fi
+ \endgroup
+ \smallskip
+ \hrule
+ \smallskip
+ \rightline{\@date}
+ \else\ifx\@hstyle r
+ \begingroup
+ \let\\=\cr
+ \halign{\hbox to\hsize{\hfill##\hfil}\cr
+ \NAMEfont\@name\cr
+ \@address\cr
+ \noalign{\smallskip}
+ \ifx\@@address\undefined\relax\else
+ \@@addresscr
+ \noalign{\smallskip}
+ \fi
+ \@date\crcr}
+ \endgroup
+ \else\ifx\@hstyle l
+ \begingroup
+ \let\\=\cr
+ \halign{##\hfil\cr
+ \NAMEfont\@name\cr
+ \@address\cr
+ \noalign{\smallskip}
+ \ifx\@@address\undefined\relax\else
+ \@@addresscr
+ \noalign{\smallskip}
+ \fi
+ \@date\crcr}
+ \endgroup
+ \else\ifx\@hstyle c
+ \centerline{\NAMEfont\@name} % The easy way to do it.
+ \ifx\@@address\undefined
+ \centeroneaddress
+ \else
+ \centertwoaddresses
+ \fi
+ \centerline{\@date}
+ \fi\fi\fi\fi}
+
+\def\@@addresscr{\@@address\cr} %hack to fool ifx
+
+\def\centeroneaddress{\begingroup
+ \let\\=\cr
+ \tabskip=0pt plus1fill
+ \halign to \hsize{\hfil##\hfil\cr
+ \@address\crcr}
+ \smallskip
+ \endgroup}
+
+\def\centertwoaddresses{\begingroup
+ \let\\=\cr
+ \tabskip=0pt
+ \valign{##\vfill\cr
+ \noalign{\hfill}
+ \vbox{\hsize=.4\hsize\tabskip=0ptplus1fill
+ \halign to\hsize{\hfil##\hfil\cr
+ \@address\crcr}}\cr
+ \vbox{\hsize=.4\hsize\tabskip=0ptplus1fill
+ \halign to\hsize{\hfil##\hfil\cr
+ \@@address\crcr}}\cr
+ \noalign{\hfill}}
+ \smallskip
+ \endgroup}
+
+\catcode`\@=12
diff --git a/macros/plain/contrib/resumemac/sample_resume.tex b/macros/plain/contrib/resumemac/sample_resume.tex
new file mode 100644
index 0000000000..32f4100705
--- /dev/null
+++ b/macros/plain/contrib/resumemac/sample_resume.tex
@@ -0,0 +1,56 @@
+% This file is public domain.
+% Originally written 1992, Don Hosek.
+% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%
+\input resumemac
+\heading{center}
+\name{Donald A. Hosek}
+\address{\bf Home:\\
+ 3916 Elmwood Avenue\\
+ Stickney, IL 60402}
+\address{\bf School:\\
+ Platt Campus Center\\
+ Harvey Mudd College\\
+ Claremont, CA 91711}
+\tag{Job Objective}
+Employment for the period from May, 1987 to August, 1987 doing technical writing
+and/or programming
+\endtag
+\tag{Previous Employment}
+Jobs held were:
+\(Nov.~1986--Present)\TeX\ consultant, Harvey Mudd College Mathematics
+Department. Duties: answering questions about the \TeX\ computer typesetting
+system; writing special macros; and creating documentation.\\
+\(June~1986--Aug.~1986)Word processing consultant, University of Illinois at
+Chicago. Duties: Answering questions about the word processing packages
+supported by the University of Illinois Computer Center (SCRIPT, GML, \TeX);
+and writing macro packages for \TeX.\\
+\(Jan.~1986--Aug.~1986)General Consultant, University of Illinois at Chicago.
+Duties: Answering questions from users about the computer center's IBM mainframe
+running VM/CMS and MVS---support included FORTRAN, PL/1, Pascal, 370 Assembler,
+C, and JCL; tending the Xerox~8700, IBM~3270, and General Electric printers; and
+programming projects to augment system software.\\
+\endtag
+\tag{Education}
+Eventual educational goal is to have doctorates in English and mathematics.
+\(Sep.~1986--Present)Harvey Mudd College. Currently working on B.~S. degree in
+a double major of mathematics and English.\\
+\(Sep.~1985--Aug.~1986)University of Illinois at Chicago. Additional studies.
+Coursework consisted of mathematics and humanities classes.\\
+\endtag
+\tag{Additional work}
+Since January, 1987, I have been publishing an electronic ``magazine'',
+\TeX MaG, distributed through the BITNET and InterNET electronic networks. The
+magazine is intended to distribute macros, product information, etc., to users
+of the \TeX\ computer typeseting system. It is distributed to nearly two hundred
+people around the world.
+
+Since September, 1984, I have been involved in student journalism. My
+involvement has included photography (taking, developing, and printing
+pictures), and writing (including a bi-weekly column written for a year).
+\endtag
+\tag{Hobbies}
+Music (I play bass, piano, guitar, and sing), writing, and photography.
+\endtag
+\bye
+ G'Day
diff --git a/macros/plain/contrib/reverxii/README b/macros/plain/contrib/reverxii/README
new file mode 100644
index 0000000000..f008369cb8
--- /dev/null
+++ b/macros/plain/contrib/reverxii/README
@@ -0,0 +1,20 @@
+----------------------------------------------------------------
+reverxii --- Playing Reversi, in the spirit of xii.tex
+E-mail: blflatex@gmail.com
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+The file reverxii.tex is a 938 character long TeX program which
+lets you play Reversi against your favorite typesetting engine.
+Play by running
+
+ tex reverxii.tex
+
+in the command line. This will also produce a record of your
+game as reverxii.dvi. Typeset the documentation by running
+
+ pdflatex reverxii.tex
+
+This is work in progress, all suggestions/comments/bug reports
+are welcome! \ No newline at end of file
diff --git a/macros/plain/contrib/reverxii/reverxii.pdf b/macros/plain/contrib/reverxii/reverxii.pdf
new file mode 100644
index 0000000000..b2732c7816
--- /dev/null
+++ b/macros/plain/contrib/reverxii/reverxii.pdf
Binary files differ
diff --git a/macros/plain/contrib/reverxii/reverxii.tex b/macros/plain/contrib/reverxii/reverxii.tex
new file mode 100644
index 0000000000..7877c70ab1
--- /dev/null
+++ b/macros/plain/contrib/reverxii/reverxii.tex
@@ -0,0 +1,383 @@
+% \iffalse
+\begingroup
+ \def\tmp{plain}
+ \expandafter
+\endgroup
+\csname if\ifx\tmp\fmtname false\else true\fi\endcsname
+ \documentclass{article}
+ \usepackage{shortvrb}
+ \MakeShortVerb|
+ \catcode`\%=9
+ \input \jobname.tex
+\fi
+% \fi
+%
+% \title{\texttt{reverxii.tex}\\
+% Playing Reversi in \TeX{}}
+% \author{Bruno Le Floch}
+% \date{December 28, 2011}
+% \newcommand{\cs}[1]{\texttt{\char`\\ #1}}
+% \newcommand{\meta}[1]{$\langle \mathit{#1}\rangle$}
+% \newcommand{\enquote}[1]{``#1''}
+% \makeatletter
+% \def\verbatim{\@verbatim\frenchspacing\@vobeyspaces\catcode`\%=9 \@xverbatim}
+% \makeatother
+% \begin{document}
+% \maketitle
+%
+% \begin{abstract}
+% \texttt{reverxii.tex} is a $938$-byte long \TeX{} program
+% which lets you play Reversi against your favorite typestting engine.
+% To play, run plain \TeX{}, on the command line, in dvi-mode,
+% on the file \texttt{reverxii.tex}. In most distributions,
+% this should mean running \texttt{tex reverxii.tex} in a terminal.
+% To produce the documentation, run \LaTeX{} on the same file,
+% with any engine (\emph{e.g.}, \texttt{pdflatex reverxii.tex}).
+% \end{abstract}
+%
+% \section{The code}
+%
+% Line breaks can be removed, and the stripped down code takes $938$
+% characters.
+% \begin{verbatim}
+\vsize5cm\hsize3cm\newlinechar`*\def~#1{\catcode`#113~}
+~IJKLMNOPQRSTUVWXYZjqz@.[|](/+^'";:?,_)!*{ 13\def~#1#2{\let#1#2~}
+\def+{\count1}+1=2}*\cr[\ifnum(\ifcase|\or/\else]\fiN\number@\advance
+X\expandafter!\global?\message~\def.#1{@+1 1\countdef#1+1.}
+.IJKLPQRSTUVWYZ.-1P1T2+44P+55P+45T+54T
+~j{[0<Q[9>Q[0<J[9>J^/.]/.]/.]/.]}
+~^{+NQNJ}~:#1{#11#12#13#14#15#16#17#18}~M#1{?{#1}#1}
+~_#1#2{M#2:{\B#1}&M#2&M{*}}~\B#1#2{&M{(+#1#2 |-|0]}}
+~q{?{Row and column? e.g. E6*}\read.to\EX\D\meaning\E ;}
+~\D#1->#2#3#4;{Q`#2@Q-`@J`#3@J-`0)(V?{Invalid move #2#3.}q]}
+~){V0 (jS1z1z0z.S0z1z.S.z1z0z.]}~;{@R(P|-]}~z#1{{K#1Z1{Y1,}(Z,]}}
+~,{@QS@JK[j=T(Y!^P!;2]O,/[j=P!VV(I(Y/!Z0]]]]}~\A#1{Q#1:\C}
+~\C#1{J#1)[0<VO[V>WWVUQLJ]]}~"#1{(#1|0|1|2|2|2|2|1|0]}
+~O{Z"Q\multiplyZ3@Z"J@V(Z9|1|6|1|1|2|6|2|4] }~'{M :{&M}&M{*}}
+~~{PXTXTNP\halign{&## *M{*}'_1A_2B_3C_4D_5E_6F_7G_8H'}\vfil\break
+I1W(W./0] :\AI0 [0<W[1=PQUJL/q])^P;1][.=W?{(RTie/ Player [0>R-/0]
+wins by N[0>R-]R].}X\end]~}~
+% \end{verbatim}
+%
+% To play a two-player game, change |1=P| to |0=P| near the end:
+% this changes the computer player from $0$ to $1$, hence disabling it.
+%
+% \section{Explanation}
+%
+% \subsection{Some comments}
+%
+% The name \texttt{reverxii.tex} is of course a reference to the infamous
+% \texttt{xii.tex}, also on CTAN, which typesets the lyrics of the
+% \textit{Twelve days of Christmas} using code that very few can understand.
+% In my case, I aimed for the shortest possible code, rather than the
+% most obfuscated. In particular, I did not assign weird catcodes
+% other than making most characters active.
+%
+% Since I was aiming for short code, the text presented to the player
+% is concise, but hopefully enough to leave the game understandable
+% and usable. Despite aiming for short code, I thought it would be
+% neat to typeset a record of the game as it goes: after all, \TeX{}
+% is a typesetting program. This used up around $38$ characters, putting
+% me above the $900$ character line.
+%
+% One technique used to make the code shorter is to rename any primitive
+% used more than once into a single active character. Also, counters
+% holding the information about the board are accessed directly by number.
+%
+% A careful reader would notice that changing one of the remaining
+% one-character control sequences to active characters (|$| is still
+% unused) would gain one character. I didn't do it, because it messes
+% up the code-highlighting of my editor |:)|. Of course, I chose the
+% control sequences which are not active characters to be those appearing
+% the least, only twice each.
+%
+% \subsubsection{On with the code!}
+%
+% First set up the page dimensions. This would not be enough for pdf output.
+% \begin{verbatim}
+% \vsize5cm
+% \hsize3cm
+% \end{verbatim}
+%
+% Since plain \TeX{} does not provide the \cs{typeout} command, we are
+% using \cs{message}, hence need to setup a new line character. It is
+% arbitrarily chosen to be |*|, which will be made active and \cs{let}
+% to \cs{cr}.
+% \begin{verbatim}
+% \newlinechar`*
+% \end{verbatim}
+%
+% Then a first loop to make many characters active. The loop ends when
+% reaching the trailing brace group: there we make spaces active, then
+% redefine |~| for the next loop. We still have an annoying |13~| in
+% the input stream. Introduce a short-hand for count registers whose
+% number starts with |1|, then remove |13| by setting |\count11| to
+% |213| (this counter is used for allocation later on). The next loop
+% is triggered by the |~| which we left.
+% \begin{verbatim}
+% \def~#1{\catcode`#113~}
+% ~IJKLMNOPQRSTUVWXYZjqz@.[|](/+^'";:?,_)!*
+% { 13\def~#1#2{\let#1#2~}\def+{\count1}+1=2}
+% \end{verbatim}
+%
+% At this stage, |~| is defined to take two arguments, \cs{let} the
+% first to the second, and repeat. As announced |*| becomes \cs{cr},
+% so that it will be a new line both in messages and in alignments.
+% We try to keep a relatively consistent naming scheme: opening
+% conditionals are left delimiters, \cs{or} and \cs{else} are
+% middle delimiters, and \cs{fi} is a right bracket. Other primitives
+% which are used a lot are also given short names. The loop ends by
+% redefining |~| to \cs{def}.
+% \begin{verbatim}
+% *\cr
+% [\ifnum
+% (\ifcase
+% |\or
+% /\else
+% ]\fi
+% N\number
+% @\advance
+% X\expandafter
+% !\global
+% ?\message
+% ~\def
+% \end{verbatim}
+%
+% It is time to allocate counters. Unfortunately, \cs{newcount}
+% is \cs{outer}, so it is unpractical to use. We have set |+1|,
+% \emph{aka.} |\count11| to $213$, and will allocate counters
+% starting from that number upwards. Repeatedly advance |+1|
+% by $1$ and define the next character to be the counter number |+1|,
+% then repeat. As always, the loop is interrupted by making it
+% redefine the looping macro |.| to be a counter. We use the trailing
+% dot to assign it the value $-1$, then assign a couple of counters:
+% starting player, other player, and the initial position:
+% the squares in rows and columns $4$ and $5$ are initially
+% filled in a cross pattern.
+% \begin{verbatim}
+% .#1{@+1 1\countdef#1+1.}.IJKLPQRSTUVWYZ.-1P1T2+44P+55P+45T+54T
+% \end{verbatim}
+% Let us summarize which counters are used where:
+% \begin{itemize}
+% \item [P] is the current player ($1$ for |-| or $2$ for |0|);
+% \item [T] is the other player;
+% \item [Q] is the row number;
+% \item [J] is the column number;
+% \item [S] is the step size in the row direction;
+% \item [K] is the step size in the column direction;
+% \item [R] is the score difference, positive when $0$ is winning;
+% \item [V] is used when computing the value of placing a piece at
+% the position (|Q|,|J|);
+% \item [W] is the value of the best possible move according to the AI,
+% also used to end the game if neither player can move;
+% \item [U] is the row number of the best move;
+% \item [L] is the column number of the best move;
+% \item [Y] is a boolean, true ($0$) most of the time,
+% it has to do with when we flip or not, but I don't
+% understand it now, help welcome;
+% \item [Z] is a temporary counter, used locally to compute
+% how much a given cell matters (\emph{i.e.} corners are important),
+% and used globally as a boolean to indicate whether to flip pieces
+% or not.
+% \end{itemize}
+%
+% The board is stored in counters |1|\meta{row}\meta{column}.
+% An empty square is has the value $0$, a square for player |-|
+% has value $1$, and player |0| corresponds to the value $2$.
+% The macro |j| retrieves that value, assuming that the row and
+% column numbers are stored as |Q| and |J|, and returns |.|,
+% that is, $-1$, if outside the board. Recall that |[| is \cs{ifnum},
+% |/| is \cs{else}, and |]| is \cs{fi}. When |Q| and |J| are
+% within bounds, the value is retrieved by |^| as
+% |\count1|\meta{row}\meta{column}. Note that |j| and |^| are
+% only safe to use on the left-hand side of an \cs{ifnum} test
+% (because of expansion issues), and that |^| can be used
+% on the left-hand side of an assignment.
+% \begin{verbatim}
+% ~j{[0<Q[9>Q[0<J[9>J^/.]/.]/.]/.]}
+% ~^{+NQNJ}
+% \end{verbatim}
+%
+% We often need to loop over numbers from $1$ to $8$; here is a macro.
+% \begin{verbatim}
+% ~:#1{#11#12#13#14#15#16#17#18}
+% \end{verbatim}
+%
+% The macros to print the board, both to the dvi and to the console.
+% |M| spews its argument as a \cs{message} (|?|), and directly typeset.
+% This is used rather directly to print the first and last lines (|'|),
+% which are simply alignment cells containing each number from $1$ to $8$,
+% with some care given to spaces and new lines.
+% The |_| macro receives a digit and the corresponding capital letter
+% as arguments, and outputs that row of the board. First place the
+% letter on the left of the board, then loop from $1$ to $8$,
+% typesetting and \cs{message}ing a space, |-| or |0|, depending on
+% the value of the relevant count register. Note the two spaces
+% in the definition: the first ends the counter's number, the second
+% is typeset (in plain \TeX{}, active spaces expand to a normal space).
+% \begin{verbatim}
+% ~M#1{?{#1}#1}
+% ~'{M :{&M}&M{*}}
+% ~_#1#2{M#2:{\B#1}&M#2&M{*}}
+% ~\B#1#2{&M{(+#1#2 |-|0]}}
+% \end{verbatim}
+%
+% The input is done by |q|, which queries the user until they give
+% a correct input, so that |Q| and |J| are in the range $[1,8]$.
+% Prompt the user with a small \cs{message}, giving an example
+% of what move he could do (only true at the start, but the hope
+% is that the player will understand what the input format is).
+% The code that follows is similar to \LaTeXe{}'s \cs{@onelevel@sanitize}.
+% We extract the two first characters from the the \cs{meaning}
+% of the user's input (remember, |X| is \cs{expandafter}),
+% as |#2| and |#3| of \cs{D}. Grab the character code of each,
+% relative to the characters |@| (row) or |0| (column).
+% The closing parenthesis is where most of the work is done.
+% It sets |V| to the value of placing a piece in the cell
+% $(|Q|,|J|)$, zero if the move does not flip any of the opponent's
+% pieces, or if the cell is outside the board. After performing
+% that calculation, if |V| is zero, the move was not valid,
+% and we query the user again.
+% \begin{verbatim}
+% ~q{?{Row and column? e.g. E6*}\read.to\EX\D\meaning\E ;}
+% ~\D#1->#2#3#4;{Q`#2@Q-`@J`#3@J-`0)(V?{Invalid move #2#3.}q]}
+% \end{verbatim}
+%
+% So\ldots{} how do we compute the \enquote{value} of a move?
+% It is automatically invalid if |j| does not return $0$:
+% either the cell is occupied, or it is outside the board.
+% Then for each of the $8$ directions around the cell,
+% we count the number of pieces that are flipped in that
+% direction. The direction is stored as two counters,
+% |S| and |K|, each $\pm 1$ or $0$. We call |,| a first
+% time to test whether flipping should happen in that direction,
+% and, if it is (as indicated by the global value of |Z|),
+% call it again to actually flip. The call to |,| must happen
+% within a group, because it directly changes the row and column
+% numbers |Q| and |J|, following which cell is being queried.
+% \begin{verbatim}
+% ~){V0 (jS1z1z0z.S0z1z.S.z1z0z.]}
+% ~z#1{{K#1Z1{Y1,}(Z,]}}
+% \end{verbatim}
+%
+% The macro |,| is recursive. At each step, move $(|Q|,|J|)$
+% in the direction $(|S|,|K|)$. Then, if that cell (|j|)
+% contains a piece belonging to the other player (|T|),
+% do some stuff |(Y!^P!;2]O| and repeat. What is it that
+% we do? Well, if the condition |Y| is met (I don't remember
+% how that works), we set the current cell to belong to the
+% player, globally, and change the score difference by $2$
+% (see |;|), also globally. Then, we compute with |O| the value
+% corresponding to the cell that we might be flipping (see |O|).
+%
+% Otherwise (|/|), if the cell (|j|) contains a piece from the
+% current player (|P|), it means we have reached the end of a
+% run of the form \meta{initial cell} \meta{opponent's pieces}
+% \meta{own piece}, hence the \meta{opponent's pieces} should
+% count as flipped if we place our piece in the \meta{initial
+% cell}. Until there, all changes to |V| were local, returning
+% to the old value at the end of the group that |,| is contained
+% in. Since the run in that direction was successful, we escape
+% the value of |V| from the group with |\global V=V|. Under
+% some conditions, we set the boolean |Z| to true, globally (|!Z0|),
+% which triggers a second call to |,| with different setting,
+% and actually flips the opponent's pieces.
+% \begin{verbatim}
+% ~,{@QS@JK[j=T(Y!^P!;2]O,/[j=P!VV(I(Y/!Z0]]]]}
+% \end{verbatim}
+%
+% I moved those |O| and |"| guys a little bit in this explanation,
+% but not in the original implemenation, because it is hard
+% to sync. We assign weights to each of the $64$ cells:
+% \begin{center}
+% \halign{&\hfil#\hfil\cr
+% 9 & 1 & 6 & 6 & 6 & 6 & 1 & 9 \cr
+% 1 & 1 & 2 & 2 & 2 & 2 & 1 & 9 \cr
+% 6 & 2 & 4 & 4 & 4 & 4 & 2 & 6 \cr
+% 6 & 2 & 4 & 4 & 4 & 4 & 2 & 6 \cr
+% 6 & 2 & 4 & 4 & 4 & 4 & 2 & 6 \cr
+% 6 & 2 & 4 & 4 & 4 & 4 & 2 & 6 \cr
+% 1 & 1 & 2 & 2 & 2 & 2 & 1 & 9 \cr
+% 9 & 1 & 6 & 6 & 6 & 6 & 1 & 9 \cr}
+% \end{center}
+% All weights are positive, so that every move which flips a piece
+% ends up with a positive overall value. The AI would be better if
+% the places next to corners had a negative weight, but I would have
+% too much code to rewrite for that to work. We really have three
+% types of rows and three types of columns. Converting from |Q|
+% or |J| is done by |"|, then we assemble the two as a number
+% in the range $[0,8]$, and use another \cs{ifcase} construction
+% to produce the weights.
+% \begin{verbatim}
+% ~O{Z"Q\multiplyZ3@Z"J@V(Z9|1|6|1|1|2|6|2|4] }
+% ~"#1{(#1|0|1|2|2|2|2|1|0]}
+% \end{verbatim}
+%
+% The counter |R| keeps track of the score difference,
+% and is updated with |;2| (when flipping a piece) or |;1| (when
+% adding a piece). The counter |R| should be \cs{advance}d (|@|)
+% by a positive amount when the current player |P| is player |0|,
+% and a negative amount for player |-|.
+% \begin{verbatim}
+% ~;{@R(P|-]}
+% \end{verbatim}
+%
+% After printing the board, we go through every cell and find the
+% one with the highest value. The macro \cs{A}, does one row, hence
+% |\:\A| does all the rows. Store the argument as the row number |Q|,
+% then loop over columns. After setting the column number |J| to
+% its argument, \cs{C} calls |)|, which as explained above computes
+% the value of placing a piece there, throws away that case if it flips
+% nothing, otherwise also counts the weight of the current cell. Then
+% update the best value |W| and the best row |U| and column |L| if
+% the new |V| is larger than |W|.
+% \begin{verbatim}
+% ~\A#1{Q#1:\C}
+% ~\C#1{J#1)[0<VO[V>WWVUQLJ]]}
+% \end{verbatim}
+%
+% We won't need |~| as \cs{def} anymore, so we reuse it as the main command.
+% \begin{itemize}
+% \item First exchange the players: set |P| equal to |T|, but first expand
+% the value of |P| after |T| to set that as well.
+% \item Secondly, open an alignment, with a repeating preamble adding a space
+% at its end. Then message a new-line (we should be using |?| rather than
+% |M| here, I think) to keep a clean output. Afterwards, print the top line
+% with |'|, the eight lines of the bulk with |_|, and the bottom line,
+% which happens to end with |?{*}*|, \emph{i.e.}, ends with \cs{cr}:
+% we can thus close the alignment, and cause \TeX{} to output the page.
+% \item After printing, it is time to check whether there is a move or not.
+% We don't want to flip pieces at this stage, hence set the boolean |I|
+% to false ($1$). And we reset the best value to $0$, unless it was
+% already $0$ (which means that the previous player had no available
+% move), in which case we set it to $-1$. Then loop over rows, finding
+% the best value (see \cs{A}). Reset the boolean |I| to be true.
+% \item If a move was found in the previous step ($|W|>0$), either
+% use it if the player is the AI, or query the user. The various
+% booleans are set up in such a way as to do the flipping, so
+% calling |)| does it. Then also put a player's piece in the current
+% cell |^|, and increase the score difference by $1$.
+% \item Finally, if neither player could move, declare the game ended,
+% give the score, and \cs{end} the run. Otherwise, repeat.
+% \end{itemize}
+% Of course, after defining |~|, we call it. Let's play!
+% \begin{verbatim}
+% ~~{
+% PXTXTNP
+% \halign{&## *M{*}'_1A_2B_3C_4D_5E_6F_7G_8H'}\vfil\break
+% I1 W(W./0] :\AI0
+% [0<W
+% [1=PQUJL/q]
+% )
+% ^P;1
+% ]
+% [.=W
+% ?{(RTie/ Player [0>R-/0] wins by N[0>R-]R].}
+% X\end
+% ]
+% ~
+% }
+% ~
+% \end{verbatim}
+%
+% \end{document} \ No newline at end of file
diff --git a/macros/plain/contrib/ruled-tables/README b/macros/plain/contrib/ruled-tables/README
new file mode 120000
index 0000000000..f28888e82f
--- /dev/null
+++ b/macros/plain/contrib/ruled-tables/README
@@ -0,0 +1 @@
+readme.ruled-tables \ No newline at end of file
diff --git a/macros/plain/contrib/ruled-tables/readme.ruled-tables b/macros/plain/contrib/ruled-tables/readme.ruled-tables
new file mode 100644
index 0000000000..375ba778d9
--- /dev/null
+++ b/macros/plain/contrib/ruled-tables/readme.ruled-tables
@@ -0,0 +1,10 @@
+% RULED TABLES.
+%
+% The file ruled.tex contains a set of macros which can be used to typeset
+% tables with vertical and horizontal rules. The syntax is the same
+% as for Ray Cowan's macros TABLES.TEX, as described in TABELDOC.TEX,
+% and I have used some of Cowan's tricks, but most of the macros
+% are complete re-writes. To use these macros in place of Cowan's
+% simply copy them to a file called TABLES.TEX or use a link.
+%
+% Eric Myers, University of Texas at Austin, 27 February, 1990
diff --git a/macros/plain/contrib/ruled-tables/ruled.tex b/macros/plain/contrib/ruled-tables/ruled.tex
new file mode 100644
index 0000000000..578c187bd6
--- /dev/null
+++ b/macros/plain/contrib/ruled-tables/ruled.tex
@@ -0,0 +1,374 @@
+% file: ruled.tex TeXsis version 2.14
+% :: $Header: /usr2/myers/texsis/RCS/ruled.tex,v 1.5 90/06/21 13:47:44 myers Stab $
+%======================================================================*
+% RULED TABLES. E. Myers and F.E. Paige
+%
+% The following macros will typeset tables with vertical and
+% horizontal rules. The syntax is similar to Ray Cowan's TABLES.TEX,
+% but the macros have been completely rewritten. Vertical and horizontal
+% rules are drawn by macros using vertical spacing controlled by struts.
+% Usage:
+% \ruledtable
+% <item> <tab> ... <item> <cr>
+% ...
+% <item> <tab> ... <item> \endruledtable
+% where <item> is an element of the table (every row must have exactly
+% the same number of items, although some may be blank), <tab> is any
+% one of
+% & for no vertical rule
+% | [or \vb] for vertical rule
+% \| [or \Vb] for thick vertical rule
+% \dbl for double vertical rule
+% and <cr> is any one of
+% \nr for no horizontal rule
+% \cr for horizontal rule
+% \CR [or \crthick] for thick horizontal rule
+% The last <cr> must be omitted in favour of the \endruledtable
+%
+% For horizontal rules across only some columns use
+% ... \nr
+% \crule | \cskip & \Crule ... \crpart
+% where \crpart is a special \cr for the partial rule line and
+% \cskip no rule for column
+% \crule horizontal rule for column
+% \Crule thick horizontal rule for column
+% The number of columns must be identical to the other rows.
+%
+% To change the appearance of the table, modify \TableItem.
+% Several modifications are built in:
+% \LeftJustifyTables left justify each column
+% \RightJustifyTables right justify each item
+% \NoJustifyTables center each item (default)
+% \TightTables use \ horizontal spacing
+% \LooseTables use \quad horizontal spacing (default)
+%
+% Use \bigitem to expand the vertical strut for high or deep items.
+%
+% These macros have been reorganized and substantially revised from
+% version 2.13. The following functional changes have been made:
+% (1) The @ signs have been removed from the names of the macros
+% used to save the Plain \cr, \span, and & so that they can be used to
+% modify the preamble. See above.
+% (2) Macros for partial horizontal rules have been added.
+%======================================================================*
+% Counters and such:
+\catcode`@=11 % @ is a letter here
+\catcode`\|=12 % make sure | is not active
+\catcode`\&=4 % and that & is alignment tab
+
+\newcount\ncols \ncols=\z@ % number of columns in table
+\newcount\nrows \nrows=\z@ % number of rows in table
+\newcount\curcol \curcol=\z@ % current column counter
+\let\currow=\nrows % current row counter
+
+\newdimen\thinsize \thinsize=0.6pt % thin rule width
+\newdimen\thicksize \thicksize=1.5pt % thick rule width
+
+\newif\iftableinfo \tableinfotrue % report rows and columns? Yes
+\newif\ifcentertables \centertablestrue % center tables? Yes
+\def\centeredtables{\centertablestrue}%
+\def\noncenteredtables{\centertablesfalse}%
+\def\nocenteredtables{\centertablesfalse}% % synonym !
+
+\let\plaincr=\cr % save real \cr
+\let\plainspan=\span % save real \span
+\let\plaintab=& % save real alignment tab &
+\def\ampersand{\char`\&}% % to print `&' in text
+\let\lparen=( % save left paren
+\let\NX=\noexpand % shorthand for \noexpand is \NX
+
+%---------------------------------------*
+% Main macros:
+% \ruledtable <table stuff> \endruledtable turns on the ruled
+% table definitions and makes the table with \halign. It handles all
+% the control stuff; the real work is done by \@RuledTable.
+
+\def\ruledtable{\relax % make ruled table
+ \@BeginRuledTable % initialize table
+ \@RuledTable}% % now process table body
+
+% \@BeginRuledTable does all the work of setting things up before
+% we read in the body of the table
+
+\def\@BeginRuledTable{% % initialize table
+ \ncols=0\nrows=0 % reset row and column count
+ \begingroup % keep the following local
+ \offinterlineskip % so vrules touch
+ \def~{\phantom{0}}% % ~ is phantom digit
+ \def\span{\plainspan\omit\relax\colcount\plainspan}% \span USER columns
+ \let\cr=\crrule % \cr gives a \tablerule
+ \let\CR=\crthick % \CR gives a \thickrule
+ \let\nr=\crnorule % \nr give no rule
+ \let\|=\Vb % thick vrule between columns
+%
+% support old \tablestrut in place of \tstrut if it exists
+%
+ \ifx\tablestrut\undefined\relax % if not defined, no problem
+ \else\let\tstrut=\tablestrut\fi % use \tablestrut
+%
+ \catcode`\|=13 \catcode`\&=13\relax % make | and & active
+ \TableActive % | and & get active \def`s
+ \curcol=1 % reset column count
+%
+% define \Halign to do an \halign with or without a width
+%
+ \ifdim\tablewidth>-\maxdimen\relax %
+ \edef\@Halign{\NX\halign to \NX\tablewidth\NX\bgroup\TablePreamble}%
+ \tabskip=0pt plus 1fil % let things stretch
+ \else %
+ \edef\@Halign{\NX\halign\NX\bgroup\TablePreamble}%
+ \tabskip=0pt % no stretch between columns
+ \fi %
+%
+% center text if needed
+%
+ \ifcentertables % should table be centered?
+ \ifhmode\vskip 0pt\fi % yes: force vertical mode
+ \line\bgroup\hss % center across page
+ \else\hbox\bgroup % else: just put in \hbox
+ \fi}% % end of \@BeginRuledTable
+
+
+% \@RuledTable builds the table with \@Halign and getting the
+% table body text as its argument.
+
+\long\def\@RuledTable#1\endruledtable{% % ruled table alignment
+ \vrule width\thicksize % thick rule on side
+ \vbox{\@Halign % then do \halign
+ \thickrule % thick rule on top
+ #1\relax % body of table
+ \tstrut % vertical strut for last line
+ \plaincr\thickrule % \cr, thick rule on bottom
+ \egroup}% % end of \halign and \vbox
+ \vrule width\thicksize % thick rule on side, end \hbox
+ \ifcentertables\hss\fi\egroup % finish table centering
+ \endgroup % end group from \ruledtable
+ \global\tablewidth=-\maxdimen % and reset width
+ \iftableinfo % report rows and columns
+ \immediate\write16{[Nrows=\the\nrows, Ncols=\the\ncols]}%
+ \fi}% % end of \@RuledTable
+
+%---------------------------------------*
+% Preamble and item macros:
+% This is the preamble for the \halign in \ruledtable.
+% To change how each item is processed change \TableItem.
+% To make a more complicated table you can change the \TablePreamble,
+% but if yo do so use the following substitutions in a standard \halign
+% preamble:
+% for & use \plaintab
+% for \cr use \plaincr
+% for # use ##
+% for ## use ####
+% and put \linecount in the first column so that line counting
+% works properly.
+
+\def\TablePreamble{% % \ruledtable preamble
+ \linecount % count this line
+ \TableItem{####}% % the first item
+ \plaintab\plaintab % && means repeat this
+ \TableItem{####}% % the subsequent items
+ \plaincr}% % end of preamble
+
+% \TableItem contains glue or spacing around the item
+
+\def\@TableItem#1{% % centers item in ruled table
+ \hfil\tablespace % left glue
+ #1\relax % item
+ \tablespace\hfil % right glue
+ }%
+
+\def\@tableright#1{% % right justifies item in ruled table
+ \hfil\tablespace\relax % left glue
+ #1\relax % item
+ \tablespace\relax}% % right glue
+
+\def\@tableleft#1{% % left justifies item in ruled table
+ \tablespace\relax % left glue
+ #1\relax % item
+ \tablespace\hfil}% % right glue
+
+\let\TableItem=\@TableItem % default is centered
+
+\def\RightJustifyTables{\let\TableItem=\@tableright}% % to right justify
+\def\LeftJustifyTables{\let\TableItem=\@tableleft}% % to left justify
+\def\NoJustifyTables{\let\TableItem=\@TableItem}% % to center
+
+\def\LooseTables{\let\tablespace=\quad}% % table spacing is \quad
+\def\TightTables{\let\tablespace=\space}% % table spacing is space
+\LooseTables % default is \quad
+
+%---------------------------------------*
+% Table Height and Width:
+%
+% Normally tables are set to their natural width. If \tablewidth
+% has been set then we set the table to that width instead,
+% but only for the next table. Then \tablewidth is turned off
+
+
+\newdimen\tablewidth \tablewidth=-\maxdimen % start ``turned off''
+
+% \setRuledStrut sets up the vertical strut \tstrut with
+% the appropriate dimensions to hold up one line of a ruled table.
+
+
+\def\setRuledStrut{% sets interlines spacing for ruled tables
+ \dimen@=\baselineskip % \dimen@ = extra space
+ \advance\dimen@ by-\normalbaselineskip % between lines
+ \ifdim\dimen@<.5ex \dimen@=.5ex\fi % minimum space
+ \setbox0=\hbox{\lparen}% % get character size
+ \dimen1=\dimen@ \advance\dimen1 by \ht0 % space above line
+ \dimen2=\dimen@ \advance\dimen2 by \dp0 % space below line
+ \def\tstrut{\vrule height\dimen1 depth\dimen2 width\z@}%
+ }%
+
+\def\tstrut{\vrule height 3.1ex depth 1.2ex width 0pt}% default
+
+
+% \tstrut does not produce the correct spacing if the entry in
+% the table is too high. The following constructs a strut higher than its
+% argument and then prints the argument. The minimum space value should
+% be the same as in \setRuledStrut.
+
+
+\def\bigitem#1{% % larger table entry
+ \setbox0=\hbox{#1}% % put arg. in box and
+ \dimen1 =\ht0 \dimen2 =\dp0 % get its size
+ \dimen@ =\baselines@ve % \dimen@ = extra space
+ \advance\dimen@ by-\normalbaselineskip % between lines
+ \ifdim\dimen@<.25ex \dimen@=.25ex\fi % minimum space
+ \advance\dimen1 by \dimen@ % space above line
+ \advance\dimen2 by \dimen@ % space below line
+ \vrule height\dimen1 depth\dimen2 width\z@ % make strut to size
+ \copy0}% % print argument
+
+
+% \vctr{stuff} centers the stuff vertically, so that it can
+% appear between two ROWS.
+
+\def\vctr#1{\hfil\vbox to 0pt{\vss\hbox{#1}\vss}\hfil}%
+
+%---------------------------------------*
+% Vertical rules:
+% \tab, \vb and \Vb are used in a table to separate columns with no
+% rule, a thin rule, or a thick rule, respectively. \nextcolumn{<rule>} skips
+% to the next column and puts the <rule> between columns. Use this to build
+% your own separators.
+
+\def\nextcolumn#1{% % move to next col.
+ \plaintab\omit#1\relax\colcount % tab, insert #1, count
+ \plaintab}% % tab to next user col.
+
+\def\tab{% % no rule between columns
+ \nextcolumn{\relax}}% % count column
+
+\let\novb=\tab % synonym for \tab
+
+\def\vb{% % thin rule between columns
+ \nextcolumn{\vrule width\thinsize}}% % count and rule
+
+\def\Vb{% % THICK rule between columns
+ \nextcolumn{\vrule width\thicksize}}% % count and thick rule
+
+\def\dbl{% % double rule between columns
+ \nextcolumn{\vrule width\thinsize % count and rule
+ \hskip\thinsize\vrule width\thinsize}}% % and skip and rule
+
+% \TableActive makes | the same as \vb and & the same as \tab so
+% these single characters can be used between columns. Here we have to
+% make & and | active so we get the active version of the characters,
+% hence the temporary change of \catcode.
+
+{\catcode`\|=13 \let|0
+ \catcode`\&=13 \let&0
+ \gdef\TableActive{\let|=\vb \let&=\tab}%
+}% end \catcode`s
+
+%---------------------------------------*
+% Horizontal rules:
+% These replacements for \cr put a wide \vrule at the end of the
+% line and maybe put a rule under the line, then begin the next line
+% with the wide \vrule from the preamble.
+
+
+\def\crrule{\relax % \cr plus rule
+ \tstrut % strut for spacing
+ \plaincr\tablerule % \cr, regular rule below line
+ }%
+
+\def\crthick{\relax % \cr plus thick rule
+ \tstrut % strut for vertical spacing
+ \plaincr\thickrule % \cr, rule, begin next line
+ }%
+
+\def\crnorule{\relax % \cr plus no rule
+ \tstrut % strut for spacing
+ \plaincr % \cr, norule, begin next line
+ }%
+
+\def\crpart{\plaincr}% % for partial rules, no strut
+
+
+% These rules go across the table.
+
+\def\tablerule{\noalign{\hrule height\thinsize depth 0pt}}%
+\def\thickrule{\noalign{\hrule height\thicksize depth 0pt}}%
+
+
+% Rules for individual columns. You must use \cskip in columns
+% with no rules to \omit the \TablePreamble.
+
+\def\cskip{\omit\relax}%
+\def\crule{\omit\leaders\hrule height\thinsize depth0pt\hfill}%
+\def\Crule{\omit\leaders\hrule height\thicksize depth0pt\hfill}%
+
+%---------------------------------------*
+% Counting macros:
+% These macros count rows and columns of the table. After the
+% first line has been processed \the\ncols is the total number of
+% columns in the table, which may be useful. During processing,
+% \the\curcol is the number of the current column, while \the\currow is
+% the number of the current row.
+
+
+\def\linecount{\relax\global\ncols=\curcol % save column count in \ncols
+ \global\curcol=1 % and reset counter
+ \global\advance\nrows by 1\relax}% % and advance row counter
+
+\def\colcount{\relax %
+ \global\advance\curcol by 1\relax}% % advance column counter
+
+%---------------------------------------*
+% TEXT TABLES.
+% To put text in a table use \para{<text>}, with \parasize set
+% to the desired width of the text.
+
+
+\newdimen\parasize \parasize=4in % paragraph size in tables
+
+\long\def\para#1{%
+ \vtop{\hsize=\parasize %
+ \baselineskip=14pt \lineskip=1pt %
+ \lineskiplimit=1pt %
+ \noindent #1\relax %
+ \vrule width 0pt depth 6pt}% % hold depth of box
+}%
+
+%---------------------------------------*
+% TABLES.TEX
+% For compatability with Cowan's TABLES.TEX we also allow the
+% syntax \begintable ... \endtable, which do the same thing.
+%
+
+\def\begintable{\relax % make ruled table
+ \@BeginRuledTable % initialize table
+ \@begintable}% % now process table body
+
+\long\def\@begintable#1\endtable{% % ruled table alignment
+ \@RuledTable#1\endruledtable}% % same as \ruledtable
+
+%---------------------------------------*
+% Turn off @ as letter before we exit
+
+\catcode`@=12 % @ is not a letter
+
+%>>> EOF TXSruled.tex <<<
diff --git a/macros/plain/contrib/ruled-tables/ruleddoc.tex b/macros/plain/contrib/ruled-tables/ruleddoc.tex
new file mode 100644
index 0000000000..71b1d4ffa6
--- /dev/null
+++ b/macros/plain/contrib/ruled-tables/ruleddoc.tex
@@ -0,0 +1,470 @@
+% ruleddoc.tex TeXsis version 2.14
+% :: $Header$
+%======================================================================*
+% This is the section of the manual on ruled table macros.
+% I'm still working on describing all the features. Read the code
+% in ruled.tex to learn everything. -EAM
+
+\book % ``book'' document style
+\input TXSdocM.doc % special macros for this manual
+
+\input ruled
+\ATunlock % so we can use @ things
+
+\singlespaced % single spaced
+\parskip=\baselineskip
+\TeXquoteon % | is a TeX quote (printed in \tt)
+\singlelinetrue % for \description
+\def\VT{\char'174}
+
+%======================================================================*
+\subsection{Ruled Tables \label{sect.ruled}}
+
+ While |\halign| in Plain \TeX\ is convenient for making simple
+tables, it is still difficult to make tables with horizontal and
+vertical rules. Indeed, typesetting ruled tables in \TeX\ has often
+been likened to programming a computer in assembler language. Even
+\TeXbook\ acknowledges that ``people who know how to make ruled tables
+are generally known as \TeX\ Masters.''\reference{Masters} Knuth, {\it
+op.\ cit.}, page 245
+\endreference\relax
+\TeXsis\ now includes a set of macros that take a great deal
+of the difficulty out of making ruled tables, so that anybody can be a
+\TeX\ Master.
+
+ The basic idea behind making a ruled table is similar to
+|\halign|, and the syntax is the same as the Princeton table
+macros known as |TABLES.TEX| by Ray Cowan,\reference{Cowan} Ray
+F.~Cowan, {\sl Making Tables with Macros} (unpublished)
+\endreference
+although the \TeXsis\ macros are quite different internally and
+run about 5 times faster. You begin the table material with |\ruledtable|
+and end it with |\endruledtable|. The table material is a list
+of items to appear in the rows and columns of the tables. Just
+as with |\halign| you can separate items in different columns
+with |&| and end a row with |\cr|. The |&| alignment character
+separates columns without putting a vertical rule between the
+columns, while |\cr| ends a line and puts a thin horizontal rule
+under it. To get a vertical rule between columns replace the |&|
+with a `{\tt\VT}' (the vertical line), and to end a line without
+a horizontal rule under it replace the |\cr| with |\crnorule|.
+One important thing to remember is to end the last line in the
+table with |\endruledtable| instead of |\cr|!
+
+ As an example here is a simple ruled table:
+{\singlespaced
+\bigskip
+\ruledtable
+Year | World Population \cr
+8000 B.C. | ~~~5000000 \crnorule
+~~50 B.C. | ~200000000 \crnorule
+1650 A.D. | ~500000000 \crnorule
+1850 A.D. | 1000000000 \crnorule
+1945 A.D. | 2300000000 \crnorule
+1980 A.D. | 4400000000
+\endruledtable
+\smallskip}
+\noindent And here are the instructions that created it:
+\TeXexample
+\ruledtable
+Year |VT World Population \cr
+8000 B.C. |VT ~~~5000000 \crnorule
+~~50 B.C. |VT ~200000000 \crnorule
+1650 A.D. |VT ~500000000 \crnorule
+1850 A.D. |VT 1000000000 \crnorule
+1945 A.D. |VT 2300000000 \crnorule
+1980 A.D. |VT 4400000000
+\endruledtable
+|endTeXexample
+This example also appears in \TeXbook, where it is typeset using
+|\halign|. Compare how the two are constructed
+and see which way you think is easier.
+
+ By default each item in the table is centered in its column.
+Inside a table the tie character ``|~|'' takes up the
+space of exactly one digit (it is the same as saying |\phantom{0}|),
+and this has been used to line up the digits of the entries in
+both columns. It is also possible to change the definition of
+the |\TableItem| macro so that each entry in each column is left
+or right justified. This is described a little bit later.
+
+ Something to note about this example table is that the outer
+rules are thicker than the others. You can also get a thick
+vertical rule between columns by using ``{\tt\bs\VT}'' in place of
+``{\tt\VT}'', and you can get a thick horizontal rule below a row by
+replacing the |\cr| with |\crthick|. The widths of thick and
+thin rules are controlled by the dimensions |\thicksize| and
+|\thinsize|. If you don't want thick rules at all simply say
+|\thicksize=\thinsize|, which makes the thick rules as thin
+as the thin rules.
+
+ Some synonyms: |\CR| is the same as |\crthick|, |\nr| is the
+same as |\crnorule|, and |\crrule| is the same as |\cr| (actually
+it's the other way around!). |\tab| is the same as |&| --- it
+separates columns without a vertical rule. |\vb| is the same as
+{\tt\VT}, it separates columns with a thin vertical bar, while
+|\Vb| is the same as {\tt\bs\VT} and separates the columns with a
+thick vertical bar. You can also use |\dbl| to separate columns
+with a double vertical rule.
+
+ As in Plain \TeX\ you can use |\span| in place of |&| (or the
+other column separators) to join two columns together into one,
+and you can use |\omit| as the very first token in a column to
+tell it to omit the fancy column layout (the centering or other
+spacing). You can also use |\multispan| to |\span| and |\omit|
+several columns, just as in an |\halign|. The only difference is
+that the number of columns you tell it to |\multispan| is the
+number of columns of the table it spans --- with an |\halign| you
+have to count the columns {\it and} any vertical rules.
+
+\table{table-example-II}
+\singlespaced
+\ruledtable
+\multispan3\hfil AT\&T Common Stock \hfil\CR
+ Year \dbl Price | Dividend \cr
+ 1971 \dbl 41-54 | \$2.60 \cr
+ ~~~2 \dbl 41-54 | \$2.70 \cr
+ ~~~3 \dbl 46-55 | \$2.87 \cr
+ ~~~4 \dbl 40-53 | \$3.24 \cr
+ ~~~5 \dbl 45-52 | \$3.40 \cr
+ ~~~6 \dbl 51-59 | ~~.95
+\endruledtable
+\caption{Another example of a ruled table.}
+\endtable
+
+ \Tbl{table-example-II} is another sample table, again taken
+{from} \TeXbook. Something important to notice is that the last
+ruled table example didn't have a table number or a caption,
+while this one does. That's because the last example was created
+using just |\ruledtable|, while this example is inside of
+|\table|. The point is that |\table| and |\ruledtable| do
+separate things and can be used either separately or together:
+|\table| creates the space for the table and gives it a caption
+and a number, while |\ruledtable| actually constructs the body of
+the ruled table. The instructions that created \Tbl{table-example-II}
+are:
+\TeXexample
+\table{table-example-II}
+\singlespaced
+\ruledtable
+\multispan3\hfil AT\&T Common Stock \hfil\CR
+Year \dbl Price | Dividend \cr
+1971 \dbl 41-54 | \$2.60 \cr
+~~~2 \dbl 41-54 | \$2.70 \cr
+~~~3 \dbl 46-55 | \$2.87 \cr
+~~~4 \dbl 40-53 | \$3.24 \cr
+~~~5 \dbl 45-52 | \$3.40 \cr
+~~~6 \dbl 51-59 | ~~.95
+\endruledtable
+\caption{Another example of a ruled table.}
+\endtable
+|endTeXexample
+\medskip
+
+ Ruled tables are normally centered on the page, but you can turn
+off the centering with |\noncenteredtables|. Then the table becomes just
+another piece to add to a horizontal list. One thing this lets you do is
+have two tables side by side on the page, like so:
+\noncenteredtables
+\medskip
+\line{
+\ruledtable
+Item ABC | Item DEF \cr
+Item GHI | Item JKL \endruledtable
+\hfil
+\ruledtable
+Data 111 | Data 222 \cr
+Data 333 | Data 444 \cr
+Data 555 | Data 666 \endruledtable}
+\smallskip
+\noindent This pair of tables was produced by saying:
+\TeXexample
+\noncenteredtables
+\medskip
+\line{
+\ruledtable
+Item ABC | Item DEF \cr
+Item GHI | Item JKL \endruledtable
+\hfil
+\ruledtable
+Data 111 | Data 222 \cr
+Data 333 | Data 444 \cr
+Data 555 | Data 666 \endruledtable}
+\smallskip
+|endTeXexample
+\noindent Saying |\centeredtables| turns table centering back on.
+Tables are then centered across the page, and a table is then
+added to a {\it vertical} list.
+\bigskip
+\goodbreak
+
+ Usually |\ruledtable| makes tables as wide as their
+natural width, but it is possible to make them wider by
+setting the dimension |\tablewidth| to the width desired. We
+can make the same table in
+\Tbl{table-example-II} but with the width set to 10cm:
+%
+\bigskip
+\noncenteredtables
+\tablewidth=10cm
+\line{\hfil\vbox{\singlespaced
+\ruledtable
+\multispan3\hfil AT\&T Common Stock \hfil\CR
+Year \dbl Price | Dividend \cr
+1971 \dbl 41-54 | \$2.60 \cr
+~~~2 \dbl 41-54 | \$2.70 \cr
+~~~3 \dbl 46-55 | \$2.87 \cr
+~~~4 \dbl 40-53 | \$3.24 \cr
+~~~5 \dbl 45-52 | \$3.40 \cr
+~~~6 \dbl 51-59 | ~~.95\rlap*
+\endruledtable
+\hbox{* (first quarter only)}
+\vss}\hfil}
+\smallskip
+\noindent
+The careful reader will notice that the version of
+\Tbl{table-example-II} in \TeXbook\ had a footnote to the last
+entry, and we have added that here. To do so we had to put the footnote
+in an |\hbox| and stack it under the table, so we had to turn off
+table centering. The table is therefore a bit more complicated
+to make, but not much:
+\TeXexample
+\noncenteredtables
+\tablewidth=10cm
+\line{\hfil\vbox{\singlespaced
+\ruledtable
+\multispan3\hfil AT\&T Common Stock \hfil\CR
+Year \dbl Price | Dividend \cr
+1971 \dbl 41-54 | \$2.60 \cr
+~~~2 \dbl 41-54 | \$2.70 \cr
+~~~3 \dbl 46-55 | \$2.87 \cr
+~~~4 \dbl 40-53 | \$3.24 \cr
+~~~5 \dbl 45-52 | \$3.40 \cr
+~~~6 \dbl 51-59 | ~~.95\rlap*
+\endruledtable
+\hbox{* (first quarter only)}
+\vss}\hfil}
+|endTeXexample
+\centeredtables % turn back on!
+
+ Important note: |\tablewidth| is turned ``off'' after the
+table is made, so the next table will have its natural width
+unless you explicitly set |\tablewidth| again!
+\bigskip\goodbreak
+
+The careful reader may also have noticed that in making the
+example in \Tbl{table-example-II} we said |\singlespaced|.
+That's because the spacing of the rows of a table can be
+controlled just like the spacing of the of the text with
+|\singlespaced|, |\doublespaced|, etc. The space between the
+rows of a table is set by a strut called |\tstrut|, which
+holds the rows apart. You can change the spacing between rows by
+changing the definition of this strut. One of the things
+|\singlespaced| does is define the |\tstrut| to be 0.4ex
+higher and deeper than a parenthesis:
+\TeXexample
+\def\tstrut{\vrule height 2.24ex depth 1.08ex width 0pt}
+|endTeXexample
+\noindent
+|\doublespaced| increases the height of the strut by one ``ex,''
+while |\triplesaced| increases it by yet another ``ex.'' You can
+re-define |\tstrut| to be whatever you want to suit your
+tastes. If you have something to put in a table which is larger
+than the strut then it will spill out into the rows above or
+below. To prevent this you could put the item in an |\hbox|, but
+this is not quite satisfactory, since there won't be any space
+above or below the item. Instead you can say
+|\bigitem{|\meta{stuff }|}| and ``stuff'' will be positioned
+correctly with a nice amount of space above and below.
+\medskip
+
+ You can also decide whether or not you want diagnostic messages
+printed when a table is created. |\tableinfotrue| causes a
+message to be printed on your terminal every time a ruled table
+is created. The message tells you how many rows and columns were
+in the table. This is useful information, because it can tell
+you immediately if you made a mistake in the table or left out a
+row or column. |\tableinfotrue| is the default, but you can turn
+off these messages by saying |\tableinfofalse|.
+\medskip
+
+ The tables we have demonstrated so far all contain numbers, but
+sometimes it is desirable to have an entry in a table which is a
+paragraph of text. For that purpose, you can use |\para{|\meta{text}|}|.
+The width of the paragraph is determined by the dimension |\parasize|,
+which defaults to 4 inches.
+\medskip
+
+\table{tablemac;a}
+\caption{Basic table macros for use with {\tt\bs ruledtable}.}
+\intablelist{Basic macros for {\tt\bs ruledtable}}
+\tablewidth=\hsize
+\LeftJustifyTables
+\ruledtable
+\sl Macro name\relax
+ | \sl Description \relax \crthick
+\tt\bs ruledtable\relax
+ | \para{Starts a ruled table.}\cr
+\tt\bs endruledtable\relax
+ | \para{Ends the ruled table.}\cr
+\tt\bs cr\relax
+ | \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
+\vtop{\noindent\hsize=1.4in\baselineskip=15pt
+\tt\bs crthick \hfil\break \rm or \tt\bs CR\hfil }\relax
+ | \para{Similar to {\tt\bs cr}, but the rows will
+ be separated with a thick horizontal rule.}\cr
+\vtop{\noindent\hsize=1.4in\baselineskip=15pt
+\tt\bs crnorule \hfil\break \rm or \tt\bs nr\hfil }\relax
+ | \para{Similar to {\tt\bs cr}, but the rows will
+ not be separated by a rule.}\cr
+\vtop{\noindent\hsize=1.4in\baselineskip=15pt
+\tt\char124\quad \rm (vertical bar)\hfil\break
+or \tt\bs vb\hfil} \relax
+ | \para{Separates one column from the next, and
+ puts a vertical rule between them.} \cr
+\tt\&\ \rm or\tt\ \bs tab \relax
+ | \para{Same as {\tt\char124}, but does not put
+ in the vertical rule between the columns.}\cr
+\tt\bs\char124 \relax
+ | \para{Same as {\tt\char124}, but puts in a
+ thick vertical rule.}
+\endruledtable
+\line{\hfil {\sl Continued...}}
+\endtable
+
+\fulltable{tablemac;b}
+\caption{Additional macros for use with {\tt\bs ruledtable}.}
+\intablelist{Additional macros for {\tt\bs ruledtable}}
+\tablewidth=\hsize
+\LeftJustifyTables
+\line{{\sl Continued...}\hfil}
+\smallskip
+\ruledtable
+\sl Macro name\relax
+ | \sl Description \relax \crthick
+\tt\bs multispan\lb{\it n}\rb\relax
+ | \para{Makes the next entry span the next $n$
+ columns, where $n$ is an integer, $n>0$.
+ See other notes on {\tt\bs multispan} below.} \cr
+\tt\bs omit \relax
+ | \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
+\tt\bs para\lb{\it text}\rb \relax
+ | \para{Formats {\it text} into a neat little
+ paragraph like this one. The width of the
+ paragraph produced is determined by the dimension
+ {\tt\bs parasize}. The default is 4 inches. } \cr
+\tt\bs parasize=\meta{dimen} \relax
+ | \para{Sets the width of paragraphs produced
+ with the {\tt\bs para} macro. } \cr
+\tt\bs TableItem\lb\#\rb\relax
+ | \para{Used in the standard template, this
+ macro centers its argument in the column. The
+ user can redefine it for special effects.} \cr
+\tt\bs bigitem\lb\#\rb\relax
+ | \para{Use this for something that would normally
+ not fit in one line of a table to make the spacing
+ between rows large enough for this item.} \cr
+\tt\bs vctr\lb\#\rb\relax
+ | \para{Centers the item {\it vertically} so that
+ it can appear between two rows.}\cr
+\tt\bs centeredtables\relax
+ | \para{Turns table centering on. Each table
+ will be centered left-to-right on the page.
+ This is the default.} \cr
+\tt\bs noncenteredtables\relax
+ | \para{Turns table centering off. Each table
+ is returned as an {\tt\bs hbox}, and it is up
+ to the user to place it as desired.} \cr
+\vtop{\noindent\hsize=1.4in\baselineskip=15pt
+\tt\bs tableinfotrue \hfil\break
+\tt\bs tableinfofalse\hfil}\relax
+ | \para{Turns on or off the diagnostic message telling
+ you how many rows and columns were found in the
+ table. }\cr
+\tt\bs thicksize=\meta{dimen} \relax
+ | \para{This dimension specifies the thickness
+ of the thick rules in the table. The default
+ size is 1.5 points.} \cr
+\tt\bs thinsize=\meta{dimen} \relax
+ | \para{This dimension specifies the thickness
+ of thin rules in the table. The default
+ size is 0.8 points.} \cr
+\tt\bs tablewidth=\meta{dimen} \relax
+ | \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.}
+\endruledtable
+\vskip 0pt plus 1fil\relax
+\endtable
+
+Tables \use{Tb.tablemac;a} and \use{Tb.tablemac;b} summarize the
+most important commands for making ruled tables.
+\medskip
+
+ Finally we can discuss how you can change how each column of
+a table is constructed. The macros which build the table take
+each entry and pass it to a macro called |\TableItem|. The
+default definition of |\TableItem| is:
+\TeXexample
+\def\TableItem#1{%
+ \hfil\tablespace % left glue
+ #1\relax % the item
+ \tablespace\hfil}% right glue
+|endTeXexample
+\noindent
+The |\hfil| glue on both sides of the argument causes the item to be
+centered in the column, while |\tablespace| (which defaults to |\quad|)
+insures that there will be at least some amount of space between the
+item and the vertical rules on each side. You can change the definition
+of |\TableItem| to suit your own purpose. The simplest modification is
+to omit the |\hfil| on the left or right so that each entry is right or
+left justified. This is so commonly used that saying
+|\RightJustifyTables| or |\LeftJustifyTables| makes the appropriate
+change for you. Saying |\NoJustifyTables| restores |\TableItem| to its
+original centering function.
+
+ Since |\TableItem| is used to create every column of the table you
+can't use it to modify a single column. To justify just one column you
+can simply put |\hfill| to the left or right of each item in the column,
+since
+|\hfill| is infinitely more stretchy
+than |\hfil|.
+With a little more work it is possible to design special or unusual
+tables by redefining the ``preamble'' of the table. This is possible
+because |\ruledtable| uses |\halign| with a preamble
+called |\TablePreamble|. The default
+definition of |\TablePreable| is:
+\TeXexample
+\def\TablePreamble{% % \ruledtable preamble
+ \linecount % count this line
+ \TableItem{####}% % the first item
+ \plaintab\plaintab % && means repeat this
+ \TableItem{####}% % the subsequent items
+ \plaincr}% % end of preamble
+|endTeXexample
+\noindent
+The syntax for |\TablePreamble| is like an
+|\halign| preamble in Plain \TeX\, but with |&| replaced by |\plaintab|,
+|\cr| replaced by |\plaincr|, and |#| replaced by |####|. If you have
+read this far and want to try changing |\TablePreable| then you should
+read the source code and the comments that go with it in the file
+|ruled.tex.|
+
+As a final note we point out that it is also possible for you to create
+your own column separators with the macro |\nextcolumn|. This macro
+takes
+a single argument which is used to separate one column of the table from
+another. Thus for example, the |\dbl| macro for creating a double
+vertical rule between columns is defined as:
+\TeXexample
+\def\dbl{%
+ \nextcolumn{\vrule width\thinsize
+ \hskip\thinsize\vrule width\thinsize}}
+|endTeXexample
+
+
diff --git a/macros/plain/contrib/samples/000readme.txt b/macros/plain/contrib/samples/000readme.txt
new file mode 100644
index 0000000000..fa3826a37c
--- /dev/null
+++ b/macros/plain/contrib/samples/000readme.txt
@@ -0,0 +1,19 @@
+000readme.txt This file.
+alexmisc.tex Uppercase roman numerals, real/complex number
+ symbols, and overstrike bold to name a few.
+automagic.tex Auto-equation numbering, -section numbering, and
+ -table-of-contents generator.
+endnote.tex To make end notes instead of / opposed to using
+ footnotes.
+firstline.tex Cause the first line of a paragraph to use a
+ different font from the rest of the lines in the
+ paragraph.
+frame.tex More versatile method to enclose material in
+ line boxes (rules).
+letter.tex DEK's letter macro from the TeXbook.
+memo.tex Sample memorandum banner generator.
+referencer.tex Auto-referencer.
+tables.tex Versatile method for making tables with lines.
+toc.tex Simple table of contents macros.
+verbatim_1.tex To TeX lines as typed in a file (verbatim).
+verbatim_2.tex Another one.
diff --git a/macros/plain/contrib/samples/README b/macros/plain/contrib/samples/README
new file mode 120000
index 0000000000..745d622e44
--- /dev/null
+++ b/macros/plain/contrib/samples/README
@@ -0,0 +1 @@
+000readme.txt \ No newline at end of file
diff --git a/macros/plain/contrib/samples/address1.tex b/macros/plain/contrib/samples/address1.tex
new file mode 100644
index 0000000000..727cc4fd83
--- /dev/null
+++ b/macros/plain/contrib/samples/address1.tex
@@ -0,0 +1,4 @@
+{Sample Name\par
+Sample Street\par
+Sample City, ST 00000\par}
+Dr. Reese
diff --git a/macros/plain/contrib/samples/alexmisc.tex b/macros/plain/contrib/samples/alexmisc.tex
new file mode 100644
index 0000000000..eaecaec187
--- /dev/null
+++ b/macros/plain/contrib/samples/alexmisc.tex
@@ -0,0 +1,27 @@
+% some small miscellaneous macros
+
+%capital roman numerals
+\def\Romannumeral#1{\uppercase\expandafter{\romannumeral#1}}
+
+%half in textstyle (smaller --- sometimes looks better)
+\def\half{\textstyle{1\over2}}
+
+%a couple of useful abbreviations
+\def\ie{i.\thinspace e.}
+\def\eg{e.\thinspace g.}
+
+%slant fractions (slightly offset and smaller a/b)
+%usage \slfrac{numerator}/{denominator}
+\def\slfrac#1/#2{\leavevmode\kern.1em\raise.5ex\hbox{\the\scriptfont0 #1}
+\kern-.1em/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
+
+% makes real and complex number-set symbols with vertical bars
+\def\Reals{{\hbox{$\mathpalette{}{I\kern-.2em R}$}}}
+\def\Complexes{{\hbox{$\mathpalette{}{C\kern-.46em
+ \vrule depth 0ex height 1.4ex width .05em\kern.41em}$}}}
+
+%poor man's bold (The TeXbook, p. 386)
+\def\pmb#1{\leavevmode\setbox0=\hbox{#1}%
+ \kern-.025em\copy0\kern-\wd0
+ \kern.05em\copy0\kern-\wd0
+ \kern-.025em\raise.0433em\box0}
diff --git a/macros/plain/contrib/samples/amstest.tex b/macros/plain/contrib/samples/amstest.tex
new file mode 100644
index 0000000000..774a2d435e
--- /dev/null
+++ b/macros/plain/contrib/samples/amstest.tex
@@ -0,0 +1,139 @@
+
+
+\input dua0:[tex.amstex]amstex
+\documentstyle{dua0:[tex.amstex]amsppt}
+
+\comment
+This file is to test out the various capabilities of AMS-TEX.
+\endcomment
+
+
+
+\topmatter
+\title
+A test of the \AmSTeX\ typesetting macros
+\endtitle
+
+\author
+Tex Willer \\ Arizona
+\endauthor
+
+\address{Somewhere USA}
+
+\date{22 October 1934}
+
+\thanks{Many thanks must be given to no one in particular}
+
+\keywords{Obviously irrelevant}
+
+\subjclass{Irrelevant too}
+
+\abstract{Yes, this test is pretty abstract, isn't it?}
+\endtopmatter
+\document
+\heading A test of Amstex \\ amsppt style \endheading
+Here is some irrelevant information.
+
+\proclaim{Theorem 1}
+You can lead a horse to water, but you can't make him drink.
+\finishproclaim
+
+\demo{Proof}
+The proof
+by mathematical induction
+is left as an exercise to the reader.
+\finishdemo
+
+\noindent
+Of course, we can also refer \refto{10} to a nonexistent reference.
+
+
+
+\subheading{Mathematics}
+Now, lets get into some math mode stuff. Try a few greek letters
+
+$$ \alpha + \beta = \gamma + \delta.$$
+
+\def\Evec{{\bf E}}
+\def\Bvec{{\bf B}}
+\def\Hvec{{\bf H}}
+\def\Dvec{{\bf D}}
+\def\Jvec{{\bf J}}
+
+\noindent
+How about Maxwell's equations? They are, in CGS units
+$$\nabla \cdot \Dvec = 4 \pi \rho ,$$
+$$\nabla \cdot \Bvec = 0,$$
+$$\nabla \times \Evec + {1 \over c}
+ {{\partial \Bvec} \over {\partial t}} = 0,$$
+$$\nabla \times \Hvec - {1 \over c} {{\partial \Dvec} \over {\partial t}} =
+ {{4 \pi} \over {c}} \Jvec.$$
+
+There is a family of particles
+
+$$\psi,$$
+$$\psi^\prime ,$$
+$$\psi^{\prime\prime},$$
+
+and so forth.
+
+Let's try a footnote\footnote{This footnote is obviously irrelevant}
+and see how well it works.
+
+This one is cute
+
+$$\left.\frac {dy}{dx}\right|_{x=a};$$
+
+\noindent
+but does it work?
+
+The math mode is actually quite smart. One can actually imbed lots of
+large symbols inline in text, and have the program do exactly the
+correct thing. To see this let us typeset
+$\sum\limits_{i=1}^Na_i$, and see if it really leaves the correct amount
+of space around the document. It certainly does appear to do the correct
+thing.
+
+Now some subtleties. Try
+
+$$\sum_{\stack{\ssize 1\le i\le N}{\ssize 1\le j \le M}}a_{ij}$$
+
+\noindent
+and see if it works.
+
+Another test is
+
+$$\align (a+b)(a-b) &=(a+b)a - (a+b)b\\
+ &= a^2 +ab - ab - b^2\\
+ &=a^2 - b^2,
+ \endalign$$
+
+\noindent
+to see whether or not alignment works.
+
+Matrices are easy
+
+$$\matrixp \format \c&&\;\c\\
+a_{11}&a_{12}&\ldots&a_{1n}\\
+a_{21}&a_{22}&\ldots&a_{2n}\\
+\vdots&\vdots&\ddots&\vdots\\
+a_{m1}&a_{m2}&\ldots&a_{mn}\\
+\endmatrixp$$
+
+Finally, some under braces.
+
+$$
+\underbrace{x_1+x_2+\dots+x_n}
+$$
+
+That's all folks!
+\Refs
+\ref \no 9 \by S. S. Chern \pages 947--1055
+\paper Integral formulas for hypersurfaces in Euclidean space and their applications
+to uniqueness theorems
+\yr 1959 \vol 8
+\jour J. Math. Mech.
+\endref
+\enddocument
+\bye
+
diff --git a/macros/plain/contrib/samples/apjstyle.tex b/macros/plain/contrib/samples/apjstyle.tex
new file mode 100644
index 0000000000..5eee43afe8
--- /dev/null
+++ b/macros/plain/contrib/samples/apjstyle.tex
@@ -0,0 +1,249 @@
+%
+% Removing the ` % ' from the beginning of the third line leads to a 1.2
+% magnification of the output (same margins of course).
+% \magnification=1200
+
+\input bobmacro % This loads the macrofile `bobmacro.tex' which contains
+ % some useful definitions, like the `\titl \endtitl'
+ % which follows. ` % ' tells tex to ignore the rest of
+ % the line, enabling one to make comments. If the file
+ % you want to load is not in your current directory,
+ % use:`\input tex$sub:[examples]bobmacro.tex' for example.
+
+\titl \centerline{EXAMPLE OF A MANUSCRIPT WITH A TWO-LINE TITLE}
+ \centerline{PREPARED FOR \TeX$^1$} \endtitl
+
+\centerline{William H. Press\footnote\dag{Revised for \TeX82
+ by Bob Jantzen}}
+\centerline{Harvard-Smithsonian Center for Astrophysics}
+\Received % See bobmacro.tex
+
+\vfill % This expands the vertical space here to push my title footnote
+ % to the bottom of the page. The command `\footnote' squeezes in
+ % after that though.
+
+$^1$Not supported in part by any finding agency known to
+man or beast, except possibly Harvard University, one of our finest
+old institutions.
+
+\par\eject % Normally an explicit page end is marked by `\par\vfill\eject'
+ % which ends the last paragraph, fills up the remainder of the
+ % page with blank space and ends the page, but if more than one
+ % `\vfill' occurs on a page, they each fill up their share of
+ % the remaining space, so in this example, our title footnote
+ % would not be pushed to the bottom of the page.
+
+\ABSTRACT % see bobmacro.tex
+We here give a detailed example of a manuscript prepared for submission
+to {\it The Astrophysical Journal} using the \TeX\ language and a standard
+file containing macro definitions.
+\blankline % see bobmacro.tex
+{\it Subject headings:} stars: Hollywood -- data: irreproducible
+
+\par\vfill\eject
+
+\sect \centerline{I. INTRODUCTION} \endsect % see bobmacro.tex
+
+This is the introduction. We can use it to try out a few bells and
+whistles. First notice that it doesn't make any difference whether
+I indent the paragragh. \TeX\ does so anyway.
+
+ A new paragragh is signaled by two returns in a row, or by an
+explicit marking such as occurs here:\par
+ So, this will be the third paragragh. \it I have just changed
+to italic type. \rm Now back to roman. \sl Now to slanted roman.
+\bf Now to boldface. \rm If I want to change only {\it temporily},
+that can be done too. Underlining, if desired \textunderline{can be done
+like this}, but this doesn't always work. Later on you will understand
+why. For those of you who actually prefer typewriters, {\tt there is even
+a way to do that}.
+
+\subsect \centerline{a.\qquad Subsection Heading} \endsubsect % see bobmacro.tex
+
+ This is a subsection. It has no real purpose, but I suppose
+I could use it to explain some things. Many features of \TeX\ can only
+be used in ``math mode", i.e. typed between dollar signs. This includes
+come common things like superscripts:word$^{superword}$;
+subscripts: $word_{subword}$ all between dollar signs, as you see.
+But do notice that in math mode, \TeX\ switches into italics. If you
+don't want this, you have to type word$^{\hbox{superword}}$.
+
+\doublespace
+My next paragragh ought to come out in double space. This uses a
+command that is not universal, but rather is defined in my macro file
+`bobmacro.tex', the one included by the command ``$\backslash$input
+bobmacro" at the beginning of this input file. Incidentally, if you have
+typed something in lower case, or mixed lower and upper, \uppercase{and you
+really intended it to be in all caps}, then you can correct it
+easily as shown. Similarly \lowercase{FOR SOMETHING TYPED IN ALL CAPS}
+which should have been in lowercase.
+
+\singlespace
+\blankline
+Notice that the change to singlespace comes between two paragraphs, and
+that it would have produced only a single space between them. To get
+the double space, I have to have the extra ``blankline".
+This is the final paragraph in the subsection, indeed in the whole
+introduction. As befits an introduction, I have no mathematics in
+the introduction, although I might have (in line in the text) some
+$\alpha$'s, $\beta$'s and $\gamma$'s,
+and a $\leq$ (note use of math mode); and perhaps a \$ \ or two (\$ \$).
+Also note that in \S II. below we will have more math.
+Don't ever do this, but actually I can get away with \alpha\ as well as
+$\alpha$, but only because I have a fancy definition in my macro file.
+
+\sect \centerline{II. MATHEMATICS} \endsect
+
+ Well, now we come to the really fun part, namely the setting of
+mathematics. It is incredibly easy. Just remember that you are either
+in horizontal mode (for typing text like right now), or (between \$ 's)
+in math mode (for typing in-line formulae
+like $F=(\int f(x) dx)^{\xi}$, or between \$ \$ 's) in math
+display mode, which produces set off equations like $$ \Phi = {a+b \over
+c+d}.$$ Notice that I don't actually set off the equation in the input
+equation in the input file, although there is nothing wrong with doing so:
+$${numerator \over denominator}=easy$$
+Be careful to use a backslash before sin, cos, exp and similar:
+$$\sin (x) \qquad and \ not \qquad sin (x)$$
+(where $\backslash$qquad is, as you can see, a biggish space; and
+backslash-space is a smallish space -- in math mode all plain spaces are
+ignored!).
+
+Equation numbers are equally easy: just have an eqno command
+before the closing \$ \$ 's,
+$$E=mc^{2} \eqno(14b)$$. % Notice where the period ends up.
+ % Instead `\ .' should have preceded `\eqno'
+
+Now for some fancier examples:
+
+We might need sums,
+$$\sum_{n=1}^{n=\infty}(a+b)! = {\partial f \over \partial x} \eqno(15)$$
+or integrals,
+$$\int_{0}^{1}x^{\alpha -1}(1-x)^{\beta - 1} dx$$
+or matrices,
+$$ A= \pmatrix{1&0&0\cr 0&x+1&y\cr 0&0&1\cr} $$
+or absolute value bars (known as ``verticals"),
+$$ |x| = \left|{e^{-x^2}}\over \sin (x) +
+ 0.5 \cos (x)\right| \quad.$$
+Notice how I can just continue typing the formula on as many lines
+as it happens to take. Spaces within \$ \$ 's never matter, so I can
+indent subsequent lines for readibility.
+
+Other large ``enclosers" are similar:
+$$ \left( {a+b\over c+d} \right) \qquad \left[ {e+f \over g+h}\right]
+ \qquad \left\{ {i+j \over k+l} \right\} $$
+(Braces are special since you aren't allowed to type the actual
+character $\{$ except as a group delimiter in the input file.)
+
+ Alignment can be complicated, but most situations can be handled
+using the eqalign command,
+$$\eqalign{
+ a_1+b_1w+c_1w^2 &= \alpha + \beta \cr
+ b_2x+c_2x^2 &= 0. \cr } \eqno(30)$$
+Here I have lined up the ampersand-equals in the input file, but there
+is no reason to do this other than clarity. It is the ampersand which
+causes \TeX\ to line things up (along with, of course, the eqalign command
+itself), not the spacing of the input file.
+Another example is,
+$$\eqalignno{
+ X&=a+b&(31)\cr
+ Y+Z+W&=c&(32)\cr }$$
+i.e., use eqalignno when you want equation numbers on each line, and
+$$\eqalignno{
+ f(x)&=(x-1)(x+1)\cr
+ &=x^2-1&(33)\cr}$$
+which shows how a lefthand side and/or an equation number can be absent.
+\blankline\indent
+ This is as good a place as any to list all the special symbols
+(that I know and consider useful at this time, but check
+the {\TeX}book for the rest) and the commands
+for them. Be sure to remember that most special symbols only work
+in math mode, between \$ 's!
+
+\halign{ \lft{$\backslash$#}\quad & \lft{$#$}\qquad
+ & \lft{$\backslash $#}\quad & \lft{$#$}\qquad
+ & \lft{$\backslash $#}\quad & \lft{$#$}\qquad
+ & \lft{$\backslash $#}\quad & \lft{$#$}\qquad \cr
+alpha&\alpha&beta&\beta&gamma&\gamma&delta&\delta\cr
+epsilon&\epsilon&zeta&\zeta&eta&\eta&theta&\theta\cr
+iota&\iota&kappa&\kappa&lambda&\lambda&mu&\mu\cr
+nu&\nu&xi&\xi&?&o&pi&\pi\cr
+rho&\rho&sigma&\sigma&tau&\tau&upsilon&\upsilon\cr
+phi&\phi&chi&\chi&psi&\psi&omega&\omega\cr
+varepsilon&\varepsilon&vartheta&\vartheta&varpi&\varpi&varrho&\varrho\cr
+varsigma&\varsigma&varphi&\varphi&{}&{}&ell&\ell\cr
+Gamma&\Gamma&Delta&\Delta&Theta&\Theta&Lambda&\Lambda\cr
+Xi&\Xi&Pi&\Pi&Sigma&\Sigma&Upsilon&\Upsilon\cr
+Phi&\Phi&Psi&\Psi&Omega&\Omega&cdots&\cdots\cr
+Gammait&\Gammait&Deltait&\Deltait&Thetait&\Thetait&Lambdait&\Lambdait\cr
+Xiit&\Xiit&Piit&\Piit&Sigmait&\Sigmait&Upsilonit&\Upsilonit\cr
+Phiit&\Phiit&Psiit&\Psiit&Omegait&\Omegait&ldots&\ldots\cr
+Ascr&\Ascr&Bscr&\Bscr&...etc...&{}&Zscr&\Zscr\cr
+pm&\pm&mp&\mp&times&\times&div&\div\cr
+backslash&\backslash&cdot&\cdot&oplus&\oplus&ominus&\ominus\cr
+otimes&\otimes&oslash&\oslash&odot&\odot&ast&\ast\cr
+circ&\circ&bullet&\bullet&uparrow&\uparrow&downarrow&\downarrow\cr
+vert&\vert&|&\|&ll&\ll&gg&\gg\cr
+simeq&\simeq&approx&\approx&langle&\langle&rangle&\rangle\cr
+sum&\sum&int&\int&oint&\oint&prod&\prod\cr
+infty&\infty&prime&\prime&partial&\partial&nabla&\nabla\cr
+S&\hbox{\S}&dagger&\dagger&ddagger&\ddagger&P&\hbox{\P}\cr
+\$&\$&sim&\sim&leftarrow&\leftarrow&rightarrow&\rightarrow\cr
+equiv&\equiv&leq&\leq&geq&\geq&$\#$&\#\cr
+forall&\forall&exists&\exists&\%&\%& \& & \& \cr
+heartsuit&\heartsuit&Re&\Re&bot&\bot&flat&\flat\cr
+emptyset&\emptyset&cup&\cup&star&\star&...etc...&{}\cr}
+
+
+\blankline\indent
+ Of course, the symbols ?,/,+,!,=,`,',",and `` can be
+typed directly from the keyboard as indicated (except that `` is
+actually two sequential single accent graves), but $<$ and $>$ must
+be in math mode or you will get < and > respectively.
+Also note: -, --, ---,
+ff, fi, fl, ffi, ffl, \ss , \ae , \AE , \oe , \OE , \o , \O , \aa , \AA.
+There are more of these in the {\TeX}book.
+I can't find anything for the semidirect product. Shucks.
+
+Whew, that was a lot of symbol typing.\footnote*{
+We have been using PLAIN \TeX\ and a couple of macros from
+the file bobmacro.tex which contains the definitions of a few
+useful commands. Notice that the `$\backslash$footnote' macro provided by
+plain.tex is not very satisfactory. See page 416 of the {\TeX}book.}
+
+\REFERENCES
+\ref Aardvark, J.M. and Blather, R.P. 1982, {\it Proc. Roy. Soc.
+Madagascar}, {\bf 234}, 492. (Also translated in {\it Sov. Phys. Uspekhi},
+{\bf 34}, 879.
+\ref Null, N.N. and None, N. 1972, {\it Ap. J.}, {\bf 186}, 24.
+
+% The ampersand can be used to make comments which will be ignored by \TeX.
+% This remark will never appear in your \TeX\ output.
+% If you want bigger print, try putting \magnification=1200 at the beginning.
+% This magnifies the fonts by a factor of 1.2.
+% And also \oneandahalfspace after that if you want a little more space
+% between lines. Or even \doublespace.
+
+\sect APPENDIX\endsect
+
+For those people who insist on doing a lot of index juggling, the command
+``$\backslash$null" which stands for an empty box (namely
+$\backslash$hbox$\{\}$) is very useful because it ends the previous symbol and
+any subscripts or superscripts which follow then are placed at the normal
+levels instead of climbing up or down if the previous symbol sticks up or down
+too far. It also allows alignment of up and down indices necessary for
+raising and lowering indices with a metric
+$$\eqalign{ &\Gamma^{\alpha}\null_{\beta\gamma}\quad \hbox{instead of}
+ \quad \Gamma^{\alpha}_{\beta\gamma}\cr
+ &\undersim{\tilde{R}}\null^{\alpha}\null_{\beta\gamma}\null^{\delta}
+ \quad \hbox{instead of}\quad \undersim{\tilde R}^{\alpha}_{\beta\gamma}\null
+ ^{\delta}\quad.\cr}$$
+If there had not been a $\backslash$null in the last symbol a ``double
+subscript" error would have resulted so this command allows you to get around
+the ``no double subscript" rule. If a subscript shoud not be shrunk in size,
+$\backslash$hbox can be used to prevent the shrinking
+$$\nabla_{\hbox{$e_a$}}\thinspace e_b=\Gamma^c\null_{ab}e_c\quad.$$
+
+\bye
+
+
diff --git a/macros/plain/contrib/samples/artic.tex b/macros/plain/contrib/samples/artic.tex
new file mode 100644
index 0000000000..c12a04d713
--- /dev/null
+++ b/macros/plain/contrib/samples/artic.tex
@@ -0,0 +1,128 @@
+
+% ATTENZIONE IL PROGRAMMA USA IL FILE artic0.TEX
+%
+\input artic0.tex
+%
+
+\centerline{Author One and Author Two}
+\bigskip\centerline{Lyman Laboratory of Physics}
+\centerline{Harvard University}\centerline{Cambridge, MA 02138}
+
+\vskip .3in
+This sample is produced by the file `artic.tex' in the directory
+ and is intended to exhibit the conventions used in the file
+`artic0.tex' also in directory , as inputted above. The
+vskips, etc., on this title page have been chosen to give a reasonable
+looking HUTP style preprint in either full-sized or reduced format
+(selected by typing b or $\ell$ in response to the big/little query from
+the macro). Note that the `HUTP' and `Date' macros must be used
+together to choose fonts and horizontal size appropriately, suppress
+first page number, etc.\ (but they may both be safely omitted in `big'
+format for applications without title page). One may most easily start a new
+paper by making a copy of this sample and then replacing the dummy
+text with something potentially more interesting. It is useful to read
+pp.~1--54, 127--201 of Knuth's {\bigit Texbook}.
+
+\Date{01/85}
+
+
+\newsec{Introduction}
+
+Sections are begun using the macro `newsec' as above.
+
+References are done using the macro `ref' as follows\ref
+\Ii{John Q. Physicist, Phys. Rev. D20 (1980) 1234}
+\ref\Iii{Author One and Author Two, Nucl. Phys. B52 (1975) 439}.
+The labels on the references\Ii\ and\Iii\ (which include the brackets)
+can then be used to refer back to
+them. Here is how to put two papers in one reference\ref
+\IAG{L. Alvarez-Gaum\'e and P. Ginsparg, ``The Structure of
+Gauge and Gravitational Anomalies,'' Harvard preprint HUTP-84/A016,
+to appear in Ann. Phys.\semi
+L. Alvarez-Gaum\'e and P. Ginsparg, Nucl. Phys. B243 (1984) 449}.
+Note the use of the macro `semi' to separate them (the macro `nref'
+can be used to suppress the immediate appearance of the
+bracketed reference number in the text if desired\ref
+\rSP{Seminal Paper}
+\nref\rMIF{Moderately Interesting Follow-ups}
+-\ref\rCUR{Completely Useless Ripoffs}). The references are listed
+together with their labels in the file refs.tmp.
+
+Footnotes are done using the macro `foot'.\foot{like this} They also get
+automatically numbered\foot{consecutively} throughout the paper.
+
+To do equations we use the macro `eqn'
+%
+\eqn\eIi{R^a{}_b=d\om ab+\om ac\wedge\om cb}
+%
+and
+%
+\eqn\eIii{\om a{{b,\mu}}\equiv e^a{}_\nu\grad\mu e_b{}^\nu=
+-e_b{}^\nu\grad\mu e^a{}_\nu.}
+%
+The equations are then referred to (see \eIi\ or \eIii) using the
+label (which includes the parentheses). A list of the equation numbers
+together with their corresponding labels is created in the file eqns.tmp.
+
+
+\newsec{Body}
+
+To specify equation numbers in aligned equations and/or equations
+specified with a's, b's, etc., just tag the equation numbers first
+using the macro `eqnn' or `eqna' and then use `eqalignno'
+\eqna\eIIi
+\eqnn\eIIii
+%
+$$\eqalignno{\left(\int_{-\infty}^\infty e^{-x^2}\right)^2\,dx
+&={\rm something}&\eIIi a\cr
+&={\rm something\ else}\cr
+&=\pi&\eIIi b\cr
+&=2\pi/2.&\eIIii\cr}$$
+%
+We can then easily refer back to $\eIIii$ or $\eIIi{a}$ or even
+$\eIIi{a,b}$ (eqna defines a label which takes an argument
+$\{a,b,\ldots\}$ when used to refer back; it could be used instead of
+eqnn if one remembers to type $\{\}$ after the label when referring
+back) or set up a new equation referring to none of them:
+%
+\eqn\eIIx{2+2=4.}
+
+
+
+\newsec{Conclusion}
+
+To call Tex on a source file filename.tex, issue the command
+$$\hbox{\$ tex filename}$$
+which creates a file filename.dvi (and also a filename.lis file).
+When satisfied, issue the command
+$$\hbox{\$ qmstex filename}$$
+to create a file filename.bit for the qms lasergrafix printer.
+Finally, to get the printout, issue
+$$\hbox{\$ las8 filename}$$
+which sends filename.bit to the printer. Before logging off, it is
+probably preferable to get rid of the .dvi, .bit, and .lis files.
+
+To list the references, use the macro `listrefs' as below.\foot{exactly once
+at the end of the paper}\ We conclude with some sample figure captions
+using the macro `fig'.% and a last gratuitous reference\ref
+%\IIi{A. Redlich, Phys. Rev. Lett. 52 (1984) 18\semi
+%A. Niemi and G. Semenoff, any paper\semi
+%R. Jackoff, ``Re-Cycles of Geometry in Physics,'' in {\it Asymptotic
+%Reams of Physicists}, ed. A. Goof et al. (Cambridge, MA, MIT Press,
+%1983)}.
+
+\vskip 1in\centerline{{\bf Acknowledgements}}
+This work was supported in part by various colleagues. We also thank
+NSF contract PHY-82-15249 for discussions.
+
+\listrefs
+\centerline{{\bf Figure Captions}}\parindent=40pt\bigskip
+\fig{1.1}{Since figures are usually the last thing done, I haven't bothered
+to set up a macro to insert the section number automatically.}
+\fig{1.2}{I also haven't had `fig' automatically insert the final period,
+as does `ref'.}
+\fig{2.1}{`fig' does, however, automatically type a colon and line up the
+text properly.}
+\parindent=20pt
+
+\bye
diff --git a/macros/plain/contrib/samples/artic0.tex b/macros/plain/contrib/samples/artic0.tex
new file mode 100644
index 0000000000..5d0ba08382
--- /dev/null
+++ b/macros/plain/contrib/samples/artic0.tex
@@ -0,0 +1,128 @@
+\newbox\leftpage
+\newdimen\fullhsize
+\newdimen\hstitle
+\newdimen\hsbody
+\tolerance=1000\hfuzz=2pt
+
+\def\bigans{b }
+\message{ big or little (b/l)? }\read-1 to\answ
+
+\ifx\answ\bigans\message{(This will come out unreduced.}
+\magnification=1200\baselineskip=14pt
+\font\bigfnt=amr10 scaled\magstep3 \global\let\absfnt=\tenrm
+\hsbody=\hsize \hstitle=\hsize %take default values for unreduced format
+
+\else\message{(This will be reduced.}
+\let\lr=L
+\special{landscape}
+\font\bigfnt=amr10 scaled\magstep4
+\font\absfnt=amr10 scaled\magstep1
+\def\almostshipout#1{\if L\lr \count1=1
+ \global\setbox\leftpage=#1 \global\let\lr=R
+ \else \count1=2
+ \shipout\vbox{\hbox to\fullhsize{\box\leftpage\hfil#1}}
+ \global\let\lr=L\fi}
+
+\output={\ifnum\count0=1 %%% This is the HUTP version
+ \shipout\vbox{\hbox to \fullhsize{\hfill\pagebody\hfill}}\advancepageno
+ \else
+ \almostshipout{\leftline{\vbox{\pagebody\makefootline}}}\advancepageno
+ \fi}
+
+\magnification=1000\baselineskip=14pt\voffset=-.31truein\hoffset=.05truein
+\hstitle=8truein\hsbody=4.75truein\vsize=7truein\fullhsize=10truein
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\def\HUTP#1#2{\nopagenumbers\hsize=\hstitle\rightline{\absfnt HUTP-85/A#1}%
+\vskip 1in\bigfnt\centerline{#2}\absfnt\vskip .5in}
+
+\def\Date#1{\vfill\leftline{#1}\tenrm\supereject\hsize=\hsbody%
+\footline={\hss\tenrm\folio\hss}}% restores pagenumbers
+
+
+% tagged sec numbers
+\global\newcount\secno \global\secno=0
+\global\newcount\meqno \global\meqno=1
+
+\def\newsec#1{\global\advance\secno by1\global\meqno=1
+\ifx\answ\bigans \vfill\eject
+\else\bigbreak\bigskip\fi% (combination \goodbreak\bigskip\bigskip)
+\noindent{\bf\the\secno. #1}\par\nobreak\medskip\nobreak}
+
+% \eqn\label{a+b=c} gives a displayed equation with number
+% chosen consecutively within sections.
+% \eqnn and \eqna define labels in advance
+\newwrite\efile \let\firsteqn=T
+\def\writeqno#1%
+{\if T\firsteqn \immediate\openout\efile=eqns.tmp\global\let\firsteqn=F\fi%
+\immediate\write\efile{#1 \string#1}\global\advance\meqno by1}
+
+\def\eqnn#1{\xdef #1{(\the\secno.\the\meqno)}\writeqno#1}
+\def\eqna#1{\xdef #1##1{(\the\secno.\the\meqno##1)}\writeqno{#1{}}}
+
+\def\eqn#1#2{\xdef #1{(\the\secno.\the\meqno)}%
+$$#2\eqno(\the\secno.\the\meqno)$$\writeqno#1}
+
+
+% footnotes
+\global\newcount\ftno \global\ftno=1
+\def\foot#1{\footnote{$^{\the\ftno}$}{#1}\ %
+\global\advance\ftno by1}
+
+
+% \ref\label{text}
+% generates a number, assigns it to \label, generates an entry.
+% To list the refs on a separate page, \listrefs
+
+\global\newcount\refno \global\refno=1
+\newwrite\rfile
+
+\def\ref#1#2{[\the\refno]\nref#1{#2}}
+\def\nref#1#2{\xdef#1{[\the\refno]}%
+\ifnum\refno=1\immediate\openout\rfile=refs.tmp\fi%
+\immediate\write\rfile{\noexpand\item{\noexpand#1\ }#2.}%
+\global\advance\refno by1}
+
+\def\semi{;\hfil\noexpand\break}
+
+\def\listrefs{\vfill\eject\immediate\closeout\rfile%\parindent=20pt
+\centerline{{\bf References}}\bigskip\frenchspacing%
+\input refs.tmp\vfill\eject\nonfrenchspacing}
+
+% and finally, figures:
+\def\fig#1#2{\item{Figure #1: }#2}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\inv{^{\raise.15ex\hbox{${\scriptscriptstyle -}$}\kern-.05em 1}}
+%\def\inv{^{\hbox{-}1}}
+\def\dup{^{\vphantom{1}}}
+%\def\Dsl{\raise.15ex\hbox{$/$}\kern-.75em\hbox{$D$}} %capital D slash
+\def\Dsl{\,\raise.15ex\hbox{$/$}\mkern-13.5mu D} %this one can be subscripted
+\def\Psl{\raise.15ex\hbox{$/$}\kern-.57em\hbox{$\partial$}}
+% matters of taste
+%\def\tilde{\widetilde}
+%\def\bar{\overline}
+%\def\hat{\widehat}
+%
+\def\del{\partial}
+%curly letters
+\def\CA{\hbox{{$\cal A$}}} \def\CC{\hbox{{$\cal C$}}}
+\def\CF{\hbox{{$\cal F$}}} \def\CG{\hbox{{$\cal G$}}}
+\def\CL{\hbox{{$\cal L$}}} \def\CH{\hbox{{$\cal H$}}}
+\def\CI{\hbox{{$\cal I$}}} \def\CU{\hbox{{$\cal U$}}}
+\def\CB{\hbox{{$\cal B$}}} \def\CAG{\hbox{{$\cal A$/$\cal G$}}}
+\def\CD{\hbox{{$\cal D$}}} \def\CT{\hbox{{$\cal T$}}}
+\def\grad#1{\,\nabla\!_{{#1}}\,}
+\def\ph{\varphi}
+\def\psibar{\overline\psi}
+\def\om#1#2{\omega^#1{}_#2}
+\def\vev#1{\langle #1 \rangle}
+\def\darr#1{\raise1.3ex\hbox{$\leftrightarrow$}\mkern-15.3mu #1}
+\def\lie{\hbox{\it\$}} %pound sterling
+\font\bigit=amti10 scaled \magstep1
+\def\biglie{\hbox{\bigit\$}} %pound sterling
diff --git a/macros/plain/contrib/samples/autoletter.tex b/macros/plain/contrib/samples/autoletter.tex
new file mode 100644
index 0000000000..115b97bb6e
--- /dev/null
+++ b/macros/plain/contrib/samples/autoletter.tex
@@ -0,0 +1,304 @@
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Autoletter -- TeX Procedure
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Author: E. V. Bell, II
+% Department of Physics and Astronomy
+% University of Kansas
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% V1.1
+% This TeX file is designed to take a file with a list of of names
+% and a file with the text of a form letter and will process a letter
+% for each name.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\input letter_format
+
+\message{+------------------------------------------+}
+\message{| AutoLetter Version 1.1 -- 9 October 1986 |}
+\message{+------------------------------------------+}
+
+\newread\addressfile
+
+\message{Enter name of file containing the addresses:}
+\read-1 to\addfile
+\openin\addressfile=\addfile
+
+\message{Enter name of file containing the body of the letter:}
+\read-1 to\letfile
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Now read in an entry containing the person to whom to send the letter
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\endlinechar=-1
+\read\addressfile to\text \let\title=\text
+
+\loop
+ \read\addressfile to\text \let\firstname=\text
+ \read\addressfile to\text \let\nickname=\text
+ \read\addressfile to\text \let\middlename=\text
+ \read\addressfile to\text \let\lastname=\text
+ \read\addressfile to\text
+ \ifx\text\blank\def\jr{}\else\def\jr{, \text}\fi
+ \endlinechar='015
+ \message{Now processing letter to \addressee.}
+ \getaddress
+ \doletter
+ \endlinechar=-1
+ \read\addressfile to\text \let\title=\text
+ \ifeof\addressfile\endfalse\else\endtrue\fi
+ \ifend
+\repeat
+
+\bye
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Author: E. V. Bell, II
+% Department of Physics and Astronomy
+% University of Kansas
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% V1.2
+% This file is to be used in the production of form letters.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\input KUBasic
+
+\twelvept
+
+\hsize=6.5truein
+\vsize=8.0truein
+\hoffset=1.0truein
+\voffset=1.5truein
+
+\raggedbottom
+\interlinepenalty=1000
+\parindent=0pt
+\parskip=0pt
+
+\nopagenumbers
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Define some stuff so that the headlines will come out the way
+% we want them to be.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\newbox\headbox
+\headline={\ifnum\pageno>1
+ {\twelverm
+ \global\setbox\headbox=\vbox\bgroup%
+ \leftline{\addressee}
+ \leftline{\today}
+ \leftline{Page \folio}\egroup}\copy\headbox
+ \else\hfil\fi}
+
+\def\makeheadline{\vbox to 0pt{\vskip-70.6pt
+ \line{\vbox to30.6pt{}\the\headline}\vss}
+ \nointerlineskip}
+
+\newif\ifend
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Macros for reading in the address from the file.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\def\blank{}
+
+\def\endletter{\endmode\vfill\eject\pageno=1}
+
+\newdimen\longindentation \longindentation=10truecm
+\newbox\theaddress
+\newif\ifast
+\def\aster{* }
+\def\getaddress{{\global\setbox\theaddress=\vbox\bgroup\raggedright%
+ \hsize=\longindentation
+ \everypar{\hangindent2em}
+ \line{\vbox to10.2pt{}\addressee\hss}\egroup%
+ {\loop{\read\addressfile to\text
+ \ifx\text\aster\astfalse\else\asttrue\fi
+ \ifast\global\setbox\theaddress=\vbox\bgroup\unvbox\theaddress
+ \line{\vbox to 10.2pt{}\text\hss}\egroup}\repeat}}}
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Macros for formatting the letter.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\def\letterbody{\beginparmode}
+\def\closing{\beginlinemode\getclosing}
+{\obeylines\gdef\getclosing #1
+ #2
+ {#1\nobreak\bigskip \leftskip=\longindentation #2
+ \nobreak\bigskip\bigskip\bigskip\bigskip % space for signature
+ \def
+ {\endgraf\nobreak}}}
+\def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par}
+\def\ps{\beginparmode\nobreak
+ \interlinepenalty5000\def\par{\endgraf\penalty5000}
+ P.~S.\ }
+
+\def\address{\beginlinemode \copy\theaddress \endgroup}
+\def\doletter{{\leftskip=\longindentation%
+ \rm\today\bigskip\address\bigskip}
+ \input \letfile}
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Macros for setting up forms of salutation.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\def\mr{Mr.}
+\def\ms{Ms.}
+\def\mrs{Mrs.}
+\def\miss{Miss}
+
+\def\addressee{\ifx\blank\title\else\title\space\fi%
+ \firstname\space\ifx\blank\middlename\else\middlename\space\fi%
+ \lastname\jr}
+\def\person{\ifx\blank\title Sir or Madam\else\title\space\lastname\fi}
+\def\familiar{\ifx\blank\nickname \firstname\else\nickname\fi}
+\def\formal{\ifx\mr\title Sir\else{\ifx\ms\title Madam\else%
+ {\ifx\mrs\title Madam\else{\ifx\miss\title Madam\else{\person}\fi}%
+ \fi}\fi}\fi}
+
+
+
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Labels -- TeX Procedure
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Author: E. V. Bell, II
+% Department of Physics and Astronomy
+% University of Kansas
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% V1.0
+% This TeX file is designed to take a file with a list of of names
+% process a label for each name.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\input label_format
+
+\message{+----------------------------------------+}
+\message{| Labels Version 1.0 -- 29 December 1986 |}
+\message{+----------------------------------------+}
+
+\newread\addressfile
+
+\message{Enter name of file containing the addresses:}
+\read-1 to\addfile
+\openin\addressfile=\addfile
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Now read in an entry containing the person to whom to send the letter
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\endlinechar=-1
+\read\addressfile to\text \let\title=\text
+
+\loop
+ \read\addressfile to\text \let\firstname=\text
+ \read\addressfile to\text \let\nickname=\text
+ \read\addressfile to\text \let\middlename=\text
+ \read\addressfile to\text \let\lastname=\text
+ \read\addressfile to\text
+ \ifx\text\blank\def\jr{}\else\def\jr{, \text}\fi
+ \endlinechar='015
+ \message{Now processing label for \addressee.}
+ \getaddress
+ \dolabel
+ \endlinechar=-1
+ \read\addressfile to\text \let\title=\text
+ \ifeof\addressfile\endfalse\else\endtrue\fi
+ \ifend
+\repeat
+
+\bye
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% TeX Master: E. V. Bell, II
+% Department of Physics and Astronomy
+% University of Kansas
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% V1.2
+% This file contains the formatting macros for the LABELS procedure.
+% The macros in this file are based on some provided from a TeXhax
+% submission by Ted Shapin, Beckman Instruments, Fullerton, CA, on
+% December 18, 1986. They can be used to produce mailing labels from
+% a name and address file of the form that AUTOLetter uses. The format
+% is 33 labels per 8-1/2 x 11 inch page. (EVB II, 12/29/86)
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% This output routine does a triple column page with no headers or
+% footers. Taken from the TeXbook. (TS, 12/18/86)
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\input KUBasic
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Set up the page sizes and other dimensions.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\newdimen\fullhsize
+
+\hsize=2.8225truein
+\fullhsize=8.5truein
+\vsize=11.0truein
+\hoffset=0.25truein
+\voffset=-0.175truein
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Set up output routine.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\def\fulline{\hbox to \fullhsize}
+\let\lr=L
+\def\columnbox{\leftline{\pagebody}}
+\newbox\leftcolumn
+\newbox\midcolumn
+
+\output={\if L\lr
+ \global\setbox\leftcolumn=\columnbox
+ \global\let\lr=M \else
+ {\if M\lr \global\setbox\midcolumn=\columnbox
+ \global\let\lr=R \else
+ \tripleformat \global\let\lr=L\fi}\fi
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+
+\def\tripleformat{\shipout\vbox to\vsize{
+ \fulline{\box\leftcolumn\hfil\box\midcolumn\hfil\columnbox}}
+ \advancepageno}
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Set up stuff so that there is no top offsets, offsets between lines,
+% paragraphs, etc.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\parindent=0pt\topskip=0pt\lineskip=0pt plus .4pt\parskip=0pt
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Macros for reading in the address from the file.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\def\blank{}
+
+\newbox\theaddress
+
+\newif\ifast
+\def\aster{* }
+
+\newif\ifend
+
+\def\getaddress{{\global\setbox\theaddress=\vbox\bgroup\raggedright%
+ \everypar{\hangindent2em}
+ \line{\vbox to10.2pt{}\addressee\hss}\egroup%
+ {\loop{\read\addressfile to\text
+ \ifx\text\aster\astfalse\else\asttrue\fi
+ \ifast\global\setbox\theaddress=\vbox\bgroup\unvbox\theaddress
+ \line{\vbox to 10.2pt{}\text\hss}\egroup}\repeat}}}
+
+\def\address{\beginlinemode \copy\theaddress \endgroup}
+\def\dolabel{\vbox to1.0truein{\vfil\hbox to\hsize{\hfil\address\hfil}\vfil}}
+
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+% Macros for setting up the addressee's name.
+%::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+\def\addressee{\ifx\blank\title\else\title\space\fi%
+ \firstname\space\ifx\blank\middlename\else\middlename\space\fi%
+ \lastname\jr}
+
+
diff --git a/macros/plain/contrib/samples/automacro.tex b/macros/plain/contrib/samples/automacro.tex
new file mode 100644
index 0000000000..f0656b14ca
--- /dev/null
+++ b/macros/plain/contrib/samples/automacro.tex
@@ -0,0 +1,104 @@
+\newif\ifsimboli
+\newif\ifriferimenti
+
+\newwrite\filesimboli
+\def\simboli{
+ \immediate\write16{ !!! Genera il file \jobname.SMB }
+ \simbolitrue\immediate\openout\filesimboli=\jobname.smb}
+
+\newwrite\fileausiliario
+\def\riferimentifuturi{
+ \immediate\write16{ !!! Genera il file \jobname.AUX }
+ \riferimentitrue\openin1 \jobname.aux
+ \ifeof1\relax\else\closein1\relax\input\jobname.aux\fi
+ \immediate\openout\fileausiliario=\jobname.aux}
+
+\newcount\sectnum\global\sectnum=0
+\newcount\eqnum\global\eqnum=0
+\newcount\citnum\global\citnum=0
+
+\newif\ifndoppia
+\def\numerazionedoppia{\ndoppiatrue\gdef\lasezionecorrente{\the\sectnum}}
+
+\def\seindefinito#1{\expandafter\ifx\csname#1\endcsname\relax}
+\def\spoglia#1>{}
+
+\def\cref#1{\seindefinito{@c@#1}\immediate\write16{ !!! \string\cref{#1}
+ non definita !!!}
+ \expandafter\xdef\csname@c@#1\endcsname{??}\fi\csname@c@#1\endcsname}
+
+\def\eqref#1{\seindefinito{@eq@#1}\immediate\write16{ !!! \string\eqref{#1}
+ non definita !!!}
+ \expandafter\xdef\csname@eq@#1\endcsname{??}\fi\csname@eq@#1\endcsname}
+
+\def\sref#1{\seindefinito{@s@#1}\immediate\write16{ !!! \string\sref{#1}
+ non definita !!!}
+ \expandafter\xdef\csname@s@#1\endcsname{??}\fi\csname@s@#1\endcsname}
+
+\def\section#1\par{\immediate\write16{#1}\goodbreak\vskip 48pt plus 60pt
+ \noindent{\bf#1}\nobreak\vskip 15pt\nobreak\noindent}
+
+\def\autosection#1#2\par{
+ \global\advance\sectnum by 1\ifndoppia\global\eqnum=0\fi
+ \xdef\lasezionecorrente{\the\sectnum}
+ \def\usaegetta{1}\seindefinito{@s@#1}\def\usaegetta{2}\fi
+ \expandafter\ifx\csname@s@#1\endcsname\lasezionecorrente\def\usaegetta{2}\fi
+ \ifodd\usaegetta\immediate\write16
+ { !!! possibili riferimenti errati a \string\sref{#1} }\fi
+ \expandafter\xdef\csname@s@#1\endcsname{\lasezionecorrente}
+ \immediate\write16{\lasezionecorrente. #2}
+ \ifsimboli
+ \immediate\write\filesimboli{ }\immediate\write\filesimboli{ }
+ \immediate\write\filesimboli{ Sezione \lasezionecorrente : sref. #1}
+ \immediate\write\filesimboli{ } \fi
+ \ifriferimenti
+ \immediate\write\fileausiliario{\string\expandafter\string\edef
+ \string\csname@s@#1\string\endcsname{\lasezionecorrente}}\fi
+ \goodbreak\vskip 48pt plus 60pt
+ \noindent\hbox{\bf\the\sectnum.\quad{}}{\bf#2}\nobreak\vskip 15pt
+ \nobreak\noindent}
+
+\def\semiautosection#1#2\par{
+ \gdef\lasezionecorrente{#1}\ifndoppia\global\eqnum=0\fi
+ \ifsimboli
+ \immediate\write\filesimboli{ }\immediate\write\filesimboli{ }
+ \immediate\write\filesimboli{ Sezione ** : sref.
+ \expandafter\spoglia\meaning\lasezionecorrente}
+ \immediate\write\filesimboli{ }\fi
+ \section#2\par}
+
+\def\eqlabel#1{\global\advance\eqnum by 1
+ \ifndoppia\xdef\ilnumero{\lasezionecorrente.\the\eqnum}
+ \else\xdef\ilnumero{\the\eqnum}\fi
+ \def\usaegetta{1}\seindefinito{@eq@#1}\def\usaegetta{2}\fi
+ \expandafter\ifx\csname@eq@#1\endcsname\ilnumero\def\usaegetta{2}\fi
+ \ifodd\usaegetta\immediate\write16
+ { !!! possibili riferimenti errati a \string\eqref{#1} }\fi
+ \expandafter\xdef\csname@eq@#1\endcsname{\ilnumero}
+ \ifndoppia
+ \def\usaegetta{\expandafter\spoglia\meaning\lasezionecorrente.\the\eqnum}
+ \else\def\usaegetta{\the\eqnum}\fi
+ \ifsimboli
+ \immediate\write\filesimboli{ Equazione \usaegetta : eqref. #1}\fi
+ \ifriferimenti
+ \immediate\write\fileausiliario{\string\expandafter\string\edef
+ \string\csname@eq@#1\string\endcsname{\usaegetta}}\fi}
+
+\def\autoeqno#1{\eqlabel{#1}\eqno(\csname@eq@#1\endcsname)}
+\def\autoleqno#1{\eqlabel{#1}\leqno(\csname@eq@#1\endcsname)}
+
+\def\clabel#1{\global\advance\citnum by 1%
+\xdef\lacitazione{\the\citnum}%
+\def\usaegetta{1}\seindefinito{@c@#1}\def\usaegetta{2}\fi%
+\expandafter\ifx\csname@c@#1\endcsname\lacitazione\def\usaegetta{2}\fi%
+\ifodd\usaegetta\immediate\write16%
+{ !!! possibili riferimenti errati a \string\cref{#1} }\fi%
+\expandafter\xdef\csname@c@#1\endcsname{\lacitazione}%
+\ifsimboli%
+\immediate\write\filesimboli{ Citazione \lacitazione : cref. #1}\fi%
+\ifriferimenti\immediate\write\fileausiliario{\string\expandafter\string\edef%
+\string\csname@c@#1\string\endcsname{\lacitazione}}\fi}%
+
+\def\cite#1{$^{[\cref{#1}]}$}
+\def\firstcite#1{\clabel{#1}\cite{#1}}
+
diff --git a/macros/plain/contrib/samples/bobmacro.tex b/macros/plain/contrib/samples/bobmacro.tex
new file mode 100644
index 0000000000..e3518faf9d
--- /dev/null
+++ b/macros/plain/contrib/samples/bobmacro.tex
@@ -0,0 +1,359 @@
+
+% This version: ROME 14 June 1986
+
+% An ampersand tells TeX to ignore the rest of the line so you
+% include comments. This "macro" file grew from Bill Press's macro file
+% at CFA Harvard and was modified to suit the needs of Bob Jantzen
+% dept of math sciences, villanova university, villanova, PA 19085 USA.
+% tel:(215)645-4850
+
+% For PLAIN TeX margins of 1 inch on American size paper
+% you need the following commands:
+% \hoffset=1.0 true in
+% \voffset=1.0 true in
+
+% For centered PLAIN TeX output on the VAXROM QMS LASER PRINTER
+% (European size paper: A4)
+% one needs the following command:
+ \hoffset=-.85truecm
+% For a 1 inch (2.54cm) left margin one needs instead:
+% \hoffset=-.6truein
+% This shifts to the right enough for stapling on the left.
+
+%Definitions to use math symbols even in text
+\let\Malpha=\alpha
+\def\alpha{\relax\ifmmode{\Malpha}\else{$\Malpha$}\fi}
+\let\Mbeta=\beta
+\def\beta{\relax\ifmmode{\Mbeta}\else{$\Mbeta$}\fi}
+\let\Mgamma=\gamma
+\def\gamma{\relax\ifmmode{\Mgamma}\else{$\Mgamma$}\fi}
+\let\Msection=\section
+\def\section{\relax\ifmmode{\Msection}\else{$\Msection$}\fi}
+\let\Mdollar=\$
+\def\${\relax\ifmmode{\Mdollar}\else{$\Mdollar$}\fi}
+\let\Ldots=\ldots
+\def\ldots{\relax\ifmmode{\Ldots}\else{$\Ldots$}\fi}
+
+% Miscellaneous spacing macros
+\def\lft#1{#1\hfill}
+\def\ctr#1{\hfill#1\hfill}
+\def\rt#1{\hfill#1}
+\def\lftl#1{\leftline#1}
+\def\ctrl#1{\centerline#1}
+\def\rtl#1{\rightline#1}
+\def\lftb#1{\leftline{\bf#1}}
+\def\ctrlb#1{\centerline{\bf #1}}
+
+\def\newline{\hfil\break}
+\def\indent{\hbox to 20pt{}}
+\def\singlespace{\baselineskip 12 pt}
+\def\doublespace{\baselineskip 24 pt}
+\def\triplespace{\baselineskip 36 pt}
+\def\oneandahalfspace{\baselineskip 18pt} % scientific manuscripts which should
+ % be doublespaced look much better at
+ % one and a half space; also use
+ % \magnification=\magstep1
+\def\blankline{\par\vskip 12 pt\noindent}
+\def\thsp{\thinspace}
+
+% see p357 top of The TeXbook:
+\def\noarrowfill{$\mathsurround=0pt \mathord- \mkern-6mu
+ \cleaders\hbox{$\mkern-2mu \mathord- \mkern-2mu$}\hfill
+ \mkern-6mu \mathord-$}
+\def\clinefill{\noarrowfill}
+
+% Automatic list with count starting at 1 for bibliography (correct indenting).
+\newcount\listno
+\def\beginlist{\listno=0}
+ \beginlist
+\def\list{\par\noindent\hangindent 20pt\advance\listno by 1
+ \hbox to 20pt{\hfil\relax\the\listno.\ }}
+
+% Automatic list with count starting at 1 for bibliography (correct indenting).
+% (superscript style numbering of references)
+\newcount\listsno
+\def\beginlists{\listsno=0}
+ \beginlists
+\def\lists{\par\noindent\hangindent 20pt\advance\listsno by 1
+ $^{\relax\the\listsno}$}
+
+% For unnumbered bibliography just use `\ref'.
+\def\ref{\par\noindent\hangindent 20pt}
+
+% Title page or sectioning commands
+\def\nobreak{\penalty1000}
+\def\titl#1\endtitl{\par\vfil\eject
+ \par\vbox to 2in {}{\bf #1}\par\vskip 1in\nobreak}
+\def\sect#1\endsect{\par\vfil\eject{\bf #1}\par\vskip 12pt\nobreak}
+\def\subsect#1\endsubsect{\par
+ \vskip 0in plus 1in\penalty -5\vskip 12pt plus -1in
+ {\bf #1}\par\nobreak}
+\def\Received{\par\vskip 12 pt
+ \centerline{\it Received 1985 \vrule height -1 pt width 1.5 in
+ depth 1.8 pt ; accepted \vrule height -1 pt width 1.5 in depth 1.8pt
+ .}\par}
+\def\ABSTRACT{\par\vfil\eject\vskip 1 in \centerline{\bf ABSTRACT }
+ \par\vskip .5in }
+\def\REFERENCES{\par\vfil\eject\vskip 1 in \centerline{\bf REFERENCES}
+ \par\vskip .5in }
+
+
+% bob's useful definitions
+
+% old version of \textunderline:
+%\def\textunderline#1{\setbox0=\hbox{#1}\hbox
+% {\vrule height -1pt depth 1.8pt width \wd0 \hskip -1\wd0 \box0}}
+% new version:
+\def\textunderline#1{$\underline{\smash{\hbox{#1}}}$}
+% This only works if the underlined text is on a single line.
+
+\def\boxit#1{\vbox{\hrule height .8pt\hbox{\vrule width .8pt\hskip 3pt
+ \vbox{\vskip 3pt #1 \vskip 3pt}\hskip 3pt\vrule width .8pt}
+ \hrule height .8pt}}
+% This puts a slightly larger ruled box around the box which is the argument.
+\newdimen\boxmarg
+\def\boxitto#1#2{\relax\boxmarg=#1
+\vbox{\hrule height .8pt\hbox{\vrule width .8pt\hskip \boxmarg
+ \vbox{\vskip \boxmarg #2 \vskip \boxmarg}\hskip \boxmarg\vrule width .8pt}
+ \hrule height .8pt}}
+% This accepts a margin dimension parameter. The following is a useful test
+% sample of \boxitto:
+% $$\vcenter{\boxitto{10pt}{\halign{#\cr ONE\cr TWO\cr THREE\cr}}} \rightarrow
+% \vcenter{\boxitto{12pt}{\halign{#\cr FOUR\cr FIVE\cr}}}$$
+
+% This defines a version of \matrix with options for horizontal and vertical
+% lines separating some rows and columns; just use a \vline in a column to get
+% a vertical line and replace a whole row by \hline for a horizontal line.
+\def\vline{\hbox{\strut\vrule}}
+\def\hline{\noalign{\hrule}}
+\def\matrixtable#1{\,\vcenter{\normalbaselines\mathsurround=0pt
+ \tabskip=2.5pt\offinterlineskip
+ \halign{\hfil$##$\hfil &&\hfil$##$\hfil\crcr
+ \mathstrut\crcr\noalign{\kern-12pt}
+ #1\crcr\mathstrut\crcr\noalign{\kern-12pt}}}\,}
+% This is an example:
+% $$\left(\matrixtable{A&\vline&B\cr \hline C&\vline&D\cr}\right)$$
+
+\def\bivec#1{\vbox{\ialign{##\crcr $\leftrightarrow$\crcr\noalign{
+ \kern-1pt \nointerlineskip}$\hfil\displaystyle{#1}\hfil$\crcr}}}
+% This puts a double arrow over a symbol.
+
+\def\dal{\rlap{\sqcap}\sqcup} % the relativistic d'Alembertian operator
+
+\let\ovl=\overline
+
+\def\ut#1{\mathop{\vtop{\ialign{##\crcr
+ $\hfil\displaystyle{#1}\hfil$\crcr\noalign
+ {\kern1pt\nointerlineskip}\hbox{$\hfil\sim\hfil$}\crcr
+ \noalign{\kern1pt}}}}}
+\def\undersim{\ut}
+% This puts a \sim under a symbol.
+% This is the model for putting a symbol under another symbol
+% without shrinkage:
+\def\undersymbol#1#2{\mathop{\vtop{\ialign{##\crcr
+ $\hfil\displaystyle{#2}\hfil$\crcr\noalign
+ {\kern1pt\nointerlineskip}\hbox{$\hfil#1\hfil$}\crcr
+ \noalign{\kern1pt}}}}}
+
+\def\expo#1{e^{\hbox{$#1$}}}
+% This is for exponentiating an expression without shrinkage.
+
+\def\leftcontract{\hbox{\vrule height0.7pt width6pt \vrule width0.7pt
+ height4.5pt}\hskip 2pt}
+% This is for contraction of a vector against a covariant tensor in
+% index free notation.
+
+% These are various subscript and superscript abbreviations.
+\def\p{^{\prime}\null}
+\def\pp{^{\prime\prime}\null}
+\def\pprime{\prime\prime}
+\def\ps{_{\bot}}
+\def\sast{^{\ast}}
+
+% These are definitions for textstyle fractions in display mode.
+\def\half{\textstyle {1\over2}\displaystyle}
+\def\fraction#1#2{\textstyle{#1\over#2}\displaystyle}
+\def\hhalf{1/2}
+
+% These are roman abbreviations for math mode.
+\def\Tr{\mathop{\rm Tr}\nolimits}
+\def\diag{\mathop{\rm diag}\nolimits}
+\def\sgn{\mathop{\rm sgn}\nolimits}
+\def\ad{\mathop{\rm ad}\nolimits}
+\def\Ad{\mathop{\rm Ad}\nolimits}
+\def\aut{\mathop{\it aut}\nolimits}
+\def\Aut{\mathop{\rm Aut}\nolimits}
+\def\SAut{\mathop{\rm SAut}\nolimits}
+\def\span{\mathop{\rm span}\nolimits}
+\def\ker{\mathop{\rm ker}\nolimits}
+\def\rank{\mathop{\rm rank}\nolimits}
+\def\sech{\mathop{\rm sech}\nolimits}
+
+
+% style abbreviations
+\def\ds{\dispstyle}
+\def\st{\scriptstyle}
+\def\sst{\scriptscriptstyle}
+
+% BOLDFACE Definitions
+
+% From the TeXbook, a poor man's boldface in math mode:
+\def\pmb#1{\setbox0=\hbox{$#1$}%
+ \kern-.025em\copy0\kern-\wd0
+ \kern.05em\copy0\kern-\wd0
+ \kern-.025em\raise.0433em\box0}
+% and reducing by a factor of .7 for \scriptstyle:
+\def\pmbs#1{\setbox0=\hbox{$\st #1$}%
+ \kern-.0175em\copy0\kern-\wd0
+ \kern.035em\copy0\kern-\wd0
+ \kern-.0175em\raise.0303em\box0}
+
+%\def\bff#1{\hbox to .00385in{$#1$\hss}\hbox to .00385in{$#1$\hss}#1}
+\def\bfs#1{\hbox to .0035in{$\st#1$\hss}\hbox to .0035in{$\st#1$\hss}\st#1}
+%\def\bfk#1{\hbox to .00385in{$#1$\hss}\textstyle #1}
+%These are old definitions for boldface Greek displaystyle, scriptstyle
+% and kappa (which doesn't look good the first way).
+
+% boldface greek
+\def\bfalpha{\pmb{\alpha}}
+\def\bfsalpha{\pmbs{\alpha}}
+\def\bfbeta{\pmb{\beta}}
+\def\bfsbeta{\pmbs{\beta}}
+\def\bfdelta{\pmb{\delta}}
+\def\bfkappa{\pmb{\kappa}}
+\def\bfskappa{\pmbs{\kappa}}
+\def\bfomega{\pmb{\omega}}
+\def\bfrho{\pmb{\rho}}
+\def\bfsigma{\pmb{\sigma}}
+\def\bfpi{\pmb{\pi}}
+
+% miscellaneous boldface
+\def\bfone{\hbox{\bf 1}}
+\def\bfsone{\pmbs{1}}
+\def\bfg{\hbox{\bf g}}
+\def\bfn{\hbox{\bf n}}
+\def\bfA{\hbox{\bf A}}
+\def\bfB{\hbox{\bf B}}
+\def\bfH{\hbox{\bf H}}
+\def\bfS{\hbox{\bf S}}
+\def\bfI{\hbox{\bf I}}
+\def\bfk{\hbox{\bf k}}
+\def\bfK{\hbox{\bf K}}
+\def\bfe{\hbox{\bf e}}
+
+% Italic Greek Capitals
+\def\Gammait{{\mit\Gamma}}
+\def\Deltait{{\mit\Delta}}
+\def\Thetait{{\mit\Theta}}
+\def\Lambdait{{\mit\Lambda}}
+\def\Xiit{{\mit\Xi}}
+\def\Piit{{\mit\Pi}}
+\def\Sigmait{{\mit\Sigma}}
+\def\Upsilonit{{\mit\Upsilon}}
+\def\Phiit{{\mit\Phi}}
+\def\Psiit{{\mit\Psi}}
+\def\Omegait{{\mit\Omega}}
+
+% Script Capital Macros
+\def\Ascr{{\cal A}}
+\def\Bscr{{\cal B}}
+\def\Cscr{{\cal C}}
+\def\Dscr{{\cal D}}
+\def\Escr{{\cal E}}
+\def\Fscr{{\cal F}}
+\def\Gscr{{\cal G}}
+\def\Hscr{{\cal H}}
+\def\Iscr{{\cal I}}
+\def\Jscr{{\cal J}}
+\def\Kscr{{\cal K}}
+\def\Lscr{{\cal L}}
+\def\Mscr{{\cal M}}
+\def\Nscr{{\cal N}}
+\def\Oscr{{\cal O}}
+\def\Pscr{{\cal P}}
+\def\Qscr{{\cal Q}}
+\def\Rscr{{\cal R}}
+\def\Sscr{{\cal S}}
+\def\Tscr{{\cal T}}
+\def\Uscr{{\cal U}}
+\def\Vscr{{\cal V}}
+\def\Wscr{{\cal W}}
+\def\Xscr{{\cal X}}
+\def\Yscr{{\cal Y}}
+\def\Zscr{{\cal Z}}
+
+% Miscellaneous
+
+\def\xc{\hbox{\rlap{\hskip 1.5pt\raise .75pt\hbox{--}}$\Xscr$}}
+%This is the symbol used for the space of vector fields on a manifold.
+
+\def\partialslash{\rlap{\hbox{/}}\partial}
+\def\deltaslash{\rlap{\hbox{/}}\delta}
+% These are slashed symbols for divergences and variational derivatives
+% in a frame.
+
+\def\del{\nabla}
+\def\ketl{\langle}
+\def\ketr{\rangle}
+\def\larrow{\leftarrow}
+\def\rarrow{\rightarrow}
+\def\relv{\bigm|}
+
+\def\Lie{\hbox{\it\char'44}}
+\def\Lied#1{\Lie_{\hbox{$#1$}}\thsp}
+
+\def\sterling{\hbox{\it\char'44}}
+\def\tb{\overline{t}\null}
+\def\inm{\rlap{$\hskip 1.3pt -$}\supset}
+\def\inr{\rlap{$\hskip 2.55pt\scriptstyle{\vert}\displaystyle$}\cap}
+\let\hold=\null
+\def\fcaption#1{\parshape=1 .75cm 12.2cm {#1} \parshape=0}
+
+\def\twov#1#2{\pmatrix{#1\cr#2\cr}}
+\def\threev#1#2#3{\pmatrix{#1\cr#2\cr#3\cr}}
+\let\mtx=\pmatrix
+
+\def\et{\tilde{e}\null}
+\def\zd{_{(0)}}
+
+% These are old definitions for raised dots:
+\def\du{\rlap{\raise 6.75pt\hbox{\hskip 3pt$\cdot$}}}
+\def\dl{\rlap{\raise 4.5pt\hbox{\hskip 2pt$\cdot$}}}
+\def\odu{\rlap{\raise 4pt\hbox{\hskip 3pt$^{\circ}$}}}
+\def\odl{\rlap{\raise 1.75pt\hbox{\hskip 2pt$^{\circ}$}}}
+\def\dott#1{\vbox{\baselineskip-1pt\lineskip 1pt\halign{\ctr{##}\cr
+ .\cr $#1$\cr}}}
+\def\ddott#1{\vbox{\baselineskip-1pt\lineskip 1pt\halign{\ctr{##}\cr
+ ..\cr/$#1$\cr}}}
+
+\def\Wd{\dot{\tilde{W}}\null}
+\def\wedget{\scriptstyle{\wedge}\displaystyle}
+\def\A#1{\hat{#1}}
+%\def\As#1{\rlap{\raise 1pt\hbox{\hskip 1pt\char'017}}#1}
+\def\As#1{\hat#1}
+\def\bfbbeta{\bfs{\beta}}
+
+% some journal abbreviations
+\def\jmp{{\it J. Math. Phys.}\ }
+\def\pr{{\it Phys. Rev.}\ }
+\def\prl{{\it Phys. Rev. Lett.}\ }
+\def\pl{{\it Phys. Lett.}\ }
+\def\cmp{{\it Commun. Math. Phys.}\ }
+\def\cqg{{\it Class. Quantum Grav.}\ }
+\def\ap{{\it Ann. Phys. (N.Y.)}\ }
+\def\spj{{\it Sov. Phys. JETP}\ }
+\def\grg{{\it Gen. Relativ. Grav.}\ }
+\def\nat{{\it Nature}\ }
+\def\apj{{\it Ap. J.}\ }
+\def\aaa{{\it Astron. Astrophys.}\ }
+\def\ncim{{\it Nuovo Cim.}\ }
+\def\ptp{{\it Prog. Theor. Phys.}\ }
+\def\aip{{\it Adv. Phys.}\ }
+\def\jpamg{{\it J. Phys. A: Math. Gen.}\ }
+\def\mnras{{\it Mon. Not. R. ast. Soc.}\ }
+\def\prep{{\it Phys. Rep.}\ }
+\def\ncb{{\it Il Nuovo Cimento ``B''}}
+\def\ssr{{\it Space Sci. Rev.}\ }
+\def\pasp{{\it Pub. A. S. P.}\ }
+\def\araa{{\it Ann. Rev. Astr. Ap.}\ }
+\def\asr{{\it Adv. Space Res.}\ }
diff --git a/macros/plain/contrib/samples/boxit.tex b/macros/plain/contrib/samples/boxit.tex
new file mode 100644
index 0000000000..57956219c1
--- /dev/null
+++ b/macros/plain/contrib/samples/boxit.tex
@@ -0,0 +1,13 @@
+%
+% BOXIT
+%
+% Use \boxit{ text } to surround text / paragraphs / anything in a
+% box. For example, typing \boxit{the} would produce
+% +---+
+% |the|
+% +---+
+% (you may want to use \strut inside the argument if the
+% boxit is on a line by itself).
+%
+\def\boxit#1{\leavevmode\hbox{\vrule\vtop{\vbox{\kern.33333pt\hrule
+ \kern1pt\hbox{\kern1pt\vbox{#1}\kern1pt}}\kern1pt\hrule}\vrule}}
diff --git a/macros/plain/contrib/samples/docautomacro.tex b/macros/plain/contrib/samples/docautomacro.tex
new file mode 100644
index 0000000000..3c03f2b2d6
--- /dev/null
+++ b/macros/plain/contrib/samples/docautomacro.tex
@@ -0,0 +1,330 @@
+% Questo file (in Tex) contiene la documentazione sull'uso dei
+% comandi contenuti nel file AUTOMACRO.tex, utile per la numerazione
+% automatica delle eqs, della bibliografia etc.
+
+\magnification=1200
+\tolerance=1000
+%\hsize=15 truecm
+%\vsize=23 truecm
+%\baselineskip 20 truept
+%\voffset=-2 truecm
+
+\font\deca=cmr10 scaled\magstep1
+\font\rex=cmr10 scaled\magstep2
+\font\ita=cmti10 scaled\magstep1
+\font\itax=cmti10 scaled\magstep2
+\font\sla=cmsl10 scaled\magstep1
+\font\slax=cmsl10 scaled\magstep2
+\font\boldo=cmbx10 scaled\magstep1
+\font\boldx=cmbx10 scaled\magstep2
+
+\def\st#1{\underbar {#1}}
+\def\bk{$\backslash$}
+\def\ri{\item{$\star$\ }}
+\def\pgl{$\{$}
+\def\pgr{$\}$}
+\def\dsty{\displaystyle}
+
+\def\uncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials}
+
+\def\sic{\begingroup\tt\uncatcodespecials
+ \obeyspaces\doverbatim}
+\newcount\balance
+{\catcode`<=1 \catcode`>=2 \catcode`\{=12 \catcode`\}=12
+ \long\gdef\doverbatim{<\balance=1\verbatimloop>
+ \long\gdef\verbatimloop#1<\def\next<#1\verbatimloop>%
+ \if#1{\advance\balance by1
+ \else\if#1}\advance\balance by-1
+ \ifnum\balance=0\let\next=\endgroup\fi\fi\fi\next>>
+
+% E' la macro "\verbatim" del TeXbook, pag. 381, qui chiamata \sic.
+% I due "\long" li ho aggiunti io.
+
+\centerline {\sla Numerazione automatica di equazioni, etc.\/}
+\vskip 20 truept
+
+ Il file automacro.tex contiene le
+macroistruzioni necessarie per la numerazione automatica di equazioni,
+citazioni, etc.
+
+ L'idea \`e che man mano che si scrivono, ad esempio, equazioni
+numerate, \TeX{} le numera progressivamente in modo automatico,
+facendo avanzare un suo ``contatore di equazioni". L'utente invece
+assegna all'equazione un ``nome'' a piacere (una qualsiasi stringa di
+caratteri) che resta associato al numero, e che si pu\`o usare in
+seguito per far riferimento a quell'equazione. In questo modo
+l'eventuale inserimento di una nuova equazione rinumera
+automaticamente le equazioni seguenti ed anche i corrispondenti
+riferimenti.
+
+\vskip 20 truept
+\noindent 1. \st{Numerazione semplice delle equazioni}
+
+\vskip 7truept
+ \sic{\eqlabel}\pgl\sic{xxx}\pgr \quad aumenta di uno il contatore
+delle equazioni; associa al numero nuovo il nome xxx, che \`e una
+sequenza qualsiasi di lettere, numeri od altri simboli. \par
+\vskip 7 truept
+ \sic{\eqref}\pgl\sic{xxx}\pgr\quad richiama il numero associato
+a xxx tramite \sic{\eqlabel}\pgl\sic{xxx}\pgr. \par
+\vskip 7 truept\noindent
+Esempio: dopo aver gi\`a usato 15 volte \sic{\eqlabel}, si scrive:\par
+\vskip 3truept
+\sic{$$}
+
+\sic{\eqlabel}\pgl\sic{15 bis}\pgr
+
+\sic{\sin(\pi-\alpha) = \sin\alpha\eqno(\eqref}\pgl\sic{15 bis}\pgr
+ \sic{)}
+
+\sic{$$}
+\vskip 7 truept
+\sic{$$}
+
+\sic{\eqlabel}\pgl\sic{16}\pgr
+
+\sic{x =
+\sqrt}\pgl\sic{y+1}\pgr\sic{\eqno(\eqref}\pgl\sic{16}\pgr\sic{)}
+
+\sic{$$}
+
+\noindent \sic{come si} {\tt \`e} \sic{visto nelle (\eqref}\pgl\sic{15
+bis}\pgr)\sic{e (\eqref}\pgl\sic{16}\pgr\sic{)....} \par
+\vskip 7 truept
+ Il risultato \`e:
+$$
+\sin(\pi - \alpha) = \sin \alpha \eqno(16)
+$$
+$$
+x = \sqrt{y + 1} \eqno(17)
+$$
+come si \`e visto nelle (16) e (17).... \par
+\vskip 7 truept
+ \sic{\autoeqno}\pgl\sic{xxx}\pgr \quad sta per
+\sic{\eqlabel{xxx}\eqno(\eqref{xxx})}; le
+formule sopra riportate si possono di conseguenza scrivere in modo pi\`u
+semplice, con identico risultato:
+
+\sic{$$}
+
+\sic{\sin(\pi-\alpha) = \sin\alpha\autoeqno}\pgl\sic{15 bis}\pgr
+
+\sic{$$}
+\vskip 7 truept
+\sic{$$}
+
+\sic{x = \sqrt}\pgl\sic{y + 1}\pgr \sic{\autoeqno}\pgl\sic{16}\pgr
+
+\sic{$$}
+\vskip 7 truept\noindent
+ L'uso separato di \sic{\eqlabel} e \sic{\eqno} resta
+indispensabile per ottenere, ad esempio:
+$$
+\eqalignno{
+\sin (\pi - \alpha) &= \sin \alpha &(16 a) \cr
+\cos (\pi - \alpha) &= - \cos \alpha &(16b) \cr}
+$$
+che si scrive:
+\vskip 3truept
+\sic{$$}
+
+\sic{\eqlabel}\pgl\sic{15 bis}\pgr
+
+\sic{\eqalignno}\pgl
+
+\sic{\sin(\pi - \alpha) & = \sin\alpha &(\eqref}\pgl\sic{15 bis}\pgr
+ \sic{a) \cr}
+
+\sic{\cos(\pi - \alpha) & = -\cos\alpha &(\eqref}\pgl\sic{15 bis}
+ \pgr\sic{b) \cr}\pgr
+
+\sic{$$}
+\vskip 7 truept\noindent
+Esiste anche:
+
+\sic{\autoleqno}\pgl\sic{xxx}\pgr \quad analoga a
+\sic{\autoeqno}\pgl\sic{xxx}\pgr, con numerazione a sinistra.
+\vskip 20 truept
+\noindent 2. \st{Numerazione delle sezioni}
+\vskip 7truept
+
+\sic{\autosection}\pgl\sic{yyy}\pgr \quad (titolo della sezione,
+chiuso da una riga bianca o \sic{\par}). Fa diverse cose: inserisce
+uno spazio opportuno prima e dopo il titolo;
+aumenta di uno il ``contatore delle sezioni", ed associa al
+numero nuovo il nome yyy, per i successivi riferimenti; scrive il
+titolo della sezione in grassetto, preceduto dal numero progressivo
+della sezione; impedisce un eventuale cambio pagina subito dopo il
+titolo.
+\vskip 7 truept
+\sic{\sref}\pgl\sic{yyy}\pgr \quad richiama il numero associato a
+yyy, in maniera simile a \sic{\eqref}.
+\vskip 7truept\noindent
+Esiste anche: \par
+\sic{\section}\quad (titolo, chiuso da \sic{\par} o riga bianca), che
+non produce alcuna numerazione automatica delle sezioni, ma genera le
+stesse spaziature di \sic{\autosection}, e come questa mette il titolo
+in grassetto ed impedisce un eventuale cambio pagina tra il titolo ed
+il testo successivo. \par
+\vskip 20 truept
+\noindent 3. \st{Numerazione doppia delle equazioni}, abbinata alla
+numerazione delle sezioni. \par
+\vskip 7truept
+ Il comando \sic{\numerazionedoppia} predispone la numerazione
+doppia delle equazioni, nella forma: ``sezione.equazione''. Funziona
+cos\`\i: i successivi comandi \sic{\autosection}, in aggiunta a quanto
+gi\`a detto, azzerano il contatore delle equazioni, mentre un
+successivo comando \sic{\eqlabel{xxx}} associa al nome
+xxx il doppio numero ``sezione.equazione'' (\sic{\autoeqno} e
+\sic{\autoleqno} si modificano di conseguenza).
+Perci\`o, se la sezione corrente \`e la numero tre, ed entro questa
+sezione sono gi\`a state numerate 10 equazioni, \sic{\eqlabel{xxx}}
+associa a xxx il numero 3.11.
+\vskip 7 truept
+Esempio: dopo aver inserito il comando \sic{\numerazionedoppia}, ed
+aver gi\`a completato due sezioni, si scrive:
+\vskip 3truept
+
+\sic{\autosection}\pgl\sic{pa}\pgr\sic{Pitagora e Affini \par} \par
+\sic{In questa sezione \sref}\pgl\sic{pa}\pgr\ \sic{si parla di:}\par
+\sic{$$}
+
+\sic{c^2 = a^2 +b^2 \autoeqno}\pgl\sic{pitagora}\pgr
+
+\sic{$$}
+
+\sic{ed inoltre di}
+
+\sic{$$}
+
+\sic{c^2 = a^2 + b^2 - 2ab \cos\alpha \autoeqno}\pgl\sic{affini}\pgr
+
+\sic{$$}
+
+\sic{La (\eqref{pitagora}) \`e un caso particolare della (\eqref{affini}).}
+
+\vskip 7 truept\noindent
+Il risultato \`e:
+\vskip 7truept
+\noindent {\bf 3. \quad Pitagora e affini}\par\noindent
+In questa sezione 3 si parla di
+$$
+c^2 = a^2 + b^2 \eqno (3.1)
+$$
+e di
+$$
+c^2 = a^2 + b^2 - 2ab \cos\,\alpha \eqno (3.2)
+$$
+La (3.1) \`e un caso particolare della (3.2).
+\vskip 7 truept
+E' anche possibile numerare automaticamente le equazioni come si usa
+di solito nelle appendici, cio\`e, ad esempio, (A.1), (A.2), ....
+(B.1) .... usando al posto di \sic{\autosection} il comando
+
+\sic{\semiautosection}\pgl\sic{yyy}\pgr\quad (titolo, chiuso da
+\sic{\par} o linea bianca). Funziona come \sic{\autosection}, per\`o
+non avanza il contatore delle sezioni, e nella numerazione automatica
+delle equazioni usa direttamente il simbolo yyy al posto del numero
+della sezione.
+\vskip 7 truept\noindent
+Esempio: se si scrive
+\vskip 3truept
+
+\sic{\semiautosection}\pgl\sic{\rm A}\pgr \sic{Appendice \par}
+
+\sic{$$}
+
+\sic{\int_0^}\pgl\sic{2\pi}\pgr\sic{\cos x dx = 33 \autoeqno}\pgl
+ \sic{??}\pgr
+
+\sic{$$}
+
+\sic{$$}
+
+\sic{\int_0^}\pgl\sic{2\pi}\pgr \sic{\cos x dx = 0 \autoeqno}\pgl
+ \sic{!!}\pgr
+
+\sic{$$}
+
+\sic{l'integrale (\eqref{??}) \`e sbagliato,
+
+mentre (\eqref{!!}) \`e giusto...}
+\vskip 7 truept\noindent
+Il risultato \`e:
+\vskip 3truept
+\noindent {\bf Appendice} \par
+$$
+\int^{2\pi}_0 \cos x\ dx = 33
+\eqno ({\rm A}.1)
+$$
+
+$$
+\int^{2\pi}_0 \cos x \ dx = 0
+\eqno ({\rm A}.2)
+$$
+l'integrale (A.1) \`e sbagliato, mentre (A.2) \`e giusto...
+\vskip 20 truept
+\noindent 4. \st{Numerazione delle citazioni}
+\vskip 7truept
+ \sic{\clabel}\pgl\sic{xxx}\pgr \quad \`e analoga a \sic{\eqlabel}:
+aumenta di uno il ``contatore delle citazioni", ed associa al numero
+progressivo il nome xxx. \par
+ \sic{\cref{xxx}} \quad richiama il numero associato a xxx
+tramite \sic{\clabel}. \par
+ \sic{\cite{xxx}} \quad sta per
+\sic{$^}\pgl\sic{[\cref}\pgl \sic{xxx}\pgr\sic{]}\pgr\sic{$}, cio\`e
+produce citazioni come$^{[23]}$ questa. \par
+ \sic{\firstcite}\pgl\sic{xxx}\pgr \quad sta per
+\sic{\clabel}\pgl\sic{xxx}\pgr \sic{\cite}\pgl\sic{xxx}\pgr.
+\vskip 20 truept
+\noindent 5. \st{Altri comandi} (tabella con la corrispondenza nomi--numeri;
+riferimenti al futuro)
+\vskip 7truept
+
+E' utile, per successive correzioni, avere una tabella con scritta in
+chiaro la corrispondenza tra nomi e numeri. Si usa per questo il
+comando \sic{\simboli}, a seguito del quale \TeX{} genera un file di
+nome: (nome del lavoro).SMB, con le corrispondenze richieste.
+
+E' poi frequente il caso di riferimenti ``al futuro" (tipicamente con
+le appendici), cio\`e a nomi di equazioni o citazioni cui \TeX{}
+solo in seguito associer\`a automaticamente un numero. E' possibile
+mantenere l'automatismo dei riferimenti, mettendo, all'inizio, il
+comando \sic{\riferimentifuturi}.
+
+Funziona cos\`\i: eseguendo una prima volta \TeX, viene prodotto un
+file ausiliario, di nome: (nome del lavoro).AUX che contiene tutte le
+macroistruzioni che stabiliscono la corrispondenza tra nomi e numeri.
+Eseguendo una seconda volta \TeX{}, queste macroistruzioni sono
+automaticamente richiamate, e tutto funziona correttamente. La
+presenza di riferimenti indefiniti o definiti male \`e segnalata.
+
+\vskip 20 truept
+
+\noindent 6. \st{Avvertenze}
+\vskip 7truept
+
+Le macroistruzioni per la numerazione automatica usano i seguenti
+comandi, che sono riservati e non possono essere usati dall'utente:
+\vskip 3truept
+
+\sic{
+
+\lasezionecorrente
+
+\ilnumero
+
+\lacitazione
+
+\spoglia
+
+\usagetta
+}
+
+\vskip 3truept\noindent
+Sono inoltre riservati tre contatori, di nome \sic{\eqnum},
+\sic{\sectnum} e \sic{\citnum}, due files esterni, di nome
+\sic{\filesimboli} e \sic{\fileausiliario}, e tre nuovi if, di nome
+\sic{\ifsimboli}, \sic{\ifriferimenti} e \sic{\ifdoppia}.
+
+\bye
diff --git a/macros/plain/contrib/samples/double.tex b/macros/plain/contrib/samples/double.tex
new file mode 100644
index 0000000000..2bd5505a10
--- /dev/null
+++ b/macros/plain/contrib/samples/double.tex
@@ -0,0 +1,687 @@
+% Macros for The TeXbook
+
+\catcode`@=11 % borrow the private macros of PLAIN (with care)
+
+\font\tentex=amtex10
+
+\font\inchhigh=aminch
+\font\titlefont=amssmc40
+
+\font\ninerm=amr9
+\font\eightrm=amr8
+\font\sixrm=amr6
+
+\font\ninei=ammi9
+\font\eighti=ammi8
+\font\sixi=ammi6
+\skewchar\ninei='177 \skewchar\eighti='177 \skewchar\sixi='177
+
+\font\ninesy=amsy9
+\font\eightsy=amsy8
+\font\sixsy=amsy6
+\skewchar\ninesy='60 \skewchar\eightsy='60 \skewchar\sixsy='60
+
+\font\eightss=amssq8
+
+\font\eightssi=amssqi8
+
+\font\ninebf=ambx9
+\font\eightbf=ambx8
+\font\sixbf=ambx6
+
+\font\ninett=amtt9
+\font\eighttt=amtt8
+
+\hyphenchar\tentt=-1 % inhibit hyphenation in typewriter type
+\hyphenchar\ninett=-1
+\hyphenchar\eighttt=-1
+
+\font\ninesl=amsl9
+\font\eightsl=amsl8
+
+\font\nineit=amti9
+\font\eightit=amti8
+
+\font\tenu=amu10 % unslanted text italic
+\font\magnifiedfiverm=amr5 at 10pt
+\font\man=manfnt % font used for special symbols (old version)
+%\font\manual=manual % font used for the METAFONT logo, etc. (new version)
+ % manual [which isn't complete yet] is supposed to replace manfnt some day
+
+\newskip\ttglue
+\def\tenpoint{\def\rm{\fam0\tenrm}%
+ \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+ \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+ \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam\tenit}%
+ \textfont\itfam=\tenit
+ \def\sl{\fam\slfam\tensl}%
+ \textfont\slfam=\tensl
+ \def\bf{\fam\bffam\tenbf}%
+ \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\tt{\fam\ttfam\tentt}%
+ \textfont\ttfam=\tentt
+ \tt \ttglue=.5em plus.25em minus.15em
+ \normalbaselineskip=12pt
+ \def\MF{{\manual META}\-{\manual FONT}}%
+ \let\sc=\eightrm
+ \let\big=\tenbig
+ \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}%
+ \normalbaselines\rm}
+
+\def\ninepoint{\def\rm{\fam0\ninerm}%
+ \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam\nineit}%
+ \textfont\itfam=\nineit
+ \def\sl{\fam\slfam\ninesl}%
+ \textfont\slfam=\ninesl
+ \def\bf{\fam\bffam\ninebf}%
+ \textfont\bffam=\ninebf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\tt{\fam\ttfam\ninett}%
+ \textfont\ttfam=\ninett
+ \tt \ttglue=.5em plus.25em minus.15em
+ \normalbaselineskip=11pt
+ \def\MF{{\manual hijk}\-{\manual lmnj}}%
+ \let\sc=\sevenrm
+ \let\big=\ninebig
+ \setbox\strutbox=\hbox{\vrule height8pt depth3pt width\z@}%
+ \normalbaselines\rm}
+
+\def\eightpoint{\def\rm{\fam0\eightrm}%
+ \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam\eightit}%
+ \textfont\itfam=\eightit
+ \def\sl{\fam\slfam\eightsl}%
+ \textfont\slfam=\eightsl
+ \def\bf{\fam\bffam\eightbf}%
+ \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\tt{\fam\ttfam\eighttt}%
+ \textfont\ttfam=\eighttt
+ \tt \ttglue=.5em plus.25em minus.15em
+ \normalbaselineskip=9pt
+ \def\MF{{\manual opqr}\-{\manual stuq}}%
+ \let\sc=\sixrm
+ \let\big=\eightbig
+ \setbox\strutbox=\hbox{\vrule height7pt depth2pt width\z@}%
+ \normalbaselines\rm}
+
+\def\tenmath{\tenpoint\fam-1 } % use after $ in ninepoint sections
+\def\tenbig#1{{\hbox{$\left#1\vbox to8.5pt{}\right.\n@space$}}}
+\def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy
+ \left#1\vbox to7.25pt{}\right.\n@space$}}}
+\def\eightbig#1{{\hbox{$\textfont0=\ninerm\textfont2=\ninesy
+ \left#1\vbox to6.5pt{}\right.\n@space$}}}
+
+% Page layout
+\newdimen\pagewidth \newdimen\pageheight \newdimen\ruleht
+%\hsize=29pc \vsize=44pc \maxdepth=2.2pt \parindent=3pc
+\pagewidth=\hsize \pageheight=\vsize \ruleht=.5pt
+\abovedisplayskip=6pt plus 3pt minus 1pt
+\belowdisplayskip=6pt plus 3pt minus 1pt
+\abovedisplayshortskip=0pt plus 3pt
+\belowdisplayshortskip=4pt plus 3pt
+
+%\newinsert\footins
+\def\footnote#1{\edef\@sf{\spacefactor\the\spacefactor}#1\@sf
+ \insert\footins\bgroup\eightpoint
+ \interlinepenalty100 \let\par=\endgraf
+ \leftskip=\z@skip \rightskip=\z@skip
+ \splittopskip=10pt plus 1pt minus 1pt \floatingpenalty=20000
+ \smallskip\item{#1}\bgroup\strut\aftergroup\@foot\let\next}
+\skip\footins=12pt plus 2pt minus 4pt % space added when footnote is present
+%\count\footins=1000 % footnote magnification factor (1 to 1)
+\dimen\footins=30pc % maximum footnotes per page
+
+\newinsert\margin
+\dimen\margin=\maxdimen
+%\count\margin=0 \skip\margin=0pt % marginal inserts take up no space
+
+\newif\iftitle
+\def\titlepage{\global\titletrue} % for pages without headlines
+\def\rhead{} % \rhead contains the running headline
+
+\def\leftheadline{\hbox to \pagewidth{%
+ \vbox to 10pt{}% strut to position the baseline
+ \llap{\tenbf\folio\kern1pc}% folio to left of text
+ \tenit\rhead\hfil% running head flush left
+ }}
+\def\rightheadline{\hbox to \pagewidth{%
+ \vbox to 10pt{}% strut to position the baseline
+ \hfil\tenit\rhead\/% running head flush right
+ \rlap{\kern1pc\tenbf\folio}% folio to right of text
+ }}
+
+\def\onepageout#1{\shipout\vbox{ % here we define one page of output
+ \offinterlineskip % butt the boxes together
+ \vbox to 3pc{ % this part goes on top of the 44pc pages
+ \iftitle % the next is used for title pages
+ \global\titlefalse % reset the titlepage switch
+ \setcornerrules % for camera alignment
+ \else\ifodd\pageno \rightheadline\else\leftheadline\fi\fi
+ \vfill} % this completes the \vbox to 3pc
+ \vbox to \pageheight{
+ \ifvoid\margin\else % marginal info is present
+ \rlap{\kern31pc\vbox to\z@{\kern4pt\box\margin \vss}}\fi
+ #1 % now insert the main information
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins \kern-3pt
+ \hrule height\ruleht width\pagewidth \kern-\ruleht \kern3pt
+ \unvbox\footins\fi
+ \boxmaxdepth=\maxdepth
+ } % this completes the \vbox to \pageheight
+ }
+ \advancepageno}
+
+\def\setcornerrules{\hbox to \pagewidth{\vrule width 1pc height\ruleht
+ \hfil \vrule width 1pc}
+ \hbox to \pagewidth{\llap{\sevenrm(page \folio)\kern1pc}%
+ \vrule height1pc width\ruleht depth\z@
+ \hfil \vrule width\ruleht depth\z@}}
+
+%\output{\onepageout{\unvbox255}}
+
+\newdimen\colwidth \newdimen\bigcolheight
+\colwidth=14pc \bigcolheight=89pc
+\output{\onepageout{\unvbox255}}
+\newbox\partialpage
+\newdimen\savesize
+\def\begindoublecolumns{\begingroup
+ \savesize=\vsize
+ \output={\global\setbox\partialpage=\vbox{\unvbox255}}\eject
+ \output={\doublecolumnout} \hsize=\colwidth \vsize=\bigcolheight
+ \advance\vsize by -2\ht\partialpage}
+\def\enddoublecolumns{\output={\balancecolumns}\eject
+ \global\output={\onepageout{\unvbox255}}
+ \global\vsize=\savesize
+ \endgroup \pagegoal=\vsize}
+\def\doublecolumnout{\dimen0=\pageheight
+ \advance\dimen0 by -\ht\partialpage \splittopskip=\topskip
+ \setbox0=\vsplit255 to\dimen0
+ \setbox2=\vsplit255 to\dimen0
+ \onepageout\pagesofar
+ \global\vsize=\bigcolheight
+ \unvbox255 \penalty\outputpenalty}
+\def\pagesofar{\unvbox\partialpage
+ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
+\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen0=\ht0
+ \advance\dimen0 by\topskip \advance\dimen0 by-\baselineskip
+ \divide\dimen0 by2 \splittopskip=\topskip
+ {\vbadness=10000 \loop \global\setbox3=\copy0
+ \global\setbox1=\vsplit3 to\dimen0
+ \ifdim\ht3>\dimen0 \global\advance\dimen0 by1pt \repeat}
+ \setbox0=\vbox to\dimen@{\unvbox1}
+ \setbox2=\vbox to\dimen@{\unvbox3}
+ \global\output={\balancingerror}
+ \pagesofar}
+\newhelp\balerrhelp{Please change the page
+ into one that works!}
+\def\balancingerror{\errhelp=\balerrhelp
+ \errmessage{Page can't be balanced}
+ \onepageout{\unvbox255}}
+
+
+
+% Chapter formatting
+% The preface and table of contents are formatted in place, not here
+
+\newcount\exno % for the number of exercises in the current chapter
+\newcount\subsecno % for the number of subsections in the current chapter
+
+\outer\def\beginchapter#1 #2#3. #4\par{\global\exno=0
+ \subsecno=0
+ \def\chapno{#2#3}
+ \ifodd\pageno
+ \errmessage{You had too much text on that last page; I'm backing up}
+ \advance\pageno by-1 \fi
+ \titlepage
+ \def\\{ } % \\'s in the title will be treated as spaces
+ \message{#1 #2#3:} % show the chapter title on the terminal
+ \xdef\rhead{#1 #2#3: #4\unskip}
+ {\def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.06em X}
+ \def\MF{{\vbox to30pt{}\manual ()*+,-.*}}
+ \def\\{#3}
+ \ifx\empty\\ \rightline{\inchhigh #2\kern-.04em}
+ \else\rightline{\inchhigh #2\kern-.06em#3\kern-.04em}\fi
+ \vskip 1.75pc
+ \baselineskip 36pt \lineskiplimit 1pt \lineskip 12pt
+ \let\\=\cr % now the \\'s are line dividers
+ \halign{\line{\titlefont\hfil##}\\#4\unskip\\}
+ \vfill\eject} % output the chapter title page
+ \tenpoint
+ \noindent\ignorespaces} % the first paragraph of a chapter is not indented
+
+\outer\def\endchapter{\ifodd\pageno \else\vfill\eject\null\fi
+ \begingroup\bigskip\vfill % beginning of the quotes
+ \def\eject{\endgroup\eject}
+ \def\par{\ifhmode\/\endgraf\fi}\obeylines
+ \def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.000em X}
+ \def\MF{{\manual opqr}\-{\manual stuq}}
+ \eightpoint \let\tt=\ninett
+ \baselineskip 10pt
+ \parfillskip \z@
+ \interlinepenalty 10000
+ \leftskip \z@ plus 40pc minus \parindent
+ \let\rm=\eightss \let\sl=\eightssi
+ \everypar{\sl}}
+\def\author#1(#2){\smallskip\noindent\rm--- #1\unskip\enspace(#2)}
+
+\def\dbend{{\manual\char127}} % dangerous bend sign
+\def\d@nger{\medbreak\begingroup\clubpenalty=10000
+ \def\par{\endgraf\endgroup\medbreak} \noindent\hang\hangafter=-2
+ \hbox to0pt{\hskip-\hangindent\dbend\hfill}\ninepoint}
+\outer\def\danger{\d@nger}
+\def\dd@nger{\medbreak\begingroup\clubpenalty=10000
+ \def\par{\endgraf\endgroup\medbreak} \noindent\hang\hangafter=-2
+ \hbox to0pt{\hskip-\hangindent\dbend\kern1pt\dbend\hfill}\ninepoint}
+\outer\def\ddanger{\dd@nger}
+\def\enddanger{\endgraf\endgroup} % omits the \medbreak
+
+\outer\def\subsection#1. {\medbreak\advance\subsecno by 1
+ \noindent{\it \the\subsecno.\enspace#1.\enspace}}
+\def\ansno#1.#2:{\medbreak\noindent
+ \hbox to\parindent{\bf\hss#1.#2.\enspace}\ignorespaces}
+
+% Composition macros
+\hyphenation{man-u-script man-u-scripts ap-pen-dix}
+
+\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em
+ S$-\TeX}
+\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet
+\def\SS{{\it SS}} % scriptscript style
+\def\|{\leavevmode\hbox{\tt\char`\|}} % vertical line
+\def\dn{\leavevmode\hbox{\tt\char'14}} % downward arrow
+\def\up{\leavevmode\hbox{\tt\char'13}} % upward arrow
+\def\]{\leavevmode\hbox{\tt\char`\ }} % visible space
+
+\def\pt{\,{\rm pt}} % units of points, in math formulas
+\def\em{\,{\rm em}} % units of ems, in math formulas
+\def\<#1>{\leavevmode\hbox{$\langle$#1\/$\rangle$}} % syntactic quantity
+\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant
+\def\cstok#1{\leavevmode\thinspace\hbox{\vrule\vtop{\vbox{\hrule\kern1pt
+ \hbox{\vphantom{\tt/}\thinspace{\tt#1}\thinspace}}
+ \kern1pt\hrule}\vrule}\thinspace} % control sequence token
+
+{\obeyspaces\gdef {\ }}
+\def\parbreak{\hfil\break\indent\strut}
+\def\stretch{\nobreak\hskip0pt plus2pt\relax}
+
+% macros for non-centered displays
+\outer\def\begindisplay{\obeylines\startdisplay}
+{\obeylines\gdef\startdisplay#1
+ {\catcode`\^^M=5$$#1\halign\bgroup\indent##\hfil&&\qquad##\hfil\cr}}
+\outer\def\enddisplay{\crcr\egroup$$}
+
+% (the following \begin...\end-type macros do not appear in Appendix E)
+% macros for demonstrating math constructions
+\outer\def\beginmathdemo{$$\advance\baselineskip by2pt
+ \halign\bgroup\indent\hbox to 160pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}}
+\outer\def\begindisplaymathdemo {$$\advance\baselineskip by15pt
+ \halign\bgroup\indent\hbox to 160pt{##\hfil}&$\displaystyle{##}$\hfil\cr
+ \noalign{\vskip-15pt}}
+\outer\def\beginlongmathdemo{$$\advance\baselineskip by2pt
+ \halign\bgroup\indent\hbox to 210pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}}
+\outer\def\beginlongdisplaymathdemo {$$\advance\baselineskip by15pt
+ \halign\bgroup\indent\hbox to 210pt{##\hfil}&$\displaystyle{##}$\hfil\cr
+ \noalign{\vskip-15pt}}
+\outer\def\endmathdemo{\egroup$$}
+
+% macros for font tables
+\def\oddline#1{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\hex{#1x}}}\smash{\box0}\cr
+ \noalign{\nointerlineskip}}
+\def\evenline{\cr\noalign{\hrule}}
+\def\chartstrut{\lower4.5pt\vbox to14pt{}}
+\def\beginchart#1{$$\postdisplaypenalty=-10000 \global\count@=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\count@}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\count@ 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}
+
+% (now Appendix E resumes again)
+% macros for verbatim scanning
+\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}
+
+\outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=\z@
+ \catcode`\|=0 \rightskip-5pc \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}}
+
+% macros for syntax rules (again, not in Appendix E)
+\def\[#1]{\silenttrue\xref|#1|\thinspace{\tt#1}\thinspace} % keyword in syntax
+\def\beginsyntax{\endgraf\nobreak\medskip
+ \begingroup \catcode`<=13 \catcode`[=13
+ \let\par=\endsyntaxline \obeylines}
+\def\endsyntaxline{\futurelet\next\syntaxswitch}
+\def\syntaxswitch{\ifx\next\<\let\next=\syntaxrule
+ \else\ifx\next\endsyntax\let\next=\endgroup
+ \else\let\next=\continuerule\fi\fi \next}
+\def\continuerule{\hfil\break\indent\qquad}
+\def\endsyntax{\medbreak\noindent}
+{\catcode`<=13 \catcode`[=13
+ \global\let<=\< \global\let[=\[
+ \gdef\syntaxrule<#1>{\endgraf\indent\silentfalse\xref\<#1>}}
+\def\is{\ $\longrightarrow$ }
+\def\alt{\ $\vert$ }
+
+% macros to demarcate lines quoted from TeX source files
+\def\beginlines{\par\begingroup\nobreak\medskip\parindent\z@ \obeylines
+ \hrule\kern1pt\nobreak \everypar{\strut}}
+\def\endlines{\kern1pt\hrule\endgroup\medbreak\noindent}
+\def\weakendlines{\kern1pt\hrule\endgroup\medskip\noindent}
+
+\outer\def\exercise{\medbreak
+ \global\advance\exno by 1
+ \noindent\llap{\manual\char'170\rm\kern.15em}% triangle in margin
+ {\ninebf EXERCISE \bf\chapno.\the\exno}\par\nobreak\noindent}
+\def\dexercise{\global\advance\exno by 1
+ \llap{\manual\char'170\rm\kern.15em}% triangle in indented space
+ {\eightbf EXERCISE \bf\chapno.\the\exno}\hfil\break}
+\outer\def\dangerexercise{\d@nger \dexercise}
+\outer\def\ddangerexercise{\dd@nger \dexercise}
+
+\newwrite\ans
+\immediate\openout\ans=answers % file for answers to exercises
+\outer\def\answer{\par\medbreak
+ \immediate\write\ans{}
+ \immediate\write\ans{\string\ansno\chapno.\the\exno:}
+ \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}}
+
+% Editorial notes: some things to watch for.
+
+% f |\ and f ^|\ => insert \/ [e.g., if\/ |\hbox|...]
+% appendi => check for \null [e.g., Appendix~B\null.]
+% ly- => the hyphen is probably omittable
+% ''. and '', => transpose to .'' and ,''
+% dgement => dgment
+
+% Macros for drawing figures (not in Appendix E)
+\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2 }
+\def\hidevrule#1#2{\kern-#1{\dimen0=#1
+ \advance\dimen0 by#2\vrule width\dimen0}\kern-#2 }
+% \makeblankbox puts rules at the edges of a blank box
+% whose dimensions are those of \box0 (assuming nonnegative wd,ht,dp)
+% #1 is rule thickness outside, #2 is rule thickness inside
+\def\makeblankbox#1#2{\hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}%
+ \kern-#1% overlap the rules at the corners
+ \hbox to\wd0{\hidevrule{#1}{#2}%
+ \raise\ht0\vbox to #1{}% set the vrule height
+ \lower\dp0\vtop to #1{}% set the vrule depth
+ \hfil\hidevrule{#2}{#1}}%
+ \kern-#1\hidehrule{#2}{#1}}}}
+\def\maketypebox{\makeblankbox{0pt}{1pt}}
+\def\makelightbox{\makeblankbox{.2pt}{.2pt}}
+
+% \box\bigdot is a null box with a bullet at its reference point
+\newbox\bigdot \newbox\smalldot
+\setbox0=\hbox{$\vcenter{}$} % \ht0 is the axis height
+\setbox1=\hbox to\z@{$\hss\bullet\hss$} % bullet is centered on the axis
+\setbox\bigdot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss}
+\setbox1=\hbox to\z@{$\hss\cdot\hss$} % cdot is centered on the axis
+\setbox\smalldot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss}
+
+% \arrows makes things like <--- text --->
+\def\arrows#1#2{% #1=width, #2=text
+ {\setbox0=\hbox{$\mkern-2mu\mathord-\mkern-2mu$}
+ \hbox to #1{\kern-.055556em$\leftarrow\mkern-6mu$%
+ \cleaders\copy0\hfil
+ \kern.4em #2\kern.4em
+ \cleaders\copy0\hfil
+ $\mkern-6mu\rightarrow$\kern-.055556em}}}
+
+% \samplebox makes the outline of a box, with big dot at reference point
+\def\samplebox#1#2#3#4{% #1=ht, #2=dp, #3=wd, #4=text
+ {\setbox0=\vtop{\vbox to #1{\hbox to #3{}\vss}
+ \nointerlineskip
+ \vbox to #2{}}% now \box0 has the desired ht, dp, and wd
+ \hbox{\copy\bigdot
+ \vrule height.2pt depth.2pt width#3%
+ \kern-#3%
+ \makelightbox
+ \kern-#3%
+ \raise#1\vbox{\hbox to #3{\hss#4\hss}
+ \kern 3pt}}}}
+
+% \sampleglue makes glue between sample boxes
+\newdimen\varunit
+\varunit=\hsize \advance\varunit by-2\parindent
+\divide\varunit by 58 % illustrations in Chapter 12
+\def\sampleglue#1#2{% #1=width, #2=text
+ \vtop{\hbox to #1{\xleaders\hbox to .5\varunit{\hss\copy\smalldot\hss}\hfil}
+ \kern3pt
+ \tabskip \z@ plus 1fil
+ \halign to #1{\hfil##\cr#2\cr}}}
+
+% Indexing macros
+\newif\ifproofmode
+\proofmodetrue % this should be false when making camera-ready copy
+\newwrite\inx
+\immediate\openout\inx=index % file for index reminders
+\newif\ifsilent
+\def\specialhat{\ifmmode\def\next{^}\else\let\next=\beginxref\fi\next}
+\def\beginxref{\futurelet\next\beginxrefswitch}
+\def\beginxrefswitch{\ifx\next\specialhat\let\next=\silentxref
+ \else\silentfalse\let\next=\xref\fi \next}
+\catcode`\^=\active \let ^=\specialhat
+\def\silentxref^{\silenttrue\xref}
+
+\def\marginstyle{\vrule height6pt depth2pt width\z@ \sevenrm}
+
+\chardef\bslash=`\\
+\def\xref{\futurelet\next\xrefswitch}
+\def\xrefswitch{\begingroup
+ \ifx\next|\aftergroup\vxref % case 1 or 2, |arg| or |\arg|
+ \else\ifx\next\<\aftergroup\anglexref % case 3, "\<arg>" means angle brackets
+ \else\aftergroup\normalxref \fi\fi\endgroup} % case 0, "{arg}"
+\def\vxref|{\catcode`\\=\active \futurelet\next\vxrefswitch}
+\def\vxrefswitch#1|{\catcode`\\=0
+ \ifx\next\empty\def\xreftype{2}%
+ \def\next{{\tt\bslash\text}}% type 2, |\arg|
+ \else\def\xreftype{1}\def\next{{\tt\text}}\fi % type 1, |arg|
+ \edef\text{#1}\makexref}
+{\catcode`\|=0 \catcode`\\=\active |gdef\{}}
+\def\anglexref\<#1>{\def\xreftype{3}\def\text{#1}%
+ \def\next{\<\text>}\makexref}
+\def\normalxref#1{\def\xreftype{0}\def\text{#1}\let\next=\text\makexref}
+\def\makexref{\ifproofmode\insert\margin{\hbox{\marginstyle\text}}%
+ \xdef\writeit{\write\inx{\text\space!\xreftype\space
+ \noexpand\number\pageno.}}\writeit
+ \else\ifhmode\kern\z@\fi\fi
+ \ifsilent\ignorespaces\else\next\fi}
+% the \insert (which is done in proofmode only) suppresses hyphenation,
+% so the \kern\z@ is put in to give the same effect in non-proofmode.
+
+% Internal cross references that may change
+\def\sesame{61} % page number for Sesame Street quote
+\def\bmiexno{20} % exercise number for bold math italic
+\def\punishexno{1} % exercise number for `punishment'
+\def\fracexno{6} % exercise number for `\frac'
+\def\vshippage{31} % error message from `\vship'
+\def\storypage{24} % listing of story.tex
+
+\def\checkequals#1#2{\ifnum#1=#2\else
+ \errmessage{Redefine \string#1 to be \the#2}\fi}
+
+% Things for The METAFONTbook only
+\ifx\MFmanual\!\else\endinput\fi
+
+\def\!{\kern-.05em\relax}
+
+\outer\def\displayfig #1 (#2){$$\advance\abovedisplayskip by 3pt
+ \leftline{\indent\figbox{#1}{3in}{#2}\vbox}$$}
+\def\rightfig #1 (#2 x #3) ^#4 {% #2 wide and #3 deep, raised #4
+ \strut\vadjust{\setbox0=\vbox to 0pt{\vss
+ \hbox to\pagewidth{\hfil
+ \raise #4\figbox{#1}{#2}{#3}\vtop \quad}}
+ \dp0=0pt \box0}}
+\def\figbox#1#2#3#4{#4to#3{ % makes a box #2 wide and #3 deep
+ \ifproofmode\kern0pt\hrule\vfill
+ \hsize=#2 \baselineskip 6pt \fiverm\noindent\raggedright
+ (Figure #1 will be inserted here; too bad you can't see it now.)
+ \endgraf\vfill\hrule
+ \else\vfill\hbox to#2{}\fi}}
+
+\def\endsyntax{\begingroup\let\par=\endgraf\medbreak\endgroup\noindent}
+
+\def\decreasehsize #1 {\advance\hsize-#1}
+\def\restorehsize{\hsize=\pagewidth}
+
+\catcode`\@=\active
+\catcode`\"=\active
+\def\ttverbatim{\begingroup \catcode`\@=\other \catcode`\"=\other
+ \catcode`\\=\other
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\$=\other
+ \catcode`\&=\other
+ \catcode`\#=\other
+ \catcode`\%=\other
+ \catcode`\~=\other
+ \catcode`\_=\other
+ \catcode`\^=\other
+ \obeyspaces \obeylines \tt}
+\def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials
+ \catcode`\|=\other \catcode`\@=\other \catcode`\"=\other \obeylines}
+\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}}
+\def@#1@{\begingroup\def\_{\kern.04em
+ \vbox{\hrule width.3em height .6pt}\kern.08em}%
+ \ifmmode\mathop{\bf#1}\else\hbox{\bf#1\/}\fi\endgroup}
+\def"#1"{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\xrefswitch{\begingroup
+ \ifx\next|\aftergroup\vxref % case 1, |arg| or |\arg|
+ \else\ifx\next@\aftergroup\boldxref % case 2, "@arg@" means boldface
+ \else\ifx\next"\aftergroup\italxref % case 4, ""arg"" means boldface
+ \else\ifx\next\<\aftergroup\anglexref % case 3, "\<arg>" means angle brackets
+ \else\aftergroup\normalxref \fi\fi\fi\fi\endgroup} % case 0, "{arg}"
+\def\boldxref@#1@{\def\xreftype{2}\def\text{#1}%
+ \def\next{@\text@}\makexref}
+\def\italxref"#1"{\def\xreftype{4}\def\text{#1}%
+ \def\next{"\text"}\makexref}
+
+\def\pyth+{\mathbin{++}}
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\def\to{\mathrel{\ldotp\ldotp}}
+\def\dashto{\mathrel{\hbox{-\thinspace-\kern-.05em}}}
+\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}}
+\def\round{\mathop{\rm round}}
+\def\angle{\mathop{\rm angle}}
+\def\reverse{\mathop{\rm reverse}}
+\def\curl{\mathop{\rm curl}}
+\def\tension{\mathop{\rm tension}}
+\def\controls{\mathop{\rm controls}}
+\def\and{\,{\rm and}\,}
+\def\cycle{{\rm cycle}}
+\def\pickup{@pickup@ \thinspace}
+\def\penpos#1{\hbox{\it penpos}_{#1}}
+\def\pentaper#1{\hbox{\it pentaper}_{#1}}
+
+\chardef\hexa=1 % first hex
+\chardef\hexb=2 % top and bot adjusted
+\chardef\hexc=3 % same, bold
+\chardef\hexd=4 % same, confined to box
+\chardef\hexe=5 % penstroked hex
+\chardef\Aa=6 % stick-figure A, golden ratio
+\def\sevenAs{\char7\char8\char9\char10\char11\char12\char13} % same, variants
+\chardef\Az=14 % same, with crooked bar
+\chardef\Ab=15 % \Aa with rectilinear elliptical pen
+\chardef\Ac=16 % same, with the ellipse tilted
+\chardef\beana=17 % kidney bean, default pen
+\chardef\beanb=18 % same, twice as bold
+\chardef\beanc=19 % same, rectilinear elliptical pen
+\chardef\beand=20 % same, with the ellipse tilted
+\chardef\niba=21 % 10x rectilinear ellipse
+\chardef\nibb=22 % same, with the ellipse tilted
+\chardef\nibc=23 % same, 90 degrees titled
+\chardef\IOT=24 % Ionian T
+\chardef\IOS=25 % Ionian S
+\chardef\IOO=26 % Ionian O
+\chardef\IOI=27 % Ionian I
+\chardef\cubea=28 % possible cube
+\chardef\cubeb=29 % impossible cube
+\chardef\bicentennial=30 % star with overlapping strokes
+\chardef\seventh='140 % 1/7, to go with cmssqi8
+
+\newdimen\apspix
+\apspix=31448sp % 8 APS pixels = 52413.64sp, and I'm taking 60% of this
+% to crude approximation, there are about 2\apspix per pt
+
+\def\leftheadline{\hbox to \pagewidth{%
+ \vbox to 10pt{}% strut to position the baseline
+ \llap{\tenbf\folio\kern1pc}% folio to left of text
+ \def\MF{{\manual 89:;<=>:}}% slanted 10pt
+ \tenit\rhead\hfil% running head flush left
+ }}
+\def\rightheadline{\hbox to \pagewidth{%
+ \vbox to 10pt{}% strut to position the baseline
+ \def\MF{{\manual 89:;<=>:}}% slanted 10pt
+ \hfil\tenit\rhead\/% running head flush right
+ \rlap{\kern1pc\tenbf\folio}% folio to right of text
+ }}
+\def\ttok#1{\leavevmode\thinspace\hbox{\vrule\vtop{\vbox{\hrule\kern1pt
+ \hbox{\vphantom{\tt(j}\thinspace{\tt#1}\thinspace}}
+ \kern1pt\hrule}\vrule}\thinspace} % token
+
+\newdimen\tinypix \setbox0=\hbox{\sixrm0} \tinypix=5pt
+\newdimen\pixcorr \pixcorr=\tinypix \advance\pixcorr by-\wd0
+\def\pixpat#1#2#3#4{\vcenter{\sixrm\baselineskip=\tinypix
+ \hbox{#1\kern\pixcorr#2}\hbox{#3\kern\pixcorr#4}}}
diff --git a/macros/plain/contrib/samples/duefig.tex b/macros/plain/contrib/samples/duefig.tex
new file mode 100644
index 0000000000..1dde5abec8
--- /dev/null
+++ b/macros/plain/contrib/samples/duefig.tex
@@ -0,0 +1,34 @@
+ % esempio di due figure affiancate con captions
+ %
+ % **********************************************
+\null
+\vskip 5truecm
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% da qua inizia la macro per le caption delle due figure
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\hbox to \hsize % la dimensione orizzontale totale e' cosi 'quella del rigo
+{\hfill % per avere margini vuoti uguali
+\vtop % per allineare le caption in alto
+{\hsize 6truecm % dimensione orizzontale della prima caption
+\noindent % per non identare la caption
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% segue la prima caption
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf Fig. 1} \ Qui non c'\'e nessuna figura. Serve solo a fare vedere a
+Capaccioli che il Max \'e sempre il max! }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\hfill % per centrare le caption
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\vtop % allineamento
+{\hsize 6truecm % dimensione orizzontale della seconda caption
+\noindent % per non identare la caption
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%segue la seconda caption
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf Fig. 2} \ La famosa galassia Capaccioli in luce invisibile. Si noti
+il nucleo incazzato (nero).}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\hfill} % per avere margini vuoti uguali
+
+\bye
+
diff --git a/macros/plain/contrib/samples/edtpad.tex b/macros/plain/contrib/samples/edtpad.tex
new file mode 100644
index 0000000000..a7f6c2ab59
--- /dev/null
+++ b/macros/plain/contrib/samples/edtpad.tex
@@ -0,0 +1,48 @@
+% Stephen Hicks
+% Texas A&M University
+\font\write=amr8\nopagenumbers
+\font\it=amti8
+~~~~~~~~~~~~~EDT Version V03--000 VT100 Keypad\hfil
+%~~~~~~~~~~~~~~~~~~~~Stephen Hicks
+\vskip 0pt
+\write\vskip 24pt
+\hbox to\hsize{%
+\vbox{\tabskip=0pt \offinterlineskip
+\def\tablerule{\noalign{\hrule}}
+\halign {\strut#&\vrule#\tabskip=1em plus2em
+ &\hfil#\hfil &# &\hfil#\hfil &\vrule#
+ &\hfil#\hfil &\vrule# &\hfil#\hfil &\vrule#\tabskip=0pt\cr\tablerule
+
+&&&\vrule&&&{\it Find}&&{\it UnDelete Line}&\cr
+&&{\it Gold}&\vrule&Help&&&&&\cr
+&&&\vrule&&&FindNext&&Delete Line&\cr\tablerule
+&&{\it Command}&\vrule&{\it Fill}&&{\it Replace}&&{\it UnDelete Word}&\cr
+&&&\vrule&&&&&&\cr
+&&Page&\vrule&Section&&Append&&Delete Word&\cr\tablerule
+&&{\it Bottom}&\vrule&{\it Top}&&{\it Paste}&&{\it UnDelete Char}&\cr
+&&&\vrule&&&&&&\cr
+&&Advance&\vrule&Backup&&Cut&&Delete Char&\cr\tablerule
+&&{\it Change Case}&\vrule&{\it Delete from EOL}&&{\it Spec. Insert}&&&\cr
+&&&\vrule&&&&&{\it Substitution}&\cr
+&&Word&\vrule&End--Of--Line&&Character&&&\cr\noalign{\hrule
+ width193pt}
+&&\multispan3 {\it Open~Line} &&{\it Reset}&&Enter&\cr
+&&\multispan3 ~&&&&&\cr
+&&\multispan3 \hfil Line\hfil&&Select&&&\cr\tablerule
+\noalign{\smallskip}}\hss}}\hfil
+\vskip 2pt
+\rm
+\hskip 40pt\vbox{\halign {\strut#&\tabskip=1em plus2em
+ &#\hfil &#\hfil \tabskip=0pt\cr
+&Backspace&Go to beginning of line\cr
+&Delete&Delete character\cr
+&Linefeed&Delete to start of word\cr
+&CTRL-A&Compute tab level\cr
+&CTRL-D&Decrease tab level\cr
+&CTRL-E&Increase tab level\cr
+&CTRL-K&Define key\cr
+&CTRL-T&Adjust tabs\cr
+&CTRL-U&Delete to start of line\cr
+&CTRL-W&Refresh screen\cr
+&CTRL-Z&Return to line mode\cr}}
+\end
diff --git a/macros/plain/contrib/samples/extradefs.tex b/macros/plain/contrib/samples/extradefs.tex
new file mode 100644
index 0000000000..c7ac99e5ad
--- /dev/null
+++ b/macros/plain/contrib/samples/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/plain/contrib/samples/firstline.tex b/macros/plain/contrib/samples/firstline.tex
new file mode 100644
index 0000000000..f1669d450a
--- /dev/null
+++ b/macros/plain/contrib/samples/firstline.tex
@@ -0,0 +1,73 @@
+% firstline
+% from Jim Fox, C4328%UWARITA.BITNET
+%
+% \firstline <paragraph tex> sets the first line of the paragraph in
+% \Firstlinefont; the rest of the paragraph in normal font
+% To use, define \Firstlinefont, e.g.
+% \font\Firstlinefont=amcsc10
+% for caps smallcaps, and then put \firstline before the text of
+% the paragraph.
+%
+\def\firstline{\par\begingroup\Firstlinefont
+ \def\zzz{}\dimen0\parindent
+ \setbox0=\hbox{ }\advance\dimen0by-\wd0
+ \x}
+\def\x{\afterassignment\y\z}
+\def\z#1 {\xdef\zz{#1\ }}
+\def\y{\setbox0=\hbox{\zz}
+ \advance\dimen0 by\wd0
+ \ifdim\dimen0<\hsize\let\next=\x
+ \edef\zzz{\zzz\zz}
+ \else\let\next=\endgroup
+ \leavevmode\zzz\unskip\break\aftergroup\zz
+ \fi
+ \next}
+
+***********************************************
+% example to demonstrate \firstline
+%
+\def\uncatcodespecials{\catcode`@=12\def\do##1{\catcode`##1=12}\dospecials}
+\def\setupverbatim{\tt\obeylines\uncatcodespecials\obeyspaces}
+{\obeyspaces\global\let =\ }
+\def\beginshowoff{\par\begingroup\setupverbatim\doverbatim}
+{\catcode`\!=0 \catcode`\\=12
+!obeylines!gdef!doverbatim^^M#1\endshowoff{#1!endgroup!medbreak!filbreak!smallskip}}
+\magnification1095
+\hsize5truein\hoffset.5truein
+\baselineskip=1.2\normalbaselineskip
+\font\Firstlinefont=amcsc10
+\input firstline
+%
+\firstline The first line of this paragraph is set in fancy font
+(caps small caps), while the remaining lines are set in normal type.
+The method does not hyphenate, but otherwise works for most applications.
+
+\bigskip
+\let\Firstlinefont=\bf
+\firstline This sentence is short---and has \TeX\ in it.
+As before, only the first line of this paragraph
+appears in the special font (in this case, bold face).
+
+\vskip1truein
+\parindent=0pt\hfuzz=50pt
+\beginshowoff
+\magnification1095
+\hsize5truein\hoffset.5truein
+\baselineskip=1.2\normalbaselineskip
+\font\Firstlinefont=amcsc10
+\input firstline
+%
+\firstline The first line of this paragraph is set in fancy font
+(caps small caps), while the remaining lines are set in normal type.
+The method does not hyphenate, but otherwise works for most
+applications.
+
+\bigskip
+\let\Firstlinefont=\bf
+\firstline This sentence is short---and has \TeX\ in it.
+As before, only the first line of this paragraph
+appears in the special font (in this case, bold face).
+\bye
+\par
+\endshowoff
+\bye
diff --git a/macros/plain/contrib/samples/font.tex b/macros/plain/contrib/samples/font.tex
new file mode 100644
index 0000000000..aab5cc7561
--- /dev/null
+++ b/macros/plain/contrib/samples/font.tex
@@ -0,0 +1,54 @@
+
+These are all the sizes of computer modern roman ten in the system.
+
+\font\one=cmr10 at 6.67pt\one
+This is size 1000.
+
+\font\two=cmr10 at 7.30pt\two
+This is size 1095.
+
+\font\three=cmr10 at 8.00pt\three
+This is size 1200.
+
+\font\four=cmr10 at 8.77pt\four
+This is size 1315.
+
+\font\five=cmr10 at 9.60pt\five
+This is size 1440.
+
+\font\six=cmr10 at 10.00pt\six
+This is size 1500.
+
+\font\seven=cmr10 at 10.95pt\seven
+This is size 1643.
+
+\font\eight=cmr10 at 11.52pt\eight
+This is size 1728.
+\bye
+\font\nine=cmr10 at 12.00pt\nine
+This is size 1800.
+
+\font\ten=cmr10 at 13.82pt\ten
+This is size 2074.
+
+\font\eleven=cmr10 at 14.40pt\eleven
+This is size 2160.
+
+\font\twelve=cmr10 at 16.59pt\twelve
+This is size 2488.
+
+\font\thirteen=cmr10 at 17.28pt\thirteen
+This is size 2592.
+
+\font\fourteen=cmr10 at 19.91pt\fourteen
+This is size 2986.
+
+\font\fifteen=cmr10 at 20.73pt\fifteen
+This is size 3110.
+
+\font\sixteen=cmr10 at 24.88pt\sixteen
+This is size 3732.
+
+\font\seventeen=cmr10 at 29.86pt\seventeen
+This is size 4479.
+\bye
diff --git a/macros/plain/contrib/samples/form.tex b/macros/plain/contrib/samples/form.tex
new file mode 100644
index 0000000000..2e32bc49f6
--- /dev/null
+++ b/macros/plain/contrib/samples/form.tex
@@ -0,0 +1,49 @@
+\magnification=1200
+\def\YES{Y } \def\NO{N } \def\yes{y } \def\no{n }
+\def\stripspace#1 \next{#1}
+\message {Name of address file?}
+\read-1 to\file
+\openin1=\file
+\newif\ifnotdone
+\newdimen\longindentation \longindentation=4truein
+
+\loop
+\read1 to\address
+\ifeof1 \notdonefalse \else \notdonetrue \fi
+\ifnotdone
+ % put here reads for all information needed for each letter
+ % If you do not want a space after what is read in use the
+ % command \edef\thing{\expandafter\stripspace\thing\next}
+ % where \thing is the object you don't want the space after
+ \read1 to\name
+ \edef\name{\expandafter\stripspace\name\next}
+ \input eetop
+ \input date
+ {\bigskip\leftskip=\longindentation \rm \today\bigskip\bigskip}
+ {\leftskip=.6truein\rightskip=.6truein
+ {\parskip=0pt\parindent=0pt\obeylines
+ \address
+ }
+ \noindent Dear \name:\endgraf
+ % Put body of letter here. Put a \endgraf at the end of each
+ % paragraph
+ % if there are optional paragraphs add lines liek the following set
+ % for each optional paragraph. Make sure the included file has an
+ % \endgraf at the end of each of its paragraphs
+ % \message{Include letter2 for \name?}
+ % \read-1 to\answer
+ % \ifx\answer\yes \input letter2
+ % \else \ifx\answer\YES \input letter2 \fi\fi
+ {\parskip=0pt\obeylines
+ {\nobreak\bigskip \leftskip=\longindentation Sincerely,
+ \nobreak\bigskip\bigskip\bigskip % space for the signature
+ W. B. Jones\endgraf
+ Professor and Head
+ {\endgraf\nobreak}}}
+ \bigskip
+ \noindent WBJ/jrn\endgraf
+ }
+ \input eebot
+\repeat
+\closein1
+\end
diff --git a/macros/plain/contrib/samples/formatlett.tex b/macros/plain/contrib/samples/formatlett.tex
new file mode 100644
index 0000000000..2e11d2cd6a
--- /dev/null
+++ b/macros/plain/contrib/samples/formatlett.tex
@@ -0,0 +1,53 @@
+% I % sono per i commenti!
+% ***********************************************************************
+% ***********************************************************************
+
+\documentstyle{letter} % sceglie il tipo di "document"
+ % processare con Latex (oppure Dolatex)
+
+%\documentstyle{iletter} % per lettere italiane. Processare con Ilatex
+ % (oppure doilatex)
+
+%\makelabels % stampa l' indirizzo del destinatario,
+ % dato piu' avanti, su foglio separato
+
+\begin{document} % sembra che serva anche questo
+\large % cambia le dimensioni del carattere
+
+
+\signature{Tex Willer} % la firma in calce
+
+%\name{ } % il nome del mittente per carta non intestata
+%\address{ } % serve per usare carta non intestata
+%\telephone{ Tel 661499} % volendo aggiungere anche il numero!
+%\location{Room 00} % per il numero della stanza
+
+
+\begin{letter}{Dr. H.G. Paul \\ Zentralinstitut f\"ur Astrophysik \\
+Sternwarte Babelsberg \\ DDR -- 1502 Potsdam--Babelsberg \\
+Rosa--Luxemburg--Str. 17a \\ German Democratic Republic}
+
+ % le due \\ separano le righe
+
+
+\opening{Dear dr. Paul,} % ricordarsi di saltare un rigo!
+ %
+ % segue testo della lettera
+ %
+ % saltare una riga tra i paragrafi.
+
+
+
+\closing{Best regards,} % NON DIMENTICARLO
+
+
+
+
+
+%\ps{p.s. } % per il P.S.
+%\encl{ } % per gli allegati
+%\cc{ } % per il "E p.c."
+
+
+\end{letter}
+\end{document}
diff --git a/macros/plain/contrib/samples/getdon.tex b/macros/plain/contrib/samples/getdon.tex
new file mode 100644
index 0000000000..3097fd4d5d
--- /dev/null
+++ b/macros/plain/contrib/samples/getdon.tex
@@ -0,0 +1,12 @@
+\font\big=amssmc40\big\vsize4truein\nopagenumbers
+\font\sm=amssmc40 at26.7truept
+\hbox{\vrule width3pt\vbox to\vsize{\hrule height3pt
+\vfill
+\centerline{If This Printer Hangs Up,}
+\vfill
+\centerline{Do Not Attempt}
+\vfill
+\centerline{To Fix It Yourself!}
+\vfill
+\centerline{\sm Get Donna Reese In Room 30-B.}
+\vfill\hrule height3pt}\vrule width3pt}\bye
diff --git a/macros/plain/contrib/samples/grafix.tex b/macros/plain/contrib/samples/grafix.tex
new file mode 100644
index 0000000000..4e115fa2e5
--- /dev/null
+++ b/macros/plain/contrib/samples/grafix.tex
@@ -0,0 +1,21 @@
+\def\grafix#1,#2,#3,#4{
+ \setbox1\vbox{\centerline{\vbox to#1{
+ \hbox to#2{\special{position,include #3}\hss}\vss}
+ }}
+ {\vbox{\ifnum#4>0\hrule\fi
+ \hbox{\ifnum#4>0\vrule\fi\hskip 1pt
+ \vbox{\vskip 1pt
+ \box1
+ \vskip 1pt}
+ \hskip 1pt
+ \ifnum#4>0\vrule\fi}
+ \ifnum#4>0\hrule\fi}}}
+
+This is a test of how some graphics might be centered in the file itself.
+It may not work, but it is worth a try.
+
+\grafix 2.3truein,2.3truein,{pseal.tex},0
+
+Then again, it might. We shall see, we shall see. This is Tomas Rokicki,
+signing off.
+\bye
diff --git a/macros/plain/contrib/samples/hptex.tex b/macros/plain/contrib/samples/hptex.tex
new file mode 100644
index 0000000000..db42ca0279
--- /dev/null
+++ b/macros/plain/contrib/samples/hptex.tex
@@ -0,0 +1,835 @@
+% This is the HP TeX text format version A.00.00 as of Feb. 14, 1984.
+% It is compatible with the plain TeX format that's described in The TeXbook.
+%
+% Copyright 1984 Hewlett-Packard Co.
+%
+% NOTE 1, NOTE 2, etc. refer to notes in the file HPTEX.DOC
+%
+
+\input PLAIN.TEXT % NOTE 1
+
+\message{Preloading the HP TeX codes,}
+
+% SPECIAL CATCODES
+%
+\catcode`@=11 % NOTE 2
+
+% HPTEX
+%
+\def\HPTEX{HP\nobreak\ \TeX}
+\let\HpTeX=\HPTEX
+\def\fmtname{HP TeX}\def\fmtversion{A.00.00}
+
+% LEADERS
+%
+\def\dotfil{\tenrm\leaders\hbox to8\p@{\hss.\hss}\hss} % NOTE 3
+
+% CONSTANT VALUES
+%
+\chardef\zer@=0
+\chardef\f@ur=4
+\skipdef\skip@ii=2
+\maxdepth=2pt
+
+\message{fonts,}
+
+% FONTS % NOTE 4
+%
+\let\fontcheck=1 % NOTE 5
+\def\fontdef#1=#2 {\def#1{\font@{#1}{#2}}} % NOTE 6
+\def\font@#1#2{{\let\fontcheck=0\ifx0\fontcheck\egroup\global\font#1=#2#1%
+ \else}\string#1 \fi}%--The space after \string#1 is necessary.
+
+% ROMAN TEXT
+%
+\fontdef\twentyfourrm={amr10 scaled \magstep5}
+\fontdef\eighteenrm={amr10 scaled \magstep3}
+\fontdef\fourteenrm={amr10 scaled \magstep2}
+\font\twelverm=amr10 scaled \magstep1
+%\font\tenrm=amr10
+\font\ninerm=amr9
+\font\eightrm=amr8
+%\font\sevenrm=amr7
+\font\sixrm=amr6
+%\font\fiverm=amr5
+
+% MATH ITALIC
+%
+\fontdef\twentyfouri={ammi10 scaled \magstep5}
+\fontdef\eighteeni={ammi10 scaled \magstep3}
+\fontdef\fourteeni={ammi10 scaled \magstep2}
+\fontdef\twelvei={ammi10 scaled \magstep1}
+%\font\teni=ammi10
+\fontdef\ninei={ammi9}
+\fontdef\eighti={ammi8}
+%\font\seveni=ammi7
+\fontdef\sixi={ammi6}
+%\font\fivei=ammi5
+
+% MATH SYMBOLS
+%
+\fontdef\twentyfoursy={amsy10 scaled \magstep5}
+\fontdef\eighteensy={amsy10 scaled \magstep3}
+\fontdef\fourteensy={amsy10 scaled \magstep2}
+\fontdef\twelvesy={amsy10 scaled \magstep1}
+%\font\tensy=amsy10
+\fontdef\ninesy={amsy9}
+\fontdef\eightsy={amsy8}
+%\font\sevensy=amsy7
+\fontdef\sixsy={amsy6}
+%\font\fivesy=amsy5
+
+% BOLD MATH SYMBOLS
+%
+\fontdef\tenbfsy={ambsy10}
+
+% MATH EXTENSION
+%
+%\font\tenex=amex10
+
+% SANS SERIF
+%
+\fontdef\fourteenss={amss10 scaled \magstep2}
+\fontdef\twelvess={amss10 scaled \magstep1}
+\font\tenss=amss10
+\font\eightss=amssq8
+
+% SANS SERIF ITALIC
+%
+\font\tenitss=amssi10
+\font\eightitss=amssqi8
+
+% BOLDFACE EXTENDED
+%
+\fontdef\twentyfourbf={ambx10 scaled \magstep5}
+\fontdef\eighteenbf={ambx10 scaled \magstep3}
+\fontdef\fourteenbf={ambx10 scaled \magstep2}
+\font\twelvebf=ambx10 scaled \magstep1
+%\font\tenbf=ambx10
+\font\ninebf=ambx9
+\font\eightbf=ambx8
+%\font\sevenbf=ambx7
+\font\sixbf=ambx6
+%\font\fivebf=ambx5
+
+% TYPEWRITER
+%
+\fontdef\twentyfourtt={amtt10 scaled \magstep5}
+\fontdef\eighteentt={amtt10 scaled \magstep3}
+\fontdef\fourteentt={amtt10 scaled \magstep2}
+\fontdef\twelvett={amtt10 scaled \magstep1}
+%\font\tentt=amtt10
+\font\ninett=amtt9
+\font\eighttt=amtt8
+
+% SLANTED TYPEWRITER
+%
+\font\tensltt=amsltt10
+
+% SLANTED ROMAN
+%
+\fontdef\twentyfoursl={amsl10 scaled \magstep5}
+\fontdef\eighteensl={amsl10 scaled \magstep3}
+\fontdef\fourteensl={amsl10 scaled \magstep2}
+\fontdef\twelvesl={amsl10 scaled \magstep1}
+%\font\tensl=amsl10
+\font\ninesl=amsl9
+\font\eightsl=amsl8
+
+% TEXT ITALIC
+%
+\fontdef\twentyfourit={amti10 scaled \magstep5}
+\fontdef\eighteenit={amti10 scaled \magstep3}
+\fontdef\fourteenit={amti10 scaled \magstep2}
+\fontdef\twelveit={amti10 scaled \magstep1}
+%\font\tenit=amti10
+\font\nineit=amti9
+\font\eightit=amti8
+\fontdef\sevenit={amti7}
+
+% UNSLANTED TEXT ITALIC
+%
+\font\tenuit=amu10
+
+
+% CAPS AND SMALL CAPS
+%
+\font\tencsc=amcsc10
+
+% SANS SERIF BOLD EXTENDED
+%
+\font\tenbfss=amssbx10
+
+
+% BOLD EXTENDED SLANTED
+%
+\font\tenslbf=ambxsl10
+
+
+% DUNHILL STYLE
+%
+\font\tendh=amdunh10
+
+% FOR TITLES
+%
+\font\titlefont=amr7 scaled \magstep4
+
+
+% BIG FONT
+%
+\font\bigfont=amssbx10 scaled \magstep2
+
+
+\message{macros,}
+
+% MACROS TO SET FSTYLE % NOTE 7
+%
+\def\rm{\fam\z@\def\fstyle{rm}\setfont}
+\def\it{\fam\itfam\def\fstyle{it}\setfont}
+\def\bf{\fam\bffam\def\fstyle{bf}\setfont\ifmmode{\tenbfsy}%
+ \textfont2=\tenbfsy\fi}
+\def\sl{\fam\slfam\def\fstyle{sl}\setfont}
+\def\sa{\def\fstyle{ss}\setfont}
+\def\tt{\fam\ttfam\def\fstyle{tt}\setfont}
+
+\newfam\ssfam
+
+% MACROS TO SET FSIZE % NOTE 8
+%
+\def\fivepoint{\def\fsize{five}\setfont\let\sfont=\fivepoint%
+ \baselineskip7pt%
+ \setbox\strutbox=\hbox{\vrule height4.5pt depth1.5pt width0pt}%
+ \textfont0=\fiverm \scriptfont0=\fiverm%
+ \scriptscriptfont0=\fiverm%
+ \textfont1=\fivei \scriptfont1=\fivei%
+ \scriptscriptfont1=\fivei%
+ \textfont2=\fivesy \scriptfont2=\fivesy%
+ \scriptscriptfont2=\fivesy}
+
+\def\sixpoint{\def\fsize{six}\setfont\let\sfont=\fivepoint%
+ \baselineskip8pt%
+ \setbox\strutbox=\hbox{\vrule height5pt depth2pt width0pt}%
+ \textfont0=\sixrm \scriptfont0=\fiverm%
+ \scriptscriptfont0=\fiverm%
+ \scriptfont1=\fivei \scriptscriptfont1=\fivei%
+ \scriptfont2=\fivesy \scriptscriptfont2=\fivesy%
+ \def\changes{{\sixi\sixsy}%
+ \textfont1=\sixi \textfont2=\sixsy}%
+ \ifmmode\changes\else\everymath{\changes}%
+ \everydisplay{\changes}\fi}
+
+\def\sevenpoint{\def\fsize{seven}\setfont\let\sfont=\fivepoint%
+ \baselineskip9pt%
+ \setbox\strutbox=\hbox{\vrule height6pt depth2pt width0pt}%
+ \textfont0=\sevenrm \scriptfont0=\sixrm%
+ \scriptscriptfont0=\fiverm%
+ \textfont1=\seveni \scriptscriptfont1=\fivei%
+ \textfont2=\sevensy \scriptscriptfont2=\fivesy%
+ \def\changes{{\sixi\sixsy}%
+ \scriptfont1=\sixi%
+ \scriptfont2=\sixsy}%
+ \ifmmode\changes\else\everymath{\changes}%
+ \everydisplay{\changes}\fi}
+
+\def\eightpoint{\def\fsize{eight}\setfont\let\sfont=\sixpoint%
+ \baselineskip9pt%
+ \setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
+ \textfont0=\eightrm \scriptfont0=\sixrm%
+ \scriptscriptfont0=\fiverm%
+ \scriptscriptfont1=\fivei%
+ \scriptscriptfont2=\fivesy%
+ \def\changes{{\eighti\sixi\eightsy\sixsy}%
+ \textfont1=\eighti \scriptfont1=\sixi%
+ \textfont2=\eightsy \scriptfont2=\sixsy}%
+ \ifmmode\changes\else\everymath{\changes}%
+ \everydisplay{\changes}\fi}
+
+\def\ninepoint{\def\fsize{nine}\setfont\let\sfont=\sixpoint%
+ \baselineskip11pt%
+ \setbox\strutbox=\hbox{\vrule height8pt depth3pt width0pt}%
+ \textfont0=\ninerm \scriptfont0=\sevenrm%
+ \scriptscriptfont0\fiverm%
+ \scriptfont1=\seveni \scriptscriptfont1\fivei%
+ \scriptfont2=\sevensy \scriptscriptfont2\fivesy%
+ \def\changes{{\ninei\ninesy}%
+ \textfont1=\ninei%
+ \textfont2=\ninesy}%
+ \ifmmode\changes\else\everymath{\changes}%
+ \everydisplay{\changes}\fi}
+
+\def\tenpoint{\def\fsize{ten}\setfont\let\sfont=\sevenpoint%
+ \baselineskip12pt%
+ \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}%
+ \textfont0=\tenrm \scriptfont0=\sevenrm%
+ \scriptscriptfont0\fiverm%
+ \textfont1=\teni \scriptfont1=\seveni%
+ \scriptscriptfont1\fivei%
+ \textfont2=\tensy \scriptfont2=\sevensy%
+ \scriptscriptfont2\fivesy}
+
+\def\twelvepoint{\def\fsize{twelve}\setfont\let\sfont=\eightpoint%
+ \baselineskip14pt%
+ \setbox\strutbox=\hbox{\vrule height10pt depth4pt width0pt}%
+ \textfont0=\twelverm \scriptfont0=\ninerm%
+ \scriptscriptfont0=\sevenrm%
+ \scriptscriptfont1=\seveni%
+ \scriptscriptfont2=\sevensy%
+ \def\changes{{\twelvei\ninei\twelvesy\ninesy}%
+ \textfont1=\twelvei \scriptfont1=\ninei%
+ \textfont2=\twelvesy \scriptfont2=\ninesy}%
+ \ifmmode\changes\else\everymath{\changes}%
+ \everydisplay{\changes}\fi}
+\def\fourteenpoint{\def\fsize{fourteen}\setfont\let\sfont=\tenpoint%
+ \baselineskip16pt%
+ \setbox\strutbox=\hbox{\vrule height12pt depth4pt width0pt}%
+ \scriptfont0=\tenrm \scriptscriptfont0=\sevenrm%
+ \scriptfont1=\teni \scriptscriptfont1=\seveni%
+ \scriptfont2=\tensy \scriptscriptfont2=\sevensy%
+ \def\changes{{\fourteeni\fourteenrm\fourteensy}%
+ \textfont0=\fourteenrm%
+ \textfont1=\fourteeni%
+ \textfont2=\fourteensy}%
+ \ifmmode\changes\else\everymath{\changes}\everydisplay{\changes}\fi}
+
+\def\eighteenpoint{\def\fsize{eighteen}\setfont\let\sfont=\tenpoint%
+ \baselineskip18pt%
+ \setbox\strutbox=\hbox{\vrule height15pt depth3pt width0pt}%
+ \scriptfont0=\twelverm \scriptscriptfont0=\tenrm%
+ \scriptscriptfont1=\teni%
+ \scriptscriptfont2=\tensy%
+ \def\changes{{\eighteenrm\eighteeni\twelvei\eighteensy\twelvesy}%
+ \textfont0=\eighteenrm%
+ \textfont1=\eighteeni \scriptfont1=\twelvei%
+ \textfont2=\eighteensy \scriptfont2=\twelvesy}%
+ \ifmmode\changes\else\everymath{\changes}%
+ \everydisplay{\changes}\fi}
+\def\twentyfourpoint{\def\fsize{twentyfour}\setfont\let\sfont=\tenpoint%
+ \baselineskip24pt%
+ \setbox\strutbox=\hbox{\vrule height21.5pt depth2.5pt width0pt}%
+ \def\changes{{\twentyfourrm\eighteenrm\fourteenrm\twentyfouri%
+ \eighteeni\fourteeni\twentyfoursy\eighteensy\fourteensy}%
+ \textfont0=\twentyfourrm \scriptfont0=\eighteenrm %
+ \scriptscriptfont0=\fourteenrm%
+ \textfont1=\twentyfouri \scriptfont1=\eighteeni%
+ \scriptscriptfont1=\fourteeni%
+ \textfont2=\twentyfoursy \scriptfont2=\eighteensy%
+ \scriptscriptfont2=\fourteensy}%
+ \ifmmode\changes\else\everymath{\changes}\everydisplay{\changes}\fi}
+
+% MACROS TO SET CURRENT FONT USING FSTYLE AND FSIZE
+%
+\newif\ifnofont@
+\def\tryfont#1{\expandafter\ifx\csname#1\endcsname\relax\nofont@true % NOTE 9
+ \else\nofont@false\csname#1\endcsname\fi}
+\def\setfont{\tryfont{\ffam\fsize\fstyle}% % NOTE 10
+ \ifnofont@\tryfont{\ffam\fsize rm}%
+ \ifnofont@\tryfont{\ffam tenrm}%
+ \ifnofont@\tenrm\fi\fi\expandafter
+ \fonterr\csname\ffam\fsize\fstyle\endcsname{\the\font}\fi}
+\def\fonterr#1#2{\immediate\write\m@ne{! font #1is undefined,
+ I'm using #2instead.}\xdef#1{#2}}
+
+% DEFAULTS % NOTE 11
+%
+\fam\z@\tenrm\def\ffam{}\def\fstyle{rm}\def\fsize{ten}\let\sfont=\sevenpoint
+
+% LINE MACROS % NOTE 12
+%
+\def\lline#1{\hbox to\hsize{\hskip\leftskip#1\hskip\rightskip}}
+\def\leftline#1{\lline{#1\hss}}
+\def\rightline#1{\lline{\hss#1}}
+\def\centerline#1{\lline{\hss#1\hss}}
+
+% MORE MACROS
+%
+\def\narrow#1{\advance\leftskip#1\advance\rightskip#1}
+\def\narrower{\narrow\parindent} % NOTE 13
+\def\narrow@{\narrow\inset}
+\def\inc#1{\advance#1\@ne}
+\def\dec#1{\advance#1\m@ne}
+\def\ignore#1{\relax}
+\def\okbreak{\par\penalty-200}
+\def\need{\afterassignment\need@\dimen@} % NOTE 14
+\def\need@{\vskip\dimen@ minus\dimen@\okbreak\vskip-\dimen@ minus-\dimen@}
+\def\for#1=#2to#3do#4{#1=#2\ifnum#2>#3\else\let\next@=\fnext@ % NOTE 15
+ \def\fcount@{#1}\def\fexit@{#3}\def\floop@{#4}\next@\fi}
+\def\fnext@{\floop@\ifnum\fcount@<\fexit@\inc\fcount@ % NOTE 16
+ \else\let\next@=\relax\fi\next@}
+\def\super#1{\/\raise.4em\hbox{\sfont#1}\thinspace}
+\def\sub#1{\lower.25em\hbox{\sfont#1}\thinspace}
+\def\lbreak{\hfill\break}
+\def\uline#1{\setbox0=\hbox{#1}\dimen@=-\dp0\advance\dimen@ .23em % NOTE 17
+ \ifvmode\indent\fi\hbox to \wd0{\lower.27em
+ \vbox{\box0\vskip\dimen@\hrule height.04em}}}
+
+% START AND FINISH GROUP STRUCTURE % NOTE 18
+%
+\def\start#1{\errfalse\ifinvalid@{#1}\else\begingroup % NOTE 19
+ \def\blockname@{#1}\csname BEGIN#1\endcsname\fi\Error}
+\def\finish#1{\errfalse\ifinvalid@{#1}\else\matchup@{#1}\fi\Error} % NOTE 20
+\def\ifinvalid@#1{\expandafter\ifx\csname BEGIN#1\endcsname\relax % NOTE 21
+ \errset{I don't understand {#1}, it may be misspelled}}
+\def\matchup@#1{\def\test@{#1}% % NOTE 22
+ \expandafter\ifx\csname blockname@\endcsname\relax
+ \errset{Extra \string\finish{\test@} ignored}%
+ \else\ifx\test@\blockname@\done
+ \else\errset{Missing \string\finish{\blockname@} inserted}%
+ \done\matchup@{#1}\fi\fi}
+\def\done{\csname END\blockname@\endcsname\endgroup} % NOTE 23
+
+% GENERAL ERROR HANDLING % NOTE 24
+%
+\def\errfalse{\global\let\iferr=\iffalse}
+\def\errtrue{\global\let\iferr=\iftrue}
+\def\errset#1{\iferr\immediate\write0{! \error}\else\errtrue\fi\xdef\error{#1}}
+\def\Error{\iferr\errmessage{\error}\fi}
+
+% DATE AND TIME MACROS
+%
+\newcount\cntA@\newcount\cntB@\newcount\cntC@
+\def\mon{\ifcase\month\relax\or January\or February\or March\or % NOTE 25
+ April\or May\or June\or July\or August\or September\or October\or
+ November\or December\fi}
+\def\date{\mon\nobreak\ \number\day, \number\year} % NOTE 26
+\def\hour{{\cntA@=\time \cntB@=\cntA@ % NOTE 27
+ \divide\cntA@60 \cntC@=\cntA@ \multiply\cntC@60
+ \advance\cntB@-\cntC@\ifnum\cntA@>11
+ \advance\cntA@-12 \def\time@{PM}\else\def\time@{AM}\fi
+ \ifnum\cntA@=0 \cntA@=12 \fi\number\cntA@
+ :\ifnum\cntB@<10 0\fi\number\cntB@\nobreak\ \time@}}
+
+% INDENTSTYLE
+%
+\newdimen\indentsize\indentsize=20pt
+\newif\ifindent\indenttrue % NOTE 28
+\def\indentstyle{\parindent\indentsize % NOTE 29
+ \ifindent\else\indenttrue\advance\parskip-5\p@\fi}
+\def\noindentstyle{\parindent\z@ % NOTE 30
+ \ifindent\indentfalse\advance\parskip5\p@\fi}
+\def\indentspace{\afterassignment\indent@\indentsize} % NOTE 31
+\def\indent@{\ifindent\parindent\indentsize\fi}
+\newdimen\inset
+\inset.5in
+\def\BEGINindent{\advance\leftskip \inset}
+\let\ENDindent=\par
+
+% RAGGED MARGIN AND JUSTIFIED MARGIN MACROS
+%
+\def\fixmargin@{\dimen@=\rightskip\rightskip=\dimen@} % NOTE 32
+\def\justify{\fixmargin@\spaceskip\z@\xspaceskip\z@} % NOTE 33
+\def\raggedright{\fixmargin@\advance\rightskip\z@ plus2em % NOTE 34
+ \ifx\fstyle\tt@\else\spaceskip.3333em\xspaceskip.5em\fi}
+\def\tt@{tt} % NOTE 35
+
+% ITEM AND SUBITEM MACROS
+%
+\newcount\icount@\newcount\scount@
+\newcount\idigit@\newcount\sdigit@
+\def\itemset@#1#2#3{\dimen@=\hsize \advance\dimen@-#2\inset % NOTE 36
+ \parshape=\@ne#1\inset\dimen@\noindent
+ \hbox to\z@{\hss#3\enspace}\ignorespaces}
+\def\itemlist#1{\medskip\resetsubitems\itemset@\@ne\tw@{#1}} % NOTE 37
+\def\subitem#1{\smallskip\itemset@\tw@\f@ur{#1}} % NOTE 38
+\def\itempar{\smallskip\itemset@\@ne\tw@\empty} % NOTE 39
+\def\subitempar{\subitem\empty} % NOTE 40
+\def\enditems{\bigskip\resetitems}
+
+% ITEMTAG AND SUBITEMTAG MACROS % NOTE 41
+%
+\def\square{\hbox{\hskip.5pt\vrule height.4em width.4em depth 0em}}
+\def\dott{$\bullet$}
+\def\emdash{---}
+\def\itemn@#1{\number#1\global\inc#1} % NOTE 42
+\def\itemr@#1{\romannumeral#1\global\inc#1} % NOTE 43
+\def\itemR@#1{\uppercase\expandafter{\romannumeral#1}\global\inc#1} % NOTE 44
+\def\iteml@#1#2{{\loop\char#1\ifnum#2>\@ne\dec#2\repeat}\global\inc#1%% NOTE 45
+ \ifnum#1>122 \global#1=97 \global\inc#2\fi \ifnum#1=91 \global#1=65
+ \global\inc#2\fi}
+ \def\item@ #1,#2,#3{\def\itemtag{#3}% % NOTE 46
+ \def\resetitems{\global\icount@=#1\global\idigit@=#2}\resetitems}
+\outer\def\numbereditems{\item@ 1,0,{\itemn@\icount@}}
+\outer\def\lettereditems{\item@ 97,1,{\iteml@\icount@\idigit@}}
+\outer\def\Lettereditems{\item@ 65,1,{\iteml@\icount@\idigit@}}
+\outer\def\romanitems{\item@ 1,0,{\itemr@\icount@}}
+\outer\def\Romanitems{\item@ 1,0,{\itemR@\icount@}}
+\outer\def\squareditems{\let\itemtag=\square\let\resetitems=\relax}
+\outer\def\dotteditems{\let\itemtag=\dott\let\resetitems=\relax}
+\outer\def\dasheditems{\let\itemtag=\emdash\let\resetitems=\relax}
+\def\itm{\itemlist{\tenrm\itemtag\ifx\relax\resetitems\else.\fi}} % NOTE 47
+
+\def\subitem@ #1,#2,#3{\def\subitemtag{#3}% % NOTE 48
+ \def\resetsubitems{\global\scount@=#1\global\sdigit@=#2}\resetsubitems}
+\outer\def\numberedsubitems{\subitem@ 1,0,{\itemn@\scount@}}
+\outer\def\letteredsubitems{\subitem@ 97,1,{\iteml@\scount@\sdigit@}}
+\outer\def\Letteredsubitems{\subitem@ 65,1,{\iteml@\scount@\sdigit@}}
+\outer\def\romansubitems{\subitem@ 1,0,{\itemr@\scount@}}
+\outer\def\Romansubitems{\subitem@ 1,0,{\itemR@\scount@}}
+\outer\def\squaredsubitems{\let\subitemtag=\square\let\resetsubitems=\relax}
+\outer\def\dottedsubitems{\let\subitemtag=\dott\let\resetsubitems=\relax}
+\outer\def\dashedsubitems{\let\subitemtag=\emdash\let\resetsubitems=\relax}
+\def\sitm{\subitem{\tenrm\subitemtag\ifx\relax\resetsubitems\else.\fi}}
+ % NOTE 49
+\numbereditems\letteredsubitems % NOTE 50
+
+% NOTE AND WARNING MACROS
+%
+\def\BEGINnote{\bigskip\narrow@\narrow@\nobreak} % NOTE 51
+\let\ENDnote=\bigskip
+\def\BEGINwarning{\bigskip\nobreak\narrow@\narrow@\marginrule.02667in % NOTE 52
+ \nobreak\medskip\nobreak}
+\def\ENDwarning{\nobreak\medskip\nobreak\marginrule.02667in \bigskip}
+\def\marginrule#1 {\nointerlineskip\vbox to#1{\vss % NOTE 53
+ \lline{\leaders\hrule height#1\hss}}}
+
+
+% VERBATIM MODE % NOTE 54
+%
+\newskip\blanksize@
+\bgroup\catcode`\*=3 \catcode`\$=13 \catcode`\#=13
+ \catcode`\^=13 \catcode`\_=13 \catcode`\|=13 \catcode`\~=13
+\gdef\BEGINverbatim{\parskip=0pt plus1pt
+ \catcode`\$=13 \def${\indent\hbox to \the\fontdimen\tw@\the\font
+ {\hss\$\hss}}
+ \catcode`\&=12
+ \catcode`\#=13 \def#{\indent\hbox to \the\fontdimen\tw@\the\font
+ {\hss*\#*\hss}}
+ \catcode`\^=13 \def^{\indent\hbox to \the\fontdimen\tw@\the\font
+ {\hss*\mathchar"327D*\hss}}
+ \catcode`\_=13 \def_{\indent\hbox to \the\fontdimen\tw@\the\font
+ {\hss\_\hss}}
+ \catcode`\%=12
+ \catcode`\|=13 \def|{\indent\hbox to \the\fontdimen\tw@\the\font
+ {\hss*\mathchar"326A*\hss}}
+ \catcode`\~=13 \def~{\indent\hbox to \the\fontdimen\tw@\the\font
+ {\hss*\mathchar"3218*\hss}}
+ \parindent\z@\lumplines\lumpspaces}
+\egroup
+
+% LUMPLINE AND LUMPSPACE MACROS % NOTE 55
+%
+{\catcode`\^^M=13 \gdef\lumplines{\catcode`\^^M=13 \let^^M=\lumpline@}}
+\def\lumpline@{\par\skip@=\z@\let\munch@=\lumpB@\futurelet\lump@\lumpA@}
+\def\lumpA@{\ifx\lumpline@\lump@\advance\skip@\baselineskip
+ \else\let\munch@=\relax\vskip\skip@\fi\munch@}
+\def\lumpB@#1{\futurelet\lump@\lumpA@}
+{\catcode`\ =13 \gdef\lumpspaces{\catcode`\ =13\relax\let =\lumpspace@}}
+\def\lumpspace@{\blanksize@=\the\fontdimen\tw@\the\font
+ \skip@=\z@\let\munch@=\lumpb@\futurelet\lump@\lumpa@}
+\def\lumpa@{\advance\skip@\blanksize@\ifx\lumpspace@\lump@
+ \else\let\munch@=\relax\hskip\skip@\fi\munch@}
+\def\lumpb@#1{\futurelet\lump@\lumpa@}
+\let\munch@=\relax
+
+% PAGE CONTROL MACROS % NOTE 56
+%
+\def\newpage{\balance\ifold@\null\vfill\eject\fi}
+\def\evenpage{\newpage\ifodd\pageno\null\vfill\eject\fi}
+\def\oddpage{\newpage\ifodd\pageno\else\null\vfill\eject\fi}
+
+% HEADING AND FOOTING MACROS % NOTE 57
+%
+\newtoks\leftheading \newtoks\leftfooting
+\newtoks\rightheading \newtoks\rightfooting
+\newtoks\centerheading \newtoks\centerfooting
+\newtoks\insideheading \newtoks\insidefooting
+\newtoks\outsideheading \newtoks\outsidefooting
+\newtoks\headline \newtoks\footline
+\def\buildline{\let\lft=\zer@\let\rght=\@ne % NOTE 58
+ \ifdim\wd3=\z@\else\ifodd\pageno\let\lft=\thr@@\else\let\rght=\thr@@\fi\fi
+ \ifdim\wd4=\z@\else\ifodd\pageno\let\rght=\f@ur\else\let\lft=\f@ur\fi\fi
+ \triplehead\lft\tw@\rght}
+\def\triplehead#1#2#3{\skip@=1em\skip@ii=1em % NOTE 59
+ \dimen@=\wd#1\advance\dimen@-\wd#3%
+ \ifdim\dimen@>\z@\advance\skip@ii\dimen@ minus\dimen@
+ \else\advance\skip@-\dimen@ minus-\dimen@\fi
+ {\box#1\hskip\skip@\hfil\box#2\hfil\hskip\skip@ii\box#3}}
+\def\loadbox#1#2{\setbox#1=\hbox{\the#2}} % NOTE 60
+\newcount\headcount\newcount\footcount
+\def\suspendheading#1{\global\headcount=#1}
+\def\suspendfooting#1{\global\footcount=#1}
+\def\noheading{\suspendheading\m@ne}
+\def\nofooting{\suspendfooting\m@ne}
+\def\resumeheading{\suspendheading\zer@}
+\def\resumefooting{\suspendfooting\zer@}
+\headline{\ifnum\headcount=\z@\loadbox\tw@\centerheading % NOTE 61
+ \loadbox\zer@\leftheading\loadbox\@ne\rightheading
+ \loadbox\thr@@\insideheading\loadbox\f@ur\outsideheading\buildline
+ \else\hfil\ifnum\headcount>\z@\global\dec\headcount\fi\fi}
+\footline{\ifnum\footcount=\z@\loadbox\tw@\centerfooting % NOTE 62
+ \loadbox\zer@\leftfooting\loadbox\@ne\rightfooting
+ \loadbox\thr@@\insidefooting\loadbox\f@ur\outsidefooting\buildline
+ \else\hfil\ifnum\footcount>\z@\global\dec\footcount\fi\fi}
+\resumeheading
+\resumefooting
+% footline is normally a centered page number in font \tenrm
+\centerfooting{\tenrm\folio}
+
+% BOX MACROS
+%
+\newdimen\boxline
+\newdimen\boxspace
+\boxline .01332in
+\boxspace 5pt
+\newdimen\depthbox@
+\def\boxit#1{\hbox{\vrule width\boxline % NOTE 63
+ \vbox{\hrule height\boxline\kern\boxspace
+ \hbox{\kern\boxspace
+ \vbox{\halign{\hfil##\hfil\cr\strut#1\strut\cr}}%
+ \kern\boxspace}%
+ \kern\boxspace\hrule height\boxline}%
+ \vrule width\boxline}}
+\def\centerbox#1{\vskip\abovedisplayskip % NOTE 64
+ \centerline{\boxit{#1}}%
+ \vskip\belowdisplayskip}
+\def\textbox#1{\depthbox@=\dp\strutbox\advance\depthbox@ by .4\p@ % NOTE 65
+ \ifvmode\indent\fi\setbox\z@\hbox{\vrule
+ \vbox{\hrule\hbox{\kern\p@#1\strut\kern\p@}\hrule}%
+ \vrule}\lower\depthbox@\box\z@}
+
+% HP2680A and HP2688A COPY CONTROL MACROS % NOTE 66
+%
+\newcount\oldcopy\newcount\copycnt
+\def\copy@{\globalspecial{HP2688A,HP2680A COPIES \number\copycnt}}
+\def\selectcopycount{\afterassignment\copy@\copycnt}
+\def\copieson{\global\count\copycnt=\oldcopy\copy@}
+\def\copiesoff{\global\count\copycnt=1 \copy@}
+\def\copies{\afterassignment\copieson\global\oldcopy}
+\copycnt=1
+\oldcopy=2
+
+% HP2680A and HP2688A LOGICAL PAGE CONTROL (LPC) MACROS % NOTE 67
+%
+\def\lplist#1{\globalspecial{HP2688A,HP2680A ILP #1}}
+\def\lpdef#1{\globalspecial{HP2688A,HP2680A LP #1}}
+\newif\ifempty@\empty@true
+\newcount\lpcount@\newcount\nextlp@
+\def\selectlpcounter#1{\lpcount@#1 \setlpcount@{\the\lpcount@}}
+\def\setlpcount@#1{\globalspecial{HP2688A,HP2680A ELP #1}}
+\def\lpageto{\eject\afterassignment\lpeject@\nextlp@}
+\def\ppageto{\eject\afterassignment\lpage@\nextlp@}
+\def\lpeject@{\nextlp@=-\nextlp@\lpage@}
+\def\lpresume{\eject\nextlp@=\z@\lpage@}
+\def\lpreset{\eject\nextlp@=33 \lpage@ \nextlp@=\z@}
+\def\lpexit{\eject\nextlp@=34 \lpage@ \nextlp@=\z@}
+\def\lpage@{\ifempty@\count\lpcount@=\nextlp@\global\empty@false\fi}
+\everyjob{\message{Using HP TeX Version \fmtversion}\selectlpcounter2 {}}
+
+% TABLE MACROS % NOTE 68
+%
+\newcount\maxcol@
+\newbox\topstrutbox \def\topstrut{\unhcopy\topstrutbox}
+\setbox\topstrutbox=\hbox{\vrule height11pt depth0pt width0pt}
+\newbox\botstrutbox \def\botstrut{\unhcopy\botstrutbox}
+\setbox\botstrutbox=\hbox{\vrule height0pt depth4pt width0pt}
+\newdimen\tableline \tableline.01332in
+\newskip\tablespace \tablespace5pt
+\def\paragraph#1{\vbox{\hrule height\z@ width\hsize depth\z@#1}}
+\def\tbar{\ifvmode\hrule\else\vrule width\hsize depth\z@\fi height\tableline}
+\def\uptoks@{\inc\cntA@\inc\cntB@ % NOTE 69
+ \ifnum\cntA@<\count19 \ifnum\cntB@<\count19 \else\err@\fi\else\err@\fi}
+\def\err@{\errmessage{Columns too wide for tabular format}}
+\def\bump@{\ifnum\cntC@<\maxcol@\inc\cntC@\uptoks@\fi} % NOTE 70
+\def\tableformat#1{\tablelet\just@\just@\relax\parse@#1~\done@~} % NOTE 71
+\def\tablerow#1{\tablelet\bbar@\wbar@\endrow@\parse@#1~\done@~} % NOTE 72
+\def\tablebar#1{{\let\topstrut\relax\let\botstrut\relax\tablespace\z@%% NOTE 73
+ \tablerow{#1}}}
+\def\tablelet#1#2#3{\let\b@#1\let\w@#2\let\f@#3\cntA@\count15 \cntB@\count11%
+ \cntC@\z@\let\parse@=\parseline@\ifhmode\par\else\nointerlineskip\fi}
+ % NOTE 74
+\def\just@#1{\let\b@\tform@\let\w@\tform@\maxcol@\z@\let\tablejust@#1}
+ % NOTE 75
+
+\def\tform@#1{\tform@@#1~} % NOTE 76
+\def\tform@@#1#2~{\uptoks@\toks\cntA@{#1}\dimen\cntB@#2\inc\maxcol@} % NOTE 77
+\def\bbar@#1{\beginrow@{#1}\vrule width\tableline\vrule width\z@#1} % NOTE 78
+\def\wbar@#1{\beginrow@{#1}\kern\tableline\vrule width\z@#1} % NOTE 79
+\def\beginrow@#1{\let\b@\vbar@\let\w@\ibar@\setbox\z@=\hbox\bgroup% % NOTE 80
+ \parindent\z@\leftskip\tablespace\rightskip\tablespace\let\span=\span@}
+\def\endrow@{\kern-\dimen\cntB@\egroup\tablejust@{\unhbox\z@}} % NOTE 81
+\def\vbar@#1{\futurelet\lookahead@\cs@#1~\vrule width\tableline} % NOTE 82
+\def\ibar@#1{\futurelet\lookahead@\cs@#1~\kern\tableline} % NOTE 83
+\def\cs@#1~{\ifx\span@\lookahead@#1~\else\span@\@ne#1~\fi\lower\ht\z@\box\z@}
+ % NOTE 84
+\def\parseline@#1~{\ifx\done@#1\let\parse@\f@\else\let\p@ss\parsecol@%
+ \p@ss#1|\done@|\fi\parse@} % NOTE 85
+\def\parsecol@#1|{\def\parsemode@{\ifx\done@\lookahead@\w@{#1}% % NOTE 86
+ \let\p@ss\lastp@ss\else\b@{#1}\fi\p@ss}%
+ \futurelet\lookahead@\parsemode@}
+\def\lastp@ss#1|{}
+\def\span@#1#2~{\bump@\hsize\dimen\cntB@\edef\x@{\the\toks\cntA@}% % NOTE 87
+ \for\count@=2to#1do%
+ {\bump@\advance\hsize\dimen\cntB@\advance\hsize\tableline}%
+ \setbox\z@=\x@{\topstrut#2\botstrut}}
+
+% SECTION AND HEADING MACROS % NOTE 88
+%
+\newcount\basehead\basehead=\count10
+\advance\count10by4 % This allocates 4 counters for head counters
+\newcount\hdlevel
+\def\setlevelno#1{\hdlevel=0 \cntA@=\basehead\sethead@0#1.-1.\head@} % NOTE 89
+\def\sethead@#1.{\ifnum-1=#1 \let\next@=\relax\else\let\next@=\sethead@
+ % NOTE 90
+ \ifnum\hdlevel<4 \inc\hdlevel\inc\cntA@\count\cntA@=#1\fi\fi\next@}
+\def\head#1{\ifnum#1>\hdlevel\uplevel@{#1}\else % NOTE 91
+ \hdlevel=#1\cntA@=#1\advance\cntA@\basehead\fi
+ \inc{\count\cntA@}\head@}
+\def\uplevel@#1{\inc\hdlevel\cntA@=\hdlevel % NOTE 92
+ \advance\cntA@\basehead\count\cntA@=0
+ \ifnum\hdlevel=#1 \else\uplevel@{#1}\fi}
+\def\head@{{\inc\basehead\xdef\levelno{\the\count\basehead} % NOTE 93
+ \for\cntB@=\tw@ to\hdlevel do{\inc\basehead
+ \xdef\levelno{\levelno.\the\count\basehead}}}}
+\setlevelno{0}
+
+\newtoks\firstlevelhead \def\headA@{\head\@ne\the\firstlevelhead} % NOTE 94
+\newtoks\secondlevelhead \def\headB@{\head\tw@\the\secondlevelhead}
+\newtoks\thirdlevelhead \def\headC@{\head\thr@@\the\thirdlevelhead}
+\newtoks\fourthlevelhead \def\headD@{\head\f@ur\the\fourthlevelhead}
+
+\def\level#1#2{\def\title{#2}% % NOTE 95
+ \ifcase#1\relax\or\headA@\or\headB@\or\headC@\or\headD@\fi}
+\firstlevelhead{\vfill\eject\vbox to1.5in{}\centerline{\fourteenbf\title}%
+ \vskip1.0in\ctswrite{\vrule height20pt width0pt\tenbf\title}}
+\secondlevelhead{\need.75in\bigskip\leftline{\twelvebf\levelno\enspace\title}%
+ \medskip\ctswrite{\hskip15pt\tenrm\title}}
+\thirdlevelhead{\need.6in\medskip\leftline{\tenbf\levelno\enspace\title}%
+ \ctswrite{\hskip30pt\tenrm\title}}
+\fourthlevelhead{\need.5in\leftline{\tenrm\levelno\enspace\title}%
+ \ctswrite{\hskip45pt\tenrm\title}}
+
+% CONTENTS FILE MACROS
+%
+\newwrite\cnts@
+\newif\ifnocts@\nocts@true
+\newtoks\topofcontents
+\newtoks\botofcontents
+\let\content@=\let% % NOTE 96
+\def\ctswrite#1{\ifnocts@\openout\cnts@=\jobname*[*]. \nocts@false\fi% NOTE 97
+ {\def\_{\kern.06em \vbox{\hrule width.3em}}\let\the=0
+ \edef\a@{\write\cnts@{\content@{#1}{\the\pageno}}}\a@}}
+{\catcode`\@=12 \gdef\content@ #1#2{\need.5in\lline{#1\dotfil#2}}}
+\def\contents{\ifnocts@\else\closeout\cnts@\null\supereject % NOTE 98
+ \begingroup\pageno\m@ne\null\the\topofcontents\input\jobname*.
+ \the\botofcontents\eject\endgroup\nocts@true\fi}
+\topofcontents{\noheading\vskip1in plus1fil
+ \centerline{\fourteenbf Table of Contents}\vskip1in plus1fil}
+\botofcontents{\vfil}
+
+% FOOTNOTES AND INSERTIONS
+%
+\def\vfootnote#1{\insert\footins\bgroup % NOTE 99
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+ \realhsize\leftskip\z@skip \rightskip\z@skip
+ \baselineskip1\baselineskip
+ \textindent{#1}\footstrut\futurelet\next\fo@t}
+
+\newcount\notenumber
+\def\resetnotes{\global\notenumber=0 }
+\def\note{\global\inc\notenumber\footnote{$^{\the\notenumber}$}} % NOTE 100
+\def\midinsert{\@midtrue\p@gefalse\@ins} % NOTE 101
+\def\@ins{\par\begingroup\setbox\z@\vbox\bgroup\realhsize\divide\vsize\nocol@}
+ % NOTE 102
+\def\endinsert{\egroup\count@-100 % finish the \vbox % NOTE 103
+ \ifp@ge\else\dimen@\ht\z@\advance\dimen@\dp\z@
+ \advance\dimen@12\p@\multiply\dimen@-\nocol@
+ \advance\dimen@-\pagetotal\advance\dimen@\pagegoal
+ \ifdim\dimen@<\z@\@midfalse\else\count@100 \fi\fi
+ \if@mid \balance@
+ \global\setbox\contrb@\vbox{\unvbox\contrb@\bigskip\box\z@}\newtotal@
+ \else\insert\topins{\penalty\count@ % floating insertion
+ \splittopskip\z@skip\splitmaxdepth\maxdimen\floatingpenalty\z@
+ \ifp@ge \divide\vsize\nocol@ \dimen@\dp\z@
+ \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
+ \else \box\z@\nobreak\bigskip\fi}\fi\endgroup}
+
+% COLUMN MACROS % NOTE 104
+%
+\def\BEGINtwocolumns{\multicol@\tw@}
+\def\BEGINthreecolumns{\multicol@\thr@@}
+\def\ENDtwocolumns{\balance@\goal@\divide\endgroup\newtotal@\begingroup}
+\let\ENDthreecolumns=\ENDtwocolumns
+\def\balance{\balance@\newtotal@} % NOTE 105
+\def\balance@{\par{\let\ifreal@=\iffalse\eject}} % NOTE 106
+\def\newtotal@{{\each@{\the\toks\count@} % NOTE 107
+ \ifold@\insert\hacker@{}\prevtotal@\pagetotal-\dimen@\fi}}
+\def\multicol@#1{\ifnum\nocol@>\@ne\errset{You can't have columns % NOTE 108
+ within columns. \string\start{\blockname@} ignored}\endgroup
+ \else\balance@\nocol@=#1\goal@\multiply\advance\hsize\columnspace
+ \divide\hsize#1\advance\hsize-\columnspace
+ \multiply\vsize#1\brokenpenalty\z@
+ \each@{\multiply\count\count@\nocol@\multiply\skip\count@\nocol@}%
+ \newtotal@\global\dimen@=\baselineskip\baselineskip\dimen@ plus\dimen@\fi}
+
+\message{output routines}
+
+% OUTPUT ROUTINES % NOTE 109
+%
+\newbox\contrb@ \newbox\out@
+\newdimen\columnspace
+\columnspace=.5in
+\let\ifreal@=\iftrue
+\newcount\nocol@ \nocol@=1
+\newinsert\hacker@
+\def\ifold@{\ifvoid\contrb@\else}
+\def\ifcol@{\ifnum\nocol@=\@ne\setbox\out@=\box\@cclv \else}
+\def\setboxA@{\inc\cntA@\setbox\cntA@}
+\def\boxA@{\inc\cntA@\box\cntA@}
+\def\each@#1{\for\count@=\count19 to254 do{#1}}
+\def\unglue@#1{\setbox#1=\vbox{\unvbox#1}}
+\def\realhsize{\advance\hsize\columnspace\multiply\hsize\nocol@
+ \advance\hsize-\columnspace}
+\output{\hpoutput}
+
+\def\hpoutput{\splittopskip=\topskip
+ \setbox\hacker@=\box\voidb@x
+ \ifvoid\contrb@\dimen@=\ht\@cclv
+ \else\prevtotal@\advance\dimen@\ht\@cclv\fi
+ \ifreal@\realoutput@\else\fakeoutput@\fi
+ \each@{\global\toks\count@\ifvoid\count@{}\else{\insert\count@{}}\fi}}
+
+\def\realoutput@{\ifcol@\splitcol@\split@\setheight@\setout@ % NOTE 110
+ \unvbox\@cclv \penalty\outputpenalty\fi
+ \setbox\@cclv=\pagestuff@{}\each@{\divide\skip\count@\nocol@}%
+ \realhsize\divide\vsize\nocol@\leftskip\z@\rightskip\z@
+ \plainoutput\global\empty@true
+ \global\count\lpcount@=\nextlp@\ifnum\nextlp@>32 \global\nextlp@\z@\fi}
+
+\def\fakeoutput@{\unglue@{\@cclv}\global\let\ifreal@=\iftrue % NOTE 111
+ \ifcol@\dimen@=\baselineskip
+ \dimen@=\ifnum\nocol@>2 2\dimen@ \else 1.1667\dimen@ \fi
+ \advance\dimen@\ht\@cclv\splitcol@{\box\@cclv}\setmax@\setout@\fi
+ \dimen@=\dp\out@\global\setbox\contrb@=\pagestuff@{\vskip-\dimen@}}
+
+\def\makeheadline{\vbox to\z@{\vskip-22.5\p@
+ \lline{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip}
+\def\makefootline{\baselineskip24\p@\lline{\the\footline}}
+
+\def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi
+ \unvbox\@cclv % open up \box255
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins\fi
+ \ifr@ggedbottom\vfil\fi}
+
+\def\splitcol@#1{\divide\dimen@\nocol@\cntA@=\count14
+ \for\count@=\tw@ to\nocol@ do{\setboxA@=\split@}\setboxA@=#1}
+\def\split@{\ifvoid\@cclv\vbox{\lline\hfil\vfil}\else\vsplit\@cclv to\dimen@\fi}
+\def\setheight@{\ifold@\setmax@\fi}
+\def\pagestuff@#1{\vbox{\ifold@\unvbox\contrb@\medskip\fi\unvbox\out@#1}}
+\def\setout@{\cntA@=\count14 \setbox\out@=\vbox{\hbox
+ {\for\count@=\tw@ to\nocol@ do{\boxA@\hskip\columnspace}\boxA@}}}
+\def\setmax@{\dimen@=\z@ \cntA@=\count14
+ \for\count@=\@ne to\nocol@ do{\inc\cntA@\unglue@{\cntA@}%
+ \ifdim\ht\cntA@>\dimen@ \dimen@=\ht\cntA@\fi}%
+ \for\count@=\@ne to\nocol@ do{\setbox\cntA@
+ =\vbox to\dimen@{\unvbox\cntA@\ifr@ggedbottom\vss\fi}\dec\cntA@}}
+\def\prevtotal@{\dimen@=\medskipamount
+ \advance\dimen@\ht\contrb@\multiply\dimen@-\nocol@}
+\def\goal@#1{\ifdim\pagegoal=\maxdimen\else
+ \dimen@=\pagegoal#1\dimen@\nocol@\pagegoal\dimen@\fi}
+
+
+\catcode`@=12 % NOTE 112
diff --git a/macros/plain/contrib/samples/hyphen.tex b/macros/plain/contrib/samples/hyphen.tex
new file mode 100644
index 0000000000..26a4332d4d
--- /dev/null
+++ b/macros/plain/contrib/samples/hyphen.tex
@@ -0,0 +1,4466 @@
+% The Plain TeX hyphenation tables [NOT TO BE CHANGED IN ANY WAY!]
+\patterns{ % just type <return> if you're not using INITEX
+.ach4
+.ad4der
+.af1t
+.al3t
+.am5at
+.an5c
+.ang4
+.ani5m
+.ant4
+.an3te
+.anti5s
+.ar5s
+.ar4tie
+.ar4ty
+.as3c
+.as1p
+.as1s
+.aster5
+.atom5
+.au1d
+.av4i
+.awn4
+.ba4g
+.ba5na
+.bas4e
+.ber4
+.be5ra
+.be3sm
+.be5sto
+.bri2
+.but4ti
+.cam4pe
+.can5c
+.capa5b
+.car5ol
+.ca4t
+.ce4la
+.ch4
+.chill5i
+.ci2
+.cit5r
+.co3e
+.co4r
+.cor5ner
+.de4moi
+.de3o
+.de3ra
+.de3ri
+.des4c
+.dictio5
+.do4t
+.du4c
+.dumb5
+.earth5
+.eas3i
+.eb4
+.eer4
+.eg2
+.el5d
+.el3em
+.enam3
+.en3g
+.en3s
+.eq5ui5t
+.er4ri
+.es3
+.eu3
+.eye5
+.fes3
+.for5mer
+.ga2
+.ge2
+.gen3t4
+.ge5og
+.gi5a
+.gi4b
+.go4r
+.hand5i
+.han5k
+.he2
+.hero5i
+.hes3
+.het3
+.hi3b
+.hi3er
+.hon5ey
+.hon3o
+.hov5
+.id4l
+.idol3
+.im3m
+.im5pin
+.in1
+.in3ci
+.ine2
+.in2k
+.in3s
+.ir5r
+.is4i
+.ju3r
+.la4cy
+.la4m
+.lat5er
+.lath5
+.le2
+.leg5e
+.len4
+.lep5
+.lev1
+.li4g
+.lig5a
+.li2n
+.li3o
+.li4t
+.mag5a5
+.mal5o
+.man5a
+.mar5ti
+.me2
+.mer3c
+.me5ter
+.mis1
+.mist5i
+.mon3e
+.mo3ro
+.mu5ta
+.muta5b
+.ni4c
+.od2
+.odd5
+.of5te
+.or5ato
+.or3c
+.or1d
+.or3t
+.os3
+.os4tl
+.oth3
+.out3
+.ped5al
+.pe5te
+.pe5tit
+.pi4e
+.pio5n
+.pi2t
+.pre3m
+.ra4c
+.ran4t
+.ratio5na
+.ree2
+.re5mit
+.res2
+.re5stat
+.ri4g
+.rit5u
+.ro4q
+.ros5t
+.row5d
+.ru4d
+.sci3e
+.self5
+.sell5
+.se2n
+.se5rie
+.sh2
+.si2
+.sing4
+.st4
+.sta5bl
+.sy2
+.ta4
+.te4
+.ten5an
+.th2
+.ti2
+.til4
+.tim5o5
+.ting4
+.tin5k
+.ton4a
+.to4p
+.top5i
+.tou5s
+.trib5ut
+.un1a
+.un3ce
+.under5
+.un1e
+.un5k
+.un5o
+.un3u
+.up3
+.ure3
+.us5a
+.ven4de
+.ve5ra
+.wil5i
+.ye4
+4ab.
+a5bal
+a5ban
+abe2
+ab5erd
+abi5a
+ab5it5ab
+ab5lat
+ab5o5liz
+4abr
+ab5rog
+ab3ul
+a4car
+ac5ard
+ac5aro
+a5ceou
+ac1er
+a5chet
+4a2ci
+a3cie
+ac1in
+a3cio
+ac5rob
+act5if
+ac3ul
+ac4um
+a2d
+ad4din
+ad5er.
+2adi
+a3dia
+ad3ica
+adi4er
+a3dio
+a3dit
+a5diu
+ad4le
+ad3ow
+ad5ran
+ad4su
+4adu
+a3duc
+ad5um
+ae4r
+aeri4e
+a2f
+aff4
+a4gab
+aga4n
+ag5ell
+age4o
+4ageu
+ag1i
+4ag4l
+ag1n
+a2go
+3agog
+ag3oni
+a5guer
+ag5ul
+a4gy
+a3ha
+a3he
+ah4l
+a3ho
+ai2
+a5ia
+a3ic.
+ai5ly
+a4i4n
+ain5in
+ain5o
+ait5en
+a1j
+ak1en
+al5ab
+al3ad
+a4lar
+4aldi
+2ale
+al3end
+a4lenti
+a5le5o
+al1i
+al4ia.
+ali4e
+al5lev
+4allic
+4alm
+a5log.
+a4ly.
+4alys
+5a5lyst
+5alyt
+3alyz
+4ama
+am5ab
+am3ag
+ama5ra
+am5asc
+a4matis
+a4m5ato
+am5era
+am3ic
+am5if
+am5ily
+am1in
+ami4no
+a2mo
+a5mon
+amor5i
+amp5en
+a2n
+an3age
+3analy
+a3nar
+an3arc
+anar4i
+a3nati
+4and
+ande4s
+an3dis
+an1dl
+an4dow
+a5nee
+a3nen
+an5est.
+a3neu
+2ang
+ang5ie
+an1gl
+a4n1ic
+a3nies
+an3i3f
+an4ime
+a5nimi
+a5nine
+an3io
+a3nip
+an3ish
+an3it
+a3niu
+an4kli
+5anniz
+ano4
+an5ot
+anoth5
+an2sa
+an4sco
+an4sn
+an2sp
+ans3po
+an4st
+an4sur
+antal4
+an4tie
+4anto
+an2tr
+an4tw
+an3ua
+an3ul
+a5nur
+4ao
+apar4
+ap5at
+ap5ero
+a3pher
+4aphi
+a4pilla
+ap5illar
+ap3in
+ap3ita
+a3pitu
+a2pl
+apoc5
+ap5ola
+apor5i
+apos3t
+aps5es
+a3pu
+aque5
+2a2r
+ar3act
+a5rade
+ar5adis
+ar3al
+a5ramete
+aran4g
+ara3p
+ar4at
+a5ratio
+ar5ativ
+a5rau
+ar5av4
+araw4
+arbal4
+ar4chan
+ar5dine
+ar4dr
+ar5eas
+a3ree
+ar3ent
+a5ress
+ar4fi
+ar4fl
+ar1i
+ar5ial
+ar3ian
+a3riet
+ar4im
+ar5inat
+ar3io
+ar2iz
+ar2mi
+ar5o5d
+a5roni
+a3roo
+ar2p
+ar3q
+arre4
+ar4sa
+ar2sh
+4as.
+as4ab
+as3ant
+ashi4
+a5sia.
+a3sib
+a3sic
+5a5si4t
+ask3i
+as4l
+a4soc
+as5ph
+as4sh
+as3ten
+as1tr
+asur5a
+a2ta
+at3abl
+at5ac
+at3alo
+at5ap
+ate5c
+at5ech
+at3ego
+at3en.
+at3era
+ater5n
+a5terna
+at3est
+at5ev
+4ath
+ath5em
+a5then
+at4ho
+ath5om
+4ati.
+a5tia
+at5i5b
+at1ic
+at3if
+ation5ar
+at3itu
+a4tog
+a2tom
+at5omiz
+a4top
+a4tos
+a1tr
+at5rop
+at4sk
+at4tag
+at5te
+at4th
+a2tu
+at5ua
+at5ue
+at3ul
+at3ura
+a2ty
+au4b
+augh3
+au3gu
+au4l2
+aun5d
+au3r
+au5sib
+aut5en
+au1th
+a2va
+av3ag
+a5van
+ave4no
+av3era
+av5ern
+av5ery
+av1i
+avi4er
+av3ig
+av5oc
+a1vor
+3away
+aw3i
+aw4ly
+aws4
+ax4ic
+ax4id
+ay5al
+aye4
+ays4
+azi4er
+azz5i
+5ba.
+bad5ger
+ba4ge
+bal1a
+ban5dag
+ban4e
+ban3i
+barbi5
+bari4a
+bas4si
+1bat
+ba4z
+2b1b
+b2be
+b3ber
+bbi4na
+4b1d
+4be.
+beak4
+beat3
+4be2d
+be3da
+be3de
+be3di
+be3gi
+be5gu
+1bel
+be1li
+be3lo
+4be5m
+be5nig
+be5nu
+4bes4
+be3sp
+be5str
+3bet
+bet5iz
+be5tr
+be3tw
+be3w
+be5yo
+2bf
+4b3h
+bi2b
+bi4d
+3bie
+bi5en
+bi4er
+2b3if
+1bil
+bi3liz
+bina5r4
+bin4d
+bi5net
+bi3ogr
+bi5ou
+bi2t
+3bi3tio
+bi3tr
+3bit5ua
+b5itz
+b1j
+bk4
+b2l2
+blath5
+b4le.
+blen4
+5blesp
+b3lis
+b4lo
+blun4t
+4b1m
+4b3n
+bne5g
+3bod
+bod3i
+bo4e
+bol3ic
+bom4bi
+bon4a
+bon5at
+3boo
+5bor.
+4b1ora
+bor5d
+5bore
+5bori
+5bos4
+b5ota
+both5
+bo4to
+bound3
+4bp
+4brit
+broth3
+2b5s2
+bsor4
+2bt
+bt4l
+b4to
+b3tr
+buf4fer
+bu4ga
+bu3li
+bumi4
+bu4n
+bunt4i
+bu3re
+bus5ie
+buss4e
+5bust
+4buta
+3butio
+b5uto
+b1v
+4b5w
+5by.
+bys4
+1ca
+cab3in
+ca1bl
+cach4
+ca5den
+4cag4
+2c5ah
+ca3lat
+cal4la
+call5in
+4calo
+can5d
+can4e
+can4ic
+can5is
+can3iz
+can4ty
+cany4
+ca5per
+car5om
+cast5er
+cas5tig
+4casy
+ca4th
+4cativ
+cav5al
+c3c
+ccha5
+cci4a
+ccompa5
+ccon4
+ccou3t
+2ce.
+4ced.
+4ceden
+3cei
+5cel.
+3cell
+1cen
+3cenc
+2cen4e
+4ceni
+3cent
+3cep
+ce5ram
+4cesa
+3cessi
+ces5si5b
+ces5t
+cet4
+c5e4ta
+cew4
+2ch
+4ch.
+4ch3ab
+5chanic
+ch5a5nis
+che2
+cheap3
+4ched
+che5lo
+3chemi
+ch5ene
+ch3er.
+ch3ers
+4ch1in
+5chine.
+ch5iness
+5chini
+5chio
+3chit
+chi2z
+3cho2
+ch4ti
+1ci
+3cia
+ci2a5b
+cia5r
+ci5c
+4cier
+5cific.
+4cii
+ci4la
+3cili
+2cim
+2cin
+c4ina
+3cinat
+cin3em
+c1ing
+c5ing.
+5cino
+cion4
+4cipe
+ci3ph
+4cipic
+4cista
+4cisti
+2c1it
+cit3iz
+5ciz
+ck1
+ck3i
+1c4l4
+4clar
+c5laratio
+5clare
+cle4m
+4clic
+clim4
+cly4
+c5n
+1co
+co5ag
+coe2
+2cog
+co4gr
+coi4
+co3inc
+col5i
+5colo
+col3or
+com5er
+con4a
+c4one
+con3g
+con5t
+co3pa
+cop3ic
+co4pl
+4corb
+coro3n
+cos4e
+cov1
+cove4
+cow5a
+coz5e
+co5zi
+c1q
+cras5t
+5crat.
+5cratic
+cre3at
+5cred
+4c3reta
+cre4v
+cri2
+cri5f
+c4rin
+cris4
+5criti
+cro4pl
+crop5o
+cros4e
+cru4d
+4c3s2
+2c1t
+cta4b
+ct5ang
+c5tant
+c2te
+c3ter
+c4ticu
+ctim3i
+ctu4r
+c4tw
+cud5
+c4uf
+c4ui
+cu5ity
+5culi
+cul4tis
+3cultu
+cu2ma
+c3ume
+cu4mi
+3cun
+cu3pi
+cu5py
+cur5a4b
+cu5ria
+1cus
+cuss4i
+3c4ut
+cu4tie
+4c5utiv
+4cutr
+1cy
+cze4
+1d2a
+5da.
+2d3a4b
+dach4
+4daf
+2dag
+da2m2
+dan3g
+dard5
+dark5
+4dary
+3dat
+4dativ
+4dato
+5dav4
+dav5e
+5day
+d1b
+d5c
+d1d4
+2de.
+deaf5
+deb5it
+de4bon
+decan4
+de4cil
+de5com
+2d1ed
+4dee.
+de5if
+deli4e
+del5i5q
+de5lo
+d4em
+5dem.
+3demic
+dem5ic.
+de5mil
+de4mons
+demor5
+1den
+de4nar
+de3no
+denti5f
+de3nu
+de1p
+de3pa
+depi4
+de2pu
+d3eq
+d4erh
+5derm
+dern5iz
+der5s
+des2
+d2es.
+de1sc
+de2s5o
+des3ti
+de3str
+de4su
+de1t
+de2to
+de1v
+dev3il
+4dey
+4d1f
+d4ga
+d3ge4t
+dg1i
+d2gy
+d1h2
+5di.
+1d4i3a
+dia5b
+di4cam
+d4ice
+3dict
+3did
+5di3en
+d1if
+di3ge
+di4lato
+d1in
+1dina
+3dine.
+5dini
+di5niz
+1dio
+dio5g
+di4pl
+dir2
+di1re
+dirt5i
+dis1
+5disi
+d4is3t
+d2iti
+1di1v
+d1j
+d5k2
+4d5la
+3dle.
+3dled
+3dles.
+4dless
+2d3lo
+4d5lu
+2dly
+d1m
+4d1n4
+1do
+3do.
+do5de
+5doe
+2d5of
+d4og
+do4la
+doli4
+do5lor
+dom5iz
+do3nat
+doni4
+doo3d
+dop4p
+d4or
+3dos
+4d5out
+do4v
+3dox
+d1p
+1dr
+drag5on
+4drai
+dre4
+drea5r
+5dren
+dri4b
+dril4
+dro4p
+4drow
+5drupli
+4dry
+2d1s2
+ds4p
+d4sw
+d4sy
+d2th
+1du
+d1u1a
+du2c
+d1uca
+duc5er
+4duct.
+4ducts
+du5el
+du4g
+d3ule
+dum4be
+du4n
+4dup
+du4pe
+d1v
+d1w
+d2y
+5dyn
+dy4se
+dys5p
+e1a4b
+e3act
+ead1
+ead5ie
+ea4ge
+ea5ger
+ea4l
+eal5er
+eal3ou
+eam3er
+e5and
+ear3a
+ear4c
+ear5es
+ear4ic
+ear4il
+ear5k
+ear2t
+eart3e
+ea5sp
+e3ass
+east3
+ea2t
+eat5en
+eath3i
+e5atif
+e4a3tu
+ea2v
+eav3en
+eav5i
+eav5o
+2e1b
+e4bel.
+e4bels
+e4ben
+e4bit
+e3br
+e4cad
+ecan5c
+ecca5
+e1ce
+ec5essa
+ec2i
+e4cib
+ec5ificat
+ec5ifie
+ec5ify
+ec3im
+eci4t
+e5cite
+e4clam
+e4clus
+e2col
+e4comm
+e4compe
+e4conc
+e2cor
+ec3ora
+eco5ro
+e1cr
+e4crem
+ec4tan
+ec4te
+e1cu
+e4cul
+ec3ula
+2e2da
+4ed3d
+e4d1er
+ede4s
+4edi
+e3dia
+ed3ib
+ed3ica
+ed3im
+ed1it
+edi5z
+4edo
+e4dol
+edon2
+e4dri
+e4dul
+ed5ulo
+ee2c
+eed3i
+ee2f
+eel3i
+ee4ly
+ee2m
+ee4na
+ee4p1
+ee2s4
+eest4
+ee4ty
+e5ex
+e1f
+e4f3ere
+1eff
+e4fic
+5efici
+efil4
+e3fine
+ef5i5nite
+3efit
+efor5es
+e4fuse.
+4egal
+eger4
+eg5ib
+eg4ic
+eg5ing
+e5git5
+eg5n
+e4go.
+e4gos
+eg1ul
+e5gur
+5egy
+e1h4
+eher4
+ei2
+e5ic
+ei5d
+eig2
+ei5gl
+e3imb
+e3inf
+e1ing
+e5inst
+eir4d
+eit3e
+ei3th
+e5ity
+e1j
+e4jud
+ej5udi
+eki4n
+ek4la
+e1la
+e4la.
+e4lac
+elan4d
+el5ativ
+e4law
+elaxa4
+e3lea
+el5ebra
+5elec
+e4led
+el3ega
+e5len
+e4l1er
+e1les
+el2f
+el2i
+e3libe
+e4l5ic.
+el3ica
+e3lier
+el5igib
+e5lim
+e4l3ing
+e3lio
+e2lis
+el5ish
+e3liv3
+4ella
+el4lab
+ello4
+e5loc
+el5og
+el3op.
+el2sh
+el4ta
+e5lud
+el5ug
+e4mac
+e4mag
+e5man
+em5ana
+em5b
+e1me
+e2mel
+e4met
+em3ica
+emi4e
+em5igra
+em1in2
+em5ine
+em3i3ni
+e4mis
+em5ish
+e5miss
+em3iz
+5emniz
+emo4g
+emoni5o
+em3pi
+e4mul
+em5ula
+emu3n
+e3my
+en5amo
+e4nant
+ench4er
+en3dic
+e5nea
+e5nee
+en3em
+en5ero
+en5esi
+en5est
+en3etr
+e3new
+en5ics
+e5nie
+e5nil
+e3nio
+en3ish
+en3it
+e5niu
+5eniz
+4enn
+4eno
+eno4g
+e4nos
+en3ov
+en4sw
+ent5age
+4enthes
+en3ua
+en5uf
+e3ny.
+4en3z
+e5of
+eo2g
+e4oi4
+e3ol
+eop3ar
+e1or
+eo3re
+eo5rol
+eos4
+e4ot
+eo4to
+e5out
+e5ow
+e2pa
+e3pai
+ep5anc
+e5pel
+e3pent
+ep5etitio
+ephe4
+e4pli
+e1po
+e4prec
+ep5reca
+e4pred
+ep3reh
+e3pro
+e4prob
+ep4sh
+ep5ti5b
+e4put
+ep5uta
+e1q
+equi3l
+e4q3ui3s
+er1a
+era4b
+4erand
+er3ar
+4erati.
+2erb
+er4bl
+er3ch
+er4che
+2ere.
+e3real
+ere5co
+ere3in
+er5el.
+er3emo
+er5ena
+er5ence
+4erene
+er3ent
+ere4q
+er5ess
+er3est
+eret4
+er1h
+er1i
+e1ria4
+5erick
+e3rien
+eri4er
+er3ine
+e1rio
+4erit
+er4iu
+eri4v
+e4riva
+er3m4
+er4nis
+4ernit
+5erniz
+er3no
+2ero
+er5ob
+e5roc
+ero4r
+er1ou
+er1s
+er3set
+ert3er
+4ertl
+er3tw
+4eru
+eru4t
+5erwau
+e1s4a
+e4sage.
+e4sages
+es2c
+e2sca
+es5can
+e3scr
+es5cu
+e1s2e
+e2sec
+es5ecr
+es5enc
+e4sert.
+e4serts
+e4serva
+4esh
+e3sha
+esh5en
+e1si
+e2sic
+e2sid
+es5iden
+es5igna
+e2s5im
+es4i4n
+esis4te
+esi4u
+e5skin
+es4mi
+e2sol
+es3olu
+e2son
+es5ona
+e1sp
+es3per
+es5pira
+es4pre
+2ess
+es4si4b
+estan4
+es3tig
+es5tim
+4es2to
+e3ston
+2estr
+e5stro
+estruc5
+e2sur
+es5urr
+es4w
+eta4b
+eten4d
+e3teo
+ethod3
+et1ic
+e5tide
+etin4
+eti4no
+e5tir
+e5titio
+et5itiv
+4etn
+et5ona
+e3tra
+e3tre
+et3ric
+et5rif
+et3rog
+et5ros
+et3ua
+et5ym
+et5z
+4eu
+e5un
+e3up
+eu3ro
+eus4
+eute4
+euti5l
+eu5tr
+eva2p5
+e2vas
+ev5ast
+e5vea
+ev3ell
+evel3o
+e5veng
+even4i
+ev1er
+e5verb
+e1vi
+ev3id
+evi4l
+e4vin
+evi4v
+e5voc
+e5vu
+e1wa
+e4wag
+e5wee
+e3wh
+ewil5
+ew3ing
+e3wit
+1exp
+5eyc
+5eye.
+eys4
+1fa
+fa3bl
+fab3r
+fa4ce
+4fag
+fain4
+fall5e
+4fa4ma
+fam5is
+5far
+far5th
+fa3ta
+fa3the
+4fato
+fault5
+4f5b
+4fd
+4fe.
+feas4
+feath3
+fe4b
+4feca
+5fect
+2fed
+fe3li
+fe4mo
+fen2d
+fend5e
+fer1
+5ferr
+fev4
+4f1f
+f4fes
+f4fie
+f5fin.
+f2f5is
+f4fly
+f2fy
+4fh
+1fi
+fi3a
+2f3ic.
+4f3ical
+f3ican
+4ficate
+f3icen
+fi3cer
+fic4i
+5ficia
+5ficie
+4fics
+fi3cu
+fi5del
+fight5
+fil5i
+fill5in
+4fily
+2fin
+5fina
+fin2d5
+fi2ne
+f1in3g
+fin4n
+fis4ti
+f4l2
+f5less
+flin4
+flo3re
+f2ly5
+4fm
+4fn
+1fo
+5fon
+fon4de
+fon4t
+fo2r
+fo5rat
+for5ay
+fore5t
+for4i
+fort5a
+fos5
+4f5p
+fra4t
+f5rea
+fres5c
+fri2
+fril4
+frol5
+2f3s
+2ft
+f4to
+f2ty
+3fu
+fu5el
+4fug
+fu4min
+fu5ne
+fu3ri
+fusi4
+fus4s
+4futa
+1fy
+1ga
+gaf4
+5gal.
+3gali
+ga3lo
+2gam
+ga5met
+g5amo
+gan5is
+ga3niz
+gani5za
+4gano
+gar5n4
+gass4
+gath3
+4gativ
+4gaz
+g3b
+gd4
+2ge.
+2ged
+geez4
+gel4in
+ge5lis
+ge5liz
+4gely
+1gen
+ge4nat
+ge5niz
+4geno
+4geny
+1geo
+ge3om
+g4ery
+5gesi
+geth5
+4geto
+ge4ty
+ge4v
+4g1g2
+g2ge
+g3ger
+gglu5
+ggo4
+gh3in
+gh5out
+gh4to
+5gi.
+1gi4a
+gia5r
+g1ic
+5gicia
+g4ico
+gien5
+5gies.
+gil4
+g3imen
+3g4in.
+gin5ge
+5g4ins
+5gio
+3gir
+gir4l
+g3isl
+gi4u
+5giv
+3giz
+gl2
+gla4
+glad5i
+5glas
+1gle
+gli4b
+g3lig
+3glo
+glo3r
+g1m
+g4my
+gn4a
+g4na.
+gnet4t
+g1ni
+g2nin
+g4nio
+g1no
+g4non
+1go
+3go.
+gob5
+5goe
+3g4o4g
+go3is
+gon2
+4g3o3na
+gondo5
+go3ni
+5goo
+go5riz
+gor5ou
+5gos.
+gov1
+g3p
+1gr
+4grada
+g4rai
+gran2
+5graph.
+g5rapher
+5graphic
+4graphy
+4gray
+gre4n
+4gress.
+4grit
+g4ro
+gruf4
+gs2
+g5ste
+gth3
+gu4a
+3guard
+2gue
+5gui5t
+3gun
+3gus
+4gu4t
+g3w
+1gy
+2g5y3n
+gy5ra
+h3ab4l
+hach4
+hae4m
+hae4t
+h5agu
+ha3la
+hala3m
+ha4m
+han4ci
+han4cy
+5hand.
+han4g
+hang5er
+hang5o
+h5a5niz
+han4k
+han4te
+hap3l
+hap5t
+ha3ran
+ha5ras
+har2d
+hard3e
+har4le
+harp5en
+har5ter
+has5s
+haun4
+5haz
+haz3a
+h1b
+1head
+3hear
+he4can
+h5ecat
+h4ed
+he5do5
+he3l4i
+hel4lis
+hel4ly
+h5elo
+hem4p
+he2n
+hena4
+hen5at
+heo5r
+hep5
+h4era
+hera3p
+her4ba
+here5a
+h3ern
+h5erou
+h3ery
+h1es
+he2s5p
+he4t
+het4ed
+heu4
+h1f
+h1h
+hi5an
+hi4co
+high5
+h4il2
+himer4
+h4ina
+hion4e
+hi4p
+hir4l
+hi3ro
+hir4p
+hir4r
+his3el
+his4s
+hith5er
+hi2v
+4hk
+4h1l4
+hlan4
+h2lo
+hlo3ri
+4h1m
+hmet4
+2h1n
+h5odiz
+h5ods
+ho4g
+hoge4
+hol5ar
+3hol4e
+ho4ma
+home3
+hon4a
+ho5ny
+3hood
+hoon4
+hor5at
+ho5ris
+hort3e
+ho5ru
+hos4e
+ho5sen
+hos1p
+1hous
+house3
+hov5el
+4h5p
+4hr4
+hree5
+hro5niz
+hro3po
+4h1s2
+h4sh
+h4tar
+ht1en
+ht5es
+h4ty
+hu4g
+hu4min
+hun5ke
+hun4t
+hus3t4
+hu4t
+h1w
+h4wart
+hy3pe
+hy3ph
+hy2s
+2i1a
+i2al
+iam4
+iam5ete
+i2an
+4ianc
+ian3i
+4ian4t
+ia5pe
+iass4
+i4ativ
+ia4tric
+i4atu
+ibe4
+ib3era
+ib5ert
+ib5ia
+ib3in
+ib5it.
+ib5ite
+i1bl
+ib3li
+i5bo
+i1br
+i2b5ri
+i5bun
+4icam
+5icap
+4icar
+i4car.
+i4cara
+icas5
+i4cay
+iccu4
+4iceo
+4ich
+2ici
+i5cid
+ic5ina
+i2cip
+ic3ipa
+i4cly
+i2c5oc
+4i1cr
+5icra
+i4cry
+ic4te
+ictu2
+ic4t3ua
+ic3ula
+ic4um
+ic5uo
+i3cur
+2id
+i4dai
+id5anc
+id5d
+ide3al
+ide4s
+i2di
+id5ian
+idi4ar
+i5die
+id3io
+idi5ou
+id1it
+id5iu
+i3dle
+i4dom
+id3ow
+i4dr
+i2du
+id5uo
+2ie4
+ied4e
+5ie5ga
+ield3
+ien5a4
+ien4e
+i5enn
+i3enti
+i1er.
+i3esc
+i1est
+i3et
+4if.
+if5ero
+iff5en
+if4fr
+4ific.
+i3fie
+i3fl
+4ift
+2ig
+iga5b
+ig3era
+ight3i
+4igi
+i3gib
+ig3il
+ig3in
+ig3it
+i4g4l
+i2go
+ig3or
+ig5ot
+i5gre
+igu5i
+ig1ur
+i3h
+4i5i4
+i3j
+4ik
+i1la
+il3a4b
+i4lade
+i2l5am
+ila5ra
+i3leg
+il1er
+ilev4
+il5f
+il1i
+il3ia
+il2ib
+il3io
+il4ist
+2ilit
+il2iz
+ill5ab
+4iln
+il3oq
+il4ty
+il5ur
+il3v
+i4mag
+im3age
+ima5ry
+imenta5r
+4imet
+im1i
+im5ida
+imi5le
+i5mini
+4imit
+im4ni
+i3mon
+i2mu
+im3ula
+2in.
+i4n3au
+4inav
+incel4
+in3cer
+4ind
+in5dling
+2ine
+i3nee
+iner4ar
+i5ness
+4inga
+4inge
+in5gen
+4ingi
+in5gling
+4ingo
+4ingu
+2ini
+i5ni.
+i4nia
+in3io
+in1is
+i5nite.
+5initio
+in3ity
+4ink
+4inl
+2inn
+2i1no
+i4no4c
+ino4s
+i4not
+2ins
+in3se
+insur5a
+2int.
+2in4th
+in1u
+i5nus
+4iny
+2io
+4io.
+ioge4
+io2gr
+i1ol
+io4m
+ion3at
+ion4ery
+ion3i
+io5ph
+ior3i
+i4os
+io5th
+i5oti
+io4to
+i4our
+2ip
+ipe4
+iphras4
+ip3i
+ip4ic
+ip4re4
+ip3ul
+i3qua
+iq5uef
+iq3uid
+iq3ui3t
+4ir
+i1ra
+ira4b
+i4rac
+ird5e
+ire4de
+i4ref
+i4rel4
+i4res
+ir5gi
+ir1i
+iri5de
+ir4is
+iri3tu
+5i5r2iz
+ir4min
+iro4g
+5iron.
+ir5ul
+2is.
+is5ag
+is3ar
+isas5
+2is1c
+is3ch
+4ise
+is3er
+3isf
+is5han
+is3hon
+ish5op
+is3ib
+isi4d
+i5sis
+is5itiv
+4is4k
+islan4
+4isms
+i2so
+iso5mer
+is1p
+is2pi
+is4py
+4is1s
+is4sal
+issen4
+is4ses
+is4ta.
+is1te
+is1ti
+ist4ly
+4istral
+i2su
+is5us
+4ita.
+ita4bi
+i4tag
+4ita5m
+i3tan
+i3tat
+2ite
+it3era
+i5teri
+it4es
+2ith
+i1ti
+4itia
+4i2tic
+it3ica
+5i5tick
+it3ig
+it5ill
+i2tim
+2itio
+4itis
+i4tism
+i2t5o5m
+4iton
+i4tram
+it5ry
+4itt
+it3uat
+i5tud
+it3ul
+4itz.
+i1u
+2iv
+iv3ell
+iv3en.
+i4v3er.
+i4vers.
+iv5il.
+iv5io
+iv1it
+i5vore
+iv3o3ro
+i4v3ot
+4i5w
+ix4o
+4iy
+4izar
+izi4
+5izont
+5ja
+jac4q
+ja4p
+1je
+jer5s
+4jestie
+4jesty
+jew3
+jo4p
+5judg
+3ka.
+k3ab
+k5ag
+kais4
+kal4
+k1b
+k2ed
+1kee
+ke4g
+ke5li
+k3en4d
+k1er
+kes4
+k3est.
+ke4ty
+k3f
+kh4
+k1i
+5ki.
+5k2ic
+k4ill
+kilo5
+k4im
+k4in.
+kin4de
+k5iness
+kin4g
+ki4p
+kis4
+k5ish
+kk4
+k1l
+4kley
+4kly
+k1m
+k5nes
+1k2no
+ko5r
+kosh4
+k3ou
+kro5n
+4k1s2
+k4sc
+ks4l
+k4sy
+k5t
+k1w
+lab3ic
+l4abo
+laci4
+l4ade
+la3dy
+lag4n
+lam3o
+3land
+lan4dl
+lan5et
+lan4te
+lar4g
+lar3i
+las4e
+la5tan
+4lateli
+4lativ
+4lav
+la4v4a
+2l1b
+lbin4
+4l1c2
+lce4
+l3ci
+2ld
+l2de
+ld4ere
+ld4eri
+ldi4
+ld5is
+l3dr
+l4dri
+le2a
+le4bi
+left5
+5leg.
+5legg
+le4mat
+lem5atic
+4len.
+3lenc
+5lene.
+1lent
+le3ph
+le4pr
+lera5b
+ler4e
+3lerg
+3l4eri
+l4ero
+les2
+le5sco
+5lesq
+3less
+5less.
+l3eva
+lev4er.
+lev4era
+lev4ers
+3ley
+4leye
+2lf
+l5fr
+4l1g4
+l5ga
+lgar3
+l4ges
+lgo3
+2l3h
+li4ag
+li2am
+liar5iz
+li4as
+li4ato
+li5bi
+5licio
+li4cor
+4lics
+4lict.
+l4icu
+l3icy
+l3ida
+lid5er
+3lidi
+lif3er
+l4iff
+li4fl
+5ligate
+3ligh
+li4gra
+3lik
+4l4i4l
+lim4bl
+lim3i
+li4mo
+l4im4p
+l4ina
+1l4ine
+lin3ea
+lin3i
+link5er
+li5og
+4l4iq
+lis4p
+l1it
+l2it.
+5litica
+l5i5tics
+liv3er
+l1iz
+4lj
+lka3
+l3kal
+lka4t
+l1l
+l4law
+l2le
+l5lea
+l3lec
+l3leg
+l3lel
+l3le4n
+l3le4t
+ll2i
+l2lin4
+l5lina
+ll4o
+lloqui5
+ll5out
+l5low
+2lm
+l5met
+lm3ing
+l4mod
+lmon4
+2l1n2
+3lo.
+lob5al
+lo4ci
+4lof
+3logic
+l5ogo
+3logu
+lom3er
+5long
+lon4i
+l3o3niz
+lood5
+5lope.
+lop3i
+l3opm
+lora4
+lo4rato
+lo5rie
+lor5ou
+5los.
+los5et
+5losophiz
+5losophy
+los4t
+lo4ta
+loun5d
+2lout
+4lov
+2lp
+lpa5b
+l3pha
+l5phi
+lp5ing
+l3pit
+l4pl
+l5pr
+4l1r
+2l1s2
+l4sc
+l2se
+l4sie
+4lt
+lt5ag
+ltane5
+l1te
+lten4
+ltera4
+lth3i
+l5ties.
+ltis4
+l1tr
+ltu2
+ltur3a
+lu5a
+lu3br
+luch4
+lu3ci
+lu3en
+luf4
+lu5id
+lu4ma
+5lumi
+l5umn.
+5lumnia
+lu3o
+luo3r
+4lup
+luss4
+lus3te
+1lut
+l5ven
+l5vet4
+2l1w
+1ly
+4lya
+4lyb
+ly5me
+ly3no
+2lys4
+l5yse
+1ma
+2mab
+ma2ca
+ma5chine
+ma4cl
+mag5in
+5magn
+2mah
+maid5
+4mald
+ma3lig
+ma5lin
+mal4li
+mal4ty
+5mania
+man5is
+man3iz
+4map
+ma5rine.
+ma5riz
+mar4ly
+mar3v
+ma5sce
+mas4e
+mas1t
+5mate
+math3
+ma3tis
+4matiza
+4m1b
+mba4t5
+m5bil
+m4b3ing
+mbi4v
+4m5c
+4me.
+2med
+4med.
+5media
+me3die
+m5e5dy
+me2g
+mel5on
+mel4t
+me2m
+mem1o3
+1men
+men4a
+men5ac
+men4de
+4mene
+men4i
+mens4
+mensu5
+3ment
+men4te
+me5on
+m5ersa
+2mes
+3mesti
+me4ta
+met3al
+me1te
+me5thi
+m4etr
+5metric
+me5trie
+me3try
+me4v
+4m1f
+2mh
+5mi.
+mi3a
+mid4a
+mid4g
+mig4
+3milia
+m5i5lie
+m4ill
+min4a
+3mind
+m5inee
+m4ingl
+min5gli
+m5ingly
+min4t
+m4inu
+miot4
+m2is
+mis4er.
+mis5l
+mis4ti
+m5istry
+4mith
+m2iz
+4mk
+4m1l
+m1m
+mma5ry
+4m1n
+mn4a
+m4nin
+mn4o
+1mo
+4mocr
+5mocratiz
+mo2d1
+mo4go
+mois2
+moi5se
+4mok
+mo5lest
+mo3me
+mon5et
+mon5ge
+moni3a
+mon4ism
+mon4ist
+mo3niz
+monol4
+mo3ny.
+mo2r
+4mora.
+mos2
+mo5sey
+mo3sp
+moth3
+m5ouf
+3mous
+mo2v
+4m1p
+mpara5
+mpa5rab
+mpar5i
+m3pet
+mphas4
+m2pi
+mpi4a
+mp5ies
+m4p1in
+m5pir
+mp5is
+mpo3ri
+mpos5ite
+m4pous
+mpov5
+mp4tr
+m2py
+4m3r
+4m1s2
+m4sh
+m5si
+4mt
+1mu
+mula5r4
+5mult
+multi3
+3mum
+mun2
+4mup
+mu4u
+4mw
+1na
+2n1a2b
+n4abu
+4nac.
+na4ca
+n5act
+nag5er.
+nak4
+na4li
+na5lia
+4nalt
+na5mit
+n2an
+nanci4
+nan4it
+nank4
+nar3c
+4nare
+nar3i
+nar4l
+n5arm
+n4as
+nas4c
+nas5ti
+n2at
+na3tal
+nato5miz
+n2au
+nau3se
+3naut
+nav4e
+4n1b4
+ncar5
+n4ces.
+n3cha
+n5cheo
+n5chil
+n3chis
+nc1in
+nc4it
+ncour5a
+n1cr
+n1cu
+n4dai
+n5dan
+n1de
+nd5est.
+ndi4b
+n5d2if
+n1dit
+n3diz
+n5duc
+ndu4r
+nd2we
+2ne.
+n3ear
+ne2b
+neb3u
+ne2c
+5neck
+2ned
+ne4gat
+neg5ativ
+5nege
+ne4la
+nel5iz
+ne5mi
+ne4mo
+1nen
+4nene
+3neo
+ne4po
+ne2q
+n1er
+nera5b
+n4erar
+n2ere
+n4er5i
+ner4r
+1nes
+2nes.
+4nesp
+2nest
+4nesw
+3netic
+ne4v
+n5eve
+ne4w
+n3f
+n4gab
+n3gel
+nge4n4e
+n5gere
+n3geri
+ng5ha
+n3gib
+ng1in
+n5git
+n4gla
+ngov4
+ng5sh
+n1gu
+n4gum
+n2gy
+4n1h4
+nha4
+nhab3
+nhe4
+3n4ia
+ni3an
+ni4ap
+ni3ba
+ni4bl
+ni4d
+ni5di
+ni4er
+ni2fi
+ni5ficat
+n5igr
+nik4
+n1im
+ni3miz
+n1in
+5nine.
+nin4g
+ni4o
+5nis.
+nis4ta
+n2it
+n4ith
+3nitio
+n3itor
+ni3tr
+n1j
+4nk2
+n5kero
+n3ket
+nk3in
+n1kl
+4n1l
+n5m
+nme4
+nmet4
+4n1n2
+nne4
+nni3al
+nni4v
+nob4l
+no3ble
+n5ocl
+4n3o2d
+3noe
+4nog
+noge4
+nois5i
+no5l4i
+5nologis
+3nomic
+n5o5miz
+no4mo
+no3my
+no4n
+non4ag
+non5i
+n5oniz
+4nop
+5nop5o5li
+nor5ab
+no4rary
+4nosc
+nos4e
+nos5t
+no5ta
+1nou
+3noun
+nov3el3
+nowl3
+n1p4
+npi4
+npre4c
+n1q
+n1r
+nru4
+2n1s2
+ns5ab
+nsati4
+ns4c
+n2se
+n4s3es
+nsid1
+nsig4
+n2sl
+ns3m
+n4soc
+ns4pe
+n5spi
+nsta5bl
+n1t
+nta4b
+nter3s
+nt2i
+n5tib
+nti4er
+nti2f
+n3tine
+n4t3ing
+nti4p
+ntrol5li
+nt4s
+ntu3me
+nu1a
+nu4d
+nu5en
+nuf4fe
+n3uin
+3nu3it
+n4um
+nu1me
+n5umi
+3nu4n
+n3uo
+nu3tr
+n1v2
+n1w4
+nym4
+nyp4
+4nz
+n3za
+4oa
+oad3
+o5a5les
+oard3
+oas4e
+oast5e
+oat5i
+ob3a3b
+o5bar
+obe4l
+o1bi
+o2bin
+ob5ing
+o3br
+ob3ul
+o1ce
+och4
+o3chet
+ocif3
+o4cil
+o4clam
+o4cod
+oc3rac
+oc5ratiz
+ocre3
+5ocrit
+octor5a
+oc3ula
+o5cure
+od5ded
+od3ic
+odi3o
+o2do4
+odor3
+od5uct.
+od5ucts
+o4el
+o5eng
+o3er
+oe4ta
+o3ev
+o2fi
+of5ite
+ofit4t
+o2g5a5r
+og5ativ
+o4gato
+o1ge
+o5gene
+o5geo
+o4ger
+o3gie
+1o1gis
+og3it
+o4gl
+o5g2ly
+3ogniz
+o4gro
+ogu5i
+1ogy
+2ogyn
+o1h2
+ohab5
+oi2
+oic3es
+oi3der
+oiff4
+oig4
+oi5let
+o3ing
+oint5er
+o5ism
+oi5son
+oist5en
+oi3ter
+o5j
+2ok
+o3ken
+ok5ie
+o1la
+o4lan
+olass4
+ol2d
+old1e
+ol3er
+o3lesc
+o3let
+ol4fi
+ol2i
+o3lia
+o3lice
+ol5id.
+o3li4f
+o5lil
+ol3ing
+o5lio
+o5lis.
+ol3ish
+o5lite
+o5litio
+o5liv
+olli4e
+ol5ogiz
+olo4r
+ol5pl
+ol2t
+ol3ub
+ol3ume
+ol3un
+o5lus
+ol2v
+o2ly
+om5ah
+oma5l
+om5atiz
+om2be
+om4bl
+o2me
+om3ena
+om5erse
+o4met
+om5etry
+o3mia
+om3ic.
+om3ica
+o5mid
+om1in
+o5mini
+5ommend
+omo4ge
+o4mon
+om3pi
+ompro5
+o2n
+on1a
+on4ac
+o3nan
+on1c
+3oncil
+2ond
+on5do
+o3nen
+on5est
+on4gu
+on1ic
+o3nio
+on1is
+o5niu
+on3key
+on4odi
+on3omy
+on3s
+onspi4
+onspir5a
+onsu4
+onten4
+on3t4i
+ontif5
+on5um
+onva5
+oo2
+ood5e
+ood5i
+oo4k
+oop3i
+o3ord
+oost5
+o2pa
+ope5d
+op1er
+3opera
+4operag
+2oph
+o5phan
+o5pher
+op3ing
+o3pit
+o5pon
+o4posi
+o1pr
+op1u
+opy5
+o1q
+o1ra
+o5ra.
+o4r3ag
+or5aliz
+or5ange
+ore5a
+o5real
+or3ei
+ore5sh
+or5est.
+orew4
+or4gu
+4o5ria
+or3ica
+o5ril
+or1in
+o1rio
+or3ity
+o3riu
+or2mi
+orn2e
+o5rof
+or3oug
+or5pe
+3orrh
+or4se
+ors5en
+orst4
+or3thi
+or3thy
+or4ty
+o5rum
+o1ry
+os3al
+os2c
+os4ce
+o3scop
+4oscopi
+o5scr
+os4i4e
+os5itiv
+os3ito
+os3ity
+osi4u
+os4l
+o2so
+os4pa
+os4po
+os2ta
+o5stati
+os5til
+os5tit
+o4tan
+otele4g
+ot3er.
+ot5ers
+o4tes
+4oth
+oth5esi
+oth3i4
+ot3ic.
+ot5ica
+o3tice
+o3tif
+o3tis
+oto5s
+ou2
+ou3bl
+ouch5i
+ou5et
+ou4l
+ounc5er
+oun2d
+ou5v
+ov4en
+over4ne
+over3s
+ov4ert
+o3vis
+oviti4
+o5v4ol
+ow3der
+ow3el
+ow5est
+ow1i
+own5i
+o4wo
+oy1a
+1pa
+pa4ca
+pa4ce
+pac4t
+p4ad
+5pagan
+p3agat
+p4ai
+pain4
+p4al
+pan4a
+pan3el
+pan4ty
+pa3ny
+pa1p
+pa4pu
+para5bl
+par5age
+par5di
+3pare
+par5el
+p4a4ri
+par4is
+pa2te
+pa5ter
+5pathic
+pa5thy
+pa4tric
+pav4
+3pay
+4p1b
+pd4
+4pe.
+3pe4a
+pear4l
+pe2c
+2p2ed
+3pede
+3pedi
+pedia4
+ped4ic
+p4ee
+pee4d
+pek4
+pe4la
+peli4e
+pe4nan
+p4enc
+pen4th
+pe5on
+p4era.
+pera5bl
+p4erag
+p4eri
+peri5st
+per4mal
+perme5
+p4ern
+per3o
+per3ti
+pe5ru
+per1v
+pe2t
+pe5ten
+pe5tiz
+4pf
+4pg
+4ph.
+phar5i
+phe3no
+ph4er
+ph4es.
+ph1ic
+5phie
+ph5ing
+5phisti
+3phiz
+ph2l
+3phob
+3phone
+5phoni
+pho4r
+4phs
+ph3t
+5phu
+1phy
+pi3a
+pian4
+pi4cie
+pi4cy
+p4id
+p5ida
+pi3de
+5pidi
+3piec
+pi3en
+pi4grap
+pi3lo
+pi2n
+p4in.
+pind4
+p4ino
+3pi1o
+pion4
+p3ith
+pi5tha
+pi2tu
+2p3k2
+1p2l2
+3plan
+plas5t
+pli3a
+pli5er
+4plig
+pli4n
+ploi4
+plu4m
+plum4b
+4p1m
+2p3n
+po4c
+5pod.
+po5em
+po3et5
+5po4g
+poin2
+5point
+poly5t
+po4ni
+po4p
+1p4or
+po4ry
+1pos
+pos1s
+p4ot
+po4ta
+5poun
+4p1p
+ppa5ra
+p2pe
+p4ped
+p5pel
+p3pen
+p3per
+p3pet
+ppo5site
+pr2
+pray4e
+5preci
+pre5co
+pre3em
+pref5ac
+pre4la
+pre3r
+p3rese
+3press
+pre5ten
+pre3v
+5pri4e
+prin4t3
+pri4s
+pris3o
+p3roca
+prof5it
+pro3l
+pros3e
+pro1t
+2p1s2
+p2se
+ps4h
+p4sib
+2p1t
+pt5a4b
+p2te
+p2th
+pti3m
+ptu4r
+p4tw
+pub3
+pue4
+puf4
+pul3c
+pu4m
+pu2n
+pur4r
+5pus
+pu2t
+5pute
+put3er
+pu3tr
+put4ted
+put4tin
+p3w
+qu2
+qua5v
+2que.
+3quer
+3quet
+2rab
+ra3bi
+rach4e
+r5acl
+raf5fi
+raf4t
+r2ai
+ra4lo
+ram3et
+r2ami
+rane5o
+ran4ge
+r4ani
+ra5no
+rap3er
+3raphy
+rar5c
+rare4
+rar5ef
+4raril
+r2as
+ration4
+rau4t
+ra5vai
+rav3el
+ra5zie
+r1b
+r4bab
+r4bag
+rbi2
+rbi4f
+r2bin
+r5bine
+rb5ing.
+rb4o
+r1c
+r2ce
+rcen4
+r3cha
+rch4er
+r4ci4b
+rc4it
+rcum3
+r4dal
+rd2i
+rdi4a
+rdi4er
+rdin4
+rd3ing
+2re.
+re1al
+re3an
+re5arr
+5reav
+re4aw
+r5ebrat
+rec5oll
+rec5ompe
+re4cre
+2r2ed
+re1de
+re3dis
+red5it
+re4fac
+re2fe
+re5fer.
+re3fi
+re4fy
+reg3is
+re5it
+re1li
+re5lu
+r4en4ta
+ren4te
+re1o
+re5pin
+re4posi
+re1pu
+r1er4
+r4eri
+rero4
+re5ru
+r4es.
+re4spi
+ress5ib
+res2t
+re5stal
+re3str
+re4ter
+re4ti4z
+re3tri
+reu2
+re5uti
+rev2
+re4val
+rev3el
+r5ev5er.
+re5vers
+re5vert
+re5vil
+rev5olu
+re4wh
+r1f
+rfu4
+r4fy
+rg2
+rg3er
+r3get
+r3gic
+rgi4n
+rg3ing
+r5gis
+r5git
+r1gl
+rgo4n
+r3gu
+rh4
+4rh.
+4rhal
+ri3a
+ria4b
+ri4ag
+r4ib
+rib3a
+ric5as
+r4ice
+4rici
+5ricid
+ri4cie
+r4ico
+rid5er
+ri3enc
+ri3ent
+ri1er
+ri5et
+rig5an
+5rigi
+ril3iz
+5riman
+rim5i
+3rimo
+rim4pe
+r2ina
+5rina.
+rin4d
+rin4e
+rin4g
+ri1o
+5riph
+riph5e
+ri2pl
+rip5lic
+r4iq
+r2is
+r4is.
+ris4c
+r3ish
+ris4p
+ri3ta3b
+r5ited.
+rit5er.
+rit5ers
+rit3ic
+ri2tu
+rit5ur
+riv5el
+riv3et
+riv3i
+r3j
+r3ket
+rk4le
+rk4lin
+r1l
+rle4
+r2led
+r4lig
+r4lis
+rl5ish
+r3lo4
+r1m
+rma5c
+r2me
+r3men
+rm5ers
+rm3ing
+r4ming.
+r4mio
+r3mit
+r4my
+r4nar
+r3nel
+r4ner
+r5net
+r3ney
+r5nic
+r1nis4
+r3nit
+r3niv
+rno4
+r4nou
+r3nu
+rob3l
+r2oc
+ro3cr
+ro4e
+ro1fe
+ro5fil
+rok2
+ro5ker
+5role.
+rom5ete
+rom4i
+rom4p
+ron4al
+ron4e
+ro5n4is
+ron4ta
+1room
+5root
+ro3pel
+rop3ic
+ror3i
+ro5ro
+ros5per
+ros4s
+ro4the
+ro4ty
+ro4va
+rov5el
+rox5
+r1p
+r4pea
+r5pent
+rp5er.
+r3pet
+rp4h4
+rp3ing
+r3po
+r1r4
+rre4c
+rre4f
+r4reo
+rre4st
+rri4o
+rri4v
+rron4
+rros4
+rrys4
+4rs2
+r1sa
+rsa5ti
+rs4c
+r2se
+r3sec
+rse4cr
+rs5er.
+rs3es
+rse5v2
+r1sh
+r5sha
+r1si
+r4si4b
+rson3
+r1sp
+r5sw
+rtach4
+r4tag
+r3teb
+rten4d
+rte5o
+r1ti
+rt5ib
+rti4d
+r4tier
+r3tig
+rtil3i
+rtil4l
+r4tily
+r4tist
+r4tiv
+r3tri
+rtroph4
+rt4sh
+ru3a
+ru3e4l
+ru3en
+ru4gl
+ru3in
+rum3pl
+ru2n
+runk5
+run4ty
+r5usc
+ruti5n
+rv4e
+rvel4i
+r3ven
+rv5er.
+r5vest
+r3vey
+r3vic
+rvi4v
+r3vo
+r1w
+ry4c
+5rynge
+ry3t
+sa2
+2s1ab
+5sack
+sac3ri
+s3act
+5sai
+salar4
+sal4m
+sa5lo
+sal4t
+3sanc
+san4de
+s1ap
+sa5ta
+5sa3tio
+sat3u
+sau4
+sa5vor
+5saw
+4s5b
+scan4t5
+sca4p
+scav5
+s4ced
+4scei
+s4ces
+sch2
+s4cho
+3s4cie
+5scin4d
+scle5
+s4cli
+scof4
+4scopy
+scour5a
+s1cu
+4s5d
+4se.
+se4a
+seas4
+sea5w
+se2c3o
+3sect
+4s4ed
+se4d4e
+s5edl
+se2g
+seg3r
+5sei
+se1le
+5self
+5selv
+4seme
+se4mol
+sen5at
+4senc
+sen4d
+s5ened
+sen5g
+s5enin
+4sentd
+4sentl
+sep3a3
+4s1er.
+s4erl
+ser4o
+4servo
+s1e4s
+se5sh
+ses5t
+5se5um
+5sev
+sev3en
+sew4i
+5sex
+4s3f
+2s3g
+s2h
+2sh.
+sh1er
+5shev
+sh1in
+sh3io
+3ship
+shiv5
+sho4
+sh5old
+shon3
+shor4
+short5
+4shw
+si1b
+s5icc
+3side.
+5sides
+5sidi
+si5diz
+4signa
+sil4e
+4sily
+2s1in
+s2ina
+5sine.
+s3ing
+1sio
+5sion
+sion5a
+si2r
+sir5a
+1sis
+3sitio
+5siu
+1siv
+5siz
+sk2
+4ske
+s3ket
+sk5ine
+sk5ing
+s1l2
+s3lat
+s2le
+slith5
+2s1m
+s3ma
+small3
+sman3
+smel4
+s5men
+5smith
+smol5d4
+s1n4
+1so
+so4ce
+soft3
+so4lab
+sol3d2
+so3lic
+5solv
+3som
+3s4on.
+sona4
+son4g
+s4op
+5sophic
+s5ophiz
+s5ophy
+sor5c
+sor5d
+4sov
+so5vi
+2spa
+5spai
+spa4n
+spen4d
+2s5peo
+2sper
+s2phe
+3spher
+spho5
+spil4
+sp5ing
+4spio
+s4ply
+s4pon
+spor4
+4spot
+squal4l
+s1r
+2ss
+s1sa
+ssas3
+s2s5c
+s3sel
+s5seng
+s4ses.
+s5set
+s1si
+s4sie
+ssi4er
+ss5ily
+s4sl
+ss4li
+s4sn
+sspend4
+ss2t
+ssur5a
+ss5w
+2st.
+s2tag
+s2tal
+stam4i
+5stand
+s4ta4p
+5stat.
+s4ted
+stern5i
+s5tero
+ste2w
+stew5a
+s3the
+st2i
+s4ti.
+s5tia
+s1tic
+5stick
+s4tie
+s3tif
+st3ing
+5stir
+s1tle
+5stock
+stom3a
+5stone
+s4top
+3store
+st4r
+s4trad
+5stratu
+s4tray
+s4trid
+4stry
+4st3w
+s2ty
+1su
+su1al
+su4b3
+su2g3
+su5is
+suit3
+s4ul
+su2m
+sum3i
+su2n
+su2r
+4sv
+sw2
+4swo
+s4y
+4syc
+3syl
+syn5o
+sy5rin
+1ta
+3ta.
+2tab
+ta5bles
+5taboliz
+4taci
+ta5do
+4taf4
+tai5lo
+ta2l
+ta5la
+tal5en
+tal3i
+4talk
+tal4lis
+ta5log
+ta5mo
+tan4de
+tanta3
+ta5per
+ta5pl
+tar4a
+4tarc
+4tare
+ta3riz
+tas4e
+ta5sy
+4tatic
+ta4tur
+taun4
+tav4
+2taw
+tax4is
+2t1b
+4tc
+t4ch
+tch5et
+4t1d
+4te.
+tead4i
+4teat
+tece4
+5tect
+2t1ed
+te5di
+1tee
+teg4
+te5ger
+te5gi
+3tel.
+teli4
+5tels
+te2ma2
+tem3at
+3tenan
+3tenc
+3tend
+4tenes
+1tent
+ten4tag
+1teo
+te4p
+te5pe
+ter3c
+5ter3d
+1teri
+ter5ies
+ter3is
+teri5za
+5ternit
+ter5v
+4tes.
+4tess
+t3ess.
+teth5e
+3teu
+3tex
+4tey
+2t1f
+4t1g
+2th.
+than4
+th2e
+4thea
+th3eas
+the5at
+the3is
+3thet
+th5ic.
+th5ica
+4thil
+5think
+4thl
+th5ode
+5thodic
+4thoo
+thor5it
+tho5riz
+2ths
+1tia
+ti4ab
+ti4ato
+2ti2b
+4tick
+t4ico
+t4ic1u
+5tidi
+3tien
+tif2
+ti5fy
+2tig
+5tigu
+till5in
+1tim
+4timp
+tim5ul
+2t1in
+t2ina
+3tine.
+3tini
+1tio
+ti5oc
+tion5ee
+5tiq
+ti3sa
+3tise
+tis4m
+ti5so
+tis4p
+5tistica
+ti3tl
+ti4u
+1tiv
+tiv4a
+1tiz
+ti3za
+ti3zen
+2tl
+t5la
+tlan4
+3tle.
+3tled
+3tles.
+t5let.
+t5lo
+4t1m
+tme4
+2t1n2
+1to
+to3b
+to5crat
+4todo
+2tof
+to2gr
+to5ic
+to2ma
+tom4b
+to3my
+ton4ali
+to3nat
+4tono
+4tony
+to2ra
+to3rie
+tor5iz
+tos2
+5tour
+4tout
+to3war
+4t1p
+1tra
+tra3b
+tra5ch
+traci4
+trac4it
+trac4te
+tras4
+tra5ven
+trav5es5
+tre5f
+tre4m
+trem5i
+5tria
+tri5ces
+5tricia
+4trics
+2trim
+tri4v
+tro5mi
+tron5i
+4trony
+tro5phe
+tro3sp
+tro3v
+tru5i
+trus4
+4t1s2
+t4sc
+tsh4
+t4sw
+4t3t2
+t4tes
+t5to
+ttu4
+1tu
+tu1a
+tu3ar
+tu4bi
+tud2
+4tue
+4tuf4
+5tu3i
+3tum
+tu4nis
+2t3up.
+3ture
+5turi
+tur3is
+tur5o
+tu5ry
+3tus
+4tv
+tw4
+4t1wa
+twis4
+4two
+1ty
+4tya
+2tyl
+type3
+ty5ph
+4tz
+tz4e
+4uab
+uac4
+ua5na
+uan4i
+uar5ant
+uar2d
+uar3i
+uar3t
+u1at
+uav4
+ub4e
+u4bel
+u3ber
+u4bero
+u1b4i
+u4b5ing
+u3ble.
+u3ca
+uci4b
+uc4it
+ucle3
+u3cr
+u3cu
+u4cy
+ud5d
+ud3er
+ud5est
+udev4
+u1dic
+ud3ied
+ud3ies
+ud5is
+u5dit
+u4don
+ud4si
+u4du
+u4ene
+uens4
+uen4te
+uer4il
+3ufa
+u3fl
+ugh3en
+ug5in
+2ui2
+uil5iz
+ui4n
+u1ing
+uir4m
+uita4
+uiv3
+uiv4er.
+u5j
+4uk
+u1la
+ula5b
+u5lati
+ulch4
+5ulche
+ul3der
+ul4e
+u1len
+ul4gi
+ul2i
+u5lia
+ul3ing
+ul5ish
+ul4lar
+ul4li4b
+ul4lis
+4ul3m
+u1l4o
+4uls
+uls5es
+ul1ti
+ultra3
+4ultu
+u3lu
+ul5ul
+ul5v
+um5ab
+um4bi
+um4bly
+u1mi
+u4m3ing
+umor5o
+um2p
+unat4
+u2ne
+un4er
+u1ni
+un4im
+u2nin
+un5ish
+uni3v
+un3s4
+un4sw
+unt3ab
+un4ter.
+un4tes
+unu4
+un5y
+un5z
+u4ors
+u5os
+u1ou
+u1pe
+uper5s
+u5pia
+up3ing
+u3pl
+up3p
+upport5
+upt5ib
+uptu4
+u1ra
+4ura.
+u4rag
+u4ras
+ur4be
+urc4
+ur1d
+ure5at
+ur4fer
+ur4fr
+u3rif
+uri4fic
+ur1in
+u3rio
+u1rit
+ur3iz
+ur2l
+url5ing.
+ur4no
+uros4
+ur4pe
+ur4pi
+urs5er
+ur5tes
+ur3the
+urti4
+ur4tie
+u3ru
+2us
+u5sad
+u5san
+us4ap
+usc2
+us3ci
+use5a
+u5sia
+u3sic
+us4lin
+us1p
+us5sl
+us5tere
+us1tr
+u2su
+usur4
+uta4b
+u3tat
+4ute.
+4utel
+4uten
+uten4i
+4u1t2i
+uti5liz
+u3tine
+ut3ing
+ution5a
+u4tis
+5u5tiz
+u4t1l
+ut5of
+uto5g
+uto5matic
+u5ton
+u4tou
+uts4
+u3u
+uu4m
+u1v2
+uxu3
+uz4e
+1va
+5va.
+2v1a4b
+vac5il
+vac3u
+vag4
+va4ge
+va5lie
+val5o
+val1u
+va5mo
+va5niz
+va5pi
+var5ied
+3vat
+4ve.
+4ved
+veg3
+v3el.
+vel3li
+ve4lo
+v4ely
+ven3om
+v5enue
+v4erd
+5vere.
+v4erel
+v3eren
+ver5enc
+v4eres
+ver3ie
+vermi4n
+3verse
+ver3th
+v4e2s
+4ves.
+ves4te
+ve4te
+vet3er
+ve4ty
+vi5ali
+5vian
+5vide.
+5vided
+4v3iden
+5vides
+5vidi
+v3if
+vi5gn
+vik4
+2vil
+5vilit
+v3i3liz
+v1in
+4vi4na
+v2inc
+vin5d
+4ving
+vio3l
+v3io4r
+vi1ou
+vi4p
+vi5ro
+vis3it
+vi3so
+vi3su
+4viti
+vit3r
+4vity
+3viv
+5vo.
+voi4
+3vok
+vo4la
+v5ole
+5volt
+3volv
+vom5i
+vor5ab
+vori4
+vo4ry
+vo4ta
+4votee
+4vv4
+v4y
+w5abl
+2wac
+wa5ger
+wag5o
+wait5
+w5al.
+wam4
+war4t
+was4t
+wa1te
+wa5ver
+w1b
+wea5rie
+weath3
+wed4n
+weet3
+wee5v
+wel4l
+w1er
+west3
+w3ev
+whi4
+wi2
+wil2
+will5in
+win4de
+win4g
+wir4
+3wise
+with3
+wiz5
+w4k
+wl4es
+wl3in
+w4no
+1wo2
+wom1
+wo5ven
+w5p
+wra4
+wri4
+writa4
+w3sh
+ws4l
+ws4pe
+w5s4t
+4wt
+wy4
+x1a
+xac5e
+x4ago
+xam3
+x4ap
+xas5
+x3c2
+x1e
+xe4cuto
+x2ed
+xer4i
+xe5ro
+x1h
+xhi2
+xhil5
+xhu4
+x3i
+xi5a
+xi5c
+xi5di
+x4ime
+xi5miz
+x3o
+x4ob
+x3p
+xpan4d
+xpecto5
+xpe3d
+x1t2
+x3ti
+x1u
+xu3a
+xx4
+y5ac
+3yar4
+y5at
+y1b
+y1c
+y2ce
+yc5er
+y3ch
+ych4e
+ycom4
+ycot4
+y1d
+y5ee
+y1er
+y4erf
+yes4
+ye4t
+y5gi
+4y3h
+y1i
+y3la
+ylla5bl
+y3lo
+y5lu
+ymbol5
+yme4
+ympa3
+yn3chr
+yn5d
+yn5g
+yn5ic
+5ynx
+y1o4
+yo5d
+y4o5g
+yom4
+yo5net
+y4ons
+y4os
+y4ped
+yper5
+yp3i
+y3po
+y4poc
+yp2ta
+y5pu
+yra5m
+yr5ia
+y3ro
+yr4r
+ys4c
+y3s2e
+ys3ica
+ys3io
+3ysis
+y4so
+yss4
+ys1t
+ys3ta
+ysur4
+y3thin
+yt3ic
+y1w
+za1
+z5a2b
+zar2
+4zb
+2ze
+ze4n
+ze4p
+z1er
+ze3ro
+zet4
+2z1i
+z4il
+z4is
+5zl
+4zm
+1zo
+zo4m
+zo5ol
+zte4
+4z1z2
+z4zy
+}
+\hyphenation{ % Do NOT make any alterations to this list! --- DEK
+as-so-ciate
+as-so-ciates
+dec-li-na-tion
+oblig-a-tory
+phil-an-thropic
+present
+presents
+project
+projects
+reci-procity
+re-cog-ni-zance
+ref-or-ma-tion
+ret-ri-bu-tion
+ta-ble
+}
diff --git a/macros/plain/contrib/samples/immig.tex b/macros/plain/contrib/samples/immig.tex
new file mode 100644
index 0000000000..7a27d76e42
--- /dev/null
+++ b/macros/plain/contrib/samples/immig.tex
@@ -0,0 +1,339 @@
+\magnification=1095
+\count0=0
+\count100=0
+\def\futnot#1{\advance\count100 by1\footnote{${}^{\number\count100}$}{#1}}
+\nopagenumbers
+\headline{\ifnum\count0>1\rm Hawkins, E. Glenn\hfil Page \folio\else\hss\fi}
+\footline{\ifnum\count0=1\hss\rm\folio\hss\fi}
+\vfill
+\centerline{\bf The German Immigrants in Texas}
+\centerline{\bf and the Civil War}
+\vfill
+\centerline{\bf Term Paper}
+\centerline{\bf in}
+\centerline{\bf History 370}
+\vfill
+\centerline{by}
+\centerline{\bf Eldon Glenn Hawkins}
+\centerline{\bf November 29, 1983}
+\vfill
+\eject
+\bigskip
+\centerline{\bf German Immigrants in Texas}
+\centerline{\bf and the Civil War}
+\medskip
+The story of the German immigrants in Texas is a long and colorful one,
+but perhaps the most interesting parts of their history concern
+the Germans' attitudes and opinions on the vital questions that were destined
+to break up what was once a solid Union. Fleeing political and economic
+persecution at home in Europe, the German immigrant of the
+first half of the nineteenth centure came to America to find the freedom
+he could not obtain at home. The freedom he found here in the United States
+gave many of his kind a deep love for the Union, and local prejudices
+and misjudgements isolated the German settler from most of his
+fellow Texans to produce one of the strongest centers of Unionist
+activity in the South during the Civil War.
+
+A key link in understanding the German immigrant's views on slavery,
+secession, and the Union is to know the reasons that they left their
+homeland, and what they expected life to be like in their new home.
+The main reasons that so many Germans left the German Confederation in
+the early part of the nineteenth century had to do with two major social
+conditions existant in Germany and most of Europe at the time. The first
+of these was overpopulation.\futnot{Rudolph L. Biesele,
+{\it The History
+of the German Settlements in Texas (1831-1861)\/} (Austin, Texas: Von
+Boeckmann-Jones Company, 1930), 2.} The effects of this problem were many
+and varied. Basically, there were far too many people trying to use the
+same resources, both natural and man-made, at the same time. The result was
+a lower standard of living for most Germans, with the inevitably lesser
+political and social clout that accompanies such a lifestyle. This problem
+of too many people trying to slice the economic pie into too many pieces
+was further aggravated by the fact that there was a very unequal
+distribution of wealth among Germans, which amounted to a few people
+taking huge slices of an already inadequate economic pie and leaving
+the crumbs for the masses to pick up.\futnot{{\it Ibid.}, 4.}
+
+In addition to these two basic social problems, there were a couple of
+important forms of economic hardships in Germany in the first half
+of the nineteenth century. The industrialization of the Rhine region
+reinforced the ``rich-get-richer'' syndrome mentioned above---such was
+the case in almost all nations at the beginning of the Industrial
+Revolution.\futnot{{\it Ibid.}, 7.} The average worker was underpaid,
+and one cannot blame him for looking
+at emigration as a way to better his life. Also, in order to pay for
+the relatively recent Napoleonic wars, the tax rate in the various
+German states was monstrous. It was obviously very difficult to maintain
+a decent standard of living while existing under an enormous tax burden.
+In many states, the expensive habits of certain German princes made tax
+rates even higher, much to the displeasure of their subjects.\futnot
+{{\it Ibid.}, 8.}
+
+So, by the early 1830's, the climate in Germany was perfect for emigration.
+The common use of the word {\it Europamuede} (Europe weary) indicated a
+desire to leave, and also implied that a land existed where one could be
+free. This land was America to many Germans, because of the glowing
+reports sent home by individuals who had already crossed the Atlantic.
+Newspaper reports about immigrants were widespread, and personal letters
+from America were passed throughout Germany. And most importantly, many
+travel books were written in the 1820's and 1830's, with one especially
+having an important effect on German immigration.\futnot
+{Gilbert Giddings
+Benjamin, {\it The Germans in Texas---A Study in Immigration} (Austin, Texas:
+Jenkins Publishing Company, 1974), 4.}
+
+Gottfried Duden went to Missouri in 1824, spent four years there, and
+upon returning to Germany wrote a book about his experiences that was
+published in 1829. It was widely read throughout Southwest Germany,
+and, combined with the economic conditions already discussed, helped start
+the first big influx of Germans into America in 1831. The economic woes of
+Germany, combined with the excitement generated by books like Dudens'
+instigated one of the largest immigration movements ever aimed at America,
+with a large number coming to Texas.\futnot{Biesele, 3, (footnote).}
+
+The final reason many Germans chose America and Texas began to take effect
+in the early 1830's, with the abortive revolutions aimed at uniting the
+German people into one state, and reached a high point in 1848 and 1849.
+The primary motivation for this different set of immigrants was political
+freedom. These Germans were generally better educated than those simply
+wanting a better livelihood, and as a result there is more written about
+this area.\futnot{Benjamin, 7.} However, it is sufficient to say
+that in the case of these immigrants, they were fleeing punishment for
+revolutionary activities, the loss of freedom due to offical crackdowns,
+and/or the general unrest in Europe during this time. It is important
+to note here that there is not one single ``correct'' cause for the massive
+numbers of Germans that came to America during the 1830's and 1840's. Some
+came to find political freedom, some came for economic freedom, and some
+because of concerns beyond the scope of this report. What one needs to
+understand about this is that life in Germany became unbearable for many,
+and when they decided to leave they came to the United States because of
+the fact that America by then had traditionally become the ``promised land''
+to those unsatisfied with life at home.
+
+What exactly did the immigrants expect to find in America? Quite frankly,
+a ``land flowing with milk and honey''. Several Germans heard of free
+land being given away, and reports of low taxes and high wages made America
+sound very good, indeed, with Texas being mentioned quite frequently as the
+place to go. The second, more intelligent group saw America as a land that
+would allow them to express themselves in whatever fashion they chose.\futnot
+{Biesele, 5-8.} Basically, Germans saw in America a chance to be truly
+free. This explains partly their behavior in Texas during the secession crisis
+and in the early part of the Civil War. In their new-found homeland, Germans
+were very much aware of the personal and political rights, and it was this
+awareness, among other things, that helped lead the Texas Germans to their
+clashes with Confederate authorities.
+
+The Germans who arrived in Texas began doing so in large numbers about 1846.
+They first settled in Austin, Colorado, Fayette, and Washington counties,
+but later travelled westward and settled also in Comal, Gillespie, and
+other assorted counties nearby. They quickly setled into the ``American way''
+of agriculture and capitalism, raising crops to sell to merchants.\futnot
+{Walter Louis Buenger, Jr., ``Stilling the Voice of Reason---Texans and
+the Union, 1854-1861'' (unpublished Ph.D. thesis, Rice University, 1979), 128.}
+
+Although they embraced their new found freedom, the German Texans were still
+somewhat clannish. They spoke German, married other Germans, and formed their
+own churches. This habit made for a few problems in the relationships between
+the Americans in Texas and the immigrants.
+
+Despite this aloof attitude on the part of many Germans, they were quick to
+adopt a ``value system based on $\ldots$ individual democracy $\ldots$ and
+slavery''.\futnot{{\it Ibid.}, 130.} To men and women weary of
+suppression in their homeland the Democratic party, with its emphasis on
+expansion of the suffrage and the right of a man to be individualistic, was
+the obvious choice politically.\futnot{{\it Ibid.}, 132.} They were
+assisted in making this decision of party alignment by the actions of the
+Know-Nothing party's nativistic rantings.
+
+The Know-Nothings were the cause of the start of trouble between the Germans
+and the Americans in Texas. Imported from out-of-state in the 1850's, the
+Know-Nothings managed to do very well in Texas in the 1854-1855 elections.
+A sizeable minority (18\%) of the population in Texas were foreigners then,
+so the nativist plank in the Know-Nothing platform appealed to many Texans
+inclined towards prejudice against foreigners.\futnot{{\it Ibid.},
+47.} Unfortunately for the Germans, in 1854, at the height of the Know-Nothing
+movement, a group of German intellectuals devised at a convention in San
+Antonio a platform that advocated the gradual elimination of slavery in the
+South.\futnot{Benjamin, 85-87.} Because sentiment of this kind
+was anathema to most ``good'' Southerners, it was immediately and erroneously
+assumed by the Americans that the Germans were abolitionists. Of course,
+the Know-Nothing rags led the way in attacking the Germans. Many letters
+were written by indignant immigrants apologizing to the Americans and
+begging them to realize that the San Antonio platform did not represent
+the opinion of all Germans.\futnot{{\it Ibid.}, 47.} It is
+certain that the Germans, as relatively new inhabitants of Texas, felt that
+it was none of their business to interfere in matters that in their minds
+did not concern them.
+
+For slavery was indeed a matter that did not involve the Germans directly.
+While it was true that most Germans regarded the idea of human bondage as
+repungnant, many still remained apathetic towards the issue.\futnot
+{Benjamin, 85-87.} If a German had an opinion at all, they probably regarded
+it as the states' business, and as such, the federal government could not
+compel the states whether or not slavery was legal.\futnot{Biesele,
+{\it German Settlements in Texas}, 196.} Most Germans were Democrats fully
+willing to let the Southerners keep their slaves, even if they did disagree
+about the moral implications amongst themselves. This ambivalent attitude
+towards slavery was not understood by the Americans in Texas at the time,
+unfortunately.
+
+The uproar over the San Antonio platform would have died down without doing
+any irreparable damage to relations between the immigrants and the Americans
+if it were not for a militant German abolitionist (one of a very few),
+Dr.~Adolf Douai, who, as editor of the San Antonio {\it Zeitung}, kept on
+calling for abolition in his paper. Because of this man's ceaseless agitating,
+with the resulting condemnation from the Know-Nothings and other Americans, he
+is accused of singlehandedly giving the Germans in Texas the undeserved title
+of abolitionist.\futnot{{\it Ibid.}, 202-203.}
+
+This constant bickering over the slavery question only served to widen the
+rift between the Germans in Texas and their American counterparts. What
+began as mere annoyance at the aloof behavior of one group of people all of
+a sudden became much bigger and more ominous. The stage was set for the
+secession struggle and the resulting events during the Civil War in Texas.
+
+Despite some real apathy on the slavery issue, most Germans had definite
+ideas about secession. There were basically three groups of ideas on
+secession in the German community. These three different sets of opinions
+were caused by the degree to which the individual had been acclimated into
+Southern society. Isolation, such as that which occurred on the Texas
+frontier, inspired rather strong Unionist feelings among Germans who had to
+rely upon the U.S. Army for protection against the Indians. Those on the
+frontier were more idealistic also, as they were representatives of the
+second, more thoughtful group of immigrants to come to Texas. Full of
+revolutionary ardor left over from the 1848 revolutions in Germany, they
+were very much against slavery and this along with their dependence on the
+Army for protection made them strong Unionists.\futnot{Bueger,
+195-166.}
+
+The group at the opposite end of the spectrum were highly integrated into
+the white southern political and economic ideals in Texas. These men
+disliked the Know-Nothings (now largely defunct), remained intensely
+loyal to the states' Democratic party, and were more ``localistic than
+nationalistic'';\futnot{{\it Ibid.}, 165.} that is, they were
+not really in favor of secession, but if it occurred they would go along
+with it.
+
+Caught in the middle was the group that shared mainly Texas values, was
+not really active in the Democratic party, and as a result was deeply
+committed to the Union. But although this group campaigned most actively
+against secession, when Texas seceded, they went with her.\futnot
+{{\it Ibid.}, 166.}
+
+At first glance, there seems to be a serious contradiction in the above
+statements that the Germans were strong Unionists, and yet they generally
+went with the state when she seceded. This contradiction in reality does
+not exist. It is true that the Germans loved the Union; it had given them
+freedoms hitherto undreamed of, and had far surpassed their wildest
+expectations in the quality of life they had obtained in America. But
+they still felt a bit isolated from the rest of the Texans, and there
+was also the feeling that they were still newcomers to Texas and that
+they should not meddle in the Americans' affairs. And finally, by 1859,
+most of the long-time German immigrants were, despite their own doubts,
+Texans. As has been previously discussed, they readily adopted American,
+and particularly Southern, politics and ideology. But while the Germans
+were willing to go along with secession if the rest of Texas wanted it,
+they as a rule did not support the Confederacy, and most were firmly opposed
+to the idea of serving in the Confederate armed forces. This desire to be
+let alone by the Confederacy caused severe problems with the new Confederate
+government.
+
+Unionist activities of the Germans in Texas during the Civil War can be
+divided into two parts---those performed by the militant Unionist Germans
+on the Texas frontier in Gillespie and surrounding counties, and those
+that occurred in the less militant German counties in the interior,
+centering around Fayette county.
+
+The activity around Fayette country and adjoining counties consisted
+mainly of illegal anti-rebel meetings and the recruiting of stay-at-home
+companies of the state militia. According to Elliot, ``Unionist meetings
+were frequent, enthusiastic, and well attended $\ldots$ Speeches were
+vehement, and the press was caustic in branding as traitors those who would
+divide the Union''.\futnot{Claude Elliot, ``Union Sentiment in
+Texas, 1861-1865'', {\it Southwestern Historical Quarterly}, L (April, 1947),
+470.} Stay-at-home companies were a very clever way that the Unionists of
+the area, expecially Fayette county, kept the men from having to serve in the
+Confederate army. As soon as the war started, the men rushed to join state
+militia and the state troops. Twenty-four companies existed in Fayette by
+1861, but only 150 men had been sent into the Confederate army, much to the
+embarrassment and chagrin of patriotic rebels and even mild Unionists.\futnot
+{{\it Ibid.}, 470-471.}
+
+The Conscription Act of 1862 set off the already boiling Union sentiment and
+nearly caused a rebellion. The enrolling officer of Austin county, A.~J. Bell,
+reported that resistance to the draft was being seriously considered in several
+communities, and he asked for help from other forces in the area. A few weeks
+later Bell reported that the counties were in open rebellion against the
+Confederate government. Companies of infantry and cavalry were even drilled
+in preparation for any possible fighting. In order to control a rapidly
+deteriorating situation, martial law was declared and troops were sent in to
+calm things down.\futnot{{\it Ibid.}, 470-471.} Open resistance
+to Confederate rule in Central Texas then came to an end, for all practical
+purposes.
+
+In Gillespie and neighboring counties on the western frontier, however, things
+were not just different, but also a lot more violent. Most of the Unionist
+activity in this area was centered in Gillespie county, with the aid, if
+needed, of surrounding German dominated counties. The first man chosen as
+enrolling officer for Gillespie country was Jack Kuechler, a staunch Unionist.
+He proceeded to enroll only those citizens who were loyal to the United States,
+and would not even talk with those who wanted to join the Confederate
+army.\futnot{{\it Ibid.}, 464.} This was about as far as opposition
+went, until General P.~O. Hebert declared martial law in Texas in March, 1862.
+
+This declaration required that all alien males over sixteen must take an oath
+of allegiance to the state and the Confederacy. Immediately, Unionist
+sentiment flared among the German settlements and the Union Loyal League
+(organized in June, 1861) held a meeting. Three companies were formed,
+with Fritz Tegener chosen as major, and then they dispersed. These companies
+were to protect against maurading Indians, but they were accused of trying
+to duck Confederate service.
+
+When Governor Frances~R. Lubbock heard of the disturbance, he sent Captain
+James Duff and two compnies of partisan rangers to Fredericksburg. Upon
+arriving, Duff declared martial law (again) in Gillespie and part of Kerr
+county. He then gave the people six days to come to him and take the oath
+of allegiance.\futnot{{\it Ibid.}, 463.} During his stay, Duff
+behaved in an extremely poor fashion, arresting and jailing at will anyone
+he or his troops suspected of ``treason''. He also shot and hung quite a
+few people, too.\futnot{Robert W. Shook, ``The Battle of the Nueces,
+August 10, 1862'', {\it Southwestern Historical Quarterly}, LXVI, (July, 1962),
+34.}
+
+Because of these persecutions, several Germans decided to leave Texas. Some
+left for New Orleans to serve in the First Texas Cavalry Regiment (Union)
+organized by Benjamin~F. Butler. Others decided to cross the Rio Grande and
+then sail to New Orleans and meet the Federals that way. So on August 1, 1862,
+about eighty men assembled at a point just west of Kerrville, with the
+intention of crossing into Mexico. Approximately sixty men eventually left
+for Mexico sometime on either the first or second of August. Upon learning
+of this expedition, Duff, back in San Antonio by now, send Lieutenent C.~D.
+McRae to pursue and break them up. After seven days of pursuit, McRae caught
+up with the Unionists on the West Fork of the Nueces River. The Confederates
+launched an attack in the early morning of August 10, 1862. Thirty-two
+Unionists were killed and several wounded, while McRae lost two men with
+eighteen wounded. McRae has been accused of murdering nine wounded survivors,
+and of leaving the dead unburied, and there is some evidence to support
+this.\futnot{{\it Ibid.}, 36-41.}
+
+After this ``Battle of the Nueces'', Duff returned to Gillespie county,
+where he proceeded to hang fifty ``traitors'' and kill several ``bushwackers''
+as well.\futnot{Elliot, 466.} After this, most blatant opposition
+to the Confederacy faded away, with the Germans on the frontier merely content
+to catch word of Union victories at the front and quietly await the end of the
+Confederacy.
+
+The Germans in Texas, then, underwent several hardships during the Civil War
+because of the misunderstandings between them and the Americans that occurred
+prior to the war. The immigrants' own reticence, their somewhat complex views
+on slavery, secession, and their relationship with the Union, as well as the
+machinations of the Know-Nothings all stamped the Germans as standoffish,
+abolitionist foreigners of questionable loyalty to the beloved Confederacy.
+This image did not help when the Confederate government began making demands
+on the Germans that the immigrants were not prepared to meet. When one stops
+to think of the enormity of the questions that faced the Germans on their
+arrival in Texas, it is amazing that they adapted so well and so quickly to
+their new home, despite the initial difficulties facing them. That they did
+so says much in their credit, and they set a fine example of courage in the
+face of hardship that one must admire even today.
+\bye
diff --git a/macros/plain/contrib/samples/ithyphen.tex b/macros/plain/contrib/samples/ithyphen.tex
new file mode 100644
index 0000000000..a138c5cbc3
--- /dev/null
+++ b/macros/plain/contrib/samples/ithyphen.tex
@@ -0,0 +1,59 @@
+% Le regole ortografiche usate sono quelle di una grammatica di
+% scuola media: sarebbe occorso riferirsi alla celebre grammatica del
+% Restagno, edita verso il 1930, non reperita dal compilatore
+% di quanto sotto. In questa grammatica sono dedicate 10 pagine
+% a questo argomento, nella grammatica usata mezza pagina,
+% con le seguenti regole.
+% Patterns per l'italiano: si potra` spezzare la parola solo tra le lettere
+% sottoelencate dopo "\patterns{" tra le quali vi sia un numero dispari,
+% Non viene mai fatta la spezzatura se restano meno di due lettere, oppure
+% vanno a capo meno di tre .
+%
+% I raggruppamenti di lettere dopo "\patterns{" si sono costruiti con i
+% seguenti criteri, salvo poche eccezioni: se vi e` conflitto tra i criteri a)
+% e b) vince sempre a):
+%
+% a) si impedisce(2) la spezzatura tra due consonanti o vocali diseguali,
+% delle quali la prima sia diversa da l,m,n,r, oppure diverse da cq.
+%
+% b) si permette(1) la spezzatura
+% tra due consonanti o vocali eguali,
+% tra due consonanti delle quali la prima sia l,m,n,r
+% tra c e q
+% prima di una consonante seguita da vocale ;questo e`un caso possibile
+% di conflitto con a, e prevale , come detto, a.
+% prima di una s seguita da consonante
+%
+% Vi e` conflitto tra i criteri da adottare, in particolare tra tipografi
+% e puristi. Qui si e` statti coi tipografi.
+% Se si vogliono aggiungere altri gruppi di lettere si puo` fare, mettendo
+% un numero pari ove si vuole proibire la spezzatura, dispari ove si permette,
+% in caso di conflitto prevale il numero piu` grande. Non e` necessario
+% l'ordine alfabetico. Nulla impedisce di omettere gruppi di lettere non
+% voluti. Vedasi appendice H tex82, pag. 449
+%
+\patterns{ a1a a2e a2i a2j a2o a2u a2y 1ba b1b b2c b2d 1be b2f b2g b2h 1bi 1bj
+b2l b2m b2n 1bo b2p b2q b2r b2s b2t 1bu b2v b2w b2x 1by b2z 1ca c2b c1c c2d 1ce
+c2f c2g c2h 1ci 1cj c2l c2m c2n 1co c2p c1q c2r c2s c2t 1cu c2v c2w c2x 1cy c2z
+1da d2b d2c d1d 1de d2f d2g d2h 1di 1dj d2l d2m d2n 1do d2p d2q d2r d2s d2t 1du
+d2v d2w d2x 1dy d2z e2a e1e e2i e2j e2o e2u e2y 1fa f2b f2c f2d 1fe f1f f2g f2h
+1fi 1fj f2l f2m f2n 1fo f2p f2q f2r f2s f2t 1fu f2v f2w f2x 1fy f2z 1ga g2b g2c
+g2d 1ge g2f g1g g2h 1gi 1gj g2l g2m g2n 1go g2p g2q g2r g2s g2t 1gu g2v g2w g2x
+1gy g2z i2a i2e i1i i2j i2o i2u i2y j2a j2e j2i j1j j2o j2u j2y 1ka 1ke 1ki 1kj
+1ko 1ku 1ky 1la l1b l1c l1d 1le l1f l1g l1h 1li 1lj l1l l1m l1n 1lo l1p l1q l1r
+l1s l1t 1lu l1v l1w l1x 1ly l1z 1ma m1b m1c m1d 1me m1f m1g m1h 1mi 1mj m1l m1m
+m1n 1mo m1p m1q m1r m1s m1t 1mu m1v m1w m1x 1my m1z 1na n1b n1c n1d 1ne n1f n1g
+n1h 1ni 1nj n1l n1m n1n 1no n1p n1q n1r n1s n1t 1nu n1v n1w n1x 1ny n1z o2a o2e
+o2i o2j o1o o2u o2y 1pa p2b p2c p2d 1pe p2f p2g p2h 1pi 1pj p2l p2m p2n 1po p1p
+p2q p2r p2s p2t 1pu p2v p2w p2x 1py p2z 1qa q2b q2c q2d 1qe q2f q2g q2h 1qi 1qj
+q2l q2m q2n 1qo q2p q1q q2r q2s q2t 1qu q2v q2w q2x 1qy q2z 1ra r1b r1c r1d 1re
+r1f r1g r1h 1ri 1rj r1l r1m r1n 1ro r1p r1q r1r r1s r1t 1ru r1v r1w r1x 1ry r1z
+1sa 1s2b 1s2c 1s2d 1se 1s2f 1s2g 1s2h 1si 1sj 1s2l 1s2m 1s2n 1so 1s2p 1s2q 1s2r
+s1s 1s2t 1su 1s2v 1s2w 1s2x 1sy 1s2z 1ta t2b t2c t2d 1te t2f t2g t2h 1ti 1tj
+t2l t2m t2n 1to t2p t2q t2r t2s t1t 1tu t2v t2w t2x 1ty t2z u2a u2e u2i u2j u2o
+u1u u2y 1va v2b v2c v2d 1ve v2f v2g v2h 1vi 1vj v2l v2m v2n 1vo v2p v2q v2r v2s
+v2t 1vu v1v v2w v2x 1vy v2z 1wa w2b w2c w2d 1we w2f w2g w2h 1wi 1wj w2l w2m w2n
+1wo w2p w2q w2r w2s w2t 1wu w2v w1w w2x 1wy w2z 1xa x2b x2c x2d 1xe x2f x2g x2h
+1xi 1xj x2l x2m x2n 1xo x2p x2q x2r x2s x2t 1xu x2v x2w x1x 1xy x2z y2a y2e y2i
+y2j y2o y2u y1y 1za z2b z2c z2d 1ze z2f z2g z2h 1zi 1zj z2l z2m z2n 1zo z2p z2q
+z2r z2s z2t 1zu z2v z2w z2x 1zy z1z }
diff --git a/macros/plain/contrib/samples/letter.tex b/macros/plain/contrib/samples/letter.tex
new file mode 100644
index 0000000000..a18cea170a
--- /dev/null
+++ b/macros/plain/contrib/samples/letter.tex
@@ -0,0 +1,91 @@
+% LETTER
+%
+% This macro can be used to format text for sending letters. The
+% format of your output would appear as follows:
+%
+% <To Name> <Date/time>
+% <continued to address>
+%
+% .
+% .
+% body of letter
+% .
+% .
+%
+% <From/Sincerely/whatever>
+% <room for signature>
+% <From name>
+%
+% <From initials/sect. inits>
+% <any cc:s>
+% <Any P.S.s>
+%
+% To use this format, put the line
+% \input letter
+% at the top of your file. The following are the symbols that may be
+% used with this macro:
+%
+% \address - This should be followed by the "to" name enclosed
+% in curly brackets. The following line should start
+% with an open curly bracket followed by the address
+% of the "to" name followed by a close curly bracket.
+% For example...
+% \address
+% {Dana Zirin}
+% {Caltech
+% Mail Station 264-33
+% Pasadena, CA 91125}
+%
+% \body - This should be used after the \address to separate
+% the address from the body of the letter.
+%
+% \closing - This should be followed by the "nicety" ending
+% enclosed in curly brackets followed by the ending
+% name and title enclosed in curly brackets as well.
+% For example...
+% \closing
+% {Yours Truely,}
+% {Dan Zirin
+% Systems Manager}
+%
+% \annotations - This is used to start any annotations you may
+% wish to include. For example...
+% \annotations
+% DMZ/TeX
+% cc: William A. Goddard III
+%
+% \ps - This should be used before starting any post scripts.
+%
+% \endletter - Used to terminate the letter.
+%
+% (From The TeXbook)
+\parindent=0pt
+\parskip=0pt
+\interlinepenalty=1000
+\nopagenumbers
+\raggedbottom
+\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}
+\headline={\ifnum\pageno>1\rm To \addressee\hfil\today\hfil Page \folio
+ \else\hfil\fi}
+\def\beginlinemode{\endmode\begingroup\obeylines\def\endmode{\par\endgroup}}
+\def\beginparmode{\endmode\begingroup\parskip=\medskipamount\def\endmode{
+ \par\endgroup}}
+\let\endmode=\par
+\def\endletter{\endmode\vfill\supereject\end}
+\newdimen\longindentation\longindentation=4truein
+\newbox\theaddress
+\def\address{\beginlinemode\getaddress}
+{\obeylines\gdef\getaddress#1#2{\line{#1\hfil\today}\gdef\addressee{#2}%
+\global\setbox\theaddress=\vbox\bgroup\raggedright%
+\hsize=\longindentation\everypar{\hangindent2em}#2
+\def\endmode{\egroup\endgroup\copy\theaddress\bigskip}}}
+\def\body{\beginparmode}
+\def\closing{\beginlinemode\getclosing}
+{\obeylines\gdef\getclosing#1#2{#1\nobreak\bigskip\leftskip=\longindentation #2
+\nobreak\bigskip\bigskip\bigskip\def
+{\endgraf\nobreak}}}
+\def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par}
+\def\ps{\beginparmode\nobreak\interlinepenalty5000\def\par{\endgraf%
+\penalty5000}}
diff --git a/macros/plain/contrib/samples/mac.tex b/macros/plain/contrib/samples/mac.tex
new file mode 100644
index 0000000000..2004e6d481
--- /dev/null
+++ b/macros/plain/contrib/samples/mac.tex
@@ -0,0 +1,10 @@
+\newcount\n
+\n=0
+\message{ }
+\message{I can count!!}
+\loop
+ \advance\n by1
+ \message{\number\n}
+ \ifnum\n<101
+\repeat
+\end
diff --git a/macros/plain/contrib/samples/manmac.tex b/macros/plain/contrib/samples/manmac.tex
new file mode 100644
index 0000000000..4c1a579e7f
--- /dev/null
+++ b/macros/plain/contrib/samples/manmac.tex
@@ -0,0 +1,670 @@
+% Macros for The TeXbook
+
+\catcode`@=11 % borrow the private macros of PLAIN (with care)
+
+\font\tentex=amtex10
+
+\font\inchhigh=aminch
+\font\titlefont=amssmc40
+
+\font\ninerm=amr9
+\font\eightrm=amr8
+\font\sixrm=amr6
+
+\font\ninei=ammi9
+\font\eighti=ammi8
+\font\sixi=ammi6
+\skewchar\ninei='177 \skewchar\eighti='177 \skewchar\sixi='177
+
+\font\ninesy=amsy9
+\font\eightsy=amsy8
+\font\sixsy=amsy6
+\skewchar\ninesy='60 \skewchar\eightsy='60 \skewchar\sixsy='60
+
+\font\eightss=amssq8
+
+\font\eightssi=amssqi8
+
+\font\ninebf=ambx9
+\font\eightbf=ambx8
+\font\sixbf=ambx6
+
+\font\ninett=amtt9
+\font\eighttt=amtt8
+
+\hyphenchar\tentt=-1 % inhibit hyphenation in typewriter type
+\hyphenchar\ninett=-1
+\hyphenchar\eighttt=-1
+
+\font\ninesl=amsl9
+\font\eightsl=amsl8
+
+\font\nineit=amti9
+\font\eightit=amti8
+
+\font\tenu=amu10 % unslanted text italic
+\font\magnifiedfiverm=amr5 at 10pt
+\font\man=manfnt % font used for special symbols (old version)
+%\font\manual=manual % font used for the METAFONT logo, etc. (new version)
+ % manual [which isn't complete yet] is supposed to replace manfnt some day
+
+\newskip\ttglue
+\def\tenpoint{\def\rm{\fam0\tenrm}%
+ \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+ \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+ \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam\tenit}%
+ \textfont\itfam=\tenit
+ \def\sl{\fam\slfam\tensl}%
+ \textfont\slfam=\tensl
+ \def\bf{\fam\bffam\tenbf}%
+ \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\tt{\fam\ttfam\tentt}%
+ \textfont\ttfam=\tentt
+ \tt \ttglue=.5em plus.25em minus.15em
+ \normalbaselineskip=12pt
+ \def\MF{{\manual META}\-{\manual FONT}}%
+ \let\sc=\eightrm
+ \let\big=\tenbig
+ \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}%
+ \normalbaselines\rm}
+
+\def\ninepoint{\def\rm{\fam0\ninerm}%
+ \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam\nineit}%
+ \textfont\itfam=\nineit
+ \def\sl{\fam\slfam\ninesl}%
+ \textfont\slfam=\ninesl
+ \def\bf{\fam\bffam\ninebf}%
+ \textfont\bffam=\ninebf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\tt{\fam\ttfam\ninett}%
+ \textfont\ttfam=\ninett
+ \tt \ttglue=.5em plus.25em minus.15em
+ \normalbaselineskip=11pt
+ \def\MF{{\manual hijk}\-{\manual lmnj}}%
+ \let\sc=\sevenrm
+ \let\big=\ninebig
+ \setbox\strutbox=\hbox{\vrule height8pt depth3pt width\z@}%
+ \normalbaselines\rm}
+
+\def\eightpoint{\def\rm{\fam0\eightrm}%
+ \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \def\it{\fam\itfam\eightit}%
+ \textfont\itfam=\eightit
+ \def\sl{\fam\slfam\eightsl}%
+ \textfont\slfam=\eightsl
+ \def\bf{\fam\bffam\eightbf}%
+ \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\fivebf
+ \def\tt{\fam\ttfam\eighttt}%
+ \textfont\ttfam=\eighttt
+ \tt \ttglue=.5em plus.25em minus.15em
+ \normalbaselineskip=9pt
+ \def\MF{{\manual opqr}\-{\manual stuq}}%
+ \let\sc=\sixrm
+ \let\big=\eightbig
+ \setbox\strutbox=\hbox{\vrule height7pt depth2pt width\z@}%
+ \normalbaselines\rm}
+
+\def\tenmath{\tenpoint\fam-1 } % use after $ in ninepoint sections
+\def\tenbig#1{{\hbox{$\left#1\vbox to8.5pt{}\right.\n@space$}}}
+\def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy
+ \left#1\vbox to7.25pt{}\right.\n@space$}}}
+\def\eightbig#1{{\hbox{$\textfont0=\ninerm\textfont2=\ninesy
+ \left#1\vbox to6.5pt{}\right.\n@space$}}}
+
+% Page layout
+\newdimen\pagewidth \newdimen\pageheight \newdimen\ruleht
+\hsize=29pc \vsize=44pc \maxdepth=2.2pt \parindent=3pc
+\pagewidth=\hsize \pageheight=\vsize \ruleht=.5pt
+\abovedisplayskip=6pt plus 3pt minus 1pt
+\belowdisplayskip=6pt plus 3pt minus 1pt
+\abovedisplayshortskip=0pt plus 3pt
+\belowdisplayshortskip=4pt plus 3pt
+
+%\newinsert\footins
+\def\footnote#1{\edef\@sf{\spacefactor\the\spacefactor}#1\@sf
+ \insert\footins\bgroup\eightpoint
+ \interlinepenalty100 \let\par=\endgraf
+ \leftskip=\z@skip \rightskip=\z@skip
+ \splittopskip=10pt plus 1pt minus 1pt \floatingpenalty=20000
+ \smallskip\item{#1}\bgroup\strut\aftergroup\@foot\let\next}
+\skip\footins=12pt plus 2pt minus 4pt % space added when footnote is present
+%\count\footins=1000 % footnote magnification factor (1 to 1)
+\dimen\footins=30pc % maximum footnotes per page
+
+\newinsert\margin
+\dimen\margin=\maxdimen
+%\count\margin=0 \skip\margin=0pt % marginal inserts take up no space
+
+\newif\iftitle
+\def\titlepage{\global\titletrue} % for pages without headlines
+\def\rhead{} % \rhead contains the running headline
+
+\def\leftheadline{\hbox to \pagewidth{%
+ \vbox to 10pt{}% strut to position the baseline
+ \llap{\tenbf\folio\kern1pc}% folio to left of text
+ \tenit\rhead\hfil% running head flush left
+ }}
+\def\rightheadline{\hbox to \pagewidth{%
+ \vbox to 10pt{}% strut to position the baseline
+ \hfil\tenit\rhead\/% running head flush right
+ \rlap{\kern1pc\tenbf\folio}% folio to right of text
+ }}
+
+\def\onepageout#1{\shipout\vbox{ % here we define one page of output
+ \offinterlineskip % butt the boxes together
+ \vbox to 3pc{ % this part goes on top of the 44pc pages
+ \iftitle % the next is used for title pages
+ \global\titlefalse % reset the titlepage switch
+ \setcornerrules % for camera alignment
+ \else\ifodd\pageno \rightheadline\else\leftheadline\fi\fi
+ \vfill} % this completes the \vbox to 3pc
+ \vbox to \pageheight{
+ \ifvoid\margin\else % marginal info is present
+ \rlap{\kern31pc\vbox to\z@{\kern4pt\box\margin \vss}}\fi
+ #1 % now insert the main information
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins \kern-3pt
+ \hrule height\ruleht width\pagewidth \kern-\ruleht \kern3pt
+ \unvbox\footins\fi
+ \boxmaxdepth=\maxdepth
+ } % this completes the \vbox to \pageheight
+ }
+ \advancepageno}
+
+\def\setcornerrules{\hbox to \pagewidth{\vrule width 1pc height\ruleht
+ \hfil \vrule width 1pc}
+ \hbox to \pagewidth{\llap{\sevenrm(page \folio)\kern1pc}%
+ \vrule height1pc width\ruleht depth\z@
+ \hfil \vrule width\ruleht depth\z@}}
+
+\output{\onepageout{\unvbox255}}
+
+\newbox\partialpage
+\def\begindoublecolumns{\begingroup
+ \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}\eject
+ \output={\doublecolumnout} \hsize=14pc \vsize=89pc}
+\def\enddoublecolumns{\output={\balancecolumns}\eject
+ \endgroup \pagegoal=\vsize}
+
+\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \dimen@=44pc \advance\dimen@ by-\ht\partialpage
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255 \penalty\outputpenalty}
+\def\pagesofar{\unvbox\partialpage
+ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\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}
+ \setbox0=\vbox to\dimen@{\unvbox1}
+ \setbox2=\vbox to\dimen@{\unvbox3}
+ \pagesofar}
+
+% Chapter formatting
+% The preface and table of contents are formatted in place, not here
+
+\newcount\exno % for the number of exercises in the current chapter
+\newcount\subsecno % for the number of subsections in the current chapter
+
+\outer\def\beginchapter#1 #2#3. #4\par{\global\exno=0
+ \subsecno=0
+ \def\chapno{#2#3}
+ \ifodd\pageno
+ \errmessage{You had too much text on that last page; I'm backing up}
+ \advance\pageno by-1 \fi
+ \titlepage
+ \def\\{ } % \\'s in the title will be treated as spaces
+ \message{#1 #2#3:} % show the chapter title on the terminal
+ \xdef\rhead{#1 #2#3: #4\unskip}
+ {\def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.06em X}
+ \def\MF{{\vbox to30pt{}\manual ()*+,-.*}}
+ \def\\{#3}
+ \ifx\empty\\ \rightline{\inchhigh #2\kern-.04em}
+ \else\rightline{\inchhigh #2\kern-.06em#3\kern-.04em}\fi
+ \vskip 1.75pc
+ \baselineskip 36pt \lineskiplimit 1pt \lineskip 12pt
+ \let\\=\cr % now the \\'s are line dividers
+ \halign{\line{\titlefont\hfil##}\\#4\unskip\\}
+ \vfill\eject} % output the chapter title page
+ \tenpoint
+ \noindent\ignorespaces} % the first paragraph of a chapter is not indented
+
+\outer\def\endchapter{\ifodd\pageno \else\vfill\eject\null\fi
+ \begingroup\bigskip\vfill % beginning of the quotes
+ \def\eject{\endgroup\eject}
+ \def\par{\ifhmode\/\endgraf\fi}\obeylines
+ \def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.000em X}
+ \def\MF{{\manual opqr}\-{\manual stuq}}
+ \eightpoint \let\tt=\ninett
+ \baselineskip 10pt
+ \parfillskip \z@
+ \interlinepenalty 10000
+ \leftskip \z@ plus 40pc minus \parindent
+ \let\rm=\eightss \let\sl=\eightssi
+ \everypar{\sl}}
+\def\author#1(#2){\smallskip\noindent\rm--- #1\unskip\enspace(#2)}
+
+\def\dbend{{\manual\char127}} % dangerous bend sign
+\def\d@nger{\medbreak\begingroup\clubpenalty=10000
+ \def\par{\endgraf\endgroup\medbreak} \noindent\hang\hangafter=-2
+ \hbox to0pt{\hskip-\hangindent\dbend\hfill}\ninepoint}
+\outer\def\danger{\d@nger}
+\def\dd@nger{\medbreak\begingroup\clubpenalty=10000
+ \def\par{\endgraf\endgroup\medbreak} \noindent\hang\hangafter=-2
+ \hbox to0pt{\hskip-\hangindent\dbend\kern1pt\dbend\hfill}\ninepoint}
+\outer\def\ddanger{\dd@nger}
+\def\enddanger{\endgraf\endgroup} % omits the \medbreak
+
+\outer\def\subsection#1. {\medbreak\advance\subsecno by 1
+ \noindent{\it \the\subsecno.\enspace#1.\enspace}}
+\def\ansno#1.#2:{\medbreak\noindent
+ \hbox to\parindent{\bf\hss#1.#2.\enspace}\ignorespaces}
+
+% Composition macros
+\hyphenation{man-u-script man-u-scripts ap-pen-dix}
+
+\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em
+ S$-\TeX}
+\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet
+\def\SS{{\it SS}} % scriptscript style
+\def\|{\leavevmode\hbox{\tt\char`\|}} % vertical line
+\def\dn{\leavevmode\hbox{\tt\char'14}} % downward arrow
+\def\up{\leavevmode\hbox{\tt\char'13}} % upward arrow
+\def\]{\leavevmode\hbox{\tt\char`\ }} % visible space
+
+\def\pt{\,{\rm pt}} % units of points, in math formulas
+\def\em{\,{\rm em}} % units of ems, in math formulas
+\def\<#1>{\leavevmode\hbox{$\langle$#1\/$\rangle$}} % syntactic quantity
+\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant
+\def\cstok#1{\leavevmode\thinspace\hbox{\vrule\vtop{\vbox{\hrule\kern1pt
+ \hbox{\vphantom{\tt/}\thinspace{\tt#1}\thinspace}}
+ \kern1pt\hrule}\vrule}\thinspace} % control sequence token
+
+{\obeyspaces\gdef {\ }}
+\def\parbreak{\hfil\break\indent\strut}
+\def\stretch{\nobreak\hskip0pt plus2pt\relax}
+
+% macros for non-centered displays
+\outer\def\begindisplay{\obeylines\startdisplay}
+{\obeylines\gdef\startdisplay#1
+ {\catcode`\^^M=5$$#1\halign\bgroup\indent##\hfil&&\qquad##\hfil\cr}}
+\outer\def\enddisplay{\crcr\egroup$$}
+
+% (the following \begin...\end-type macros do not appear in Appendix E)
+% macros for demonstrating math constructions
+\outer\def\beginmathdemo{$$\advance\baselineskip by2pt
+ \halign\bgroup\indent\hbox to 160pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}}
+\outer\def\begindisplaymathdemo {$$\advance\baselineskip by15pt
+ \halign\bgroup\indent\hbox to 160pt{##\hfil}&$\displaystyle{##}$\hfil\cr
+ \noalign{\vskip-15pt}}
+\outer\def\beginlongmathdemo{$$\advance\baselineskip by2pt
+ \halign\bgroup\indent\hbox to 210pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}}
+\outer\def\beginlongdisplaymathdemo {$$\advance\baselineskip by15pt
+ \halign\bgroup\indent\hbox to 210pt{##\hfil}&$\displaystyle{##}$\hfil\cr
+ \noalign{\vskip-15pt}}
+\outer\def\endmathdemo{\egroup$$}
+
+% macros for font tables
+\def\oddline#1{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\hex{#1x}}}\smash{\box0}\cr
+ \noalign{\nointerlineskip}}
+\def\evenline{\cr\noalign{\hrule}}
+\def\chartstrut{\lower4.5pt\vbox to14pt{}}
+\def\beginchart#1{$$\postdisplaypenalty=-10000 \global\count@=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\count@}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\count@ 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}
+
+% (now Appendix E resumes again)
+% macros for verbatim scanning
+\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}
+
+\outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=\z@
+ \catcode`\|=0 \rightskip-5pc \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}}
+
+% macros for syntax rules (again, not in Appendix E)
+\def\[#1]{\silenttrue\xref|#1|\thinspace{\tt#1}\thinspace} % keyword in syntax
+\def\beginsyntax{\endgraf\nobreak\medskip
+ \begingroup \catcode`<=13 \catcode`[=13
+ \let\par=\endsyntaxline \obeylines}
+\def\endsyntaxline{\futurelet\next\syntaxswitch}
+\def\syntaxswitch{\ifx\next\<\let\next=\syntaxrule
+ \else\ifx\next\endsyntax\let\next=\endgroup
+ \else\let\next=\continuerule\fi\fi \next}
+\def\continuerule{\hfil\break\indent\qquad}
+\def\endsyntax{\medbreak\noindent}
+{\catcode`<=13 \catcode`[=13
+ \global\let<=\< \global\let[=\[
+ \gdef\syntaxrule<#1>{\endgraf\indent\silentfalse\xref\<#1>}}
+\def\is{\ $\longrightarrow$ }
+\def\alt{\ $\vert$ }
+
+% macros to demarcate lines quoted from TeX source files
+\def\beginlines{\par\begingroup\nobreak\medskip\parindent\z@ \obeylines
+ \hrule\kern1pt\nobreak \everypar{\strut}}
+\def\endlines{\kern1pt\hrule\endgroup\medbreak\noindent}
+\def\weakendlines{\kern1pt\hrule\endgroup\medskip\noindent}
+
+\outer\def\exercise{\medbreak
+ \global\advance\exno by 1
+ \noindent\llap{\manual\char'170\rm\kern.15em}% triangle in margin
+ {\ninebf EXERCISE \bf\chapno.\the\exno}\par\nobreak\noindent}
+\def\dexercise{\global\advance\exno by 1
+ \llap{\manual\char'170\rm\kern.15em}% triangle in indented space
+ {\eightbf EXERCISE \bf\chapno.\the\exno}\hfil\break}
+\outer\def\dangerexercise{\d@nger \dexercise}
+\outer\def\ddangerexercise{\dd@nger \dexercise}
+
+\newwrite\ans
+\immediate\openout\ans=answers % file for answers to exercises
+\outer\def\answer{\par\medbreak
+ \immediate\write\ans{}
+ \immediate\write\ans{\string\ansno\chapno.\the\exno:}
+ \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}}
+
+% Editorial notes: some things to watch for.
+
+% f |\ and f ^|\ => insert \/ [e.g., if\/ |\hbox|...]
+% appendi => check for \null [e.g., Appendix~B\null.]
+% ly- => the hyphen is probably omittable
+% ''. and '', => transpose to .'' and ,''
+% dgement => dgment
+
+% Macros for drawing figures (not in Appendix E)
+\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2 }
+\def\hidevrule#1#2{\kern-#1{\dimen0=#1
+ \advance\dimen0 by#2\vrule width\dimen0}\kern-#2 }
+% \makeblankbox puts rules at the edges of a blank box
+% whose dimensions are those of \box0 (assuming nonnegative wd,ht,dp)
+% #1 is rule thickness outside, #2 is rule thickness inside
+\def\makeblankbox#1#2{\hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}%
+ \kern-#1% overlap the rules at the corners
+ \hbox to\wd0{\hidevrule{#1}{#2}%
+ \raise\ht0\vbox to #1{}% set the vrule height
+ \lower\dp0\vtop to #1{}% set the vrule depth
+ \hfil\hidevrule{#2}{#1}}%
+ \kern-#1\hidehrule{#2}{#1}}}}
+\def\maketypebox{\makeblankbox{0pt}{1pt}}
+\def\makelightbox{\makeblankbox{.2pt}{.2pt}}
+
+% \box\bigdot is a null box with a bullet at its reference point
+\newbox\bigdot \newbox\smalldot
+\setbox0=\hbox{$\vcenter{}$} % \ht0 is the axis height
+\setbox1=\hbox to\z@{$\hss\bullet\hss$} % bullet is centered on the axis
+\setbox\bigdot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss}
+\setbox1=\hbox to\z@{$\hss\cdot\hss$} % cdot is centered on the axis
+\setbox\smalldot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss}
+
+% \arrows makes things like <--- text --->
+\def\arrows#1#2{% #1=width, #2=text
+ {\setbox0=\hbox{$\mkern-2mu\mathord-\mkern-2mu$}
+ \hbox to #1{\kern-.055556em$\leftarrow\mkern-6mu$%
+ \cleaders\copy0\hfil
+ \kern.4em #2\kern.4em
+ \cleaders\copy0\hfil
+ $\mkern-6mu\rightarrow$\kern-.055556em}}}
+
+% \samplebox makes the outline of a box, with big dot at reference point
+\def\samplebox#1#2#3#4{% #1=ht, #2=dp, #3=wd, #4=text
+ {\setbox0=\vtop{\vbox to #1{\hbox to #3{}\vss}
+ \nointerlineskip
+ \vbox to #2{}}% now \box0 has the desired ht, dp, and wd
+ \hbox{\copy\bigdot
+ \vrule height.2pt depth.2pt width#3%
+ \kern-#3%
+ \makelightbox
+ \kern-#3%
+ \raise#1\vbox{\hbox to #3{\hss#4\hss}
+ \kern 3pt}}}}
+
+% \sampleglue makes glue between sample boxes
+\newdimen\varunit
+\varunit=\hsize \advance\varunit by-2\parindent
+\divide\varunit by 58 % illustrations in Chapter 12
+\def\sampleglue#1#2{% #1=width, #2=text
+ \vtop{\hbox to #1{\xleaders\hbox to .5\varunit{\hss\copy\smalldot\hss}\hfil}
+ \kern3pt
+ \tabskip \z@ plus 1fil
+ \halign to #1{\hfil##\cr#2\cr}}}
+
+% Indexing macros
+\newif\ifproofmode
+\proofmodetrue % this should be false when making camera-ready copy
+\newwrite\inx
+\immediate\openout\inx=index % file for index reminders
+\newif\ifsilent
+\def\specialhat{\ifmmode\def\next{^}\else\let\next=\beginxref\fi\next}
+\def\beginxref{\futurelet\next\beginxrefswitch}
+\def\beginxrefswitch{\ifx\next\specialhat\let\next=\silentxref
+ \else\silentfalse\let\next=\xref\fi \next}
+\catcode`\^=\active \let ^=\specialhat
+\def\silentxref^{\silenttrue\xref}
+
+\def\marginstyle{\vrule height6pt depth2pt width\z@ \sevenrm}
+
+\chardef\bslash=`\\
+\def\xref{\futurelet\next\xrefswitch}
+\def\xrefswitch{\begingroup
+ \ifx\next|\aftergroup\vxref % case 1 or 2, |arg| or |\arg|
+ \else\ifx\next\<\aftergroup\anglexref % case 3, "\<arg>" means angle brackets
+ \else\aftergroup\normalxref \fi\fi\endgroup} % case 0, "{arg}"
+\def\vxref|{\catcode`\\=\active \futurelet\next\vxrefswitch}
+\def\vxrefswitch#1|{\catcode`\\=0
+ \ifx\next\empty\def\xreftype{2}%
+ \def\next{{\tt\bslash\text}}% type 2, |\arg|
+ \else\def\xreftype{1}\def\next{{\tt\text}}\fi % type 1, |arg|
+ \edef\text{#1}\makexref}
+{\catcode`\|=0 \catcode`\\=\active |gdef\{}}
+\def\anglexref\<#1>{\def\xreftype{3}\def\text{#1}%
+ \def\next{\<\text>}\makexref}
+\def\normalxref#1{\def\xreftype{0}\def\text{#1}\let\next=\text\makexref}
+\def\makexref{\ifproofmode\insert\margin{\hbox{\marginstyle\text}}%
+ \xdef\writeit{\write\inx{\text\space!\xreftype\space
+ \noexpand\number\pageno.}}\writeit
+ \else\ifhmode\kern\z@\fi\fi
+ \ifsilent\ignorespaces\else\next\fi}
+% the \insert (which is done in proofmode only) suppresses hyphenation,
+% so the \kern\z@ is put in to give the same effect in non-proofmode.
+
+% Internal cross references that may change
+\def\sesame{61} % page number for Sesame Street quote
+\def\bmiexno{20} % exercise number for bold math italic
+\def\punishexno{1} % exercise number for `punishment'
+\def\fracexno{6} % exercise number for `\frac'
+\def\vshippage{31} % error message from `\vship'
+\def\storypage{24} % listing of story.tex
+
+\def\checkequals#1#2{\ifnum#1=#2\else
+ \errmessage{Redefine \string#1 to be \the#2}\fi}
+
+% Things for The METAFONTbook only
+\ifx\MFmanual\!\else\endinput\fi
+
+\def\!{\kern-.05em\relax}
+
+\outer\def\displayfig #1 (#2){$$\advance\abovedisplayskip by 3pt
+ \leftline{\indent\figbox{#1}{3in}{#2}\vbox}$$}
+\def\rightfig #1 (#2 x #3) ^#4 {% #2 wide and #3 deep, raised #4
+ \strut\vadjust{\setbox0=\vbox to 0pt{\vss
+ \hbox to\pagewidth{\hfil
+ \raise #4\figbox{#1}{#2}{#3}\vtop \quad}}
+ \dp0=0pt \box0}}
+\def\figbox#1#2#3#4{#4to#3{ % makes a box #2 wide and #3 deep
+ \ifproofmode\kern0pt\hrule\vfill
+ \hsize=#2 \baselineskip 6pt \fiverm\noindent\raggedright
+ (Figure #1 will be inserted here; too bad you can't see it now.)
+ \endgraf\vfill\hrule
+ \else\vfill\hbox to#2{}\fi}}
+
+\def\endsyntax{\begingroup\let\par=\endgraf\medbreak\endgroup\noindent}
+
+\def\decreasehsize #1 {\advance\hsize-#1}
+\def\restorehsize{\hsize=\pagewidth}
+
+\catcode`\@=\active
+\catcode`\"=\active
+\def\ttverbatim{\begingroup \catcode`\@=\other \catcode`\"=\other
+ \catcode`\\=\other
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\$=\other
+ \catcode`\&=\other
+ \catcode`\#=\other
+ \catcode`\%=\other
+ \catcode`\~=\other
+ \catcode`\_=\other
+ \catcode`\^=\other
+ \obeyspaces \obeylines \tt}
+\def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials
+ \catcode`\|=\other \catcode`\@=\other \catcode`\"=\other \obeylines}
+\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}}
+\def@#1@{\begingroup\def\_{\kern.04em
+ \vbox{\hrule width.3em height .6pt}\kern.08em}%
+ \ifmmode\mathop{\bf#1}\else\hbox{\bf#1\/}\fi\endgroup}
+\def"#1"{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\xrefswitch{\begingroup
+ \ifx\next|\aftergroup\vxref % case 1, |arg| or |\arg|
+ \else\ifx\next@\aftergroup\boldxref % case 2, "@arg@" means boldface
+ \else\ifx\next"\aftergroup\italxref % case 4, ""arg"" means boldface
+ \else\ifx\next\<\aftergroup\anglexref % case 3, "\<arg>" means angle brackets
+ \else\aftergroup\normalxref \fi\fi\fi\fi\endgroup} % case 0, "{arg}"
+\def\boldxref@#1@{\def\xreftype{2}\def\text{#1}%
+ \def\next{@\text@}\makexref}
+\def\italxref"#1"{\def\xreftype{4}\def\text{#1}%
+ \def\next{"\text"}\makexref}
+
+\def\pyth+{\mathbin{++}}
+\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
+\def\to{\mathrel{\ldotp\ldotp}}
+\def\dashto{\mathrel{\hbox{-\thinspace-\kern-.05em}}}
+\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}}
+\def\round{\mathop{\rm round}}
+\def\angle{\mathop{\rm angle}}
+\def\reverse{\mathop{\rm reverse}}
+\def\curl{\mathop{\rm curl}}
+\def\tension{\mathop{\rm tension}}
+\def\controls{\mathop{\rm controls}}
+\def\and{\,{\rm and}\,}
+\def\cycle{{\rm cycle}}
+\def\pickup{@pickup@ \thinspace}
+\def\penpos#1{\hbox{\it penpos}_{#1}}
+\def\pentaper#1{\hbox{\it pentaper}_{#1}}
+
+\chardef\hexa=1 % first hex
+\chardef\hexb=2 % top and bot adjusted
+\chardef\hexc=3 % same, bold
+\chardef\hexd=4 % same, confined to box
+\chardef\hexe=5 % penstroked hex
+\chardef\Aa=6 % stick-figure A, golden ratio
+\def\sevenAs{\char7\char8\char9\char10\char11\char12\char13} % same, variants
+\chardef\Az=14 % same, with crooked bar
+\chardef\Ab=15 % \Aa with rectilinear elliptical pen
+\chardef\Ac=16 % same, with the ellipse tilted
+\chardef\beana=17 % kidney bean, default pen
+\chardef\beanb=18 % same, twice as bold
+\chardef\beanc=19 % same, rectilinear elliptical pen
+\chardef\beand=20 % same, with the ellipse tilted
+\chardef\niba=21 % 10x rectilinear ellipse
+\chardef\nibb=22 % same, with the ellipse tilted
+\chardef\nibc=23 % same, 90 degrees titled
+\chardef\IOT=24 % Ionian T
+\chardef\IOS=25 % Ionian S
+\chardef\IOO=26 % Ionian O
+\chardef\IOI=27 % Ionian I
+\chardef\cubea=28 % possible cube
+\chardef\cubeb=29 % impossible cube
+\chardef\bicentennial=30 % star with overlapping strokes
+\chardef\seventh='140 % 1/7, to go with cmssqi8
+
+\newdimen\apspix
+\apspix=31448sp % 8 APS pixels = 52413.64sp, and I'm taking 60% of this
+% to crude approximation, there are about 2\apspix per pt
+
+\def\leftheadline{\hbox to \pagewidth{%
+ \vbox to 10pt{}% strut to position the baseline
+ \llap{\tenbf\folio\kern1pc}% folio to left of text
+ \def\MF{{\manual 89:;<=>:}}% slanted 10pt
+ \tenit\rhead\hfil% running head flush left
+ }}
+\def\rightheadline{\hbox to \pagewidth{%
+ \vbox to 10pt{}% strut to position the baseline
+ \def\MF{{\manual 89:;<=>:}}% slanted 10pt
+ \hfil\tenit\rhead\/% running head flush right
+ \rlap{\kern1pc\tenbf\folio}% folio to right of text
+ }}
+\def\ttok#1{\leavevmode\thinspace\hbox{\vrule\vtop{\vbox{\hrule\kern1pt
+ \hbox{\vphantom{\tt(j}\thinspace{\tt#1}\thinspace}}
+ \kern1pt\hrule}\vrule}\thinspace} % token
+
+\newdimen\tinypix \setbox0=\hbox{\sixrm0} \tinypix=5pt
+\newdimen\pixcorr \pixcorr=\tinypix \advance\pixcorr by-\wd0
+\def\pixpat#1#2#3#4{\vcenter{\sixrm\baselineskip=\tinypix
+ \hbox{#1\kern\pixcorr#2}\hbox{#3\kern\pixcorr#4}}}
diff --git a/macros/plain/contrib/samples/math.tex b/macros/plain/contrib/samples/math.tex
new file mode 100644
index 0000000000..f8c476dd6f
--- /dev/null
+++ b/macros/plain/contrib/samples/math.tex
@@ -0,0 +1,37 @@
+\hoffset=0.4in
+\voffset=0.4in
+\nopagenumbers
+\baselineskip=24pt
+\hsize=5.6in
+Mathematicians in many disciplines like to construct rectangular arrays
+of formulas that have been arranged in rows and columns; such an array
+is called a {\it matrix}. Plain \TeX\ provides control sequences that
+make most common types of matrices easy to print.
+\vskip 24pt
+You can print simple matrices to indicate their product:
+$$\left(\matrix{a&b&c\cr
+ d&e&f\cr}\right) \left(\matrix{u&x\cr
+ v&y\cr
+ w&z\cr}\right).$$
+\vskip 24pt
+More complex matrices are just as easy to print:
+$$A=\left(\matrix{x-\lambda&1&0\cr
+ 0&x-\lambda&1\cr
+ 0&0&x-\lambda\cr}\right).$$
+\vskip 24pt
+Even genertic patterned matrices that use ellipses to indicate rows or columns
+are simple to set up and print:
+$$A=\pmatrix{a_{11}&a_{12}&\ldots&a_{1n}\cr
+ a_{21}&a_{22}&\ldots&a_{2n}\cr
+ \dots&\vdots&\ddots&\vdots\cr
+ a_{m1}&a_{m2}&\ldots&a_{mn}\cr}.$$
+\vskip 24pt
+Determinants are constructed in much the same way with the same ease:
+$$\det\left|\,\matrix{
+ c_0&c_1\hfill&c_2\hfill&\ldots&c_n\hfill\cr
+ c_1&c_2\hfill&c_3\hfill&\ldots&c_{n+1}\hfill\cr
+ c_2&c_3\hfill&c_4\hfill&\ldots&c_{n+2}\hfill\cr
+ \,\vdots\hfill&\,\vdots\hfill&\,\vdots\hfill&&\,\vdots\hfill\cr
+ c_n&c_{n+1}\hfill&c_{n+2}\hfill&\ldots&c_{2n}\hfill\cr}\right|>
+0.$$
+\vfill\eject\end
diff --git a/macros/plain/contrib/samples/mclean.tex b/macros/plain/contrib/samples/mclean.tex
new file mode 100644
index 0000000000..95446c2923
--- /dev/null
+++ b/macros/plain/contrib/samples/mclean.tex
@@ -0,0 +1,50 @@
+%POSTER program from chris mclean
+
+\def\boxit#1{\vbox{\hrule height1pt\hbox{\vrule width1pt\kern10pt
+ \vbox{\kern10pt#1\kern10pt}\kern10pt\vrule width1pt
+ }\hrule height1pt}}
+\font\rm=amr10 scaled\magstep3
+\font\bf=ambx10 scaled\magstep3
+\font\it=amti10 scaled\magstep3
+\font\signed=amb10 scaled\magstep1
+\font\ams=amssmc40 scaled 1000
+\font\sl=amsl10 scaled\magstep3
+\nopagenumbers\baselineskip=36pt
+\vsize=10in
+\vskip .5in
+\boxit{
+\rm\centerline{Better late than never.}
+\it\centerline{Mieux vaut tard que jamais.}
+\sl\centerline{Besser sp\"at als nie.}
+\bf\centerline{Beter laat dan nooit.}
+}
+\vskip .5in
+\boxit{
+\rm\centerline{Like father like son.}
+\it\centerline{Tel p\`ere tel fils.}
+\sl\centerline{So Herr so Knecht.}
+\bf\centerline{Zo vader zo zoon.}
+}
+\vskip .5in
+\boxit{
+\rm\centerline{The faster you run, the slower time passes.}
+\it\centerline{Plus on court vite, moins le temps passe.}
+\sl\centerline{Je schneller mann lauft, je langsamer Zeit geht vorbei.}
+\bf\centerline{De sneller men loopt, de langzamer tijd gaat voorbij.}
+\signed\line{\hfil Albert Einstein}
+}
+\vskip .5in
+\boxit{
+\ams\centerline{Knowledge is POWER!}
+\signed\line{\hfil Sir Francis Bacon}
+}
+\vfil\end
+%
+% This example was typeset using TeX from Stanford University,
+% a QMS Lasergrafix Printer, and a driver from TAMU TUG.
+%
+% For more information contact:
+% Norman W. Naugle Quality Micro Systems
+% P.O. Box 2736 1 Magnum Pass
+% College Station, TX 77841 Mobile, Alabama 36689
+% (409) 845-3104 (205) 633-4300
diff --git a/macros/plain/contrib/samples/memo.tex b/macros/plain/contrib/samples/memo.tex
new file mode 100644
index 0000000000..38198f06af
--- /dev/null
+++ b/macros/plain/contrib/samples/memo.tex
@@ -0,0 +1,40 @@
+%
+% Memo -- Generate a memo banner
+%
+% Use \memodept{ text } to define the department text.
+% Use \memocirc{ text } to define the to field.
+% Use \memodate{ text } to define the date the memo will be sent (default is
+% the current date that TeX processes the file).
+% Use \memofrom{ text } to define the from field.
+% Use \memophone{ text } to define the phone number of the sender.
+% Use \memoloc{ text } to define the location of the sender.
+% Use \memosubj{ text } to define the subject of the memo.
+%
+% Use \memohdr to print the memo banner once the fields above have been defined
+%
+\nopagenumbers
+\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\memotwobx#1#2{\line{{To}\hskip 10pt #1\hfill{Date}\hskip 10pt #2}}
+\def\memothrbx#1#2#3{\line{{From}\hskip 10pt #1\hfill\hfill\hfill
+ {Extension}\hskip 10pt #2\hfill{Mail Code}\hskip 10pt #3}}
+\def\memoltbx#1{\line{{Subject}\hskip 10pt #1\hfill}}
+\def\memoya{DITC} \def\memoyb{You}
+\def\memoyc{\today} \def\memoyd{Me}
+\def\memoye{01-943-XXXX} \def\memoyf{Misc.}
+\def\memoyg{Building 93}
+\def\memodept #1{\def\ya {#1}} \def\memocirc #1{\def\yb {#1}}
+\def\memodate #1{\def\yc {#1}} \def\memofrom #1{\def\yd {#1}}
+\def\memophone #1{\def\ye {#1}} \def\memosubj #1{\def\yf {#1}}
+\def\memoloc #1{\def\yg {#1}}
+\font\fiverm=cmbx5 % Change to CMBX5 if you use new TeX 2.0
+\def\memohdr{\centerline{\fiverm interoffice memorandum}\par
+ \null\par
+ \centerline{\bf NATIONAL PHYSICAL LABORATORY} % Change this line
+ \centerline{\bf {\memoya}}
+ \null\par
+ \memotwobx{\memoyb}{\memoyc}
+ \memothrbx{\memoyd}{\memoye}{\memoyg}
+ \memoltbx{\memoyf}
+ \vskip 10pt}
diff --git a/macros/plain/contrib/samples/politic.tex b/macros/plain/contrib/samples/politic.tex
new file mode 100644
index 0000000000..c893661ba3
--- /dev/null
+++ b/macros/plain/contrib/samples/politic.tex
@@ -0,0 +1,511 @@
+\magnification=1200
+\count0=0
+\newcount\enf\enf=0
+\newcount\test
+\newcount\fotnum\fotnum=0
+\newcount\ftnm\ftnm=0
+\def\en#1{\advance\fotnum by1{${}^{\number\fotnum}$}{#1}\par}
+\def\nt{\advance\ftnm by1${}^{\number\ftnm}$~}
+\def\pnt{\advance\ftnm by1${}^{\number\ftnm}$~~}
+\def\quote#1{{\par\vskip12pt\narrower\narrower\baselineskip=12pt
+\noindent#1\par}}
+\def\cb#1{\centerline{\bf#1}}
+\nopagenumbers
+\baselineskip=24pt
+\raggedbottom
+\headline{\test=\count0\advance\test by\enf
+\ifnum\test>1\rm Bowers, Christopher David\hfil Page \folio
+\else\hfil\fi}
+\footline{\ifnum\count0=1\hss\rm\folio\hss\fi}
+{\baselineskip=12pt
+\strut
+\vfill
+\cb{An Analysis of}
+\cb{Some Determinants of Voter Turnout}
+\vfill
+\cb{Prepared for}
+\cb{Dr. James L. Franke}
+\cb{Professor of Political Science}
+\cb{Texas A\&M University}
+\cb{College Station, Texas}
+\vfill
+\cb{Submitted by}
+\cb{Chris Bowers}
+\cb{Route 5~~Box 1338}
+\cb{College Station, Texas~~77840}
+\vfill
+\cb{March 5, 1984}
+\vfill\eject}
+\strut\vskip1.1truein
+During the past twenty years, one of the most important trends in
+American politics has been the reduction in the percentage of the electorate
+that votes.\pnt In view of this change, this paper will focus upon the
+modern determinants of turnout---in other words, the factors that influence
+whether or not citizens vote.
+
+Knowing what influences turnout is important to political scientists for
+several reasons. First, voter behavior is studied because voting communicates
+the people's desires to government.\pnt These desires, in turn, collectively
+decide the goals of society and thus reflect the priorities of the voters.\pnt
+Thus, many important decisions are made by citizens and politicians based on
+a prior vote.
+
+Second, voter participation is viewed as a barometer of the health of the
+American political system.\pnt Studying voting behavior enables political
+scientists to measure how much support the values and principles of American
+society are given.\pnt The determinants of voting behavior govern how many
+citizens go to the polls. For example, some political scientists believe
+that the more citizens participate in the decision-making process, the more
+democracy a nation has.\pnt When people vote, they feel more a part of
+society\nt and also show that they are satisfied with the government.\pnt
+On the other hand, if no one voted, then democracy would cease to exist in
+the United States.\pnt In other words, the sign of a healthy democracy is
+an active electorate.
+
+Third, studying the determinants of voting behavior enables political
+scientists to find out which groups of people have the most influence on
+the nation's policies.\pnt Since voting is an act of influence, it follows
+that the more people of a certain group vote, the better represented they
+will be.\pnt By studying voting behavior, political scientists can see who
+makes the decisions and for whom they are made.
+
+Fourth, the study of the participation of the electorate lets political
+scientists observe the process of how decisions are made.\pnt For most
+Americans, voting is the only way they participate in politics.\pnt
+Therefore, voting is the chief way by which the means are chosen to direct
+American policy-making.
+
+The last reason for studying voting behavior is that it reveals much about
+human sociology and psychology.\pnt Voting behavior has been examined for
+what it tells about the ``conditions of attitude change, the nature of
+group identifications, the role of personality characteristics, the effects
+of the mass communications media, and the ecological structures of our
+cities.''\pnt Because one of the main goals of the political scientist
+should be to generalize about the political behavior of people, elections are
+ideal laboratories because of the large amount of available, quantifiable,
+and readily accessible information.
+
+When the literature on the determinants of turnout is examined, it is
+surprising to note that over thirty different explanations of voter
+participation have been studied. The factors supposedly governing turnout
+can be split into several categories. The determinants of voter participation
+can be divided into the characteristics of the citizens themselves and the
+characteristics of the political system.\pnt Some of the characteristics of
+the political system influencing electoral activity, such as the candidates,
+campaign expenditures, and the issues, are known as the ``short-term
+forces''\pnt and will not be examined in this paper because they vary with
+each election. Most of the ``long-term forces'' affecting voter turnout,
+such as the legal barriers in some states preventing eligible citizens from
+voting and the lack of meaningful party competition in the states, have
+either been eliminated by federal law or are disappearing naturally.\pnt
+Therefore, they will not be examined either.
+
+The characteristics of individual citizens can be separated into two general
+groups: The demographic variables, which include socioeconomic status, age,
+sex, race, and location of permanent residence, and the attitudinal variables,
+such as feelings about government responsiveness, perceived closeness of the
+race, concern over election outcome, perceived personal effectiveness, and
+the intensity with which citizens identify themselves with a political
+party.\pnt With so many factors possibly influencing the turnout of Americans
+at the polls, it is likely that several factors will have some influence on
+the percentage of the electorate that vote. This paper will investigate
+several of the most prominent theories on voter turnout and will argue that
+socioeconomic status, the perception of external political efficacy (government
+responsiveness), the perception of internal political efficacy (personal
+effectiveness), and the intensity that citizens identify with a political party
+are factors which influence the dependent variable, voter turnout.
+
+The primary hypothesis to be examined is:
+\quote{Among U.S. citizens in 1980, those with a high socioeconomic status
+will tend to vote in that year's presidential election, while those with a
+low socioeconomic status will tend to not vote in that election.}
+\noindent Voter turnout is defined as the proportion of the U.S. voting
+population that
+cast ballots in an election.\pnt For the purposes of this discussion, the
+election to be studied will be the 1980 presidential election. The
+independent variable of the primary hypothesis is socioeconomic status,
+sometimes referred to as social status. Income, education, and occupation
+will be used as measures of socioeconomic status in this investigation,
+as they are in many other studies.\pnt
+
+The empirical evidence in support of this hypothesis is overwhelming.
+Both Zipp et al. and Cassel and Hill cite many studies that support the
+hypothesis, including studies done by Campbell et al. (1960) and Verba and
+Nie (1962).\pnt Zipp seems to indicate that the most comprehensive study
+which demonstrates the validity of this hypothesis was done by Milbrath
+and Goel (1977), but unfortunately the Texas A\&M library does not
+possess this work.\pnt Investigations done by Cassel and Hill (1981),
+Conway (1981), and Maddox (1979) also demonstrate socioeconomic status
+is a good predictor of voter turnout, although at least Conway and
+Cassel and Hill appeared to have used income, education, and age to define
+socioeconomic status.\pnt Additional support in a limited manner comes from
+Reiter (1979), Cavanagh (1981) and Brody (1978). These three all agree that
+income and education are good measures of whether a person will vote.\pnt
+
+Just as there are many supporters of the primary hypothesis,
+there are also many theoretical reasons why socioeconomic status is an
+important factor. The earliest source found was Lane (1959), who argued
+that the social norms and roles of citizens with a low socioeconomic status
+tend to encourage less active political behavior in contrast to the
+norms and roles of those with a high social status.\pnt Lane also points
+out that lower status citizens do not have as many resources, such as time
+and money, which are conducive to participation.\pnt This last argument is
+consistent with the theory first articulated by Anthony Downs. Downs
+analyzed voting from a rational decision-making perspective (similar to
+economic analysis) and concluded that individuals act to maximize their
+expected utility; in other words, citizens will vote only if the expected
+benefits outweigh the expected costs.\pnt Under this approach, voting
+costs ``disenfranchise'' low-income citizens.\pnt
+
+Other sources testify that many reasons related to income or education
+also affect an individual's voting behavior. Milbrath supports the income
+factor: high income
+groups ``tend to be better educated, they are more likely to perceive
+that they have a stake in politics, and they are more likely to interact
+with persons active in politics.''\pnt
+The number of years of formal education an individual has had also tends
+to be associated with the probability that he will cast a ballot. Campbell
+et al. indicate that the more formal education a citizen has received, the more
+likely he is to understand political events. The more political events that
+are understood, the more likely the events will interest him.\pnt In a
+broader sense, it is argued that ``education can enhance understanding of
+the democratic process, inculcate values supportive of citizen participation,
+and increase the citizen's capacity to acquire and process information about
+the political system.''\pnt
+
+What about the data opposing the formidable array of sources supporting the
+primary hypothesis? Well, not many political scientists were willing to
+risk their reputation. The Lone Ranger was Hadley, who argued that income
+was not associated with voter turnout and education was only moderately
+associated with turnout, but even this relationship was disappearing more each
+year.\pnt He bases his conclusion on an extensive survey of 2006 people
+done by Market Opinion Research.\pnt With this data he demonstrates that
+there is only a difference of less than ten percent between voters and
+non-voters at all economic levels.\pnt He also shows that there is only a
+moderate association between education and voting with the poll done by
+Market Opinion Research.\pnt Hadley also notes the large amount of evidence
+that shows although education levels in America have risen, voter turnout
+has declined.\pnt He also mentions a University of Michigan study that
+indicates participation in politics has declined the most rapidly among
+those who have completed college.\pnt
+
+Although Hadley is the only scholar who will oppose the primary hypothesis
+directly, there are many other political scientists who oppose the primary
+hypothesis indirectly when they advance their own explanations about the
+determinants of voter turnout. The search for the factors that influence
+voter turnout continues because there is not one perfect predictor of
+voter behavior; otherwise the debate would have ended long ago. Instead,
+it is likely that there are several factors that jointly affect voter
+turnout.\pnt Thus, although the evidence seems to indicate socioeconomic
+status is the most important determinant of voter turnout, other factors must
+also influence voter behavior. Therefore, the first alternative hypothesis
+to be investigated is:
+\quote{Among U.S. citizens in 1980, those with a high sense of external
+political efficacy will tend to vote in that year's presidential election,
+while those with a low sense of external political efficacy will tend to
+not vote in that election.}
+For many years political scientists thought a voter's sense of political
+efficacy could be defined by a combination of responses to four statements.
+However, Converse (1972) and Balch (1974) argued the four questions measured
+two different concepts: a voter's sense of personal political effectiveness
+(internal political efficacy) and a voter's beliefs about government
+responsiveness (external political efficacy).\pnt Subsequent analyses by
+Abramson and Finifter (1981) and Craig (1979) also support this finding
+strongly.\pnt External political efficacy is measured by a two-item index
+with scores being based on an agree/disagree/don't know trichotomy of
+responses to the following statements: ``I don't think public officials
+care much what people like me think,'' and ``people like me don't have any
+say about what the government does.''\pnt
+
+Several scholars have conducted research on the first alternative hypothesis
+and have concluded that it is sound. Shaffer (1981) used the two-item index
+and concluded that the higher one's sense of external political efficacy was,
+the more likely he was to vote.\pnt The Aldrich and Abramson study (1982)
+also supports the association between external political efficacy and turnout,
+but to a lesser degree.\pnt Both of these studies conclude that external
+political efficacy is a highly significant determinant, but neither quantifies
+the importance of external political efficacy because they are concerned with
+measuring the decline in turnout in the last twenty years. Other studies
+using the ``traditional'' measurement of political efficacy done by Campbell
+et al. (1980), Brody (1978), and Clotfelter and Prysby (1980) agree political
+efficacy is associated with voter turnout.\pnt
+
+There are several theoretical reasons why people who think they are politically
+effective will be more likely to vote. Individuals who perceive themselves
+as being politically capable could feel psychologically inclined to vote,
+whereas those who feel overcome by politics may cease voting.\pnt Also,
+``from a rational choice perspective, one would expect that beliefs
+that the government is responsive would increase the subjective utility in
+voting.''\pnt Furthermore, feelings of external political efficacy are
+related to support for democratic political norms that cherish
+participation.\pnt
+
+However, several scholars analyses do not support the first alternative
+hypothesis. Ashenfelter and Kelly (1975) conclude that the importance
+of political efficacy as a variable is exaggerated, but they include one
+internal political efficacy measure in their index.\pnt Reiter (1979) finds
+that political efficacy has no influence on voter turnout, but he doesn't
+report how he measured political efficacy.\pnt Hill and Cassel (1981) conclude
+that the reduction of efficacy has had little effect on the decline in turnout,
+yet they use the old four item index of political efficacy which has been
+forsaken even by the University of Michigan researchers themselves.\pnt
+Thus, although several studies conclude that political efficacy is not related
+to voter turnout, their usefulness is limited because they did not use the
+new index to measure external political efficacy.
+
+The literature detailing the findings about internal political efficacy
+is also nebulous because of the problems associated with defining the variable.
+However, some researchers have employed the new definition of internal efficacy
+and have found that internal political efficacy is also associated with
+turnout. Therefore, the second alternative hypothesis to be examined is:
+\quote{Among U.S. citizens in 1980, those with a high sense of internal
+political efficacy will tend to vote in that year's presidential election,
+while those with a low sense of internal political efficacy will tend to
+not vote in that election.}
+Internal political efficacy is defined as a voter's sense of personal
+political effectiveness. It usually is measured by a two-item index with
+scores being based on the agree/disagree/don't know trichotomy of responses
+to the following statements: ``Sometimes politics and government seem so
+complicated that a person like me can't really understand what's going on,''
+and ``voting is the only way (to change policies you disagree with).''\pnt
+
+Two scholars have done research which supports the thrust of the hypothesis.
+Hadley constructs an `impotency index' by using the familiar trichotomy of
+responses to the two statements used for external political efficacy and the
+`politics seems so complicated' statement.\pnt With this format, Hadley finds
+that the non-voters feel ten percent to thirty-one percent more impotent
+depending on which statement they were responding to.\pnt Hadley concludes
+``most voters feel politically efficacious. Most refrainers feel politically
+impotent.''\pnt A.~H.~Miller and W.~E.~Miller cite a Center for Political
+Studies report which defines political efficacy as ``the feeling that one
+can have an influence on governmental behavior.''\pnt This report uses
+two variables to measure efficacy, but doesn't specify which two. It
+finds that twenty-six percent more of the voters feel efficacious as
+compared to non-voters.\pnt Moreover, all the studies mentioned above
+which used the traditional four-item index could be said to support to a
+lesser extent the `internal efficacy' hypothesis as much as they support
+the `external efficacy' hypothesis.
+
+Of course, all the four-item index studies which negated the `external
+efficacy' hypothesis disprove the `internal efficacy' hypothesis also to
+an extent. However, no one yet has concluded internal efficacy is not
+related to turnout when using the standard two-item index.
+
+The third alternative hypothesis that will be investigated is:
+\quote{Among U.S. citizens in 1980, those with a high intensity of
+partisan attitude will tend to vote in that year's presidential election,
+while those with a low intensity of partisan attitude will tend to not vote
+in that election.}
+Asher defines party identification to be ``a psychological commitment
+or attachment to a political party that normally predisposes one to
+evaluate that party and its candidates in a favorable light.''\pnt
+The intensity of partisan attitude is examined by Campbell et al. by
+constructing six measures of partisan feeling.\pnt They then investigated
+the relation of voter turnout to the six partisan attitudes by fitting a
+statistical model and using the methods of statistical discrimination and
+multiple regression.\pnt
+
+Many studies agree that intensity of party identification is strongly related
+to voter participation. Flannigan (1972) believes that partisan loyalty is the
+most important factor influencing voter behavior.\pnt Pomper states ``the
+influence of partisanship on electoral behavior is widely accepted.''\pnt
+Campbell et al. first demonstrated a strong theoretical link between the
+two by arguing individuals vote because they want their preferences heard
+as opposed to the non-voters who do not vote because they do not care and
+also that strong feelings of partisan identification add to psychological involvement
+in politics.\pnt From a Downsian perspective, it is to be expected that
+intense feelings of party identification would reduce information costs
+and thus reduce voting costs.\pnt Moreover, partisans would perceive a
+greater benefit from the election of their candidates than someone who
+had no intense feelings on the subject.\pnt Many studies show that as
+the intensity of partisan feelings decrease, so does voter turnout.\pnt
+This finding indirectly supports the association.
+
+Few disagree that the strength of partisan loyalties are related to voter
+turnout. Ashenfelter and Kelly (1981) are almost alone when they write
+``strength of `partisanship' $\ldots$ had little or nothing to do with the
+probability of voting.''\pnt Only Cassel and Hill come close to supporting
+Ashenfelter and Kelly when they conclude that weakening party identification
+is only slightly related to decreasing voter turnout.\pnt
+
+In summary, voting behavior is studied for many reasons. Also, the
+proportion of the electorate that turns out to vote in a presidential
+election is a function of several factors acting simultaneously. Socioeconomic
+status is virtually unchallenged as a determinant of voter behavior. External
+political efficacy and intensity of partisan identification are also generally
+believed by scholars to be factors that determine voter participation. There
+has been very little analysis of internal political efficacy, but the few
+sources who discuss it seem to think it is also a determinant of electoral
+activity. This budding scholar must admit it will be exciting to `explore
+strange, new determinants and go where no political scientist (well, few
+anyway) has gone before.'
+\vfill\eject
+\enf=-1000
+\baselineskip=12pt\parskip=12pt
+\cb{Endnotes}
+\bigskip
+\en{Howard L. Reiter, ``Why is Turnout Down?'' {\it Public Opinion Quarterly},
+43 (1979), p. 297.}
+\en{Sidney Verba and Norman H. Nie, {\it Participation in America: Political
+Democracy and Social Equality} (New York: Harper and Row, 1972), p. 4.}
+\en{Verba and Nie, p. 4.}
+\en{Thomas E. Cavanagh, ``Changes in American Voter Turnout, 1964-1976,''
+{\it Political Science Quarterly}, 96 (1981), p. 53.}
+\en{Richard G. Niemi and Herbert Weisberg, {\it Controversies in American
+Voting Behavior} (San Francisco: W.~H.~Freeman and Company, 1976), p. 2.}
+\en{Verba and Nie, p. 1.}
+\en{Niemi and Weisberg, p. 2.}
+\en{Gabriel A. Almond and Sidney Verba, {\it The Civic Culture: Political
+Attitude, and Democracy in Five Nations} (Princeton, N.J.: Princeton
+University Press, 1963), Chapter 9 as quoted in Verba and Nie, p. 5.}
+\en{Anthony Downs, ``The Causes and Effects of Rational Abstention,'' in
+{\it Controversies in American Voting Behavior}, ed. Richard G. Niemi and
+Herbert Weisberg (San Francisco: W.~H.~Freeman and Company, 1976), p. 33.}
+\en{William H. Flannigan, {\it Political Behavior and the American
+Electorate} (Boston: Allyn and Bacon, 1968), pp. 1-2.}
+\en{Flannigan, pp. 1-2.}
+\en{Eugene Burdick and Arthur J. Brodbeck, {\it American Voting Behavior}
+(New York: The Free Press, 1959), p. 139.}
+\en{Angus Campbell et al., {\it The American Voter} (New
+York: John Wiley \& Sons, 1960), p. 90.}
+\en{Campbell et al., p. 4.}
+\en{Campbell et al., p. 4.}
+\en{Herbert Asher, {\it Presidential Elections and American Politics}, rev.
+ed., (Homewood, Illinois: Dorsey Press, 1980), p. 48.}
+\en{Asher, p. 34.}
+\en{Asher, pp. 48-49.}
+\en{Reiter, p. 298.}
+\en{Cavanagh, p. 53.}
+\en{John F. Zipp et al., ``Political Parties and Political Participation:
+A Reexamination of the Standard Socioeconomic Model,'' {\it Social Forces},
+60 (1982), p. 11.}
+\en{Zipp et al., p. 1141; Carol A. Cassel and David B. Hill, ``Explanations
+of Turnout Decline: A Multivariate Test,'' {\it American Politics Quarterly},
+9 (1981), p. 182.}
+\en{Zipp et al., p. 1141.}
+\en{Cassel and Hill, p. 186; M. Margaret Conway, ``Political Participation
+in Midterm Congressional Elections,'' {\it American Politics Quarterly}, 9
+(1981), 240; Maddox as quoted in Stephen D. Shaffer, ``A Multivariate
+Explanation of Decreasing Turnout in Presidential Elections, 1960-1976,''
+{\it American Journal of Political Science}, 25 (1981), p. 69.}
+\en{Reiter, p. 304-310; Cavanagh, p. 53,58; R.~A.~Brody, ``The Puzzle of
+Political Participation in America,'' pp. 287-324 in {\it The New
+American Political System} ed. A.~King (Washington, D.C.: AEI, 1978) in
+Conway, p. 223, 228.}
+\en{Robert Lane, {\it Political Life} (Glencoe, Illinois 1959), pp. 223-234.}
+\en{Lane, pp. 233-234.}
+\en{Anthony Downs, {\it An Economic Theory of Democracy} (New York: Harper
+and Row, 1957), Chapter 9.}
+\en{Downs, Chapter 9.}
+\en{Lester W. Milbrath, {\it Political Participation} (Chicago: Rand-McNally,
+1965), pp. 116-121.}
+\en{Campbell, pp. 476-477.}
+\en{Conway, p. 223.}
+\en{Arthur T. Hadley, {\it The Empty Polling Booth} (Englewood Cliffs, N.J.:
+Prentice-Hall, Inc., 1978), p. 21-22.}
+\en{Hadley, pp. 9-10.}
+\en{Hadley, p. 22.}
+\en{Hadley, p. 22.}
+\en{Hadley, p. 22.}
+\en{Hadley, p. 22.}
+\en{Neimi and Weisberg, p. 29; Campbell et al., p. 13, 17.}
+\en{Phillip E. Converse, ``Change in the American Electorate'' in {\it The
+Human Meaning of Social Change} ed. Angus Campbell and Phillip E. Converse
+(New York: Russel Sage, 1972) pp. 263-339 in Paul R. Abramson and John H.
+Aldrich, ``The Decline of Electoral Participation in America,'' {\it
+American Political Science Review}, 76 (1982), pp. 502-520; George I. Balch,
+``Multiple Indicators in Survey Research: The Concept `Sense of Political
+Efficacy','' {\it Political Methodology}, 1 (1974), pp. 1-43 in Abramson and
+Aldrich, p. 504.}
+\en{Paul R. Abramson and Ada Finifter, ``On the Meaning of Political Trust:
+New Evidence from Items Introduced in 1978,'' {\it American Journal of
+Political Science} 25 (1981), pp. 297-307 in Abramson and Aldrich, p. 504; Stephen
+C. Craig, ``Efficacy, Trust, and Political Behavior: An Attempt to Resolve
+a Lingering Conceptual Dilemma,'' {\it American Politics Quarterly} 7 (1979),
+pp. 225-239 in Abramson and Aldrich, p. 504.}
+\en{Abramson and Aldrich, p. 510.}
+\en{Shaffer, pp. 92-93.}
+\en{Abramson and Aldrich, pp. 511, 519-520.}
+\en{Campbell et al., p. 105; Brody, pp. 287-324 in Cassel and Hill, p. 182;
+J. Clotfelter and C.~L.~Prysby, {\it Political Choices: A Study of Elections
+and Voters} (New York: Holt, Rinehart \& Winston, 1980) in Cassel and Hill,
+p. 182.}
+\en{Abramson and Aldrich, p. 511.}
+\en{Abramson and Aldrich, p. 511.}
+\en{Abramson and Aldrich, p. 511.}
+\en{Orley Ashenfelter and Stanley Kelly, ``Determinants of Participation
+in Presidential Elections,'' {\it Journal of Law and Economics}, 18 (1975),
+pp. 695-733 in Abramson and Aldrich, p. 511.}
+\en{Reiter, pp. 296-310.}
+\en{Hill and Cassel, p. 194.}
+\en{Hadley, p. 167; Abramson, p. 504.}
+\en{Hadley, p. 167.}
+\en{Hadley, p. 35.}
+\en{Hadley, p. 34.}
+\en{Arthur H. Miller and Warren E. Miller, ``Issues, Candidates, and Partisan
+Divisions in the 1972 American Presidential Election,'' {\it British Journal
+of Political Science}, 5 (1975), pp. 393-434 in Niemi and Weisberg, p. 28.}
+\en{Niemi and Weisberg, p. 28.}
+\en{Asher, p. 34.}
+\en{Campbell et al., p. 67.}
+\en{Campbell et al., p. 72.}
+\en{Flannigan, p. 37.}
+\en{Gerald M. Pomper, {\it Voters' Choice} (New York: Dodd, Mead \& Company,
+1975), p. 18.}
+\en{Campbell et al., p. 97.}
+\en{Abramson and Aldrich, p. 505.}
+\en{Abramson and Aldrich, p. 505.}
+\en{Shaffer, p. 69.}
+\en{Ashenfelter and Kelly, p. 717.}
+\en{Cassel and Hill, p. 67.}
+\vfill\eject
+\cb{Bibliography}
+\leftskip=\parindent
+\parindent=-\parindent
+Abramson, Paul R. and John H. Aldrich. ``The Decline of Electoral
+Participation in America.'' {\it American Political Science Review},
+76 (1982), pp. 502-520.
+
+Asher, Herbert. {\it Presidential Elections and American Politics}, rev.
+ed. Homewood, Illinois: Dorsey Press, 1980.
+
+Campbell, Agnus et al. {\it The American Voter}. New York: John Wiley
+\& Sons, 1960.
+
+Cassel, Carol A. and David B. Hill. ``Explanations of Turnout Decline:
+A Multivariate Test.'' {\it American Politics Quarterly}, 9 (1981), pp.
+181-195.
+
+Cavanagh, Thomas E. ``Changes in American Voter Turnout, 1964-1976.''
+{\it Political Science Quarterly}, 96 (1981), pp. 53-65.
+
+Conway, M. Margaret. ``Political Participation in Midterm Congressional
+Elections.'' {\it American Politics Quarterly}, 9 (1981), pp. 221-244.
+
+Downs, Anthony. ``The Causes and Effects of Rational Abstention'' In
+{\it Controversies in American Voting Behavior}. Ed. Richard G. Niemi and
+Herbert Weisberg. San Francisco: W.~H.~Freeman and Company, 1976, pp. 32-33.
+
+Flannigan, William H. {\it Political Behavior and the American Electorate}.
+Boston: Allyn and Bacon, 1968.
+
+Hadley, Arthur T. {\it The Empty Polling Booth}. Englewood Cliffs, N.J.:
+Prentice-Hall, Inc., 1978.
+
+Niemi, Richard G. and Herbert Weisberg. {\it Controversies in American
+Voting Behavior}. San Francisco: W.~H.~Freeman and Company, 1976, pp. 1-31.
+
+Pomper, Gerald M. {\it Voter's Choice}. New York: Dodd, Mead \& Company,
+1975.
+
+Reiter, Howard L. ``Why is Turnout Down?'' {\it Public Opinion Quarterly},
+43 (1979), pp. 297-311.
+
+Verba, Sidney and Norman H. Nie. {\it Participation in America: Political
+Democracy and Social Equality}. New York: Harper and Row, 1972.
+
+Zipp, John F. et al. ``Political Parties and Political Participation: A
+Reexamination of the Standard Socioeconomic Model.'' {\it Social Forces},
+60 (1982), pp. 1140-1152.
+\message{Done!: \number\ftnm \number\fotnum}
+\bye
diff --git a/macros/plain/contrib/samples/poster.tex b/macros/plain/contrib/samples/poster.tex
new file mode 100644
index 0000000000..ff7cac3d01
--- /dev/null
+++ b/macros/plain/contrib/samples/poster.tex
@@ -0,0 +1,34 @@
+\magnification=1728
+\parindent=0.0in
+\special{down=0,right=0}
+\font\big=amssmc40 at 48truept
+\font\med=amssmc40 at 32truept
+\font\prog=amtt10 at 14.4truept
+\font\vbig=aminch at 1truein
+\nopagenumbers
+\hsize=7.9truein
+\vsize=10.4truein
+\voffset=0.3truein
+\hoffset=0.3truein
+\vfill
+\centerline{\big Texas A\&M}
+\medskip
+\centerline{\big MicroComputer Club}
+\vfill
+\centerline{\med YES Computers}
+\medskip
+\centerline{\med will be demonstrating}
+\medskip
+\centerline{\med the new Apple}
+\medskip
+\centerline{\vbig MACINTOSH}
+\vfill
+\centerline{\sl Members bringing systems to All-Nite-Fair:}
+\centerline{\sl Know what extra equipment you will need}
+\centerline{\sl and exactly what software you plan to exhibit.}
+\vfill
+\hbox to\hsize{2 February 1984\hfil Room 105C}
+\hbox to\hsize{7:30-9:30\hfil Zachry}
+\bigskip
+\centerline{\tt BRUN ALL-NITE-FAIR}
+\eject\end
diff --git a/macros/plain/contrib/samples/quicktex.tex b/macros/plain/contrib/samples/quicktex.tex
new file mode 100644
index 0000000000..e5770593f1
--- /dev/null
+++ b/macros/plain/contrib/samples/quicktex.tex
@@ -0,0 +1,101 @@
+%
+% QUICKTEX.TEX
+% -------------------
+%
+% Serve ad una esecuzione veloce, che segnala tutti gli errori di sintassi
+% e non produce alcun file .DVI; e' utile con testi lunghi.
+%
+% Uso: per controllare un file di nome XXX.TEX, dare
+% i comandi
+% $ tex quicktex
+% (scritte varie)
+% * \input xxx
+% (esegue e segnala errori)
+% * \bye
+%
+% Errori ecc. vanno a finire in VELOCE.LIS.
+%
+%
+
+\font\dummy=DUMMY
+\tracinglostchars=0
+\font\tenrm=DUMMY %cmr10 % roman text
+\font\preloaded=DUMMY %cmr9
+\font\preloaded=DUMMY %cmr8
+\font\sevenrm=DUMMY %cmr7
+\font\preloaded=DUMMY %cmr6
+\font\fiverm=DUMMY %cmr5
+
+\font\teni=DUMMY %cmmi10 % math italic
+\font\preloaded=DUMMY %cmmi9
+\font\preloaded=DUMMY %cmmi8
+\font\seveni=DUMMY %cmmi7
+\font\preloaded=DUMMY %cmmi6
+\font\fivei=DUMMY %cmmi5
+
+\font\tensy=DUMMY %cmsy10 % math symbols
+\font\preloaded=DUMMY %cmsy9
+\font\preloaded=DUMMY %cmsy8
+\font\sevensy=DUMMY %cmsy7
+\font\preloaded=DUMMY %cmsy6
+\font\fivesy=DUMMY %cmsy5
+
+\font\tenex=DUMMY %amex10 % math extension
+
+\font\preloaded=DUMMY %cmss10 % sans serif
+\font\preloaded=DUMMY %cmssq8
+
+\font\preloaded=DUMMY %cmssi10 % sans serif italic
+\font\preloaded=DUMMY %cmssqi8
+
+\font\tenbf=DUMMY %cmbx10 % boldface extended
+\font\preloaded=DUMMY %cmbx9
+\font\preloaded=DUMMY %cmbx8
+\font\sevenbf=DUMMY %cmbx7
+\font\preloaded=DUMMY %cmbx6
+\font\fivebf=DUMMY %cmbx5
+
+\font\tentt=DUMMY %cmtt10 % typewriter
+\font\preloaded=DUMMY %cmtt9
+\font\preloaded=DUMMY %cmtt8
+
+\font\preloaded=DUMMY %cmsltt10 % slanted typewriter
+
+\font\tensl=DUMMY %cmsl10 % slanted roman
+\font\preloaded=DUMMY %cmsl9
+\font\preloaded=DUMMY %cmsl8
+
+\font\tenit=DUMMY %cmti10 % text italic
+\font\preloaded=DUMMY %cmti9
+\font\preloaded=DUMMY %cmti8
+\font\preloaded=DUMMY %cmti7
+
+\message{more fonts,}
+\font\preloaded=DUMMY %cmu10 % unslanted text italic
+
+\font\preloaded=DUMMY %cmbi10 % bold math italic
+\font\preloaded=DUMMY %cmbsy10 % bold math symbols
+
+\font\preloaded=DUMMY %amcsc10 % caps and small caps
+
+\font\preloaded=DUMMY %cmssbx10 % sans serif bold extended
+
+\font\preloaded=DUMMY %amdunh10 % Dunhill style
+
+\font\preloaded=DUMMY %cmr7 scaled \magstep4 % for titles
+\font\preloaded=DUMMY %cmtt10 scaled \magstep2
+\font\preloaded=DUMMY %cmssbx10 scaled \magstep2
+
+\font\preloaded=DUMMY %manfnt % METAFONT logo and dragon curve and special
+%symbols DUMMY
+
+
+\output={\setbox0=\box255\deadcycles=0}
+\newtoks\output
+\frenchspacing
+\hbadness=10000
+
+\let\immediate=\relax \def\write#1#{{\afterassignment}\toks0=}
+% pagina 401 del TeXbook
+
+
diff --git a/macros/plain/contrib/samples/referencer.tex b/macros/plain/contrib/samples/referencer.tex
new file mode 100644
index 0000000000..75ff793769
--- /dev/null
+++ b/macros/plain/contrib/samples/referencer.tex
@@ -0,0 +1,166 @@
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+% Version 2.1
+% 6/27/86
+% Written by: B.A. Leland (XHEMIA:BAL)
+% Calif Inst of Technology
+% Recognizes only ascending sequential footnote numbers, prints
+% everything else as read in the list
+% Required defs:
+% dash : defined as $^{-}$
+% checkref#1 : to determine if the reference has yet been
+% cited --- calls quickcnt
+% note#1 : initializes flags, counters, calls refext
+% refext#1 : does all the work, calls checkref, then prints
+% the footnote numbers. If newref=true write the
+% reference to the output file with its footnote
+% number, and redefine the def of the reference to
+% equal the current footnote number. If the
+% references are anything but ascending sequential
+% numbers, print the numbers separated by commas.
+% quickcnt#1 : based on Knuth's length macro (TeXbook, p.219)
+% counts the no. of non-blank characters in the
+% reference. If > or = 4, set the newref flag to
+% true.
+% Required misc:
+% counters
+% ftnum: previous footnote number of a newly cited ref
+% prev: previous PRINTED footnote number
+% flags
+% dsh : true = enable dash printing for no. ranges
+% newref : true = a reference that has not been cited
+%
+%\immediate\openout1=reflist % open the ouput file 'reflist.tex'
+%\newcount\ftnum % footnote number counter
+%\newcount\prev % previous footnote number
+%\newif\ifdsh % dsh=true: enable "dash" printing for ranges of #s
+%\def\dash{$^{-}$} % a dash for ranges of numbers
+%---------------------------------------------------------------------
+%\def\note#1{{
+%\dshtrue % toggle dsh flag to enable range printing
+%\prev=0 % initialize prev counter
+%\count0=0 % initialize cycle counter
+%\refext#1\end}} % call refext with list of references as argument
+%---------------------------------------------------------------------
+%\def\refext#1{
+%\ifx#1\end % \end is appended at end of reference list
+% \ifdsh % dsh=true do nothing
+% \else $^{\number\prev}$\fi\let\next=\relax % finish the range, quit
+%\else\checkref#1 % see if the reference has been cited previously
+% \ifnewref\global\advance\ftnum by1 % new reference,
+% % inc ftnum counter
+% \immediate\write1{\noexpand\item{$^{\the\ftnum}$}#1}
+% \xdef#1{\the\ftnum} % write the reference to the output file,
+% % and redefine the reference to be
+% % the current footnote number
+% \fi
+% \ifnum\count0=0 $^{#1}$ % first cycle, print the first no.
+% \else \ifnum\prev=#1 % duplicate reference, ignore
+% \else\advance\prev by1 % increment the prev counter
+% \ifnum\prev=#1 % if true, sequence is sequential
+% \ifdsh % if dsh enabled,
+% \dash % print a dash for the range
+% \dshfalse % and disable the dsh flag
+% \fi
+% \else\ifdsh $^{,\,#1}$ % if dsh enabled, print ", #"
+% \else % a dash was printed previously
+% \advance\prev by-1 % restore prev counter
+% $^{\number\prev ,\,#1}$ % finish the range, and
+% % print the new (non-sequential) no.
+% \dshtrue % toggle the dsh flag
+% \fi
+% \fi
+% \fi
+% \fi
+% \prev=#1 % save current footnote number in prev counter
+% \advance\count0 by1 % increment cycle counter
+% \let\next=\refext % recursive call
+%\fi
+%\next}
+%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+%\newcount\qckcntr
+%\newif\ifnewref % newref=true: 1st occurance of a given reference
+%---------------------------------------------------------------------
+%\def\checkref#1{{
+%\global\newreffalse % toggle the newref flag
+%\qckcntr=0 % initialize cycle "register"
+%\expandafter\quickcnt#1\end % expand the passed reference appending \end
+%\relax}}
+%---------------------------------------------------------------------
+%\def\quickcnt#1{
+%\ifx#1\end \let\next=\relax % relax and quit
+%\else\advance\qckcntr by1 % increment cycle register
+% \ifnum\qckcntr<4 % <4 cycles means nothing, so do nothing
+% \else\global\newreftrue % >= 4 means the reference has not been
+% % previously cited, toggle the newref flag
+% \fi
+% \let\next=\quickcnt % recursive call
+%\fi
+%\next}
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%________________________BEGIN__DEFS__________________________________
+%
+\immediate\openout1=reflist % open the ouput file 'reflist.tex'
+\newcount\ftnum % footnote number counter
+\newcount\prev % previous footnote number
+\newif\ifdsh % dsh=true: enable dash printing
+\def\dash{$^{-}$}
+\def\note#1{{\dshtrue \prev=0 \count0=0 \refext#1\end}}
+\def\refext#1{\ifx#1\end
+\ifdsh\else $^{\number\prev}$\fi\let\next=\relax
+\else\checkref#1\ifnewref\global\advance\ftnum by1 \immediate
+\write1{\noexpand\item{$^{\the\ftnum}$}#1}\xdef#1{\the\ftnum}\fi
+\ifnum\count0=0 $^{#1}$\else \ifnum\prev=#1 \else
+\advance\prev by1 \ifnum\prev=#1 \ifdsh \dash\dshfalse\fi\else
+\ifdsh $^{,\,#1}$\else
+\advance\prev by-1 $^{\number\prev ,\,#1}$\dshtrue \fi\fi\fi\fi
+\prev=#1 \advance\count0 by1 \let\next=\refext\fi \next}
+%
+\newcount\qckcntr
+\newif\ifnewref % newref=true: 1st occurance of a given reference
+\def\checkref#1{{\global\newreffalse\qckcntr=0
+\expandafter\quickcnt#1\end \relax}}
+\def\quickcnt#1{\ifx#1\end \let\next=\relax
+\else\advance\qckcntr by1 \ifnum\qckcntr<4 \else\global\newreftrue\fi
+\let\next=\quickcnt\fi \next}
+%
+%__________________________END__DEFS__________________________________
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%
+% S A M P L E U S A G E
+%
+% \def\a{this is reference a}
+% \def\aaa{aaaaa}
+% \def\b{this is reference b which has \reff }
+% \def\c{this is reference c which has \reff }
+% \def\d{this is reference d which has \reff }
+% \def\e{this is reference e which has \reff }
+% \def\g{this is reference e which has \reff }
+% \def\reff{reference f}
+%
+% {\rm
+% \ftnum=9
+% This is the example\note{\a} of
+% a\note{\b} paragraph
+% which contains footnotes that will ultimately end up on
+% a reference page.
+% This is the
+% second\note{\a} which
+% is supposed to be the same as the first reference.
+% If we continue, we\note{\c\b} should get another
+% one\note{\d} and\note{\a} so\note{\e} on.
+% If one needs to recall a couple of references\note{\aaa} one
+% uses a the same macro\note{\a\b\c\d\e} as before.
+% It is supposed to handle\note{\a\b\d\e} most any situation
+% up to and almost including\note{\e\d\c\b\a} except
+% this\note{\b\a\d\e} or this.\note{\a\b\c\d\d} One
+% must be cautioned that this has not been fully tested as yet..........
+% \vskip0.5truein
+% \immediate\closeout1
+% \vfill\eject
+% \baselineskip=14pt
+% \parindent=0pt
+% \parskip=0.1truein
+% \input reflist.tex
+% }
+% \vfill\end
+%
diff --git a/macros/plain/contrib/samples/reidel.tex b/macros/plain/contrib/samples/reidel.tex
new file mode 100644
index 0000000000..28be825269
--- /dev/null
+++ b/macros/plain/contrib/samples/reidel.tex
@@ -0,0 +1,53 @@
+% This macro is for Reidel pub. camera ready sheets
+%
+% ***************************************************
+\magnification=\magstep1
+\def\oneskip{\vskip 12pt}
+\def\titleskip{\vskip 4truecm}
+\hsize=15.2 truecm
+\vsize=22.7 truecm
+\parindent=2.5truecm
+\nopagenumbers
+{\bf CHAPTER TITOLO}
+\oneskip
+\oneskip
+Author's name
+\titleskip
+ABSTRACT. Viene presentata una prova di stampa per un manoscritto in
+camera--ready da pubblicare in {\sl Structure and Dynamics of Elliptical
+Galaxies}.
+\oneskip
+\oneskip
+{\bf Paragrafo 1}\par
+Da qui si puo' iniziare a scrivere il testo. Si ricordi che per andare a capo
+si deve premere per due volte il tasto return.
+\oneskip
+\oneskip
+{\bf Paragrafo 2}\par
+Questo e' il secondo paragrafo
+
+
+BIBLIOGRAFIA (ESEMPIO)
+\oneskip
+\hyphenpenalty=10000
+
+\def\ref#1\par{\parshape=2 0in 15.2 truecm 1.0 truecm 14.2 truecm {#1} \par}
+\parskip=0pt
+\parindent=0pt
+\ref
+Schwarzschild, M., 1979. {\sl Astroph.\ J.}, {bf 232}, 236.
+
+
+\ref
+Tremaine, S., 1983. In: {\sl Internal Kinematics and Dynamics of Galaxies,
+IAU Symposium No.\ 100}, p.\ 411, ed.\ Athanassoula,E.O., Reidel, Dordrecht,
+The Netherlands.
+\vfill\eject
+
+\end
+
+
+
+
+
+
diff --git a/macros/plain/contrib/samples/sample.tex b/macros/plain/contrib/samples/sample.tex
new file mode 100644
index 0000000000..4f2bad1bb9
--- /dev/null
+++ b/macros/plain/contrib/samples/sample.tex
@@ -0,0 +1,48 @@
+\font \rom=cmmi10 scaled\magstep1
+\font \testfont=cmsy7 scaled\magstep0% change this for another font
+\hsize 350pt \vsize 600pt
+\def\\{\vskip6pt}
+\hbox to 350pt{\hskip30pt
+\hbox to 40pt{\hfill\rom0\hfill}\ignorespaces
+\hbox to 40pt{\hfill\rom1\hfill}\ignorespaces
+\hbox to 40pt{\hfill\rom2\hfill}\ignorespaces
+\hbox to 40pt{\hfill\rom3\hfill}\ignorespaces
+\hbox to 40pt{\hfill\rom4\hfill}\ignorespaces
+\hbox to 40pt{\hfill\rom5\hfill}\ignorespaces
+\hbox to 40pt{\hfill\rom6\hfill}\ignorespaces
+\hbox to 40pt{\hfill\rom7\hfill}}
+\\
+\hbox to 350pt{\hskip30pt
+\vrule\hfill\vrule\hfill\vrule\hfill\vrule\hfill
+\vrule\hfill\vrule\hfill\vrule\hfill\vrule\hfill\vrule
+\hskip-320pt\vbox{\halign{\hbox to 0pt{\hskip-30pt\hfill\rom
+ \char'47 #\hfill}&\ignorespaces
+\hbox to 40pt{\hfill\testfont\char'#\hfill}&\ignorespaces
+\hbox to 40pt{\hfill\testfont\char'#\hfill}&\ignorespaces
+\hbox to 40pt{\hfill\testfont\char'#\hfill}&\ignorespaces
+\hbox to 40pt{\hfill\testfont\char'#\hfill}&\ignorespaces
+\hbox to 40pt{\hfill\testfont\char'#\hfill}&\ignorespaces
+\hbox to 40pt{\hfill\testfont\char'#\hfill}&\ignorespaces
+\hbox to 40pt{\hfill\testfont\char'#\hfill}&\ignorespaces
+\hbox to 40pt{\hfill\testfont\char'#\hfill}\cr\noalign{\hrule\\}
+000&000&001&002&003&004&005&006&007\cr\noalign{\\\hrule\\}
+010&010&011&012&013&014&015&016&017\cr\noalign{\\\hrule\\}
+020&020&021&022&023&024&025&026&027\cr\noalign{\\\hrule\\}
+030&030&031&032&033&034&035&036&037\cr\noalign{\\\hrule\\}
+040&040&041&042&043&044&045&046&047\cr\noalign{\\\hrule\\}
+050&050&051&052&053&054&055&056&057\cr\noalign{\\\hrule\\}
+060&060&061&062&063&064&065&066&067\cr\noalign{\\\hrule\\}
+070&070&071&072&073&074&075&076&077\cr\noalign{\\\hrule\\}
+100&100&101&102&103&104&105&106&107\cr\noalign{\\\hrule\\}
+110&110&111&112&113&114&115&116&117\cr\noalign{\\\hrule\\}
+120&120&121&122&123&124&125&126&127\cr\noalign{\\\hrule\\}
+130&130&131&132&133&134&135&136&137\cr\noalign{\\\hrule\\}
+140&140&141&142&143&144&145&146&147\cr\noalign{\\\hrule\\}
+150&150&151&152&153&154&155&156&157\cr\noalign{\\\hrule\\}
+160&160&161&162&163&164&165&166&167\cr\noalign{\\\hrule\\}
+170&170&171&172&173&174&175&176&177\cr}
+\\\hrule\vskip-.5pt}}
+\vskip 12pt\setbox0\vbox{\hbox{\testfont(}\vskip1.5pt}\baselineskip 1\ht0
+\rom
+Prova di stampa
+\bye
diff --git a/macros/plain/contrib/samples/shutes.tex b/macros/plain/contrib/samples/shutes.tex
new file mode 100644
index 0000000000..380752a994
--- /dev/null
+++ b/macros/plain/contrib/samples/shutes.tex
@@ -0,0 +1,54 @@
+\magnification=\magstep1
+\nopagenumbers
+\voffset=1truein
+\hoffset=1.5truein
+\parindent=0.in
+\hsize=4truein
+\obeylines
+\hskip0.5truein{\bf Ode to a Heineken Beer}
+\vskip .5in
+Nothing so slakes a Texas thirst
+As a beer whose delectable bubbles burst
+On a palate, tongue, and esophagus
+Where the taste bud cluster's gregarious.
+\bigskip
+
+And nothing so pleases a Texas taste
+As a beer you can feel from throat to waist
+Caressing and soothing the gastro track
+With a taste and a texture ambrosiac.
+\bigskip
+
+That beer makes other beers feel cursed:
+When {\it they}\/ bubble best, the comparison's {\it worst}\/!
+What beer produces this luscious foam
+That trickles and tickles it long way home?
+\bigskip
+
+What brew transcends the delicious level
+To make a gourmet beer drinker revel?
+Why Heineken beer is the beer named first
+By the drinkers of beer who are most well versed.
+\bigskip
+
+Their sipping, with accolades interspersed,
+Is gripping because of their compliments tersed
+Through lips that are willingly, killingly pursed
+To receive the draught that is fittingly first.
+\bigskip
+
+Their eyes are graced, their lips are kissed
+By the reineken, feineken Heineken mist,
+And their noses feel they have been wet-nurs'd
+When the tiny, Heine-ken bubbles burst!
+\vskip.5truein
+{\hskip 1.5truein \sl Robert E. Shutes}
+{\hskip 1.5truein \sl April 18, 1974}
+\bye
+% This example was typeset using TeX from Stanford University,
+% a QMS Lasergrafix Printer, and a driver from TAMU TUG.
+% For more information contact:
+% Norman W. Naugle Quality Micro Systems
+% P. O. Box 2736 1 Magnum Pass
+% College Station, TX 77841 Mobile, Alabama 36689
+% (409) 845-3104 (205) 633-4300
diff --git a/macros/plain/contrib/samples/sizes.tex b/macros/plain/contrib/samples/sizes.tex
new file mode 100644
index 0000000000..d15b704d7e
--- /dev/null
+++ b/macros/plain/contrib/samples/sizes.tex
@@ -0,0 +1,34 @@
+\parindent=0pt\centerline{These are the font sizes that are available.}
+\centerline{(Ones with asterisks have the full set of fonts.)}
+\centerline{\tt[tex.samples]sizes.tex}
+\def\shsz#1/{\font\curr=cmbx10 at#1truept\curr
+Roman type at #1 point.\par}
+\def\ghsz#1/{\font\curr=cmr10 at#1truept\curr
+Roman type at #1 point${}^*$.\par}
+\ghsz3.33/
+\ghsz3.65/
+\ghsz4.00/
+\ghsz4.38/
+\ghsz4.80/
+\ghsz5.00/
+\ghsz5.47/
+\shsz5.76/
+\ghsz6.00/
+\ghsz6.67/
+\ghsz7.30/
+\ghsz8.00/
+\ghsz8.77/
+\ghsz9.60/
+\ghsz10.00/
+\ghsz10.95/
+\shsz11.52/
+\ghsz12.00/
+\shsz13.83/
+\ghsz14.40/
+\shsz16.59/
+\shsz17.28/
+\shsz19.91/
+\shsz20.73/
+\shsz24.88/
+\shsz29.86/
+\bye
diff --git a/macros/plain/contrib/samples/sum.tex b/macros/plain/contrib/samples/sum.tex
new file mode 100644
index 0000000000..9830e9eab5
--- /dev/null
+++ b/macros/plain/contrib/samples/sum.tex
@@ -0,0 +1,54 @@
+
+\magnification = \magstep1
+\font\ninerm=amr9
+\centerline{\bf An Elementary Sum\footnote*{\ninerm A nice little proof of
+a beautiful, well known theorem. This theorem was proved in 1736
+by Leonhard Euler (1707--1783).}}
+\vskip 15 pt
+\nopagenumbers
+\centerline{\sl We show that $\sum_{n=1}^\infty{1\over{n^2}}={{\pi^2}\over{6}}$
+,}
+\centerline{\sl using only elementary trigonometry and algebra!}
+\vskip 15pt
+
+\noindent
+For the moment fix $n>0$ and for $1\leq
+k \leq n$ set $\theta_k = {{k\pi}\over{(2n + 1)}}$.
+The first step is to use De~Moivre's
+formula to construct a polynomial whose roots are $\cot^2(\theta_k), k = 1,
+\dots , n$. Recall that
+$$\eqalign{\sin[(2n+1)\theta]&=\Im(e^{(2n+1)i\theta})\cr
+ &=\Im\{[\cos(\theta) + i \sin(\theta)]^{2n+1}\}\cr
+ &=\sum_{k=0}^n(-1)^k{{2n+1}\choose{2k+1}}\sin^{2k+1} (\theta)\cos^{2(n-k)}
+(\theta)\cr
+ &=\Bigl[\sum_{k=0}^n (-1)^k{{2n+1}\choose{2k+1}}\cot^{2(n-k)}(\theta)
+\Bigr]\Bigl[\sin^{2n+1}(\theta)\Bigr]\cr}$$
+Since $\sin({{k\pi}\over{2n+1}})\neq 0$ for $k=1,\dots,n$, the roots of
+$p(x)=\sum_{k=0}^n{{2n+1}\choose{2k+1}} (-1)^kx^{n-k}$ are exactly $\cot^2(
+\theta_k)$.
+
+For any polynomial $p(x)=a_nx^n+a_{n-1} x^{n-1} + \dots + a_0$, the sum of the
+roots is equal to ${a_{n-1}}/{a_n}$. Therefore,
+$$\sum_{k=1}^n \cot^2(\theta_k)={{{2n+1}\choose{3}}\over{{2n+1}\choose{1}}}=
+{{(2n+1)2n(2n-1)}\over{3\cdot2\cdot(2n+1)}}={{n(2n-1)}\over{3}}.$$
+$$\sum_{k=1}^n\csc^2(\theta_k)=\sum_{k=1}^n 1-\cot^2(\theta_k)=
+{{2(n+1)n}\over3}.
+$$
+Also on $[0,1]$, we know that $\tan(x) \geq x \geq \sin(x)$. Thus,
+$$\tan(\theta_k)\geq \theta_k \geq \sin(\theta_k)$$
+$$\cot^2(\theta_k)\leq {1\over{\theta_k^2}}\leq\csc^2(\theta_k)$$
+$${{n(2n-1)}\over{3}}\leq\sum_{k=1}^n{1\over{\theta_k^2}}
+\leq{{2n(n+1)}\over3}$$
+$${{\pi^2 n(2n-1)}\over{3(2n+1)^2}}\leq\sum_{k=1}^n{1\over{k^2}}\leq
+{{\pi^2 2n(n+1)}\over{3(2n+1)^2}}$$
+An application of the sandwich theorem completes the proof:
+$$\lim_{n\to\infty}\sum_{k=1}^n {1\over{k^2}}={{\pi^2}\over6}.$$
+\bye
+%
+% This example was typeset using TeX from Stanford University,
+% a QMS Lasergrafix Printer, and a driver from TAMU TUG.
+% For more information contact:
+% Norman W. Naugle Quality Micro Systems
+% P.O. Box 2736 1 Magnum Pass
+% College Station, TX 77841 Mobile, Alabama 36689
+% (409) 845-3104 (205) 633-4300
diff --git a/macros/plain/contrib/samples/tables.tex b/macros/plain/contrib/samples/tables.tex
new file mode 100644
index 0000000000..7955bc5052
--- /dev/null
+++ b/macros/plain/contrib/samples/tables.tex
@@ -0,0 +1,311 @@
+%-*-tex-*-
+% Copyright Michael J. Ferguson, INRS-Telecommunications (1985,1986)
+% All rights reserved.
+\catcode`\@=11
+
+%======= Additional active Characters ===========
+% ALL ACTIVE CHARACTERS MUST BE DECLARED AND DEFINED AT THE VERY
+% BEGINNING OR THERE IS A DANGER OF INCORRECT TOKENIZATION
+% ======== THESE ARE USED IN THE TABLE MACROS =========
+\message{<< Additional Active Characters >>}
+\catcode`\|= \active
+\def|{\ifmmode \vert\else \char`\|\fi} % effectively undoes activeness
+\def\q@m{\string"}
+\catcode`\"=\active \def"{\char`\"}
+% update \dospecials
+\toksdef\toks@@=2
+\toks@{\do \"}\toks@@ =\expandafter{\dospecials}\xdef\dospecials{\the\toks@@\the\toks@}
+\toks@{\do \|}\toks@@ =\expandafter{\dospecials}\xdef\dospecials{\the\toks@@\the\toks@}
+%=== these are redefined inside the table macros =====
+
+
+%============= Table making macros ============
+% the basic format is
+% \begintable
+% <special definitions for this table>
+% \begintableformat
+% format as in halign except it needs ## instead of #
+% in tableformat, " means strut column
+% spacing controlled by \left, \center, \right
+% can use \math or \displaymath in conjuction with spacing
+% \endtableformat
+% \br{<struts>} .... | .... | .... " ..... | .... \er{<stuff>} (rows)
+% \- (horizontal rules)
+% ....etc
+% \endtable
+%
+% each row has format
+% \br{<..>} <item> | <item} " .... | <item> \er{<..>}
+% \br, \er mean beginning of row, end of row
+% in table | means rule, " means no rule in strut column
+% \: is standard strut, | is standard vrule
+%
+% \tablespread {to <dimen>} width of table
+% \tr=width of rules (default .4pt)
+% \midtabglue sets glue in table (default 0pt plus 1fill)
+% also can set explicit hrules and vrules
+% tokens (e.g. \tablespread, \tr, \midtabglue, etc.) can be set in \everytable
+
+% these macros require that | and " be active during the entire
+% document to work correctly. ... although some definitions specifically
+% set them active
+\newcount\a@lignstate \a@lignstate=0 %0 -- between lines after \cr
+ %1 -- beginning of line in \bl
+ %2 -- midline
+ %3 -- endline in \el
+\def\hssf{\hskip 0pt plus 1fill minus 1fill}
+\def\n@ewaligndefs{\def\center##1{\hssf ##1\hssf\null}
+ \def\left##1{##1\hssf\null}
+ \def\right##1{\hssf ##1\null}}
+\newdimen\trulesize
+\let\tr=\trulesize
+\trulesize = .4pt
+\def\zerocenteredbox#1{\ifmmode \ifinner \setbox2 =\hbox{$#1$}\else
+ \setbox2 =\hbox{$\displaystyle#1$}\fi
+ \else \setbox2 =\hbox{#1}\fi
+ \setbox0=\hbox{\lower.5ex\hbox{$\vcenter{\box2}$}}\ht0=0pt\dp0 =0pt\box0}
+\let\zb=\zerocenteredbox
+
+%this macro creates a strut with the that is higher by #2 and deeper than #3
+% than the natural size of #1 ... the sizes may be negative
+\def\modifystrut#1#2#3{\setbox4=\hbox{#1}\dimen0=\ht4
+ \advance \dimen0 by #2 \dimen2 = \dp4
+ \advance \dimen2 by #3
+ \vrule width 0pt height \dimen0 depth \dimen2}
+\let\mst=\modifystrut
+%general math form
+\def\math#1{\relax $\relax#1\relax$}
+\def\displaymath #1{\relax$\displaystyle #1\relax$}
+
+
+%
+\newskip\tcs
+\newtoks\tablespread
+\newskip\midtabglue \midtabglue = 0pt plus 1fill
+\newtoks\everytable \everytable = {\relax}
+
+{\catcode`\|=\active \catcode`\" = \active
+ \gdef\begintable{\vbox\bgroup \tcs=.5em % uses font in force when entering
+ \catcode`\|=\active
+ \catcode`\"=\active
+ \def\:{\relax \vrule height 2.5ex depth .9ex width 0pt}
+ \def\-{\ifcase\a@lignstate \fulltablerule{\tr}
+ \else
+ \thrule{\tr}\fi}
+ \let\t@xx =\relax % for premature expansions
+ \everycr={\noalign{\global\a@lignstate=0}}
+ \def\fulltablerule##1{\noalign{\hrule height
+ ##1}}
+ \def\thrule##1{\omit\leaders\hrule height ##1\hfill}
+ \def\center{\hskip\tcs\hss ########\hss\hskip\tcs}
+ \def\left{\hskip\tcs ########\hss\hskip\tcs}
+ \def\right{\hskip\tcs\hss ########\hskip\tcs}
+ \def\sprule{\tvrule{2.5\tr}}
+ \def|{\ifcase\a@lignstate \def\t@xx{\tvrule{\tr}}\or
+ \def\t@xx{\tvrule{\tr}}\or
+ \def\t@xx{\unskip&\tvrule{\tr}&}\else
+ \def\t@xx{\tvrule{\tr}}\fi\t@xx}
+ \def\|{\ifcase\a@lignstate \def\t@xx{\sprule}\or
+ \def\t@xx{\sprule}\or
+ \def\t@xx{\unskip&\sprule&}\else
+ \def\t@xx{\sprule}\fi\t@xx}
+ \def"{&########&} % for table format
+ \def\br##1{\global\a@lignstate=1 ##1\unskip\global\a@lignstate=2&}
+ \def\er##1{\global\a@lignstate=3\unskip&##1\unskip
+ \global\a@lignstate=0\cr}
+ \def\tvrule##1{\hss\vrule width ##1\hss}
+ \def~{\penalty\@M \hphantom{0}}
+% % changes ~ to be phantom of width .5em
+ \tablespread = {}
+ \the\everytable
+ }
+ \gdef\begintableformat #1\endtableformat{\offinterlineskip \tabskip = 0pt
+ \edef\t@blform{####\tabskip =\midtabglue &#1&####\tabskip=0pt\cr}
+% % adds rules front and back
+ \n@ewaligndefs
+ \def"{\ifcase\a@lignstate \def\t@xx{\relax}\or
+ \def\t@xx{\relax}\or
+ \def\t@xx{\unskip&&}\else
+ \def\t@xx{\relax}\fi\t@xx}
+ \edef\h@align{\halign \the\tablespread}
+ \h@align\bgroup\span\t@blform}
+ }% " and | are always active in INRSTEX
+
+\def\use#1{\omit\mscount=#1 \advance\mscount by -1\multiply\mscount by2
+ \loop\ifnum\mscount>1 \sp@n\repeat
+ \ifnum\mscount>0 \span \else \relax \fi}
+\let\sp=\span
+\let\om = \omit
+\def\sa#1{\setbox0=\hbox{#1}\hbox to \wd0{}}
+\def\endtable{\crcr\egroup\egroup}
+
+\catcode`\@=12
+
+******************************************
+\def\uncatcodespecials{\catcode`@=12\def\do##1{\catcode`##1=12}\dospecials}
+\def\setupverbatim{\tt\obeylines\uncatcodespecials\obeyspaces}
+{\obeyspaces\global\let =\ }
+\def\beginshowoff{\par\begingroup\setupverbatim\doverbatim}
+{\catcode`\!=0 \catcode`\\=12
+!obeylines!gdef!doverbatim^^M#1\endshowoff{#1!endgroup!medbreak!filbreak!smallskip}}
+
+\input table
+
+\centerline{\bf Table}
+\bigskip
+The following illustrate the procedure for using the {\it INRStable\/}
+macros. See {\it The TUGboat}, vol.~7, no.~2, June, 1986, pp.~106--109.
+The characters {\tt "} and {\tt |} are active throughout the document,
+but this does not affect their use, except that following spaces are
+ignored. From the macro:
+\vskip.5truein
+
+\beginshowoff
+%============= Table making macros ============
+% the basic format is
+% \begintable
+% <special definitions for this table>
+% \begintableformat
+% format as in halign except it needs ## instead of #
+% in tableformat, " means strut column
+% spacing controlled by \left, \center, \right
+% can use \math or \displaymath in conjuction with spacing
+% \endtableformat
+% \br{<struts>} .... | .... | .... " ..... | .... \er{<stuff>} (rows)
+% \- (horizontal rules)
+% ....etc
+% \endtable
+%
+% each row has format
+% \br{<..>} <item> | <item} " .... | <item> \er{<..>}
+% \br, \er mean beginning of row, end of row
+% in table | means rule, " means no rule in strut column
+% \: is standard strut, | is standard vrule
+%
+% \tablespread {to <dimen>} width of table
+% \tr=width of rules (default .4pt)
+% \midtabglue sets glue in table (default 0pt plus 1fill)
+% also can set explicit hrules and vrules
+% tokens (e.g. \tablespread, \tr, \midtabglue, etc.) can be set in \everytable
+\endshowoff
+
+{}\vskip.5truein
+\centerline{ % see The TeXbook, p. 247
+\begintable
+\begintableformat
+\center " \center " \center % 3 centered columns, separated by struts
+\endtableformat
+\br{} \sa{Dividend} "\sa{Dividend} "\sa{Dividend} \er{} %optional sample row
+ %\sa means sample column (for width)
+\- % horizontal rule
+\br{\:|} \use{3} AT\&T Common Stock \er{|} %\use{3} means use 3 columns
+\-
+\br{\:|} Year | Price | Dividend \er{|}
+\-
+\br{\:|} 1971 | 41--54 | \$2.60 \er{|}
+\-
+\br{\:|} ~~~2 | 41--54 | ~2.70 \er{|}
+\-
+\br{\:|} ~~~3 | 46--55 | ~2.87 \er{|}
+\-
+\br{\:|} ~~~4 | 40--53 | ~3.24 \er{|}
+\-
+\br{\:|} ~~~5 | 45--52 | ~3.40 \er{|}
+\-
+\br{\:|} ~~~6 | 41--54 | ~~.95\rlap* \er{|}
+\-
+\br{\:}\use{3} \left{* (first quarter only)}
+\endtable }
+
+\vskip.5truein
+\beginshowoff
+\input table
+\centerline{ % see The TeXbook, p. 247
+\begintable
+\begintableformat
+\center " \center " \center % 3 centered columns, separated by struts
+\endtableformat
+\br{} \sa{Dividend} "\sa{Dividend} "\sa{Dividend} \er{} %optional sample row
+ %\sa means sample column (for width)
+\- % horizontal rule
+\br{\:|} \use{3} AT\&T Common Stock \er{|} %\use{3} means use 3 columns
+\-
+\br{\:|} Year | Price | Dividend \er{|}
+\-
+\br{\:|} 1971 | 41--54 | \$2.60 \er{|}
+\-
+\br{\:|} ~~~2 | 41--54 | ~2.70 \er{|}
+\-
+\br{\:|} ~~~3 | 46--55 | ~2.87 \er{|}
+\-
+\br{\:|} ~~~4 | 40--53 | ~3.24 \er{|}
+\-
+\br{\:|} ~~~5 | 45--52 | ~3.40 \er{|}
+\-
+\br{\:|} ~~~6 | 41--54 | ~~.95\rlap* \er{|}
+\-
+\br{\:}\use{3} \left{* (first quarter only)}
+\endtable }
+\endshowoff
+\vfill\eject
+
+{}\vskip.5truein
+\centerline{
+\begintable
+\def\sprule{\tvrule{5\tr}} % special rule defines \|
+ % \tr = .4pt
+\begintableformat&\center\endtableformat % repeating columns
+\-
+\br{\:|} \use{6} XYZABC \er{|\mst{\:}{3pt}{3pt}\rlap{\it ** i}}
+ % \mst{<token>}{<dimen1>}{<dimen2>} means modified strut derived from token
+ % with dimen1 extra height and dimen2 extra depth
+\-
+\br{\:|} \use{3} XYZ | \use{3} ABC \er{|\mst{\:}{2pt}{2pt}}
+\fulltablerule{5\tr} %explicit horizontal rule
+ %can also use \use\tvrule{<dimen>} for partial rules
+\br{\:|} X | Y | Z \| A | B | C \er{|}
+\-
+\br{\:|} 372.466 | 493.7 " 45 \| 124 | 489 | 280 \er{|}
+\-
+\br{\:|} 372.40~ | 493.7 | 45 \| 124 | 489 | 280 \er{|}
+\br{|} " " \| \use{3}\- \er{|}
+\br{\:|} 372.~~~ | 493.7 | 45 \| 124 | 489 | 280 \er{|\rlap{ \it ** ii}}
+\-
+\br{\:|} \use{2} | 832 \| abc | 774 |$\int$\er{|\mst{$\int$}{0pt}{3pt}}
+\br{|} \use{2}\zb{XY/A} |\use{4}\- \er{|}
+ % \zb{<item>} means zero centered box (with no height or depth)
+\br{\:|} \use{2} |qrr \| aaa | 799 | \er{|\rlap{ \it ** iii}}
+\-
+\endtable}
+
+\vskip.5truein
+\beginshowoff
+\centerline{
+\begintable
+\def\sprule{\tvrule{5\tr}} % special rule defines \|
+ % \tr = .4pt
+\begintableformat&\center\endtableformat % repeating columns
+\-
+\br{\:|} \use{6} XYZABC \er{|\mst{\:}{3pt}{3pt}\rlap{\it ** i}}
+ % \mst{<token>}{<dimen1>}{<dimen2>} means modified strut derived from token
+ % with dimen1 extra height and dimen2 extra depth
+\-
+\br{\:|} \use{3} XYZ | \use{3} ABC \er{|\mst{\:}{2pt}{2pt}}
+\fulltablerule{5\tr} %explicit horizontal rule
+ %can also use \use\tvrule{<dimen>} for partial rules
+\br{\:|} X | Y | Z \| A | B | C \er{|}
+\-
+\br{\:|} 372.466 | 493.7 " 45 \| 124 | 489 | 280 \er{|}
+\-
+\br{\:|} 372.40~ | 493.7 | 45 \| 124 | 489 | 280 \er{|}
+\br{|} " " \| \use{3}\- \er{|}
+\br{\:|} 372.~~~ | 493.7 | 45 \| 124 | 489 | 280 \er{|\rlap{ \it ** ii}}
+\-
+\br{\:|} \use{2} | 832 \| abc | 774 |$\int$\er{|\mst{$\int$}{0pt}{3pt}}
+\br{|} \use{2}\zb{XY/A} |\use{4}\- \er{|}
+ % \zb{<item>} means zero centered box (with no height or depth)
+\br{\:|} \use{2} |qrr \| aaa | 799 | \er{|\rlap{ \it ** iii}}
+\-
+\endtable}
+\endshowoff
+\bye
diff --git a/macros/plain/contrib/samples/tb0cyr.tex b/macros/plain/contrib/samples/tb0cyr.tex
new file mode 100644
index 0000000000..dfd0f87975
--- /dev/null
+++ b/macros/plain/contrib/samples/tb0cyr.tex
@@ -0,0 +1,578 @@
+% tb12cyr.tex
+
+\font\tencyr=mcyr10
+\input cyracc.def
+%\input xfont.chart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ***** XFONT.CHART ***** 15 Aug 85
+%
+% These macros were extracted from Knuth's WEBMAC.TeX.
+
+\catcode`\@=11
+
+\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant
+
+% macros for font tables
+\def\oddline#1{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\hex{#1x}}}\smash{\box0}\cr
+ \noalign{\nointerlineskip}}
+\def\evenline{\cr\noalign{\hrule}}
+\def\chartstrut{\lower4.5pt\vbox to14pt{}}
+% In the TeXbook, each chart drops to the bottom of the page;
+% suppress this and the ensuing page break.
+%\def\beginchart#1{$$\postdisplaypenalty=-10000 \global\count@=0 #1
+\def\beginchart#1{$$\global\count@=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\count@}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\count@ 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}
+
+\catcode`\@=12
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\cyr{\tencyr\cyracc}
+
+\setfirstfoot{\centerline{\vbox{\hsize=\onenarrowcolwd
+ \vskip 1pc
+ \beginchart\tencyr
+ \normalchart
+ \endchart
+ \smallskip
+ \centerline{The AMS cyrillic font -- |MCYR10|}
+ \medskip
+ {\cyr Meshchanski\u\i\ universitet, nakhodyashchi\u\i sya
+ na puti k Neskuchnomu, prazdnoval na dnyakh svo\u\i\ %
+ pyatidesyatiletni\u\i\ yublie\u\i. Kogo vozili v Tity ili
+ gorodskuyu bol\cprime nitsu, tot, konechno, pomnit
+ zdorovenne\u\i shi\u\i, tr\"ekh\`etazhny\u\i\ domishche po
+ pravuyu ruku s vyvesko\u\i\ <Bogadel\cprime naya i Meshchanskie
+ uchilishcha> i tomu navernoe vstrechalis\cprime\ na puti verenitsy
+ uchenicheskikh par, solidno progulivaemykh nadziratelyami.}\endgraf
+ \vskip-.5pc
+ }}}
+
+\sectitle Fonts<
+
+\Title Mathematical Symbols\cr
+ and Cyrillic Fonts\cr
+ Ready for Distribution
+\\Barbara Beeton\cr
+ American Mathematical Society
+\endx
+
+\pagexref{cyril}
+
+% The text of this article has been changed from what was published
+% in TUGboat vol 6 #2, owing to a change in the names of the fonts
+% involved.
+
+The first general release of fonts created at the American Mathematical
+Society will be made in August, at about the time of the TUG meeting.
+This first release will consist of cyrillic and two 128-character fonts of
+mathematical symbols, all in various sizes and weights. It is our
+intention that these fonts be added to the standard distribution, and
+we will make an effort to provide the necessary files to all sites from
+which the \TeX\ package is being distributed. It will not be possible to
+provide this material directly to users, since the Society's DEC~20
+computer has proved singularly unsuitable for making tapes that can be
+read by any other kind of machine.
+
+A master tape will be delivered to Stanford by one of the AMS
+attendees at the TUG meeting. This tape will contain the \MF78 sources
+necessary to generate the fonts in distribution format, along with
+several files of macros, documentation and user instructions. Actual
+addition of this material to distribution tapes (and PC diskettes) has
+not yet been fully arranged, but it should be possible to announce
+these arrangements at the TUG meeting.
+
+\section {} Cyrillic
+
+The cyrillic font contains all letters found in the modern
+(post-revolutionary) cyrillic alphabet, as well as others found by
+Mathematical Reviews to be necessary for rendering bibliographic
+information in Russian, Ukrainian, Serbian, Georgian, and other Slavic
+and non-Slavic languages ordinarily published in cyrillic. Accents
+which normally occur in these languages, as well as in such words as
+names of mathematicians whose work is regularly translated into
+Russian or one of the other languages covered by MR, are included in
+the font, as are all the digits and ordinary punctuation. Several
+cells are still empty: the number of such cells is not sufficient to
+hold all the additional pre-revolutionary Russian letters, and there
+is not yet enough experience to indicate what else might most usefully
+(for MR) be included.
+
+The ``basic'' cyrillic font is |MCYR10|. Names have been assigned to
+a number of variations, not all of which exist yet. (In particular,
+there are no plans yet to create the \MF\ descriptions of the true
+``italic'' letters.)
+$$\vbox{\halign{#\quad&&{\tt#\unskip}\hfil\enspace&#\hfil\quad\cr
+ &MCYR & lightface & MCSL & slanted\cr
+ &MCB & bold & MCBSL & bold slanted\cr
+ &MCBX & bold extended & MCSS & sans serif\cr
+ &MCI & italic & MCSSB & bold sans serif\cr
+ &MCBI & bold italic\cr
+}}$$
+Font names have been assigned so that compression
+to 6~characters, using the first~3 and last~3 letters of longer names
+(a standard built into most implementations of \TeX\ for operating systems
+having such a limit, and announced through \TeX hax by David Fuchs),
+will always be unique.
+
+Keying of cyrillic to be rendered with this font is in accord with the
+current MR transliteration scheme, e.g.
+{\obeylines
+ Khrushch\"ev (|Khrushch\"ev|)${}\to{}${\cyr Khrushch\"ev}
+ Zhurnal (|Zhurnal|)${}\to{}${\cyr Zhurnal}
+ Ki{\"\i}v (|Ki{\"\i}v|)${}\to{}${\cyr Ki{\"\i}v}
+} % end \obeylines
+
+\NoBlackBoxes
+\noindent
+|\font\tencyr=mcyr10 \def\cyr{\tencyr\cyracc} {\cyr ...}|\ sets the
+stage for proper transition to and from cyrillic.
+Most of the translation from keyed input to cyrillic is implemented by
+ligature instructions in the font itself. A few letters require a
+``chain'' of ligatures: sh${}\to{}${\cyr sh}, shc${}\to{}${\cyr shc}
+(an obvious absurdity, but the roman combination never occurs legitimately),
+shch${}\to{}${\cyr shch}. Letters rendered with accents in transliteration
+are trapped by macros defined in the file |CYRACC.DEF|\null:\hskip0pt plus 3em
+\u\i\ (|\u\i|)${}\to{}${\cyr\u\i},\penalty-2000\ %
+\=\i\ (|\=\i|)${}\to{}${\cyr\=\i},
+\"\i\ (|\"\i|)${}\to{}${\cyr\"\i}. Both the macro accent traps and
+ligatures do the right thing in ordinary roman text and in |{\cyr ...}|;
+however, cyrillic items in tables cannot reliably be specified in the
+preamble, and in individual cells |\cyr| should be preceded by |\relax|
+to prevent premature expansion, and thus loss, of the macro instructions.
+
+\BlackBoxes
+
+Hyphenation is not automatically suppressed, but the patterns used will
+be those for English in the absence of a local override. (We do not know
+whether any Russian patterns exist.) For short passages, as the above
+sample, or isolated words, good luck may prevail.
+
+Documentation accompanying this font will include full keying instructions,
+the ligature specifications, and, of course, |CYRACC.DEF|\null. Should the
+transliteration scheme in local use be different from the MR scheme
+(for example, an earlier MR scheme rendered {\cyr shch} as \v s\v c),
+it should be quite easy to modify |CYRACC.DEF| to accommodate it, and,
+if ligature changes are absolutely necessary, they may be implemented
+using the \TeX ware programs |TFtoPL| and |PLtoTF|.
+
+\section {} Mathematical symbols
+
+Mathematicians expanding the boundaries of their chosen areas often
+find that no suitably unambiguous notation exists with which to express
+new concepts. First attempts usually consist in seeking out ever more
+exotic alphabets, but this fount is rather rapidly exhausted.
+Non-alphabetic symbols modeled after, or constructed from combinations
+of, existing ones is probably the next most profitable approach. And
+failure in either of those attempts may yield something truly new.
+In any event, the net result is proliferation of symbols beyond
+what is available to most ordinary typesetting systems.
+
+The original symbol fonts, |CMSY| and |CMEX| (currently |AMSY| and
+|AMEX|), contain the most frequently used mathematical symbols, plus
+whatever else was needed for {\sl The Art of Computer Programming},
+volume 2, and other projects that Don Knuth was working on at the
+time. Many other symbols are in common use in other subfields of
+mathematics, and the AMS and MR found it necessary to construct them.
+We have now filled one entire ``extra symbols'' font and most of a
+second.
+
+\NoBlackBoxes
+
+The naming scheme devised for these ``extra symbols'' fonts also
+leaves room for a third. ``Medium'' and ``bold'' refer to the weight,
+medium being matched to the weight of the ``basic'' Computer Modern
+symbols in the |CMSY| font.
+$$\vbox{\halign{#\quad&&{\tt#\unskip}\hfil\enspace&#\hfil\quad\cr
+ &MSXM & symbols 1 medium & MSXB & symbols 1 bold\cr
+ &MSYM & symbols 2 medium & MSYB & symbols 2 bold\cr
+ &MSZM & symbols 3 medium & MSZB & symbols 3 bold\cr
+}}$$
+
+\BlackBoxes
+
+Following the charts of the two symbol fonts, the symbols are listed
+by type, corresponding to the conventions of {\sl The \TeX book},
+Appendix F. For each symbol is shown the font (1 or 2) and hex location,
+the symbol itself, and the symbol name. Symbol names have been
+assigned in accordance with Don Knuth's principles, and reviewed by
+him, but all responsibility for errors and misinterpretations of
+his comments resides with the AMS and MR staff members who worked
+on the font development.
+
+\newpage
+\onenarrow
+\collgt=56pc
+\resetpagelgt
+
+% Box the charts; otherwise the end display is too attractive
+% as a break point, and this becomes 3 pages.
+
+\font\tenxsy=msxm10
+
+\vbox{\beginchart\tenxsy
+ \normalchart
+ \endchart
+ \medskip
+ \centerline{Extra symbols, font 1 -- |MSXM10|}
+} % end box
+
+\vfil
+
+\font\tenxxsy=msym10
+
+\vbox{\beginchart\tenxxsy
+ \normalchart
+ \endchart
+ \medskip
+ \centerline{Extra symbols, font 2 -- |MSYM10|}
+} % end box
+
+\unskip
+\eject
+\onemedium
+\collgt=\normalcollgt
+\resetpagelgt
+
+% Definitions adapted from TeXbook, Appendix F, and from MANMAC.
+\def\beginsymbols{$$ % \displayindent=16pt
+ \halign\bgroup
+ &\qquad\hbox to6pt{\hss##\hss}\kern.2em&\hbox to20pt{##\hss}\enspace
+ &\hbox to10pt{\hss##\hss}\enspace&\hbox to80pt{##\hss}\cr}
+\outer\def\endsymbols{\crcr\egroup$$}
+
+\noindent
+{\it Lowercase Greek letters.}
+\beginsymbols
+2&\hex{7A}&\tenxxsy\char"7A&|\digamma|&
+ 2&\hex{7B}&\tenxxsy\char"7B&|\varkappa|\cr
+\endsymbols
+
+\medbreak
+
+\noindent
+{\it Uppercase blackboard bold letters.}
+\beginsymbols
+2&\hex{41}&\tenxxsy\char"41&|\Bbb A|&
+ & & &|...|&
+ 2&\hex{5A}&\tenxxsy\char"5A&|\Bbb Z|\cr
+\endsymbols
+
+\medbreak
+
+\noindent
+{\it Hebrew letters.}
+\beginsymbols
+2&\hex{69}&\tenxxsy\char"69&|\beth|&
+ 2&\hex{6A}&\tenxxsy\char"6A&|\gimel|&
+ 2&\hex{6B}&\tenxxsy\char"6B&|\daleth|\cr
+\endsymbols
+
+\medbreak
+
+\noindent
+{\it Miscellaneous symbols of type Ord.}
+\beginsymbols
+2&\hex{7E}&\tenxxsy\char"7E&|\hbar|&
+ 1&\hex{38}&\tenxsy\char"38&|\backprime|&
+ 1&\hex{39}&\tenxsy\char"39&|\varprime|\cr
+2&\hex{7D}&\tenxxsy\char"7D&|\hslash|&
+ 1&\hex{03}&\tenxsy\char"03&|\square|&
+ 1&\hex{04}&\tenxsy\char"04&|\blacksquare|\cr
+2&\hex{3F}&\tenxxsy\char"3F&|\varnothing|&
+ 1&\hex{46}&\tenxsy\char"46&|\bigstar|&
+ 1&\hex{4E}&\tenxsy\char"4E&|\blacktriangle|\cr
+1&\hex{73}&\tenxsy\char"73&|\circledS|&
+ 1&\hex{4F}&\tenxsy\char"4F&|\triangledown|&
+ 1&\hex{48}&\tenxsy\char"48&|\blacktriangledown|\cr
+2&\hex{40}&\tenxxsy\char"40&|\nexists|&
+ 1&\hex{06}&\tenxsy\char"06&|\lozenge|&
+ 1&\hex{07}&\tenxsy\char"07&|\blacklozenge|\cr
+1&\hex{7B}&\tenxsy\char"7B&|\complement|&
+ 1&\hex{5D}&\tenxsy\char"5D&|\measuredangle|&
+ 1&\hex{5E}&\tenxsy\char"5E&|\sphericalangle|\cr
+\endsymbols
+
+\medbreak
+
+\noindent
+{\it Binary operations.}
+\beginsymbols
+1&\hex{75}&\tenxsy\char"75&|\dotplus|&
+ 1&\hex{65}&\tenxsy\char"65&|\Cap|&
+ 1&\hex{7D}&\tenxsy\char"7D&|\circledcirc|\cr
+2&\hex{72}&\tenxxsy\char"72&|\smallsetminus|&
+ 1&\hex{64}&\tenxsy\char"64&|\Cup|&
+ 1&\hex{7E}&\tenxsy\char"7E&|\circledast|\cr
+2&\hex{6E}&\tenxxsy\char"6E&|\ltimes|&
+ 1&\hex{66}&\tenxsy\char"66&|\curlywedge|&
+ 1&\hex{7F}&\tenxsy\char"7F&|\circleddash|\cr
+2&\hex{6F}&\tenxxsy\char"6F&|\rtimes|&
+ 1&\hex{67}&\tenxsy\char"67&|\curlyvee|&
+ 1&\hex{01}&\tenxsy\char"01&|\boxplus|\cr
+1&\hex{68}&\tenxsy\char"68&|\leftthreetimes|&
+ 1&\hex{5A}&\tenxsy\char"5A&|\barwedge|&
+ 1&\hex{0C}&\tenxsy\char"0C&|\boxminus|\cr
+1&\hex{69}&\tenxsy\char"69&|\rightthreetimes|&
+ 1&\hex{59}&\tenxsy\char"59&|\veebar|&
+ 1&\hex{02}&\tenxsy\char"02&|\boxtimes|\cr
+2&\hex{3E}&\tenxxsy\char"3E&|\divideontimes|&
+ 1&\hex{5B}&\tenxsy\char"5B&|\doublebarwedge|&
+ 1&\hex{00}&\tenxsy\char"00&|\boxdot|\cr
+1&\hex{7C}&\tenxsy\char"7C&|\intercal|&
+ 1&\hex{05}&\tenxsy\char"05&|\centerdot|\cr
+\endsymbols
+
+\medbreak
+
+\noindent
+{\it Relations.}
+\beginsymbols
+1&\hex{35}&\tenxsy\char"35&|\leqq|&
+ 1&\hex{3D}&\tenxsy\char"3D&|\geqq|&
+ 1&\hex{2B}&\tenxsy\char"2B&|\doteqdot|\cr
+1&\hex{36}&\tenxsy\char"36&|\leqslant|&
+ 1&\hex{3E}&\tenxsy\char"3E&|\geqslant|&
+ 1&\hex{24}&\tenxsy\char"24&|\circeq|\cr
+1&\hex{30}&\tenxsy\char"30&|\eqslantless|&
+ 1&\hex{31}&\tenxsy\char"31&|\eqslantgtr|&
+ 1&\hex{50}&\tenxsy\char"50&|\eqcirc|\cr
+1&\hex{2E}&\tenxsy\char"2E&|\lesssim|&
+ 1&\hex{26}&\tenxsy\char"26&|\gtrsim|&
+ 1&\hex{2C}&\tenxsy\char"2C&|\triangleq|\cr
+1&\hex{2F}&\tenxsy\char"2F&|\lessapprox|&
+ 1&\hex{27}&\tenxsy\char"27&|\gtrapprox|&
+ 1&\hex{3A}&\tenxsy\char"3A&|\risingdotseq|\cr
+2&\hex{6C}&\tenxxsy\char"6C&|\lessdot|&
+ 2&\hex{6D}&\tenxxsy\char"6D&|\gtrdot|&
+ 1&\hex{3B}&\tenxsy\char"3B&|\fallingdotseq|\cr
+1&\hex{6E}&\tenxsy\char"6E&|\lll|&
+ 1&\hex{6F}&\tenxsy\char"6F&|\ggg|&
+ 1&\hex{76}&\tenxsy\char"76&|\backsim|\cr
+1&\hex{37}&\tenxsy\char"37&|\lessgtr|&
+ 1&\hex{3F}&\tenxsy\char"3F&|\gtrless|&
+ 1&\hex{77}&\tenxsy\char"77&|\backsimeq|\cr
+\noalign{\vskip 1pt}
+1&\hex{51}&\tenxsy\char"51&|\lesseqgtr|&
+ 1&\hex{52}&\tenxsy\char"52&|\gtreqless|&
+ 2&\hex{73}&\tenxxsy\char"73&|\thicksim|\cr
+\noalign{\vskip 2pt}
+1&\hex{53}&\tenxsy\char"53&|\lesseqqgtr|&
+ 1&\hex{54}&\tenxsy\char"54&|\gtreqqless|&
+ 2&\hex{74}&\tenxxsy\char"74&|\thickapprox|\cr
+\noalign{\vskip 1pt}
+1&\hex{6A}&\tenxsy\char"6A&|\subseteqq|&
+ 1&\hex{6B}&\tenxsy\char"6B&|\supseteqq|&
+ 2&\hex{75}&\tenxxsy\char"75&|\approxeq|\cr
+1&\hex{62}&\tenxsy\char"62&|\Subset|&
+ 1&\hex{63}&\tenxsy\char"63&|\Supset|&
+ 1&\hex{6C}&\tenxsy\char"6C&|\bumpeq|\cr
+1&\hex{40}&\tenxsy\char"40&|\sqsubset|&
+ 1&\hex{41}&\tenxsy\char"41&|\sqsupset|&
+ 1&\hex{6D}&\tenxsy\char"6D&|\Bumpeq|\cr
+1&\hex{34}&\tenxsy\char"34&|\preccurlyeq|&
+ 1&\hex{3C}&\tenxsy\char"3C&|\succcurlyeq|&
+ 1&\hex{47}&\tenxsy\char"47&|\between|\cr
+1&\hex{32}&\tenxsy\char"32&|\curlyeqprec|&
+ 1&\hex{33}&\tenxsy\char"33&|\curlyeqsucc|&
+ 1&\hex{74}&\tenxsy\char"74&|\pitchfork|\cr
+1&\hex{2D}&\tenxsy\char"2D&|\precsim|&
+ 1&\hex{25}&\tenxsy\char"25&|\succsim|&
+ 1&\hex{5F}&\tenxsy\char"5F&|\varpropto|\cr
+2&\hex{77}&\tenxxsy\char"77&|\precapprox|&
+ 2&\hex{76}&\tenxxsy\char"76&|\succapprox|&
+ 1&\hex{74}&\tenxsy\char"74&|\smallamalg|\cr
+1&\hex{43}&\tenxsy\char"43&var.\ |\triangleleft|&
+ 1&\hex{42}&\tenxsy\char"42&var.\ |\triangleright|&
+ 1&\hex{4A}&\tenxsy\char"4A&|\blacktriangleleft|\cr
+1&\hex{45}&\tenxsy\char"45&|\trianglelefteq|&
+ 1&\hex{44}&\tenxsy\char"44&|\trianglerighteq|&
+ 1&\hex{49}&\tenxsy\char"49&|\blacktriangleright|\cr
+1&\hex{0F}&\tenxsy\char"0F&|\vDash|&
+ 1&\hex{0D}&\tenxsy\char"0D&|\Vdash|&
+ 1&\hex{0E}&\tenxsy\char"0E&|\Vvdash|\cr
+1&\hex{60}&\tenxsy\char"60&|\smallsmile|&
+ 2&\hex{70}&\tenxxsy\char"70&|\shortmid|&
+ 1&\hex{29}&\tenxsy\char"29&|\therefore|\cr
+1&\hex{61}&\tenxsy\char"61&|\smallfrown|&
+ 2&\hex{71}&\tenxxsy\char"71&|\shortparallel|&
+ 1&\hex{2A}&\tenxsy\char"2A&|\because|\cr
+2&\hex{7F}&\tenxxsy\char"7F&|\backepsilon|\cr
+\endsymbols
+
+\medbreak
+
+\noindent
+{\it Negated relations.}
+\beginsymbols
+2&\hex{04}&\tenxxsy\char"04&|\nless|&
+ 2&\hex{05}&\tenxxsy\char"05&|\ngtr|&
+ 2&\hex{1C}&\tenxxsy\char"1C&|\nsim|\cr
+2&\hex{02}&\tenxxsy\char"02&|\nleq|&
+ 2&\hex{03}&\tenxxsy\char"03&|\ngeq|&
+ 2&\hex{1D}&\tenxxsy\char"1D&|\napprox|\cr
+2&\hex{0A}&\tenxxsy\char"0A&|\nleqslant|&
+ 2&\hex{0B}&\tenxxsy\char"0B&|\ngeqslant|&
+ 2&\hex{2E}&\tenxxsy\char"2E&|\nshortmid|\cr
+2&\hex{14}&\tenxxsy\char"14&|\nleqq|&
+ 2&\hex{15}&\tenxxsy\char"15&|\ngeqq|&
+ 2&\hex{2F}&\tenxxsy\char"2F&|\nshortparallel|\cr
+2&\hex{0C}&\tenxxsy\char"0C&|\lneq|&
+ 2&\hex{0D}&\tenxxsy\char"0D&|\gneq|&
+ 2&\hex{2D}&\tenxxsy\char"2D&|\nmid|\cr
+2&\hex{08}&\tenxxsy\char"08&|\lneqq|&
+ 2&\hex{09}&\tenxxsy\char"09&|\gneqq|&
+ 2&\hex{2C}&\tenxxsy\char"2C&|\nparallel|\cr
+2&\hex{00}&\tenxxsy\char"00&|\lvertneqq|&
+ 2&\hex{01}&\tenxxsy\char"01&|\gvertneqq|&
+ 2&\hex{30}&\tenxxsy\char"30&|\nvdash|\cr
+2&\hex{12}&\tenxxsy\char"12&|\lnsim|&
+ 2&\hex{13}&\tenxxsy\char"13&|\gnsim|&
+ 2&\hex{32}&\tenxxsy\char"32&|\nvDash|\cr
+2&\hex{1A}&\tenxxsy\char"1A&|\lnapprox|&
+ 2&\hex{1B}&\tenxxsy\char"1B&|\gnapprox|&
+ 2&\hex{31}&\tenxxsy\char"31&|\nVdash|\cr
+2&\hex{06}&\tenxxsy\char"06&|\nprec|&
+ 2&\hex{07}&\tenxxsy\char"07&|\nsucc|&
+ 2&\hex{33}&\tenxxsy\char"33&|\nVDash|\cr
+2&\hex{0E}&\tenxxsy\char"0E&|\npreceq|&
+ 2&\hex{0F}&\tenxxsy\char"0F&|\nsucceq|&
+ 2&\hex{36}&\tenxxsy\char"36&|\ntriangleleft|\cr
+2&\hex{16}&\tenxxsy\char"16&|\precneqq|&
+ 2&\hex{17}&\tenxxsy\char"17&|\succneqq|&
+ 2&\hex{37}&\tenxxsy\char"37&|\ntriangleright|\cr
+2&\hex{10}&\tenxxsy\char"10&|\precnsim|&
+ 2&\hex{11}&\tenxxsy\char"11&|\succnsim|&
+ 2&\hex{35}&\tenxxsy\char"35&|\ntrianglelefteq|\cr
+2&\hex{18}&\tenxxsy\char"18&|\precnapprox|&
+ 2&\hex{19}&\tenxxsy\char"19&|\succnapprox|&
+ 2&\hex{34}&\tenxxsy\char"34&|\ntrianglerighteq|\cr
+2&\hex{2A}&\tenxxsy\char"2A&|\nsubseteq|&
+ 2&\hex{2B}&\tenxxsy\char"2B&|\nsupseteq|\cr
+2&\hex{22}&\tenxxsy\char"22&|\nsubseteqq|&
+ 2&\hex{23}&\tenxxsy\char"23&|\nsupseteqq|\cr
+2&\hex{28}&\tenxxsy\char"28&|\subsetneq|&
+ 2&\hex{29}&\tenxxsy\char"29&|\supsetneq|\cr
+2&\hex{20}&\tenxxsy\char"20&var.\ |\subsetneq|&
+ 2&\hex{21}&\tenxxsy\char"21&var.\ |\supsetneq|\cr
+2&\hex{24}&\tenxxsy\char"24&|\subsetneqq|&
+ 2&\hex{25}&\tenxxsy\char"25&|\supsetneqq|\cr
+2&\hex{26}&\tenxxsy\char"26&var.\ |\subsetneqq|&
+ 2&\hex{27}&\tenxxsy\char"27&var.\ |\subsetneqq|\cr
+
+\endsymbols
+
+\medbreak
+
+\noindent
+{\it Arrows.}
+\beginsymbols
+1&\hex{12}&\tenxsy\char"12&|\leftleftarrows|&
+ 1&\hex{13}&\tenxsy\char"13&|\rightrightarrows|&
+ 1&\hex{14}&\tenxsy\char"14&|\upuparrows|\cr
+1&\hex{1C}&\tenxsy\char"1C&|\leftrightarrows|&
+ 1&\hex{1D}&\tenxsy\char"1D&|\rightleftarrows|&
+ 1&\hex{15}&\tenxsy\char"15&|\downdownarrows|\cr
+1&\hex{57}&\tenxsy\char"57&|\Lleftarrow|&
+ 1&\hex{56}&\tenxsy\char"56&|\Rrightarrow|&
+ 1&\hex{0A}&\tenxsy\char"0A&|\updownarrow|\cr
+1&\hex{11}&\tenxsy\char"11&|\twoheadleftarrow|&
+ 1&\hex{10}&\tenxsy\char"10&|\twoheadrightarrow|&
+ 1&\hex{18}&\tenxsy\char"18&|\upharpoonleft|\cr
+1&\hex{1B}&\tenxsy\char"1B&|\leftarrowtail|&
+ 1&\hex{1A}&\tenxsy\char"1A&|\rightarrowtail|&
+ 1&\hex{19}&\tenxsy\char"19&|\downharpoonleft|\cr
+1&\hex{22}&\tenxsy\char"22&|\looparrowleft|&
+ 1&\hex{23}&\tenxsy\char"23&|\looparrowright|&
+ 1&\hex{16}&\tenxsy\char"16&|\upharpoonright|\cr
+2&\hex{78}&\tenxxsy\char"78&|\curvearrowleft|&
+ 2&\hex{79}&\tenxxsy\char"79&|\curvearrowright|&
+ 1&\hex{17}&\tenxsy\char"17&|\downharpoonright|\cr
+1&\hex{09}&\tenxsy\char"09&|\circlearrowleft|&
+ 1&\hex{08}&\tenxsy\char"08&|\circlearrowright|&
+ 1&\hex{0B}&\tenxsy\char"0B&|\leftrightharpoons|\cr
+1&\hex{1E}&\tenxsy\char"1E&|\Lsh|&
+ 1&\hex{1F}&\tenxsy\char"1F&|\Rsh|&
+ 1&\hex{28}&\tenxsy\char"28&|\multimap|\cr
+ 1&\hex{20}&\tenxsy\char"20&|\rightsquigarrow|&
+ 1&\hex{21}&\tenxsy\char"21&|\leftrightsquigarrow|\cr
+\endsymbols
+
+\medbreak
+
+\noindent
+{\it ``Negated'' arrows.}
+\beginsymbols
+2&\hex{38}&\tenxxsy\char"38&|\nleftarrow|&
+ 2&\hex{39}&\tenxxsy\char"39&|\nrightarrow|&
+ 2&\hex{3D}&\tenxxsy\char"3D&|\nleftrightarrow|\cr
+2&\hex{3A}&\tenxxsy\char"3A&|\nLeftarrow|&
+ 2&\hex{3B}&\tenxxsy\char"3B&|\nRightarrow|&
+ 2&\hex{3C}&\tenxxsy\char"3C&|\nLeftrightarrow|\cr
+\endsymbols
+
+\medbreak
+
+\noindent
+{\it Delimiters.}
+\beginsymbols
+1&\hex{70}&\tenxsy\char"70&|\ulcorner|&
+ 1&\hex{71}&\tenxsy\char"71&|\urcorner|\cr
+1&\hex{78}&\tenxsy\char"78&|\llcorner|&
+ 1&\hex{79}&\tenxsy\char"79&|\lrcorner|\cr
+\endsymbols
+
+\medbreak
+
+\noindent
+{\it Non-math symbols.}
+\beginsymbols
+1&\hex{58}&\tenxsy\char"58&|\checkmark|&
+ 1&\hex{72}&\tenxsy\char"72&|\circledR|\cr
+1&\hex{7A}&\tenxsy\char"7A&|\maltese|&
+ 1&\hex{55}&\tenxsy\char"55&|\yen|\cr
+\endsymbols
+
+\medbreak
+
+\noindent
+{\it Alternate names.}
+\beginsymbols
+1&\hex{6E}&\tenxsy\char"6E&|\llless|&
+ 1&\hex{6F}&\tenxsy\char"6F&|\gggtr|&
+ 1&\hex{2B}&\tenxsy\char"2B&|\Doteq|\cr
+1&\hex{65}&\tenxsy\char"65&|\doublecap|&
+ 1&\hex{64}&\tenxsy\char"64&|\doublecup|&
+ 1&\hex{16}&\tenxsy\char"16&|\restriction|\cr
+\endsymbols
diff --git a/macros/plain/contrib/samples/tb0hyf.tex b/macros/plain/contrib/samples/tb0hyf.tex
new file mode 120000
index 0000000000..a1d573503a
--- /dev/null
+++ b/macros/plain/contrib/samples/tb0hyf.tex
@@ -0,0 +1 @@
+../../../../info/digests/tugboat/hyphenex/tb0hyf.tex \ No newline at end of file
diff --git a/macros/plain/contrib/samples/testfont.tex b/macros/plain/contrib/samples/testfont.tex
new file mode 100644
index 0000000000..0d1ccfe8d1
--- /dev/null
+++ b/macros/plain/contrib/samples/testfont.tex
@@ -0,0 +1,203 @@
+% This file is still being written and changed frequently.
+% Eventually it is supposed to provide a testbed for font evaluation.
+
+\tracinglostchars=0
+\tolerance=1000
+\raggedbottom
+\nopagenumbers
+\parindent=0pt
+\newlinechar=`@
+\hyphenpenalty=200
+\doublehyphendemerits=30000
+
+\newcount\m \newcount\n \newcount\p \newdimen\dim
+\chardef\other=12
+
+\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\hours{\n=\time \divide\n 60
+ \m=-\n \multiply\m 60 \advance\m \time
+ \twodigits\n\twodigits\m}
+\def\twodigits#1{\ifnum #1<10 0\fi \number#1}
+
+{\catcode`\|=0 \catcode`\\=\other
+|gdef|help{|message{%
+\init switches to another font;@%
+\end or \bye finishes the run;@%
+\table prints the font layout in tabular format;@%
+\text prints a sample text, assuming TeX text font conventions;@%
+\sample combines \table and \text;@%
+\mixture mixes a background character with a series of others;@%
+\alternation interleaves a background character with a series;@%
+\alphabet prints all lowercase letters within a given background;@%
+\ALPHABET prints all uppercase letters within a given background;@%
+\series prints a series of letters within a given background;@%
+\lowers prints a comprehensive test of lowercase;@%
+\uppers prints a comprehensive test of uppercase;@%
+\digits prints a comprehensive test of numerals;@%
+\math prints a comprehensive test of TeX math italic;@%
+\names prints a text that mixes upper and lower case;@%
+\punct prints a punctuation test;@%
+\bigtest combines many of the above routines;@%
+\help repeats this message;@%
+and you can use ordinary TeX commands (e.g., to \input a file).}}}
+
+\def\setbaselineskip{\setbox0=\hbox{\n=0
+\loop\char\n \ifnum \n<255 \advance\n 1 \repeat}
+\baselineskip=6pt \advance\baselineskip\ht0 \advance\baselineskip\dp0 }
+
+\def\setchar#1{{\escapechar-1\message{\string#1 character = }%
+ \def\do##1{\catcode`##1=\other}\dospecials
+ \read-1 to\next
+ \expandafter\finsetchar\next\next#1}}
+\def\finsetchar#1#2\next#3{\global\chardef#3=`#1
+ \ifnum #3=`\# \global\chardef#3=#2 \fi}
+\def\promptthree{\setchar\background
+ \setchar\starting \setchar\ending}
+
+\def\init{\message{@Name of the font to test = }
+ \read-1 to\fontname
+ \font\testfont=\fontname
+ \leftline{\sevenrm Test of \fontname\unskip\ on \today\ at \hours}
+ \medskip
+ \testfont \setbaselineskip
+ \ifdim\fontdimen6\testfont<10pt \rightskip=0pt plus 20pt
+ \else\rightskip=0pt plus 2em \fi
+ \spaceskip=\fontdimen2\testfont % space between words (\raggedright)
+ \xspaceskip=\fontdimen2\testfont \advance\xspaceskip by\fontdimen7\testfont
+ \message{Now type a test command (\string\help\space for help):}}
+
+\def\mixture{\promptthree \domix\mixpattern}
+\def\alternation{\promptthree \domix\altpattern}
+\def\mixpattern{\0\1\0\0\1\1\0\0\0\1\1\1\0\1}
+\def\altpattern{\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0}
+\def\domix#1{\par\chardef\0=\background \n=\starting
+ \loop \chardef\1=\n #1\endgraf
+ \ifnum \n<\ending \advance\n 1 \repeat}
+
+\def\!{\discretionary{\background}{\background}{\background}}
+\def\series{\promptthree \!\doseries\starting\ending\par}
+\def\doseries#1#2{\n=#1\loop\char\n\!\ifnum\n<#2\advance\n 1 \repeat}
+\def\complower{\!\doseries{`a}{`z}\doseries{'31}{'34}\par}
+\def\compupper{\!\doseries{`A}{`Z}\doseries{'35}{'37}\par}
+\def\compdigs{\!\doseries{`0}{`9}\par}
+\def\alphabet{\setchar\background\complower}
+\def\ALPHABET{\setchar\background\compupper}
+
+\def\lowers{\docomprehensive\complower{`a}{`z}{'31}{'34}}
+\def\uppers{\docomprehensive\compupper{`A}{`Z}{'35}{'37}}
+\def\digits{\docomprehensive\compdigs{`0}{`4}{`5}{`9}}
+\def\docomprehensive#1#2#3#4#5{\par\chardef\background=#2
+ \loop{#1} \ifnum\background<#3\m=\background\advance\m 1
+ \chardef\background=\m \repeat \chardef\background=#4
+ \loop{#1} \ifnum\background<#5\m=\background\advance\m 1
+ \chardef\background=\m \repeat}
+
+\def\names{ {\AA}ngel\aa\ Beatrice Claire
+ Diana \'Erica Fran\c{c}oise Ginette H\'el\`ene Iris
+ Jackie K\=aren {\L}au\.ra Mar{\'\i}a N\H{a}ta{\l}{\u\i}e Octave
+ Pauline Qu\^eneau Roxanne Sabine T\~a{\'\j}a Ur\v{s}ula
+ Vivian Wendy Xanthippe Yv{\o}nne Z\"azilie\par}
+\def\punct{\par\dopunct{min}\dopunct{pig}\dopunct{hid}
+ \dopunct{HIE}\dopunct{TIP}\dopunct{fluff}
+ \$1,234.56 + 7/8 = 9\% @ \#0\par}
+\def\dopunct#1{#1,\ #1:\ #1;\ `#1'\ ?`#1?\ !`#1!\ (#1)\ [#1]\ #1*\ #1.\par}
+
+\def\bigtest{\sample
+ hamburgefonstiv HAMBURGEFONSTIV\par
+ \names \punct \lowers \uppers \digits}
+
+\def\math{\textfont1=\testfont \skewchar\testfont='177
+ \mathchardef\Gamma="100 \mathchardef\Delta="101
+ \mathchardef\Theta="102 \mathchardef\Lambda="103 \mathchardef\Xi="104
+ \mathchardef\Pi="105 \mathchardef\Sigma="106 \mathchardef\Upsilon="107
+ \mathchardef\Phi="108 \mathchardef\Psi="109 \mathchardef\Omega="10A
+ \def\trial{$\\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 \\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 \\\alpha \\\beta \\\gamma \\\delta \\\epsilon \\\zeta \\\eta \\\theta
+ \\\iota \\\kappa \\\lambda \\\mu \\\nu \\\xi \\\pi \\\rho \\\sigma \\\tau
+ \\\upsilon \\\phi \\\chi \\\psi \\\omega \\\vartheta \\\varpi \\\varphi
+ \\\Gamma \\\Delta \\\Theta \\\Lambda \\\Xi \\\Pi \\\Sigma \\\Upsilon
+ \\\Phi \\\Psi \\\Omega \\\partial \\\ell \\\wp$\par}
+ \def\i{i} \def\j{j}
+ \def\\##1{|##1|+}\trial
+ \def\\##1{##1_2+}\trial
+ \def\\##1{##1^2+}\trial
+ \def\\##1{##1/2+}\trial
+ \def\\##1{2/##1+}\trial
+ \def\\##1{##1,{}+}\trial
+ \def\\##1{d##1+}\trial
+ \let\i=\imath \let\j=\jmath \def\\##1{\hat##1+}\trial}
+
+\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant
+\def\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal
+ \m=\n \divide\m by 64 \xdef\0{\the\m}%
+ \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}}
+\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}%
+ \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F%
+ \global\p=\lastpenalty}} % \p=1 if none of the characters exist
+\def\oddline{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr
+ \noalign{\nointerlineskip}}
+\newif\ifskipping
+\def\evenline{\loop\skippingfalse
+ \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m
+ \expandafter\setdigs\meaning\next \testrow
+ \ifnum\p=1 \skippingtrue \fi\fi
+ \ifskipping \global\advance\n 16 \repeat
+ \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi
+ \next}
+\def\morechart{\cr\noalign{\hrule\penalty5000}
+ \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m}
+ \chartline \evenline}
+\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&}
+\def\chartstrut{\lower4.5pt\vbox to14pt{}}
+\def\table{$$\global\n=0
+ \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{\cr\noalign{\hrule}
+ \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B&
+ &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$\par}
+\def\:{\setbox0=\hbox{\char\n}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\n 1 }
+\def\reposition{\setbox0=\vbox{\kern2pt\box0}\dim=\dp0
+ \advance\dim 2pt \dp0=\dim}
+\def\centerlargechars{
+ \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}}
+
+\def\text{{\advance\baselineskip-4pt
+\setbox0=\hbox{abcdefghijklmnopqrstuvwxyz}
+\ifdim\hsize>2\wd0 \ifdim 15pc>2\wd0 \hsize=15pc \else \hsize=2\wd0 \fi\fi
+On November 14, 1885, Senator \& Mrs.~Leland Stanford called
+together at their San Francisco mansion the 24~prominent men who had
+been chosen as the first trustees of The Leland Stanford Junior University.
+They handed to the board the Founding Grant of the University, which they
+had executed three days before. This document---with various amendments,
+legislative acts, and court decrees---remains as the University's charter.
+In bold, sweeping language it stipulates that the objectives of the University
+are ``to qualify students for personal success and direct usefulness in life;
+and to promote the publick welfare by exercising an influence in behalf of
+humanity and civilization, teaching the blessings of liberty regulated by
+law, and inculcating love and reverence for the great principles of
+government as derived from the inalienable rights of man to life, liberty,
+and the pursuit of happiness.'' \moretext
+(!`THE DAZED BROWN FOX QUICKLY GAVE 12345--67890 JUMPS!)\par}}
+\def\moretext{?`But aren't Kafka's Schlo{\ss} and {\AE}sop's {\OE}uvres
+often na{\"\i}ve vis-\`a-vis the d{\ae}monic ph{\oe}nix's official r\^ole
+in fluffy souffl\'es? }
+\def\omitaccents{\let\moretext=\relax}
+
+\def\sample{\table\text}
+
+\init
diff --git a/macros/plain/contrib/samples/toc.tex b/macros/plain/contrib/samples/toc.tex
new file mode 100644
index 0000000000..cc2a7e7564
--- /dev/null
+++ b/macros/plain/contrib/samples/toc.tex
@@ -0,0 +1,37 @@
+% TOC
+%
+% This macro can be used for Table Of Contents portion of a paper
+% or book. To use this macro package, put the line
+% \input toc
+% at the top of your file. The following are the symbols that may be
+% used with this macro:
+%
+% \tocindent{ SIZE }
+% This is used to indent the table of contents
+% entries by "SIZE". "SIZE" is something like
+% `50pt', `1.0truein' or something similar.
+% (default=0pt)
+% \tochead{ HEAD }
+% This is essentially the same as the definition
+% `\leftline'. The table of cantents headers are
+% not indented by `\tocindent'.
+% \tocline{ SECTION }{ PAGE }
+% This is the standard table of contents line
+% containing a section and page number separated
+% with either dots or a line. This entry is in-
+% dented by `\tocindent'.
+% \filldot
+% This will make the filling between the `\tocline'
+% section and page be `\dotfill'. (default)
+% \filline
+% This will make the filling between the `\tocline'
+% section and page be `\hrulefil' (a solid horizon-
+% tal line).
+%
+\def\xyztocind{\hskip 0pt}
+\def\xyztocfil{\dotfill}
+\def\tocindent#1{\def\xyztocind{\hskip #1}}
+\def\filldot{\def\xyztocfil{\dotfill}}
+\def\filline{\def\xyztocfil{\hrulefill}}
+\def\tocline#1#2{\hbox to \hsize{\xyztocind #1\ \xyztocfil\ #2}}
+\def\tochead#1{\hbox to \hsize{#1\hfill}}
diff --git a/macros/plain/contrib/samples/triple.tex b/macros/plain/contrib/samples/triple.tex
new file mode 100644
index 0000000000..39c11efe0b
--- /dev/null
+++ b/macros/plain/contrib/samples/triple.tex
@@ -0,0 +1,27 @@
+ % ********************************************************
+ % This is the triple column format. *
+ % Tomas Rokicki, 29 September 1984 *
+ % ********************************************************
+
+\special{landscape}
+\newdimen\fullhsize\newdimen\play\newdimen\hmargins\newdimen\vmargins
+\def\newmargins#1#2{\hmargins=#1\vmargins=#2
+ \play=11truein\advance\play by-2\hmargins\global\fullhsize=\play
+ \advance\play by-4\hmargins\divide\play by3\global\hsize=\play
+ \play=8truein\advance\play by-2\vmargins\global\vsize=\play
+ \play=-1truein\advance\play by\hmargins\global\hoffset=\play
+ \play=-1truein\advance\play by\vmargins\global\voffset=\play}
+\newmargins{.25truein}{.25truein}
+\def\fullline{\hbox to\fullhsize}
+\let\lmr=L \newbox\leftcolumn\newbox\middlecolumn
+\output={\if L\lmr
+ \global\setbox\leftcolumn=\columnbox\global\let\lmr=M
+ \else\if M\lmr
+ \global\setbox\middlecolumn=\columnbox\global\let\lmr=R
+ \else\tripleformat\global\let\lmr=L\fi\fi
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
+\def\tripleformat{\shipout\vbox{\makeheadline
+ \fullline{\box\leftcolumn\hfil\box\middlecolumn\hfil\columnbox}}
+ \advancepageno}
+\def\columnbox{\leftline{\pagebody}}
+\tolerance=1600
diff --git a/macros/plain/contrib/samples/verbatim_1.tex b/macros/plain/contrib/samples/verbatim_1.tex
new file mode 100644
index 0000000000..97ba7f2252
--- /dev/null
+++ b/macros/plain/contrib/samples/verbatim_1.tex
@@ -0,0 +1,56 @@
+% ttbar.tex
+
+
+% Lifted from TUGBOT.STY.
+%
+% Support verbatim listing of TeX source, as defined in TeXbook, p. 421;
+% lifted from MANMAC.TEX, and modified slightly for narrower columns.
+
+\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
+ \catcode`\"=\other
+ \obeyspaces \obeylines \tt}
+
+\newskip\ttglue
+{\tenpoint\tt \global\ttglue=.5em plus .25em minus .15em}
+% this should be installed in each font
+
+% From David Eppstein's ``Trees'' paper (6#1), preserve initial spaces.
+{\obeyspaces\gdef {\ifvmode\indent\fi\space}}
+
+\newdimen\ttrightskip
+\ttrightskip=5pc
+
+\newif\ifttVertChar \ttVertCharfalse
+{\catcode`\|=\active \gdef\VertChar{\def|{\char"7C }}}
+
+%\outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=\z@
+\outer\def\begintt{$$\def\par{\leavevmode\null\endgraf}\ttverbatim \parskip=\z@
+ \ifttVertChar \VertChar \global\ttVertCharfalse \else \catcode`\|=0 \fi
+ \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$$}}
+
+% Other non-tt elements that may be embedded within \begintt...\endtt .
+\def\MTH{$}
+\def\sb{_}
+\def\sp{^}
+\def\SP{{\tt\char"20 }} % "visible" space
+\chardef\bs=`\\
+\def\vrt{{\tt\char`\|}}
+
+\catcode`\|=\active
+%{\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}}
+{\obeylines \gdef\activatettbar{\global\catcode`\|=\active %
+ \gdef|{\ttverbatim \spaceskip\ttglue \xspaceskip\ttglue %
+ \let^^M=\ \let|=\endgroup}}}
+\activatettbar
+
+% The active | (which here implements verbatim mode) is redefined in
+% such headers as TABLES.TeX and must be able to be reinstated.
+% \activatettbar been tested with TABLES.TeX, and the two uses are
+% mutually operable (TUGboat 7#2, "Tables in INRSTeX").
diff --git a/macros/plain/contrib/samples/verbatim_2.tex b/macros/plain/contrib/samples/verbatim_2.tex
new file mode 100644
index 0000000000..61f96f919a
--- /dev/null
+++ b/macros/plain/contrib/samples/verbatim_2.tex
@@ -0,0 +1,36 @@
+% From: Tim Morgan <morgan@uci-icsa>
+% 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
+}
+
+% This macro turns on verbatim mode until ?endverbatim is seen.
+\def\verbatim{\begingroup \setupverbatim
+ \parskip=0pt plus .05\baselineskip \parindent=0pt
+ \catcode`\ =13 \catcode`\^^M=13 \catcode`\?=0
+ \verbatimgobble}
+{\catcode`\^^M=13{\catcode`\ =13\gdef\verbatimdefs{\def^^M{\ \par}\let =\ }}
+ \gdef\verbatimgobble#1^^M{}}
+
+% This defines ?endverbatim to end the group which begins with \verbatim
+\let\endverbatim=\endgroup
+
+% 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/plain/contrib/soul b/macros/plain/contrib/soul
new file mode 120000
index 0000000000..a37c576ac9
--- /dev/null
+++ b/macros/plain/contrib/soul
@@ -0,0 +1 @@
+../../latex/contrib/soul \ No newline at end of file
diff --git a/macros/plain/contrib/stables/stables.tex b/macros/plain/contrib/stables/stables.tex
new file mode 100644
index 0000000000..47e011edad
--- /dev/null
+++ b/macros/plain/contrib/stables/stables.tex
@@ -0,0 +1,258 @@
+%
+%
+% S-Tables Macro
+%
+\message{S-Tables Macro v1.0, ACS, TAMU (RANHELP@VENUS.TAMU.EDU)}
+%
+% Help Text
+%
+\newhelp\stablestylehelp{You must choose a style between 0 and 3.}%
+\newhelp\stablelinehelp{You should not use special hrules when stretching
+a table.}%
+\newhelp\stablesmultiplehelp{You have tried to place an S-Table inside another
+S-Table. I would recommend not going on.}%
+%
+% Line Thicknesses (Values)
+%
+\newdimen\stablesthinline
+\stablesthinline=0.4pt
+\newdimen\stablesthickline
+\stablesthickline=1pt
+%
+% Border and Internal Line Thicknesses
+%
+\newif\ifstablesborderthin
+\stablesborderthinfalse
+\newif\ifstablesinternalthin
+\stablesinternalthintrue
+\newif\ifstablesomit
+\newif\ifstablemode
+\newif\ifstablesright
+\stablesrightfalse
+%
+% Save Registers
+%
+\newdimen\stablesbaselineskip
+\newdimen\stableslineskip
+\newdimen\stableslineskiplimit
+%
+% Counters
+%
+\newcount\stablesmode
+\newcount\stableslines
+\newcount\stablestemp
+\stablestemp=3
+\newcount\stablescount
+\stablescount=0
+\newcount\stableslinet
+\stableslinet=0
+%
+% Table Style Selection
+%
+% 0 - Centered
+% 1 - Left Justified
+% 2 - Right Justified
+% 3 - Not Justified
+%
+\newcount\stablestyle
+\stablestyle=0
+%
+% Element Buffering Definitions
+%
+\def\stablesleft{\quad\hfil}%
+\def\stablesright{\hfil\quad}%
+%
+% Vertical Bar Activation
+%
+\catcode`\|=\active%
+%
+% Strut Control
+%
+\newcount\stablestrutsize
+\newbox\stablestrutbox
+\setbox\stablestrutbox=\hbox{\vrule height10pt depth5pt width0pt}
+\def\stablestrut{\relax\ifmmode%
+ \copy\stablestrutbox%
+ \else%
+ \unhcopy\stablestrutbox%
+ \fi}%
+%
+% Misc. Internal Stuff
+%
+\newdimen\stablesborderwidth
+\newdimen\stablesinternalwidth
+\newdimen\stablesdummy
+\newcount\stablesdummyc
+\newif\ifstablesin
+\stablesinfalse
+%
+% Table Macros
+%
+\def\begintable{\stablestart%
+ \stablemodetrue%
+ \stablesadj%
+ \halign%
+ \stablesdef}%
+\def\begintableto#1{\stablestart%
+ \stablemodefalse%
+ \stablesadj%
+ \halign to #1%
+ \stablesdef}%
+\def\begintablesp#1{\stablestart%
+ \stablemodefalse%
+ \stablesadj%
+ \halign spread #1%
+ \stablesdef}%
+\def\stablesadj{%
+ \ifcase\stablestyle%
+ \hbox to \hsize\bgroup\hss\vbox\bgroup%
+ \or%
+ \hbox to \hsize\bgroup\vbox\bgroup%
+ \or%
+ \hbox to \hsize\bgroup\hss\vbox\bgroup%
+ \or%
+ \hbox\bgroup\vbox\bgroup%
+ \else%
+ \errhelp=\stablestylehelp%
+ \errmessage{Invalid style selected, using default}%
+ \hbox to \hsize\bgroup\hss\vbox\bgroup%
+ \fi}%
+\def\stablesend{\egroup%
+ \ifcase\stablestyle%
+ \hss\egroup%
+ \or%
+ \hss\egroup%
+ \or%
+ \egroup%
+ \or%
+ \egroup%
+ \else%
+ \hss\egroup%
+ \fi}%
+\def\stablestart{%
+ \ifstablesin%
+ \errhelp=\stablesmultiplehelp%
+ \errmessage{An S-Table cannot be placed within an S-Table!}%
+ \fi
+ \global\stablesintrue%
+ \global\advance\stablescount by 1%
+ \message{<S-Tables Generating Table \number\stablescount}%
+ \begingroup%
+ \stablestrutsize=\ht\stablestrutbox%
+ \advance\stablestrutsize by \dp\stablestrutbox%
+ \ifstablesborderthin%
+ \stablesborderwidth=\stablesthinline%
+ \else%
+ \stablesborderwidth=\stablesthickline%
+ \fi%
+ \ifstablesinternalthin%
+ \stablesinternalwidth=\stablesthinline%
+ \else%
+ \stablesinternalwidth=\stablesthickline%
+ \fi%
+ \tabskip=0pt%
+ \stablesbaselineskip=\baselineskip%
+ \stableslineskip=\lineskip%
+ \stableslineskiplimit=\lineskiplimit%
+ \offinterlineskip%
+ \def\borderrule{\vrule width \stablesborderwidth}%
+ \def\internalrule{\vrule width \stablesinternalwidth}%
+%
+ \def\thinline{\noalign{\hrule height \stablesthinline}}%
+ \def\thickline{\noalign{\hrule height \stablesthickline}}%
+ \def\trule{\omit\leaders\hrule height \stablesthinline\hfill}%
+ \def\ttrule{\omit\leaders\hrule height \stablesthickline\hfill}%
+ \def\tttrule##1{\omit\leaders\hrule height ##1\hfill}%
+ \def\stablesel{&\omit\global\stablesmode=0%
+ \global\advance\stableslines by 1\borderrule\hfil\cr}%
+ \def\el{\stablesel&}%
+ \def\elt{\stablesel\thinline&}%
+ \def\eltt{\stablesel\thickline&}%
+ \def\elttt##1{\stablesel\noalign{\hrule height ##1}&}%
+ \def\elspec{&\omit\hfil\borderrule\cr\omit\borderrule&%
+ \ifstablemode%
+ \else%
+ \errhelp=\stablelinehelp%
+ \errmessage{Special ruling will not display properly}%
+ \fi}%
+%
+ \def\stmultispan##1{\mscount=##1 \loop\ifnum\mscount>3 \stspan\repeat}%
+ \def\stspan{\span\omit \advance\mscount by -1}%
+%
+ \def\multicolumn##1{\omit\multiply\stablestemp by ##1%
+ \stmultispan{\stablestemp}%
+ \advance\stablesmode by ##1%
+ \advance\stablesmode by -1%
+ \stablestemp=3}%
+ \def\multirow##1{\stablesdummyc=##1\parindent=0pt\setbox0\hbox\bgroup%
+ \aftergroup\emultirow\let\temp=}
+ \def\emultirow{\setbox1\vbox to\stablesdummyc\stablestrutsize%
+ {\hsize\wd0\vfil\box0\vfil}%
+ \ht1=\ht\stablestrutbox%
+ \dp1=\dp\stablestrutbox%
+ \box1}%
+%
+% \def\stvcen##1{\vtop{\vfill\hbox{##1}\vfill}}% Currently does not work!
+ \def\stpar##1{\vtop\bgroup\hsize ##1%
+ \baselineskip=\stablesbaselineskip%
+ \lineskip=\stableslineskip%
+ \lineskiplimit=\stableslineskiplimit\bgroup\aftergroup\estpar\let\temp=}%
+ \def\estpar{\vskip 6pt\egroup}%
+ \def\stparrow##1##2{\stablesdummy=##2%
+ \setbox0=\vtop to ##1\stablestrutsize\bgroup%
+ \hsize\stablesdummy%
+ \baselineskip=\stablesbaselineskip%
+ \lineskip=\stableslineskip%
+ \lineskiplimit=\stableslineskiplimit%
+ \bgroup\vfil\aftergroup\estparrow%
+ \let\temp=}%
+ \def\estparrow{\vfil\egroup%
+ \ht0=\ht\stablestrutbox%
+ \dp0=\dp\stablestrutbox%
+ \wd0=\stablesdummy%
+ \box0}%
+%
+ \def|{\global\advance\stablesmode by 1&&&}%
+ \def\|{\global\advance\stablesmode by 1&\omit\vrule width 0pt%
+ \hfil&&}%
+ \def\vt{\global\advance\stablesmode by 1&\omit\vrule width \stablesthinline%
+ \hfil&&}%
+ \def\vtt{\global\advance\stablesmode by 1&\omit\vrule width \stablesthickline%
+ \hfil&&}%
+ \def\vttt##1{\global\advance\stablesmode by 1&\omit\vrule width ##1%
+ \hfil&&}%
+ \def\vtr{\global\advance\stablesmode by 1&\omit\hfil\vrule width%
+ \stablesthinline&&}%
+ \def\vttr{\global\advance\stablesmode by 1&\omit\hfil\vrule width%
+ \stablesthickline&&}%
+ \def\vtttr##1{\global\advance\stablesmode by 1&\omit\hfil\vrule width ##1&&}%
+ \stableslines=0%
+ \stablesomitfalse}
+%
+\def\stablesdef{\bgroup\stablestrut\borderrule##\tabskip=0pt plus 1fil%
+ &\stablesleft##\stablesright%
+ &##\ifstablesright\hfill\fi\internalrule\ifstablesright\else\hfill\fi%
+ \tabskip 0pt&&##\hfil\tabskip=0pt plus 1fil%
+ &\stablesleft##\stablesright%
+ &##\ifstablesright\hfill\fi\internalrule\ifstablesright\else\hfill\fi%
+ \tabskip=0pt\cr%
+ \ifstablesborderthin%
+ \thinline%
+ \else%
+ \thickline%
+ \fi&%
+}%
+\def\endtable{\advance\stableslines by 1\advance\stablesmode by 1%
+ \message{- Rows: \number\stableslines, Columns: \number\stablesmode>}%
+ \stablesel%
+ \ifstablesborderthin%
+ \thinline%
+ \else%
+ \thickline%
+ \fi%
+ \egroup\stablesend%
+\endgroup%
+\global\stablesinfalse}
+%
+% end of STABLES.TEX
+%
diff --git a/macros/plain/contrib/stables/stables_doc.pdf b/macros/plain/contrib/stables/stables_doc.pdf
new file mode 100644
index 0000000000..810bcde509
--- /dev/null
+++ b/macros/plain/contrib/stables/stables_doc.pdf
Binary files differ
diff --git a/macros/plain/contrib/stables/stables_doc.tex b/macros/plain/contrib/stables/stables_doc.tex
new file mode 100644
index 0000000000..d8e4505baf
--- /dev/null
+++ b/macros/plain/contrib/stables/stables_doc.tex
@@ -0,0 +1,392 @@
+\input stables
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+% S-Tables Quick Command Summary
+%
+%
+% S_Verbatim.TeX Macro
+%
+% macros for verbatim scanning
+\chardef\other=12
+\newskip\ttglue
+\ttglue=.5em plus.25em minus.15em
+\def\ttverbatim{\begingroup
+ \catcode`\\=\other
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\$=\other
+ \catcode`\&=\other
+ \catcode`\#=\other
+ \catcode`\%=\other
+ \catcode`\_=\other
+ \catcode`\^=\other
+ \catcode`\"=\other % this line is new stuff
+ \catcode`\|=\other
+ \catcode`\~=\other
+ \obeyspaces \obeylines \tt}
+
+\catcode`\"=\active
+\def"#1{\ttverbatim \spaceskip\ttglue% \let^^M=\
+\def\readit##1#1{##1\endgroup}\expandafter\readit}
+%
+% end of macro
+\tolerance=10000
+\centerline{\bf S-Tables v1.0}
+\vfil
+\centerline{Robert Nilsson}
+\centerline{Academic Computing Service}
+\centerline{Texas A\&M University}
+\centerline{"1RANHELP@VENUS.TAMU.EDU1}
+\centerline{"1RANHELP@TAMVENUS1}
+\vfil
+\begintable
+\multicolumn2\bf\hfil Types of Commands\hfil\eltt
+Start/End|\stpar{2.5in}{\noindent These are the commands for starting and ending
+the table}\elt
+Columns Separators|\stpar{2.5in}{\noindent These are used to separate the columns
+in the tables}\elt
+Row Separators|\stpar{2.5in}{\noindent These are used to separate the rows}\elt
+Configuration|\stpar{2.5in}{\noindent These are used to set up the functioning
+of the tables such as the width of a thick rule, whether the internal rules are
+thin or thick, etc.}\elt
+Specials|\stpar{2.5in}{\noindent These include any commands that do not fit into
+the above categories}\endtable
+\vfil
+\begintable
+\multicolumn3\bf\hfil Start/End\hfil\eltt
+Command|Arguments|Description\eltt
+"1\begintable1\hfill|none|Start a table\hfill\el
+"1\begintableto1\hfill|width|\stpar{2.5in}{\noindent Start a table with the
+specified width. The table will be stretched until it is `width' wide}\el
+"1\begintablesp1\hfill|stretch amount|\stpar{2.5in}{\noindent Start a table and stretch
+it `stretch amount' wider than it would normally be}\elt
+"1\endtable1\hfill|none|End the table\hfill\endtable
+\vfil
+\begintable
+\multicolumn3\bf\hfil Column Separators\hfil\eltt
+Command|Arguments|Description\eltt
+"1|1\hfill|none|\stpar{2.5in}{\noindent End a column and place a vertical rule
+of the default width between the columns (do not use this at the end of a
+line)}\el
+"1\|1\hfill|none|\stpar{2.5in}{\noindent Same as above but the vertical rule
+will be suppressed}\el
+"1\vt1\hfill|none|\stpar{2.5in}{\noindent Same as above but the vertical rule
+will be thin}\el
+"1\vtt1\hfill|none|\stpar{2.5in}{\noindent Same as above but the vertical rule
+will be thick}\el
+"1\vttt1\hfill|thickness|\stpar{2.5in}{\noindent Same as above but the vertical
+rule will be `thickness' wide}\endtable
+\eject
+\begintable
+\multicolumn3\bf\hfil Row Separators\hfil\eltt
+Command|Arguments|Description\eltt
+"1\el1\hfill|none|\stpar{2.5in}{\noindent End a line and don't put a rule under it. (Do
+not use this after the last line of the table, use "1\endtable1)}\el
+"1\elt1\hfill|none|\stpar{2.5in}{\noindent Same as above except put a thin rule under
+the line}\el
+"1\eltt1\hfill|none|\stpar{2.5in}{\noindent Same as above except put a thick rule under
+the line}\el
+"1\elttt1\hfill|thickness|\stpar{2.5in}{\noindent Same as above except put a rule of
+width `thickness' under the line}\el
+"1\elspec1\hfill|none|\stpar{2.5in}{\noindent This command is used to set up
+rules under rows that DO NOT span the entire row. It in effect indicates that
+the next row will specify the rule to be used under the current row. This is
+especially useful when using with the row spanning commands. This introduces
+a subclass, the horizontal rule commands}\elt
+\multicolumn3\hfil Horizonal Rule Command Subset\hfil\elt
+"1\trule1\hfill|none|\stpar{2.5in}{\noindent Places a thin horizontal rule
+under a column. This command is only for use in conjunction with the "1\elspec1
+command (To leave a column blank, i.e. no rule, just leave it blank)}\el
+"1\ttrule1\hfill|none|\stpar{2.5in}{\noindent Same as above but the rule will be
+thick}\el
+"1\tttrule1\hfill|thickness|\stpar{2.5in}{\noindent Same as above but the rule
+will be `thickness' thick}\endtable
+\vfil
+You may be wondering what the difference between the "1\elt1 and the "1\trule1
+command is. The "1\elt1 will end the line and draw a thin rule under it. The
+"1\trule1 works in conjunction with the "1\elspec1 to generate a special rule.
+The special rule line is entered the same way a regular row will be entered.
+For example, a normal row would look like:
+\vfil
+"1This|is|a|Test\elt1
+\vfil
+\noindent This will produce a row with a thin rule under it. To produce the
+same effect without a rule under the column `is' the following would be used:
+\vfil
+"1This|is|a|Test\elspec
+\trule||\trule|\trule\el1
+\vfil
+\noindent Notice that the vertical bars are used. The macro is starting a new
+row and the vertical bars need to be included if you want them to continue
+through the line. (There is no need to only use the "1|1, any other column
+separator is also valid).
+\eject
+\begintable
+\multicolumn3\bf\hfill Configuration\hfill\eltt
+Variable|Value|Description\eltt
+\multicolumn3\hfill Dimensions\hfill\elt
+"1\stablesthinline1\hfill|dimension|\stpar{2.5in}{\noindent This variable
+contains the width of a thin rule in the table. The default value is
+0.4pt and it may be changed with the command:
+
+"1\stablesthinline=<dimen>1
+
+\noindent where "1<dimen>1 is the new width.}\el
+"1\stablesthickline1\hfill|dimension|\stpar{2.5in}{\noindent This
+variable contains the width of a thick rule in the table. The default
+value is 1pt and it may be changed as above.}\elt
+\multicolumn3\hfill Counters\hfill\elt
+"1\stablestyle1\hfill|0|\stpar{2.5in}{\noindent Center the table using
+the current "1\hsize1. This is the default setting and it may be
+changed by the following command:
+
+"1\stablestyle=1$n$
+
+\noindent where $n$ is the new value (0, 1, 2, or 3)}\el
+|1|Left justify the table\hfill\el
+|2|Right justify the table\hfill\el
+|3|No justification\hfill\elt
+\multicolumn3\hfill If Statements\hfill\elt
+"1\ifstablesinternalthin1\hfill|true|\stpar{2.5in}{\noindent Make the
+internal rules of the table thin. This sets the vertical rule
+generated by the "1|1. To set the value of this variable the following
+command must be used:
+
+"1\stablesinternalthintrue1
+
+\noindent Please note the word `if' is removed and the word `true' has
+been appended to the end. The value after this command will be true.
+To set it to false append the word `false' instead of `true'.}\el
+|false|\stpar{2.5in}{\noindent Use thick internal rules (where the "1|1
+is used)}\elspec
+|\trule|\trule\el
+"1\ifstablesborderthin1\hfill|true|\stpar{2.5in}{\noindent Use thin rules
+for the border of the table}\el
+|false|\stpar{2.5in}{\noindent Use thick rules for the border of the
+table. This is the default.}\endtable
+\vfil
+All settings in the configuration section should be used {\bf OUTSIDE}
+the table. The results of changing a setting inside the table will be
+unpredictable, and undesirable.
+
+There are two more settings that need to be discussed. First is the
+element buffering. There are two definitions that are used for this:
+"1\stablesleft1 and "1\stablesright1. The default settings are as
+follows:
+\vfil
+"1\def\stablesleft{\quad\hfil}
+\def\stablesright{\hfil\quad}1
+\vfil
+\noindent To change these, simply redefine them.
+
+The other setting is the strut. If you are interested in resetting
+this, the \TeX book should provide sufficient information (The strut
+is used to hold up the box).
+\eject
+\centerline{\bf Specials}
+{\baselineskip=14pt
+\vskip .25in
+This section will be broken into three parts: the spanning commands, the
+paragraph commands, and miscellaneous information.
+
+First of all we have two (actually three, but I'll discuss the third later)
+spanning commands. They are "1\multicolumn1 and "1\multirow1. To use
+"1\multicolumn1 to span several columns the command will be:
+
+"1\multicolumn1$n$ and your data here.
+
+\noindent The $n$ specifies the number of columns to span across. For
+example, if a table has 3 columns and you want a title across the top,
+$n$ would be 3. Omit each column separator that is spanned across (in
+this case none would be used). When this command is used the buffering is
+suspended on the spanning column, so it is necessary to put "1\hfil1's around
+the data in the spanning column to center it.
+
+"1\multirow1 works slightly differently. The number of rows to span is
+specified in the same way as the number of columns in the "1\multicolumn1 macro,
+but the text to be spanned must be placed in curly braces directly after:
+
+"1\multirow1$n$"1{<horizontal material>}1
+
+\noindent The "1<horizontal material>1 will be vertically centered in the number
+of spanned rows. The horizontal rules are not automatically omitted under the
+columns of the rows being spanned. The "1\elspec1 command must be used to omit
+these rules. There will be an example at the end of the documentation of this.
+
+The paragraph commands are "1\stpar1 and "1\stparrow1. The format for "1\stpar1
+is:
+
+"1\stpar{<dimen>}{<vertical material>}1
+
+\noindent The "1<dimen>1 is the width of the paragraph (the "1\hsize1) and the
+"1<vertical material>1 is the paragraph.
+
+"1\stparrow1 will do the same thing as "1\stpar1 but it will also perform the
+function of "1\multirow1. It is a composite command and the only way to span a
+paragraph across multiple rows. The format is:
+
+"1\stparrow1$n$"1{<dimen>}{<vertical material>}1
+
+\noindent In this command the $n$ is the number of rows to be spanned and the
+other material is the same as in the "1\stpar1 macro. Please note that the
+rules for spanning multiple rows apply to this macro also (the use of the
+"1\elspec1 command.
+
+To use both multiple rows and multiple columns, specify the "1\multicolumn1
+command first, then the "1\multirow1 or "1\stparrow1.
+
+The last point I would like to make concerns the use of varying width vertical
+rules. If a thin vertical rule runs into a thick vertical rule there will
+be an offset. The default for this offset is to the left. There are two ways
+to change the setting. The first is by using an `r' after any of the "1\vt1
+commands. For example "1\vttr1 will produce a thick vertical rule right
+justified on any wider rules. The other method is by using the
+"1\ifstablesright1 setting. A true setting will line up all vertical rules
+generated by the "1|1 on the right. A false setting will make the vertical
+rules generated by the "1|1 left justified (the default).
+
+In all of the specials using a $n$ parameter, if the number to be used is
+greater than 9, it must be placed in curly braces ("1{}1).
+}
+\vfill\eject
+\centerline{\bf Examples}
+\vskip .25in
+This section will give some example tables and the code to generate them
+organized from simple to complex.
+\vskip .25in
+\leftline{\bf Example 1}
+\vskip .125in
+"*\begintable
+Ck\#\vt Date\vt Memo\vt Debit\vt Credit\vt Balance\eltt
+245|8--2|Rent|\$ \hfill 250.00||\$ \hfill 436.29\el
+246|8--2|Danson Electric|\$ \hfill 49.28||\$ \hfill 387.01\el
+247|8--5|Jeff's Grocery|\$ \hfill 35.88||\$ \hfill 351.13\el
+248||Void|||\el
+249|8--10|Danson Times|\$ \hfill 19.00||\$ \hfill 332.13\el
+250|8--14|Pizza Palace|\$ \hfill 9.95||\$ \hfill 322.18\el
+251|8--15|Jones Hardware|\$ \hfill 45.20||\$ \hfill 276.98\el
+252|8--15|Deposit||\$ \hfill 255.81|\$ \hfill 532.79\el
+253|8--21|Account Fee|\$ \hfill .85||\$ \hfill 531.94\el
+254|8--29|Telephone Co.|\$ \hfill 21.19||\$ \hfill 510.75\endtable*
+\vskip .125in
+\begintable
+Ck\#\vt Date\vt Memo\vt Debit\vt Credit\vt Balance\eltt
+245|8--2|Rent|\$ \hfill 250.00||\$ \hfill 436.29\el
+246|8--2|Danson Electric|\$ \hfill 49.28||\$ \hfill 387.01\el
+247|8--5|Jeff's Grocery|\$ \hfill 35.88||\$ \hfill 351.13\el
+248||Void|||\el
+249|8--10|Danson Times|\$ \hfill 19.00||\$ \hfill 332.13\el
+250|8--14|Pizza Palace|\$ \hfill 9.95||\$ \hfill 322.18\el
+251|8--15|Jones Hardware|\$ \hfill 45.20||\$ \hfill 276.98\el
+252|8--15|Deposit||\$ \hfill 255.81|\$ \hfill 532.79\el
+253|8--21|Account Fee|\$ \hfill .85||\$ \hfill 531.94\el
+254|8--29|Telephone Co.|\$ \hfill 21.19||\$ \hfill 510.75\endtable
+\vfill\eject
+\leftline{\bf Example 2}
+\vskip .125in
+"*\begintableto{6.5truein}
+\multicolumn6 \hfill Account Activity for August\hfill\eltt
+Ck\#\vt Date\vt Memo\vtt Debit\vt Credit\vtt Balance\eltt
+245|8--2|Rent\vtt\$ \hfill 250.00|\vtt\$ \hfill 436.29\el
+246|8--2|Danson Electric\vtt\$ \hfill 49.28|\vtt\$ \hfill 387.01\el
+247|8--5|Jeff's Grocery\vtt\$ \hfill 35.88|\vtt\$ \hfill 351.13\el
+248||Void\vtt|\vtt\el
+249|8--10|Danson Times\vtt\$ \hfill 19.00|\vtt\$ \hfill 332.13\el
+250|8--14|Pizza Palace\vtt\$ \hfill 9.95|\vtt\$ \hfill 322.18\el
+251|8--15|Jones Hardware\vtt\$ \hfill 45.20|\vtt\$ \hfill 276.98\el
+252|8--15|Deposit\vtt|\$ \hfill 255.81\vtt\$ \hfill 532.79\el
+253|8--21|Account Fee\vtt\$ \hfill .85|\vtt\$ \hfill 531.94\el
+254|8--29|Telephone Co.\vtt\$ \hfill 21.19|\vtt\$ \hfill 510.75\endtable*
+\vskip .125in
+\begintableto{6.5truein}
+\multicolumn6 \hfill Account Activity for August\hfill\eltt
+Ck\#\vt Date\vt Memo\vtt Debit\vt Credit\vtt Balance\eltt
+245|8--2|Rent\vtt\$ \hfill 250.00|\vtt\$ \hfill 436.29\el
+246|8--2|Danson Electric\vtt\$ \hfill 49.28|\vtt\$ \hfill 387.01\el
+247|8--5|Jeff's Grocery\vtt\$ \hfill 35.88|\vtt\$ \hfill 351.13\el
+248||Void\vtt|\vtt\el
+249|8--10|Danson Times\vtt\$ \hfill 19.00|\vtt\$ \hfill 332.13\el
+250|8--14|Pizza Palace\vtt\$ \hfill 9.95|\vtt\$ \hfill 322.18\el
+251|8--15|Jones Hardware\vtt\$ \hfill 45.20|\vtt\$ \hfill 276.98\el
+252|8--15|Deposit\vtt|\$ \hfill 255.81\vtt\$ \hfill 532.79\el
+253|8--21|Account Fee\vtt\$ \hfill .85|\vtt\$ \hfill 531.94\el
+254|8--29|Telephone Co.\vtt\$ \hfill 21.19|\vtt\$ \hfill 510.75\endtable
+\vfill\eject
+\leftline{\bf Example 3}
+\vskip .125in
+"*\begintable
+\multirow2{\#}\vt\multirow2{Date}\vt\multirow2{Memo}\vt Debit/Credit\elspec
+|||\trule\el
+|||Balance\eltt
+\multirow2{245}|\multirow2{8--2}|\multirow2{Rent}|\$ \hfill 250.00\elspec
+|||\trule\el
+|||\$ \hfill 436.29\elttt{.7pt}
+\multirow2{246}|\multirow2{8--2}|\multirow2{Danson Electric}|\$ \hfill 49.28\elspec
+|||\trule\el
+|||\$ \hfill 387.01\elttt{.7pt}
+\multirow2{247}|\multirow2{8--5}|\multirow2{Jeff's Grocery}|\$ \hfill 35.88\elspec
+|||\trule\el
+|||\$ \hfill 351.13\elttt{.7pt}
+\multirow2{248}||\multirow2{Void}|\elspec
+|||\el
+|||\elttt{.7pt}
+\multirow2{249}|\multirow2{8--10}|\multirow2{Danson Times}|\$ \hfill 19.00\elspec
+|||\trule\el
+|||\$ \hfill 332.13\endtable*
+\vskip .125in
+\begintable
+\multirow2{\#}\vt\multirow2{Date}\vt\multirow2{Memo}\vt Debit/Credit\elspec
+|||\trule\el
+|||Balance\eltt
+\multirow2{245}|\multirow2{8--2}|\multirow2{Rent}|\$ \hfill 250.00\elspec
+|||\trule\el
+|||\$ \hfill 436.29\elttt{.7pt}
+\multirow2{246}|\multirow2{8--2}|\multirow2{Danson Electric}|\$ \hfill 49.28\elspec
+|||\trule\el
+|||\$ \hfill 387.01\elttt{.7pt}
+\multirow2{247}|\multirow2{8--5}|\multirow2{Jeff's Grocery}|\$ \hfill 35.88\elspec
+|||\trule\el
+|||\$ \hfill 351.13\elttt{.7pt}
+\multirow2{248}||\multirow2{Void}|\elspec
+|||\el
+|||\elttt{.7pt}
+\multirow2{249}|\multirow2{8--10}|\multirow2{Danson Times}|\$ \hfill 19.00\elspec
+|||\trule\el
+|||\$ \hfill 332.13\endtable
+\vfill\eject
+\leftline{\bf Example 4}
+\vskip .125in
+"*\begintable
+Account|Ck\#|Debit|Credit|Balance\eltt
+\stparrow3{3in}{\noindent The Lyons Investment Memorial Student Fund following
+specifications 11.2.3 of the U.S. Governmental Code CCA1}
+|123|\$\hfill 1,000.00||\$\hfill 20,000\elspec
+|\trule|\trule|\trule|\trule\el
+|124|\$\hfill 200.00||\$\hfill 19,800\elspec
+|\trule|\trule|\trule|\trule\el
+|||\$\hfill 4,000.00|\$\hfill 23,800\elttt{.7pt}
+\multicolumn4\hfil\stpar{5.25in}{At the end of the physical year 1990 the
+balance in the account for Lyons Investment Memorial Student Fund will be
+tallied and the results will be published as per Governmental Code 3.4.2 of the
+last payable week in the session. The value presented here is a projection of
+the actual that will be available.}\hfil|\$\hfill 25,000\endtable*
+\vskip .125in
+\begintable
+Account|Ck\#|Debit|Credit|Balance\eltt
+\stparrow3{3in}{\noindent The Lyons Investment Memorial Student Fund following
+specifications 11.2.3 of the U.S. Governmental Code CCA1}
+|123|\$\hfill 1,000.00||\$\hfill 20,000\elspec
+|\trule|\trule|\trule|\trule\el
+|124|\$\hfill 200.00||\$\hfill 19,800\elspec
+|\trule|\trule|\trule|\trule\el
+|||\$\hfill 4,000.00|\$\hfill 23,800\elttt{.7pt}
+\multicolumn4\hfil\stpar{5.25in}{At the end of the physical year 1990 the
+balance in the account for Lyons Investment Memorial Student Fund will be
+tallied and the results will be published as per Governmental Code 3.4.2 of the
+last payable week in the session. The value presented here is a projection of
+the actual that will be available.}\hfil|\$\hfill 25,000\endtable
+\bye
+%
+% end of documentation
+
diff --git a/macros/plain/contrib/tbe/tbemacros.tex b/macros/plain/contrib/tbe/tbemacros.tex
new file mode 100644
index 0000000000..bcd9d29528
--- /dev/null
+++ b/macros/plain/contrib/tbe/tbemacros.tex
@@ -0,0 +1,286 @@
+% TBEMACROS, Version 1.0, July 10, 1991
+
+%This file contains some new commands defined in the book `TeX by Example',
+%by Arvind Borde (copyright (c) 1992, Academic Press). The commands may be
+%copied and modified freely, as long as (1) such copies and modifications are
+%not made or distributed for re-sale, (2) this notice is retained, and
+%(3) the date of any modifications is added below this notice.
+
+%The commands are provided `as is'. The author provides no warranty whatsoever,
+%either express or implied, regarding them, or with respect to their fitness
+%for any particular purpose.
+
+%The commands were put together to demonstrate the versatility of TeX and the
+%variety of applications possible with it. They are not all equally useful.
+%An effort has been made to keep them reasonably simple and to avoid
+%certain advanced constructions. Though this has meant sacrificing
+%sophistication at various points, it should allow even new users to edit
+%the definitions to suit their own purposes with relative ease.
+
+%Samples of the uses of these commands are to be found in a companion file,
+%`TBESAMPLES.TEX'.
+
+%********** LETTERS ************************************************************
+\def\letterhead {\hrule height 1pt depth 0pt width\hsize
+ \medskip
+ \rightline{\vbox{\hsize 1.5true in \baselineskip=12pt \parindent=0pt
+ Your name, \hfil\break
+ Your address, \hfil\break
+ Etc. }}}
+
+\def\date #1{\rightline{\vbox{\hsize 1.5true in\noindent #1}}\bigskip}
+
+\def\address #1{\vbox{\baselineskip=12pt\halign{## \hfil\cr #1}}}
+
+\def\sal #1{\noindent #1}
+
+\def\endletter #1#2{\nobreak\medskip\rightline{\vbox{\hsize 1.5true in
+ \parindent=0pt #1\vskip 1.25 true cm #2}}}
+
+%********** MEMORANDA **********************************************************
+\def\block #1{\vbox{\hsize 2.5 true cm\noindent \bf#1:}}
+
+\def\memo TO:#1FROM:#2SUBJECT:#3DATE:#4\par{\centerline{\sl MEMO!}
+ \bigskip \hrule height1pt \medskip
+ \vbox{\parindent=75pt\parskip=1pt
+ \item{\block{TO}}#1
+ \item{\block{FROM}}#2
+ \item{\block{SUBJECT}}#3
+ \item{\block{DATE}}#4 }\medskip \hrule height1pt \bigskip}
+
+%********** SCRIPTS ************************************************************
+\newcount\spk
+\def\beginscript {\bgroup \parindent=0pt \spk=1 \sl \rightskip.4in
+ \def\par {\ifnum\spk=1 \endgraf \it \spk=2 \leftskip.4in \rightskip0in
+ \else \endgraf \sl \spk=1 \leftskip0in \rightskip.4in \fi}}
+
+\def\endscript {\egroup}
+
+%********** FERMAT *************************************************************
+\newcount\var \newcount\pw \newcount\tmp \newcount\cnt
+\def\pow#1#2#3{\var=#1 \pw=#2 \tmp=\var \cnt=1
+ \loop \multiply\var by\tmp \advance\cnt by1 \ifnum\cnt<\pw \repeat
+ \global#3=\var}
+
+\newcount\xf \newcount\xnf \newcount\yf \newcount\ynf \newcount\zf \newcount\znf
+\def\n {\number}
+
+\def\fermat#1#2#3{$\global\xf=#1 \global\yf=#2 \global\pw=#3
+ \pow{\xf}{\pw}{\xnf} \pow{\yf}{\pw}{\ynf}
+ \global\tmp=\ynf \global\advance\tmp by\xnf
+ {\n\xf}^{\n\pw}+{\n\yf}^{\n\pw}={\n\tmp}$.\hfil\break
+ \ifnum\xf>\yf \zf=\xf \else \zf=\yf \fi
+ \loop {\pow{\zf}{\pw}{\znf}} \ifnum\znf<\tmp \advance\zf by1 \repeat
+ \ifnum\znf=\tmp The sum seems to be exactly ${\n\zf}^{\n\pw}$.
+ \ifnum\pw=2 {\it Yawn!\/} Tell me something I don't know, will you?
+ \else Incredible! But, perhaps you'd better check my work.\fi
+ \else \advance\zf by-1
+ This lies between ${\n\zf}^{\n\pw}$\pow{\zf}{\pw}{\znf}($={\n\znf}$)
+ \advance\zf by1
+ and ${\n\zf}^{\n\pw}$\pow{\zf}{\pw}{\znf}($={\n\znf}$).\fi}%
+
+%********** FRAMING ************************************************************
+\def\frame #1#2#3#4{\vbox{\hrule height #1pt% TOP RULE
+ \hbox{\vrule width #1pt\kern #2pt% RULE AND SPACE ON LEFT
+ \vbox{\kern #2pt% SPACE AT TOP
+ \vbox{\hsize #3\noindent #4}% MATERIAL THAT WILL BE BOXED
+ \kern #2pt}% SPACE AT BOTTOM
+ \kern #2pt\vrule width #1pt}% SPACE AND RULE ON RIGHT
+ \hrule height0pt depth #1pt}}%, BOTTOM RULE
+
+\def\fitframe #1#2#3{\vbox{\hrule height#1pt% TOP RULE
+ \hbox{\vrule width#1pt\kern #2pt% RULE AND SPACE ON LEFT
+ \vbox{\kern #2pt\hbox{#3}\kern #2pt}% TOP, MATERIAL, BOTTOM
+ \kern #2pt\vrule width#1pt}% SPACE AND RULE ON RIGHT
+ \hrule height0pt depth#1pt}}% BOTTOM RULE
+
+\def\shframe #1#2#3#4{\vbox{\hrule height 0pt% NO TOP SHADOW
+ \hbox{\vrule width #1pt\kern 0pt% LEFT SHADOW
+ \vbox{\kern-#1pt\frame{.3}{#2}{#3}{#4}% SHADOW STARTS #1 PT FROM TOP
+ \kern-.3pt}% MOVE UP RULE THICKNESS AT BOT.
+ \kern-#1pt\vrule width 0pt}% STOPS #1 PT FROM RT; NO RT SHAD
+ \hrule height #1pt}}% BOTTOM SHADOW
+
+\def\s #1{\frame{.3}{2}{8pt}{\centerline{#1\vphantom{(}}}\ }
+
+%********** RULED TRAPEZOID ****************************************************
+\newcount\tw %top width in pt
+\newcount\bw %bottom width in pt
+\newcount\h %height in pt
+\newcount\bs %bottom shift in pt
+\newcount\th %line thickness in 1/64th of a pt
+\newcount\gp %line gap in 1/64th of a point
+\newcount\rs %running shift
+\newcount\rw %running width
+\newcount\rh %running height
+\newcount\tmp %for temporarily storing variables
+
+\def\trap #1#2#3#4#5#6{\vbox{\offinterlineskip
+ \tw=#1 \bw=#2 \h=#3 \bs=#4 \th=#5 \gp=#6 \rh=0
+ \multiply\tw by 65536 \multiply\bw by 65536 \multiply\bs by 65536
+ \multiply\th by 1024 \multiply\gp by 1024
+ \loop
+ \tmp=\bs \multiply\tmp by\rh \divide\tmp by\h
+ \rs=\tmp %running shift calculated
+ \tmp=\bw \advance\tmp by-\tw \multiply\tmp by\rh
+ \divide\tmp by\h \advance\tmp by\tw \rw=\tmp %running width calculated
+ \hbox{\kern\rs sp\vrule height0sp depth\th sp width\rw sp}%RULE DRAWN HERE
+ \vskip\gp sp %GAP LEFT HERE
+ \ifnum\rh<\h \tmp=\rh \multiply\tmp by 65536
+ \advance\tmp by\th \advance\tmp by\gp \divide\tmp by65536 \rh=\tmp
+ \repeat}}%
+
+\def\rect #1#2#3#4{\trap{#1}{#1}{#2}{0}{#3}{#4}}%
+
+%********** MULTIPLE COLUMN ****************************************************
+\newcount\colnumber \newbox\col \newdimen\tmpdim \newdimen\size
+\newdimen\coljump \coljump=.2 true in %GAP BETWEEN COLUMNS
+
+\def\niceskip {\vskip\baselineskip}
+\def\nstrut {\vrule height\topskip depth0pt width0pt} %TO PROP THINGS UP
+\def\divider{\hskip\coljump}
+\def\dividerule{\dimen0=.4pt \dimen1=\coljump \advance\dimen1 by-\dimen0
+ \divide\dimen1 by2
+ \def\divider{\hskip\dimen1 \vrule width\dimen0 \hskip\dimen1}}
+
+\def\beginart #1/#2{\vbox\bgroup#1 \colnumber=#2 \parskip=0pt
+ \advance\colnumber by-1 \tmpdim=\coljump \multiply\tmpdim by\colnumber
+ \size=\hsize \advance\size by-\tmpdim
+ \advance\colnumber by1 \divide\size by\colnumber
+ \vbadness=10000 \hbadness=2000 \tolerance=2000
+ \setbox\col=\vbox\bgroup\hsize\size \noindent\nstrut}
+
+\def\endart {\global\size=\baselineskip \vfil \egroup
+ \multiply\size by\colnumber \advance\size by-\baselineskip
+ \tmpdim=\ht\col \advance\tmpdim by\size \divide\tmpdim by\colnumber
+ \hbox{\splittopskip=\topskip \doittoit}\egroup}
+
+\def\doittoit{\ifnum\colnumber>0 \vsplit\col to \tmpdim
+ \global\advance\colnumber by-1
+ \ifnum\colnumber>0 \divider \fi \doittoit \fi}
+
+%********** FONT AND CODE TABLE ************************************************
+\def\chartable #1{\smallbreak\vbox{\noindent%
+ \underbar{Characters in the {\sl#1\/} font, with decimal codes:}
+ \raggedright \hbadness5000 \tolerance10000 \medskip
+ \font\ft=#1 \ft \dimen0=14pt \baselineskip=\dimen0
+ \ifdim\dimen0<3.25ex \baselineskip=3.25ex \fi \count255=0 \dimen0=10pt
+ \loop \setbox0=\hbox{\char\count255}
+ \ifdim\wd0>\dimen0 \dimen0=\wd0 \fi \advance\count255 by1
+ \ifnum\count255<128 \repeat \count255=0
+ \advance\dimen0 by 25pt \noindent \loop
+ \hbox to\dimen0{\hbox to23pt{\hfil\rm\the\count255:\ }\char\count255\hfil}
+ \advance\count255 by1 \ifnum\count255<128 \quad\repeat
+ \smallbreak} \font\tenrm=cmr10 }
+
+%********** THE `IGNORE' COMMAND ***********************************************
+\def\ignore {\count255=0 \begingroup
+ \loop \catcode\count255=14 % Make everything a comment character.
+ \advance\count255 by1 \ifnum\count255<127
+ \repeat \catcode`\!=0 } % Makes ! an escape character.
+{\catcode`\!=0 !gdef!E{!endgroup}}% Defines the `stop ignoring' command.
+
+%********** STACKSYMBOLS *******************************************************
+\def\stacksymbols #1#2#3#4{\def\theguybelow{#2}
+ \def\verticalposition{\lower#3pt}
+ \def\spacingwithinsymbol{\baselineskip0pt\lineskip#4pt}
+ \mathrel{\mathpalette\intermediary#1}}
+\def\intermediary#1#2{\verticalposition\vbox{\spacingwithinsymbol
+ \everycr={}\tabskip0pt
+ \halign{$\mathsurround0pt#1\hfil##\hfil$\crcr#2\crcr
+ \theguybelow\crcr}}}
+
+\def\lapproxeq{\stacksymbols{<}{\sim}{2.5}{.2}}
+\def\gapproxeq{\stacksymbols{>}{\sim}{3}{.5}}
+
+%********** DATING *************************************************************
+\def\monthname {\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}
+
+\newcount\mins \newcount\hours \hours=\time \mins=\time
+\def\now{\divide\hours by60 \multiply\hours by60 \advance\mins by-\hours
+ \divide\hours by60 % NOTE: \divide only gives integer answers.
+ \ifnum\hours>12 \advance\hours by-12
+ \number\hours:\ifnum\mins<10 0\fi\number\mins\ P.M.\else
+ \number\hours:\ifnum\mins<10 0\fi\number\mins\ A.M.\fi}
+\def\today {\monthname\ \number\day, \number\year}
+
+%********** TABLE COMMANDS *****************************************************
+\newdimen\tempdim % For temporary storage.
+\newdimen\othick \othick=.4pt % To set the outer rule thickness.
+\newdimen\ithick \ithick=.4pt % To set the inner rule thickness.
+\newdimen\spacing \spacing=9pt % To set the interline spacing.
+\newdimen\abovehr \abovehr=6pt % Space above horizontal rules.
+\newdimen\belowhr \belowhr=8pt % Space below horizontal rules.
+\newdimen\nexttovr \nexttovr=8pt % Space next to vertical rules.
+
+\def\r{\hfil&\omit\vrsp\vrule width\othick\cr&} % To start a new line.
+\def\rr{\hfil\down{\abovehr}&\omit\vrsp\vrule width\othick\cr
+ \noalign{\hrule height\ithick}\up{\belowhr}&}% To draw an \hrule.
+\def\up#1{\tempdim=#1\advance\tempdim by1ex
+ \vrule height\tempdim width0pt depth0pt}% For space above a line.
+\def\down#1{\vrule height0pt depth#1 width0pt}% For space below a line.
+\def\large#1#2{\setbox0=\vtop{\hsize#1 \lineskiplimit=0pt \lineskip=1pt
+ \baselineskip\spacing \advance\baselineskip by 3pt \noindent
+ #2}\tempdim=\dp0\advance\tempdim by\abovehr\box0\down{\tempdim}}
+% `\large' allows you to make multi-line table entries.
+\def\dig{{\hphantom0}} % To leave a space, the width of a digit.
+\def\hgap#1{\hskip-\nexttovr\hskip#1\hskip-\nexttovr\relax} % For a gap.
+\def\vrsp{\hskip\nexttovr\relax}
+\def\toprule#1{\def\startrule{\hrule height#1\relax}} % Set a top rule.
+\toprule{\othick} % Picking the `\toprule' default.
+\def\nstrut{\vrule height\spacing depth3.5pt width0pt}
+\def\exclaim{\char`\!} % To print an exclamation mark.
+\def\preamble#1{\def\startup{#1}} % For `customized' preambles.
+\preamble{&##} % Choosing the default preamble.
+{\catcode`\!=\active
+ \gdef!{\hfil\vrule width0pt\vrsp\vrule width\ithick\relax\vrsp&}}
+% Setting up `!' as the entry separator.
+
+\def\table #1{\vbox\bgroup \setbox0=\hbox{#1}
+ \vbox\bgroup\offinterlineskip \catcode`\!=\active
+ \halign\bgroup##\vrule width\othick\vrsp&\span\startup\nstrut\cr
+ \noalign{\medskip}
+ \noalign{\startrule}\up{\belowhr}&}
+
+\def\caption #1{\down{\abovehr}&\omit\vrsp\vrule width\othick\cr
+ \noalign{\hrule height\othick}\egroup\egroup \setbox1=\lastbox
+ \tempdim=\wd1 \hbox to\tempdim{\hfil \box0 \hfil} \box1 \smallskip
+ \hbox to\tempdim{\advance\tempdim by-20pt\hfil\vbox{\hsize\tempdim
+ \noindent #1}\hfil}\egroup}
+
+%********** VERBATIM REPRODUCTION **********************************************
+\let\cc=\catcode
+{\cc`\^^M=\active %
+\gdef\losenolines{\cc`\^^M=\active \def^^M{\leavevmode\endgraf}}}
+\def\literal {\begingroup \cc`\\=12 \cc`\{=12 \cc`\}=12 \cc`\$=12 \cc`\&=12
+ \cc`\#=12 \cc`\%=12 \cc`\~=12 \cc`\_=12 \cc`\^=12 \cc`\*=12 \cc`\@=0
+ \cc`\`=\active \losenolines \obeyspaces \tt}%
+{\obeyspaces\gdef {\hglue.5em\relax}}
+
+{\cc`\`=\active \gdef`{\relax\lq}}
+
+\def\vquotingon{\cc`\"=\active}
+\def\vquotingoff{\cc`\"=12}
+\vquotingon
+\def"{\literal\leavevmode\hbox\bgroup\com}
+%`\leavevmode' starts a new paragraph, if needed.
+
+\def\beginliteral{\medskip \literal \cc`\"=12%
+ \parskip0pt \baselineskip11pt \thatisit}
+
+{\cc`\@=0 \cc`\\=12 @cc`@^^M=@active %
+ @gdef@com#1"{#1@egroup@endgroup} %
+ @gdef@thatisit^^M#1\endliteral{#1@endgroup@smallskip}}
+\vquotingoff
+
+%********** GENERAL ************************************************************
+\def\pattern #1#2{\count0=0
+ \loop #1\advance\count0 by 1 \ifnum\count0<#2 \repeat}
+
+\def\raggedleft{\leftskip=0pt plus2em \parfillskip0pt
+ \spaceskip=.3333em \xspaceskip=.5em\relax}
+
+%*******************************************************************************
+\endinput
diff --git a/macros/plain/contrib/tbe/tbesamples.tex b/macros/plain/contrib/tbe/tbesamples.tex
new file mode 100644
index 0000000000..862acd8a2c
--- /dev/null
+++ b/macros/plain/contrib/tbe/tbesamples.tex
@@ -0,0 +1,548 @@
+%`TEX' THIS FILE, AND PRINT IT.
+
+% TBESAMPLES, Version 1.0, July 10, 1991
+
+%This file contains examples of the uses of some new commands defined in
+%`TeX by Example' by Arvind Borde (copyright (c) 1992, Academic Press). The
+%commands are also stored in the file `TBEMACROS.TEX'.
+
+%The commands in `TBEMACROS.TEX' and the examples of their uses shown in this
+%file are provided `as is'. The author provides no warranty whatsoever,
+%either express or implied, regarding this work, or with respect to its
+%fitness for any particular purpose.
+
+%-------------------------------------------------------------------------------
+\input tbemacros
+\vquotingon %Allows the use of `"' when quoting commands verbatim.
+
+%-------------------------------------------------------------------------------
+%LAYOUT
+
+\hsize 7.25 true in \hoffset -.5 true in
+\vsize 9.75 true in \voffset -.5 true in
+\output={\shipout\vbox{\fitframe{.4}{9}{\vbox{\pagebody}}\kern-12pt
+ \makefootline}
+ \advancepageno}
+\def\ctbe{Commands from `\TeX\ by Example'; version 1.0}
+\footline={\ifodd\pageno {\sevenrm\ctbe\hfil Page \folio\kern-18pt}%
+\else {\sevenrm Page \folio\hfil\ctbe\kern-18pt}\fi}
+
+%-------------------------------------------------------------------------------
+%RESETTING SOME SPACING PARAMETERS
+
+\parskip 1pt plus 1pt
+\parindent 11pt
+\abovedisplayskip=2pt plus2pt minus2pt %These are spaces around math displays
+\belowdisplayskip=\abovedisplayskip
+\belowdisplayshortskip=\belowdisplayskip
+\abovedisplayshortskip=0pt plus1pt
+
+%-------------------------------------------------------------------------------
+%FONTS
+
+\font\title=cmbx10 scaled\magstep3 % For the title.
+\font\bbf=cmbx10 scaled\magstep1 % For section headings
+
+%-------------------------------------------------------------------------------
+%UTILITY COMMANDS
+
+\def\beginex{\noindent{\it Illustration\/}: \medskip \noindent}
+\def\endex{\medskip \noindent {\it The input for this was\/}:}
+
+\newcount\topicno \topicno=1
+\def\newtopic#1{\noindent {\bbf\the\topicno. #1}
+ \global\advance\topicno by1
+ \smallskip\noindent\ignorespaces}%
+
+\def\newpage{\beginart \dividerule \coljump=.25 true in/ {2}}
+\def\endpage{\endart\vfil\eject}
+
+%-------------------------------------------------------------------------------
+
+\setbox0=\vbox{\title E}% Makes a box whose height is used to fix other heights.
+
+\def\llines{\vbox to \ht0{\hsize 1in \parindent0pt \raggedleft
+\offinterlineskip
+\vrule height 1pt depth 0pt width .8in
+\vfil
+\vrule height 1pt depth 0pt width .5in
+\vfil
+\vrule height 1pt depth 0pt width 1in}}
+
+\def\rlines{\vbox to \ht0{\hsize 1in \parindent0pt \raggedright
+\offinterlineskip
+\vrule height 1pt depth 0pt width .8in
+\vfil
+\vrule height 1pt depth 0pt width .5in
+\vfil
+\vrule height 1pt depth 0pt width 1in}}
+
+\vglue.5pt
+\centerline{\title\llines\ \ Commands from `\TeX\ by Example'\ \ \rlines}
+\bigskip
+\medskip
+\centerline{\vbox{\hsize4.5in \raggedright \raggedleft
+\pretolerance=10000 \hbadness=10000
+\noindent\hfil The commands illustrated below are taken from the book\hfil\break
+{\it \TeX\ by Example}, by Arvind Borde ({\sl Academic Press}, 1992). Their
+definitions are printed in that book and are also available in a file called
+{\sl tbemacros.tex}\thinspace. To use the commands you must copy the
+definitions from the book, or type `{\tt\string\input\ tbemacros}' in your
+file.}}
+\bigskip\medskip
+\hrule
+\bigskip
+\newpage
+\newtopic{Letters}
+\beginex
+\letterhead
+\date{\today}
+\address{Name\cr Street\cr City\cr
+Postal code\cr Country.\cr}
+\smallskip
+\sal{Dear Reader,}
+
+This shows you how to make a simple letter.
+
+\endletter{Sincerely,}{The Author.}
+\endex
+\beginliteral
+\letterhead
+\date{\today}
+\address{Name\cr Street\cr City\cr
+Postal code\cr Country.\cr}
+\smallskip
+\sal{Dear Reader,}
+
+This shows you how to make a simple letter.
+
+\endletter{Sincerely,}{The Author.}
+\endliteral
+
+\noindent For this to be useful, you must edit the definition of
+"\letterhead" in the {\sl tbemacros\/} file, replacing ``Your name''
+by your name, etc.
+
+\bigskip
+\newtopic{Framing text}
+\beginex
+\centerline{\frame{.5}{6}{2.25in}{\noindent
+This text is 2.25 inches wide, with 6 points
+of white space all around. The rules that
+make the frame around the text are each .5
+point thick.}}
+\endex
+\beginliteral
+\centerline{\frame{.5}{6}{2.25in}{\noindent
+This text is 2.25 inches wide, with 6 points
+of white space all around. The rules that
+make the frame around the text are each .5
+point thick.}}
+\endliteral
+\medskip
+\beginex
+\centerline{\fitframe{.3}{.5}{This frame hugs
+its contents.}}
+\endex
+\beginliteral
+\centerline{\fitframe{.3}{.5}{This frame hugs
+its contents.}}
+\endliteral
+\medskip
+\beginex
+\centerline{\shframe{3}{10}{110pt}{%
+\centerline{\s{S}\s{H}\s{A}\s{D}\s{O}\s{W}}}}
+\endex
+\beginliteral
+\centerline{\shframe{3}{10}{110pt}{%
+\centerline{\s{S}\s{H}\s{A}\s{D}\s{O}\s{W}}}}
+\endliteral
+
+\bigskip
+\newtopic{Memoranda}
+\beginex
+\memo
+TO: The reader.
+FROM: The author.
+SUBJECT: Writing memoranda.
+DATE: Today.
+
+This shows you one way to do a memorandum.
+\bigskip
+\centerline{\pattern{$\star$}{25}}
+\endex
+\beginliteral
+\memo
+TO: The reader.
+FROM: The author.
+SUBJECT: Writing memoranda.
+DATE: Today.
+
+This shows you one way to do a memorandum.
+\bigskip
+\centerline{\pattern{$\star$}{25}}
+\endliteral
+\noindent The "\memo" command is somewhat rigid in that it requires
+you to type `"TO:"', `"FROM:"', `"SUBJECT:"' and `"DATE:"' {\sl exactly\/}
+as shown, and in that order.
+\endpage
+
+\newpage
+\newtopic{Ignoring text}
+The command shown below allows you to make multi-line
+comments without using a "%" sign at the start of each line. It is
+useful when you want \TeX\ to temporarily ignore parts of a document
+and to process only a portion of it.
+\ignore
+All input lines will be ignored from now on
+unless they start with an `!'.
+`\ignore' is switched off by typing `!E' at
+the START of a line, as here:
+!E
+\beginliteral
+\ignore
+All input lines will be ignored from now on
+unless they start with an `!'.
+`\ignore' is switched off by typing `!E' at
+the START of a line, as here:
+!E
+\endliteral
+
+\bigskip
+\newtopic{Ruled tables}
+It is tedious work to make tables with `rules' (i.e., drawn lines)
+from scratch, each time they are needed. The "\table" command in this
+package, along with its associates, gives you one easy way to make
+ruled tables.
+\medskip
+\beginex
+$$\table{\bf Table A}
+One ! Two ! Three \rr
+101 ! 102 ! 103 \r
+104 ! 105 ! 10691
+\caption{}$$
+\endex
+\beginliteral
+$$\table{\bf Table A}
+One ! Two ! Three \rr
+101 ! 102 ! 103 \r
+104 ! 105 ! 10691
+\caption{}$$
+\endliteral
+\noindent The "$$" signs center the table and leave space above and below. They
+can be omitted, if you don't want this. The table entries are typed between
+"\table{}" and "\caption{}". Entries that are to go on the same line are
+separated by "!". You signal the end of a line by typing `"\rr"' if you want a
+horizontal rule just below, or `"\r"' if you don't---for all but the last line.
+\medskip
+\beginex
+\medskip\hfil % This combination serves
+%to center the table.
+\table{\bf B}
+\hfill\bf 1\hfill!\hfill\bf 2\hfill\rr
+\hfill A! $\alpha$ \r
+\it Italics. ! \rr
+\multispan{2}Like it? \hfil
+\caption{Your caption can be many lines
+long\exclaim}
+\endex
+\beginliteral
+\medskip\hfil % This combination serves
+%to center the table.
+\table{\bf B}
+\hfill\bf 1\hfill!\hfill\bf 2\hfill\rr
+\hfill A! $\alpha$ \r
+\it Italics. ! \rr
+\multispan{2}Like it? \hfil
+\caption{Your caption can be many lines
+long\exclaim}
+\medskip
+\endliteral
+\noindent Thus, you can use "\multispan" to span table entries, as normal, and
+you can center entries, set them flush right, or change typeface, as shown. The
+"\exclaim" at the end of the caption gives `!': a special command is needed
+because the character is reserved in this application for special duty as
+a column separator. The `special duty' that `!' performs does not work correctly
+from within commands like "\centerline". To center, you must use "$$" on
+either side, or the method employed above. The next example shows how to specify
+your own table `preambles'.
+\medskip
+\beginex
+$$\preamble{\hfill\it ##\hfill\strut&##&\hfill
+\sl ##&##}
+\table{\bf C}
+\bf Col. 1 &!\bf Col. 2\hfill\rr
+One &! 44987.01\r
+Two &! 513.1\dig\rr
+%\dig will make the decimal points align.
+Three && 316.9\dig\rr
+Four &!\large{1.6in}{This shows you
+how you can make entries that are many lines
+long.}
+\caption{} $$
+\endex
+\beginliteral
+$$\preamble{\hfill\it ##\hfill\strut&##&\hfill
+\sl ##&##}
+\table{\bf C}
+\bf Col. 1 &!\bf Col. 2\hfill\rr
+One &! 44987.01\r
+Two &! 513.1\dig\rr
+%\dig will make the decimal points align.
+Three && 316.9\dig\rr
+Four &!\large{1.6in}{This shows you
+how you can make entries that are many lines
+long.}
+\caption{} $$
+\endliteral
+\noindent Specifying a customized preamble can get a little tricky, so you
+may wish
+not to indulge. The preamble has to have extra slots for the vertical rules,
+for one thing, and you have to make sure you enclose everything in a group
+(either explicitly within braces, or between "$$" signs) to prevent the
+new preamble specification from interfering with the default preamble that
+goes with these commands. Easier to use from the table above, are "\dig",
+which merely leaves a horizontal space of size equal to the width of a digit,
+and "\large{}{}", which can be used to place large-size material in the table.
+"\dig" can be used to align columns of digits along decimal points. To use
+"\large" you have to specify a width ("1.6in" above).
+\endpage
+
+\newpage
+\indent
+You can adjust other attributes to suit your own tastes. Rule thicknesses
+are governed by "\toprule" (thickness of the top rule), "\othick" (thickness of
+the outer rules; default value .4pt) and "\ithick" (thickness of the inner
+rules; default value .4pt). A minimum height is assigned to every line by
+"\spacing" (default 9pt); the space above and below horizontal rules is set by
+the values of "\abovehr" (default 6pt) and "\belowhr" (default 8pt); the space
+next to vertical rules by "\nexttovr" (default 8pt). All these parameters can
+be altered, as they have been below.
+\medskip
+\beginex
+\line{{\othick=2pt
+\table{} 1!2\rr
+3!4\caption{\centerline{\bf D}} }
+\hfil
+{\ithick=.8pt \othick=0pt \spacing=12pt
+\abovehr=18pt \belowhr=20pt \nexttovr=30pt
+\table{\bf E} 1!2\rr 3!4\caption{} }
+\hfil
+{\toprule{2pt}
+\table{} 1!\hgap{1pt}! 2\rr 3!\hgap{1pt}! 4
+\caption{\centerline{\bf F}} }}
+\endex\removelastskip
+\beginliteral
+\line{{\othick=2pt
+\table{} 1!2\rr
+3!4\caption{\centerline{\bf D}} }
+\hfil
+{\ithick=.8pt \othick=0pt \spacing=12pt
+\abovehr=18pt \belowhr=20pt \nexttovr=30pt
+\table{\bf E} 1!2\rr 3!4\caption{} }
+\hfil
+{\toprule{2pt}
+\table{} 1!\hgap{1pt}! 2\rr 3!\hgap{1pt}! 4
+\caption{\centerline{\bf F}} }}
+\endliteral
+\noindent The command "\hgap", used for the third table, makes a narrow column
+of specified size, so it may be used to effectively get double vertical lines.
+\medskip
+\beginex
+\centerline{{\othick=0pt \nexttovr=.1in
+\abovehr=.1in \belowhr=0in
+\table{}
+\large{2.25in}{You can make displays like
+this, by playing tricks with rule thickness.}
+\global\othick=3pt
+\caption{}}
+\othick=.4pt % MUST reset \othick.
+\qquad\qquad
+{\othick=1pt \ithick=1pt
+\table{}
+1\global\othick=0pt\rr 2\global\othick=1pt
+\caption{} }}
+\othick=.4pt % Reset \othick again.
+\endex
+\beginliteral
+\centerline{{\othick=0pt \nexttovr=.1in
+\abovehr=.1in \belowhr=0in
+\table{}
+\large{2.25in}{You can make displays like
+this, by playing tricks with rule thickness.}
+\global\othick=3pt
+\caption{}}
+\othick=.4pt % MUST reset \othick.
+\qquad\qquad
+{\othick=1pt \ithick=1pt
+\table{}
+1\global\othick=0pt\rr 2\global\othick=1pt
+\caption{} }}
+\othick=.4pt % Reset \othick again.
+\endliteral
+\noindent It was all right to use "\centerline" here, because "!" was not used
+anywhere.
+
+\bigskip
+\newtopic{Stacking symbols}
+Plain \TeX, a mathematician's creation, lacks two symbols essential to the
+emotional well-being of physicists, $\gapproxeq$ and $\lapproxeq$. This
+package provides them.
+\medskip
+\beginex
+$$a\lapproxeq b \qquad\qquad
+\alpha\gapproxeq\beta $$
+\endex
+\beginliteral
+$$a\lapproxeq b \qquad\qquad
+\alpha\gapproxeq\beta $$
+\endliteral
+\noindent These are special cases of a more general command that creates
+composite symbols like $\stacksymbols{g}{\tilde{}}{8}{1}$, i.e.,
+it allows you to take any two symbols and place one above the other. This
+particular composite symbol was created by
+\beginliteral
+$\stacksymbols{g}{\tilde{}}{8}{1}$
+\endliteral
+\noindent The first number controls the overall vertical position, the second
+the spacing within the new symbol. This allows you to fine tune spacing to your
+satisfaction. Even after `fine tuning', you may have to make further
+adjustments: e.g., the new symbol shown above has too large a `depth', as you
+can see from the gap between the line in which it appears and the line below.
+The required adjustments can be made with standard commands like "\smash"
+and "\vphantom".
+
+\bigskip
+\newtopic{Verbatim reproduction}
+Input lines are reproduced like this (for example):
+\beginliteral
+\beginliteral
+$$a\lapproxeq b \qquad\qquad
+\alpha\gapproxeq\beta $$
+\@-endliteral
+\endliteral
+% `@-' is a trick, to get the program to ignore the first `\endliteral'
+\noindent If you type `"\vquotingon"' in your
+\vquotingoff
+file, you can then use `{\tt"}' to quote commands verbatim
+within text. For example, the first input line for this paragraph was
+\vquotingon
+\beginliteral
+\noindent If you type `"\vquotingon"' in your
+\endliteral
+\noindent Typing `"\vquotingoff"' switches the feature off.
+
+\bigskip
+\newtopic{Multi-column output}
+The two column stuff on these pages is produced by
+\beginliteral
+\beginart \dividerule \coljump=.25in / {2}
+@bgroup@it stuff @egroup
+\endart
+\endliteral
+\noindent
+The specifications before the "/" are optional ("\dividerule" places a
+vertical rule between columns and "\coljump" resets the gap between
+columns---the default is no rule, with a .2 inch gap); the
+specification after the "/" gives the number of columns. This multi-column
+command has limited uses: it is suitable only for output that will fit on a
+single page.
+\endpage
+
+\newpage
+\newtopic{Character tables}
+\beginex
+\chartable{cmsy10}
+\endex
+\beginliteral
+\chartable{cmsy10}
+\endliteral
+\noindent To use the command, you must know the `external name' of the
+font (i.e., the name under which information about the font
+is filed). The one used above, "cmsy10", is the standard Computer Modern
+mathematics symbols font.
+
+\bigskip
+\newtopic{Scripts}
+\beginex
+\vskip-\smallskipamount
+\beginscript
+Now, at last, you can easily typeset
+conversations you eavesdrop on in
+restaurants and on planes.
+
+Really? That's just what I've been waiting
+for! How do I do it?
+
+Exactly the way this script was done.
+
+Is it easy?
+
+Extremely.
+\endscript
+\endex
+\beginliteral
+\beginscript
+Now, at last, you can easily typeset
+conversations you eavesdrop on in
+restaurants and on planes.
+
+Really? That's just what I've been waiting
+for! How do I do it?
+
+Exactly the way this script was done.
+
+Is it easy?
+
+Extremely.
+\endscript
+\endliteral
+
+\bigskip
+\newtopic{Dating}
+\beginex
+Gosh darn it, it's \monthname\ already!
+Even worse, it is \now\ on \today.
+\endex
+\beginliteral
+Gosh darn it, it's \monthname\ already!
+Even worse, it is \now\ on \today.
+\endliteral
+
+\bigskip
+\newtopic{Fun with numbers}
+\beginex
+\fermat{15}{16}{3}
+\smallskip\noindent
+\fermat{3}{4}{2}
+\endex
+\beginliteral
+\fermat{15}{16}{3}
+\smallskip\noindent
+\fermat{3}{4}{2}
+\endliteral
+
+\bigskip
+\newtopic{Trapezoids galore}
+\beginex
+\trap{0}{20}{50}{10}{10}{60}\quad
+\trap{10}{40}{30}{-10}{30}{100}\quad
+\rect{20}{48}{5}{120}\quad
+\trap{1}{1}{30}{50}{5}{60}
+\endex
+\beginliteral
+\trap{0}{20}{50}{10}{10}{60}\quad
+\trap{10}{40}{30}{-10}{30}{100}\quad
+\rect{20}{48}{5}{120}\quad
+\trap{1}{1}{30}{50}{5}{60}
+\endliteral
+\noindent The parameters in "\trap" are, respectively, the top width,
+the bottom width, the height and the bottom displacement (all in points);
+the rule thickness and the gap between rules (in 1/64th of a point). For
+"\rect" the numbers are the top width, the bottom width, the rule thickness
+and the gap. (If you use small numbers for the rule specifications, you
+are likely to cause \TeX\ to `overflow'.)
+\endpage
+
+\end
+
diff --git a/macros/plain/contrib/tengtex b/macros/plain/contrib/tengtex
new file mode 120000
index 0000000000..9fef58b3a3
--- /dev/null
+++ b/macros/plain/contrib/tengtex
@@ -0,0 +1 @@
+../../../macros/latex209/contrib/tengtex \ No newline at end of file
diff --git a/macros/plain/contrib/timetable/timetable.tex b/macros/plain/contrib/timetable/timetable.tex
new file mode 100644
index 0000000000..e0c881b852
--- /dev/null
+++ b/macros/plain/contrib/timetable/timetable.tex
@@ -0,0 +1,1156 @@
+%% timetable.tex - TeX macro for generating timetables. version 1.0
+%% Jiri VERUNEK 4. 11. 2001
+%% http://verunek.oceany.cz
+%% verunek@vol.cz, jiri.verunek@seznam.cz
+%%
+%%
+%% DESCRIPTION
+%% timetable.tex is a TeX macro for generating timetables. It uses
+%% plain format commands. It excels in extremelely high configurability,
+%% nice appearance and simple input. It supports alternating subjects
+%% in dependence on odd and even week. Macro has radix sort mechanism
+%% so the order of subjects in input is irrelevant.
+%% Note that this macro is distributed under the GNU General Public Licence.
+%%
+%% SYNOPSIS
+%% \timetable[OPTIONS]{SUBJECTS}
+%%
+%% SUBJECTS
+%% Each subject has following structure
+%% <day>:<subject type>:<beginning>-<duration>=<subjectname>-<location>
+%%
+%% <day>
+%% consist of the first two chars of the day (MO,TU,WE,TH,FR)
+%%
+%% <subject type>
+%% is one of these OL, L, EL, OP, P, EP.
+%% L means lecture, P - practice, O - odd week and E - even week.
+%%
+%% <beginning>
+%% is a number of the teaching hour in which the subject begins.
+%%
+%% <duration>
+%% is a number representing the subject duration in the teaching hours
+%%
+%% Subjects are separated by commas without spaces. Note the next paragraph.
+%%
+%% OPTIONS
+%% Options are separated by commas without spaces. The whole block
+%% of options must be enclosed by brackets. All must be placed on
+%% the one line. If you wish to place it on a several lines you will
+%% had to use per cent char `%' on the end of each line!
+%%
+%% tablewidth=<DIMENSION>
+%% Table will be stretched into this dimension. It will only enlarge
+%% the distance between vertical lines. No font transformation
+%% will be done.
+%%
+%% heading=<text>
+%% This text will be typed in the left upper edge of the table.
+%%
+%% strut=height<DIMENSION> depth<DIMENSION>
+%% This invisible prop is inserted into each subject row to enlarge
+%% the height of that row.
+%% Default value is `height1em depth.35em'.
+%%
+%% forcehrules
+%% Normally each subject is rounded by lines and no other lines are
+%% drown between the subjects. Using of this option will force
+%% drawing horizontal lines between the days.
+%%
+%% forcevrules
+%% Normally each subject is rounded by lines and no other lines are
+%% drown between the subjects. Using of this option will force
+%% drawing verical lines between the teaching hours. No subject will be
+%% naturally crossed out.
+%%
+%% environment=<environment>
+%% This does a lot of work. It changes the fonts, names of the day, etc.
+%% So you needn't use some other options to adjust texts to your language.
+%% Send me e-mail if you wish to add your environment.
+%% Supported environment:
+%% czech
+%% slovak
+%%
+%% headingfont=<fontname>
+%% This option sets a font in which will be typed the heading text.
+%% Default value for absent environment option is `cmb10'.
+%%
+%% columnheadingfont=<fontname>
+%% This option sets a font in which are typed the numbers
+%% of the teaching hours.
+%% Default value for absent environment option is `cmb10'.
+%%
+%% rowheadingfont=<fontname>
+%% This option sets a font in which are typed the names of the days
+%% and the `from' and the `to' text.
+%% Default value for absent environment option is `cmb10'.
+%%
+%% Lsubjectnamefont=<fontname>
+%% This option sets a font in which is typed the name of the lecture.
+%% Default value for absent environment option is `cmss10'.
+%%
+%% Llocationfont=<fontname>
+%% This option sets a font in which are typed the names of the rooms
+%% in which is that lecture taught.
+%% Default value for absent environment option is `cmssi10'.
+%%
+%% Psubjectnamefont=<fontname>
+%% This option sets a font in which is typed the name of the practice.
+%% Default value for absent environment option is `cmr10'.
+%%
+%% Plocationfont=<fontname>
+%% This option sets a font in which are typed the names of the rooms
+%% in which is that practice taught.
+%% Default value for absent environment option is `cmti10'.
+%%
+%% linewidth=<DIMENSION>
+%% This influences width of all lines in the table.
+%% Default value is `0.4pt'.
+%%
+%% linespacewidth=<DIMENSION>
+%% You can change the width of the space between the vertical lines
+%% on the left and on the right of the table by this option.
+%% Default value is `1.3pt'.
+%%
+%% linespaceheight=<DIMENSION>
+%% You can change the height of the space between the vertical lines
+%% on the top and at the bottom of the table by this option.
+%% Default value is `1.2pt'.
+%%
+%% MO=<text>
+%% TU=<text>
+%% WE=<text>
+%% TH=<text>
+%% FR=<text>
+%% This texts are typed in the first column of the table.
+%% Default values for absent environment option are `Monday', etc.
+%%
+%% from=<text>
+%% to=<text>
+%% This texts are typed in the first column of the table. The beginning
+%% time and the end time of the each teaching hour are typed in the
+%% next columns.
+%% Default values for absent environment option are `from', `to'.
+%%
+%% subjectsfrom=<timelist>
+%% subjectsto=<timelist>
+%% Timelist is a list of the beginning/end time of each teaching hour.
+%% The times are separated by pipes `|' and are in h:mm format.
+%%
+%% <DIMENSION>
+%% This are the standard TeX dimension types which consists from a number
+%% and from an unit like em, en, pt, dd, in, cm, sp, etc.
+%% It is good to use first two units which rely on the font size.
+%%
+%% BUGS
+%% It seem that there is a bug in dvips. If you would like create
+%% PostScript output, you can use pdfTeX and the print function of Xpdf.
+%%
+%% If you find some bug in this TeX macro send me a report with your input
+%% please. However be sure of having the right input before sending a report.
+%% Criticism and admiration are welcome.
+%%
+%% EXAMPLE
+%% \timetable[tablewidth=15cm,heading=ZS 2001/2002,environment=czech,%
+%% subjectsfrom=7:30|8:15|9:15|10:00|11:00|11:45|||14:30||16:15,%
+%% subjectsto=|9:00|9:45|10:45|11:30|12:30||14:15||16:00|16:55|17:45|19:25]%
+%% {TU:P:11-2=TI-K3,TH:L:1-2=EL-209,MO:L:5-2=M5D-K1,FR:P:3-2=LS-K307,%
+%% TU:L:1-3=TI-K1,MO:OP:8-2=DBS-K5,TU:L:6-2=\TeX-340,TH:OP:5-2=SOJ-K310,%
+%% TH:L:9-3=LS-337,MO:L:2-3=DBS-K1,FR:P:1-2=NLP-T204,MO:EP:9-2=DBS-K311,%
+%% WE:EP:4-2=EL-041/9}
+%%
+%%
+\edef\oldcountten{\the\count10\relax} % \count register
+\edef\oldcounteleven{\the\count11\relax} % \dimen register
+\edef\oldcountfourteen{\the\count14\relax} % \box register
+\edef\oldcountfiveteen{\the\count15\relax} % \toks register
+\newtoks\halignbody
+\newcount\nrofdeclared
+\newcount\nrofcolumns
+\newcount\tempnum
+\newcount\nextsubjectbeg
+\newcount\restcolumns
+\newcount\currentcolumn
+\newcount\hruleoldbelowbeg
+\newcount\hruleoldbelowdur
+\newcount\hruleabovebeg
+\newcount\hruleabovedur
+\newcount\hrulemiddlebeg
+\newcount\hrulemiddledur
+\newcount\hrulebelowbeg
+\newcount\hrulebelowdur
+\newdimen\tempdimen
+\newdimen\columnwidth
+\newbox\tempbox
+\def\timetable{\bgroup
+ \def\myrelaxtocolon##1:{\relax}
+ \def\declareto##1:{\let\next=\declareloop \next##1:}
+ \def\declareloop##1:{
+ \ifnum \nrofdeclared=##1 \let\next=\myrelaxtocolon
+ \else \advance\nrofdeclared by 1
+ \expandafter\def\csname col\the\nrofdeclared\endcsname{}
+ \fi \next##1:}
+ \def\analysethebeginning##1:##2:##3-##4=##5,{
+ \ifnum##3>\nrofdeclared \declareto ##3: \fi
+ \tempnum=##3
+ \advance\tempnum by ##4
+ \advance\tempnum by -1
+ \ifnum \tempnum>\nrofcolumns \nrofcolumns=\tempnum \fi
+ \ex\ex\ex\ex\ex\ex\ex\def\ex\ex\ex\ex\ex\ex\csname col##3\endcsname
+ \ex\ex\ex{\csname col##3\endcsname ##1:##2:##3-##4=##5,}}
+ \def\myrelaxtwo##1##2{\relax}
+ \def\myrelaxone##1{\relax}
+ \def\browse##1,{\browseaction##1,
+ \futurelet \nextchar\testnextchar}
+ \def\testnextchar{
+ \ifx ,\nextchar \let\browsenext=\myrelaxtwo
+ \else
+ \ifx *\nextchar \let\browsenext=\myrelaxone \fi
+ \fi
+ \browsenext}
+ \def\browsetimes##1|{\browseaction##1|
+ \futurelet \nextchar\testnexttimeschar}
+ \def\testnexttimeschar{
+ \ifx *\nextchar \let\browsenext=\myrelaxone \fi
+ \browsenext}
+ \def\mergethebeginning{
+ \def\subjects{}
+ \def\add####1:{\ex\ex\ex\ex\ex\ex\ex \def \ex\ex\ex\ex\ex\ex\ex \subjects
+ \ex\ex\ex\ex\ex\ex\ex{\ex\ex\ex \subjects \csname col####1\endcsname}}
+ \tempnum=0 \let\next=\mergethenextbeginning \next}
+ \def\mergethenextbeginning{
+ \ifnum\tempnum=\nrofdeclared \let\next=\relax
+ \else \advance\tempnum by 1 \expandafter\add\the\tempnum:
+ \fi \next}
+ \def\getfromhruleoldbelow##1-##2,##3*{
+ \def\hruleoldbelow{##3}
+ \hruleoldbelowbeg=##1
+ \hruleoldbelowdur=##2\relax}
+ \def\analyseOE##1:##2##3:##4-##5=##6,{
+ \def\addoldbelowtohruleabove{
+ \edef\hruleabove{\hruleabove \the\hruleoldbelowbeg-\the\hruleoldbelowdur,}}
+ \def\addtohruleabove{
+ \edef\hruleabove{\hruleabove \the\hruleabovebeg-\the\hruleabovedur,}
+ \hruleabovebeg=##4
+ \hruleabovedur=##5}
+ \def\addtohrulemiddle{
+ \edef\hrulemiddle{\hrulemiddle \the\hrulemiddlebeg-\the\hrulemiddledur,}
+ \hrulemiddlebeg=##4
+ \hrulemiddledur=##5}
+ \def\addtohrulebelow{
+ \edef\hrulebelow{\hrulebelow \the\hrulebelowbeg-\the\hrulebelowdur,}
+ \hrulebelowbeg=##4
+ \hrulebelowdur=##5}
+ \def\hruleabovetest{
+ \ifnum\hruleoldbelowbeg=0
+ \ifx \empty\hruleoldbelow \let\next=\hruleabovetestwithoutoldbelow
+ \else
+ \let\next=\hruleaboveloop
+ \let\getnextoldbelow=\getfromhruleoldbelowexp
+ \fi
+ \else
+ \let\next=\hruleaboveloop
+ \let\getnextoldbelow=\relax
+ \fi \next}
+ \def\getfromhruleoldbelowexp{
+ \expandafter\getfromhruleoldbelow\hruleoldbelow *}
+ \def\hruleabovetestwithoutoldbelow{
+ \ifnum\hruleabovebeg>0
+ \tempnum=\hruleabovebeg
+ \advance\tempnum by \hruleabovedur
+ \ifnum \tempnum<##4 % space
+ \addtohruleabove
+ \else
+ \tempnum=##4
+ \advance\tempnum by ##5
+ \advance\tempnum by -\hruleabovebeg
+ \advance\tempnum by -\hruleabovedur
+ \ifnum \tempnum>0
+ \advance\hruleabovedur by \tempnum
+ \fi
+ \fi
+ \else
+ \hruleabovebeg=##4
+ \hruleabovedur=##5
+ \fi}
+ \def\hruleaboveloop{
+ \ifnum\hruleabovebeg>0 % not first pass?
+ \ifnum\hruleoldbelowbeg=0
+ \ifx \empty\hruleoldbelow \let\next=\relax
+ \fi
+ \fi
+ \ifx \next\relax
+ \else
+ \getnextoldbelow
+ \tempnum=##4
+ \advance\tempnum by ##5
+ \advance\tempnum by 1
+ \ifnum \hruleoldbelowbeg<\tempnum
+ \ifnum \hruleoldbelowbeg<\hruleabovebeg
+ \tempnum=\hruleoldbelowbeg
+ \advance\tempnum by \hruleoldbelowdur
+ \advance\tempnum by 1
+ \ifnum \hruleabovebeg<\tempnum % 1
+ \advance\hruleabovedur by \hruleabovebeg
+ \advance\hruleabovedur by -\hruleoldbelowbeg
+ \hruleabovebeg=\hruleoldbelowbeg
+ \ifnum \hruleoldbelowdur>\hruleabovedur
+ \hruleabovedur=\hruleoldbelowdur
+ \fi
+ \let\getnextoldbelow=\getfromhruleoldbelowexp
+ \hruleoldbelowbeg=0
+ \hruleoldbelowdur=0
+ \else % 3
+ \addoldbelowtohruleabove
+ \let\getnextoldbelow=\getfromhruleoldbelowexp
+ \hruleoldbelowbeg=0
+ \hruleoldbelowdur=0
+ \fi
+ \else
+ \tempnum=\hruleabovebeg
+ \advance\tempnum by \hruleabovedur
+ \advance\tempnum by 1
+ \ifnum \hruleoldbelowbeg<\tempnum % 2
+ \tempnum=\hruleoldbelowbeg
+ \advance\tempnum by \hruleoldbelowdur
+ \advance\tempnum by -\hruleabovebeg
+ \advance\tempnum by -\hruleabovedur
+ \ifnum \tempnum>0
+ \advance\hruleabovedur by \tempnum
+ \fi
+ \let\getnextoldbelow=\getfromhruleoldbelowexp
+ \hruleoldbelowbeg=0
+ \hruleoldbelowdur=0
+ \else % 4
+ \tempnum=##4
+ \advance\tempnum by ##5
+ \advance\tempnum by -\hruleabovebeg
+ \advance\tempnum by -\hruleabovedur
+ \ifnum \tempnum>0 % Can the actual subject extend the hruleabove?
+ \ifnum \tempnum>##5 % If the extension is longer than duration
+ \addtohruleabove % of the actual subject there must be a space.
+ \else
+ \advance\hruleabovedur by \tempnum
+ \fi
+ \fi
+ \fi
+ \fi
+ \else % the next comparisons are in the authority of the next subject
+ \tempnum=\hruleabovebeg
+ \advance\tempnum by \hruleabovedur
+ \advance\tempnum by 1
+ \ifnum \tempnum>##4 %nospace
+ \tempnum=##4
+ \advance\tempnum by ##5
+ \advance\tempnum by -\hruleabovebeg
+ \advance\tempnum by -\hruleabovedur
+ \ifnum \tempnum>0
+ \advance\hruleabovedur by \tempnum
+ \fi
+ \else
+ \addtohruleabove
+ \fi
+ \let\getnextoldbelow=\relax
+ \let\next=\relax
+ \fi
+ \fi
+ \else
+ \hruleabovebeg=##4
+ \hruleabovedur=##5
+ \fi \next}
+ \def\hrulemiddletest{
+ \ifnum\hrulemiddlebeg>0
+ \tempnum=\hrulemiddlebeg
+ \advance\tempnum by \hrulemiddledur
+ \ifnum ##4>\tempnum % space
+ \addtohrulemiddle
+ \else
+ \advance\tempnum by -##4
+ \multiply\tempnum by -1
+ \advance\tempnum by ##5
+ \ifnum\tempnum>0
+ \advance\hrulemiddledur by \tempnum
+ \fi
+ \fi
+ \else
+ \hrulemiddlebeg=##4
+ \hrulemiddledur=##5
+ \fi}
+ \def\hrulebelowtest{
+ \ifnum\hrulebelowbeg>0
+ \tempnum=\hrulebelowbeg
+ \advance\tempnum by \hrulebelowdur
+ \ifnum \tempnum=##4 % no space
+ \advance\hrulebelowdur by ##5
+ \else \addtohrulebelow
+ \fi
+ \else
+ \hrulebelowbeg=##4
+ \hrulebelowdur=##5
+ \fi}
+ \ifx :##3: % Is that non-alternating subject?
+ \ex\def\ex\mylineO\ex{\mylineO ##1:O##2:##4-##5=-,}
+ \ex\def\ex\mylineE\ex{\mylineE ##1:E##2:##4-##5=-,}
+ \ifnum \hrulemiddledur>0
+ \addtohrulemiddle
+ \hrulemiddlebeg=0
+ \hrulemiddledur=0
+ \fi
+ \let\testthehruleabove=\hruleabovetest
+ \let\testthehrulemiddle=\relax
+ \let\testthehrulebelow=\hrulebelowtest
+ \ex\def\ex\myline\ex{\myline ##1:##2##3:##4-##5=##6,}
+ \else
+ \ifx O##2
+ \let\testthehruleabove=\hruleabovetest
+ \let\testthehrulemiddle=\hrulemiddletest
+ \let\testthehrulebelow=\relax
+ \ex\def\ex\mylineO\ex{\mylineO ##1:##2##3:##4-##5=##6,}
+ \else
+ \ifx E##2
+ \let\testthehruleabove=\relax
+ \let\testthehrulemiddle=\hrulemiddletest
+ \let\testthehrulebelow=\hrulebelowtest
+ \ex\def\ex\mylineE\ex{\mylineE ##1:##2##3:##4-##5=##6,}
+ \else \errmessage{Bad input: ##1:##2##3:##4-##5=##6}
+ \fi
+ \fi
+ \fi
+ \testthehruleabove
+ \testthehrulemiddle
+ \testthehrulebelow}
+ \def\analysetheday##1:##2,{
+ \def\myday{##1}
+ \ifx \dayMO\myday \ex\def\ex\mylineMO\ex{\mylineMO ##1:##2,}
+ \else
+ \ifx \dayTU\myday \ex\def\ex\mylineTU\ex{\mylineTU ##1:##2,}
+ \else
+ \ifx \dayWE\myday \ex\def\ex\mylineWE\ex{\mylineWE ##1:##2,}
+ \else
+ \ifx \dayTH\myday \ex\def\ex\mylineTH\ex{\mylineTH ##1:##2,}
+ \else
+ \ifx \dayFR\myday \ex\def\ex\mylineFR\ex{\mylineFR ##1:##2,}
+ \else \errmessage{##1 is not valid format of the day of week.
+ Use one of these - MO,TU,WE,TH,FR}
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi}
+ \def\radixsort{
+ \let\browseaction=\analysethebeginning
+ \nrofdeclared=0
+ \let\browsenext=\browse
+ \expandafter\browse\subjects,*
+ \mergethebeginning
+ \tempnum=\nrofdeclared
+ \nrofdeclared=0
+ \expandafter\declareto\the\tempnum:
+ \def\mylineMO{}
+ \def\mylineTU{}
+ \def\mylineWE{}
+ \def\mylineTH{}
+ \def\mylineFR{}
+ \let\browseaction=\analysetheday
+ \let\browsenext=\browse
+ \expandafter\browse\subjects *
+ \def\subjects{}}
+ \def\testthetimetable{
+ \ifx [\nextchar \let\next=\timetablewhopt
+ \else \let\next=\timetablewhoutopt
+ \fi \next}
+ \def\timetablewhoutopt##1{\def\subjects{##1}
+ \drawthetimetable}
+ \def\timetablewhopt[##1]##2{\def\subjects{##2}
+ \def\tablewidthopt{tablewidth}
+ \def\headingopt{heading}
+ \def\strutopt{strut}
+ \def\forcehrulesopt{forcehrules}
+ \def\forcevrulesopt{forcevrules}
+ \def\environmentopt{environment}
+ \def\headingfontopt{headingfont}
+ \def\columnheadingfontopt{columnheadingfont}
+ \def\rowheadingfontopt{rowheadingfont}
+ \def\Lsubjectnamefontopt{Lsubjectnamefont}
+ \def\Llocationfontopt{Llocationfont}
+ \def\Psubjectnamefontopt{Psubjectnamefont}
+ \def\Plocationfontopt{Plocationfont}
+ \def\linewidthopt{linewidth}
+ \def\linespacewidthopt{linespacewidth}
+ \def\linespaceheightopt{linespaceheight}
+ \def\fromopt{from}
+ \def\toopt{to}
+ \def\subjectsfromopt{subjectsfrom}
+ \def\subjectstoopt{subjectsto}
+ \let\browseaction=\analyseoptions
+ \let\browsenext=\browse
+ \browse##1,*
+ \drawthetimetable}
+ \def\analyseoptions##1,{
+ \def\myoption{##1}
+ \ifx \myoption\forcehrulesopt \let\drawthehrulesabove=\drawthelonghrule
+ \else
+ \ifx \myoption\forcevrulesopt \let\sepvrule=\relax
+ \else \analyseequals##1,
+ \fi
+ \fi}
+ \def\analyseequals##1=##2,{
+ \def\myoption{##1}
+ \ifx \myoption\tablewidthopt \def\tablewidth{to ##2}
+ \else
+ \ifx \myoption\headingopt \def\heading{##2}
+ \else
+ \ifx \myoption\environmentopt \def\environment{##2}
+ \else
+ \ifx \myoption\headingfontopt \font\headingfont=##2
+ \else
+ \ifx \myoption\columnheadingfontopt \font\columnheadingfont=##2
+ \else
+ \ifx \myoption\rowheadingfontopt \font\rowheadingfont=##2
+ \else
+ \ifx \myoption\Lsubjectnamefontopt \font\Lsubjectnamefont=##2
+ \else
+ \ifx \myoption\Llocationfontopt \font\Llocationfont=##2
+ \else
+ \ifx \myoption\Psubjectnamefontopt \font\Psubjectnamefont=##2
+ \else
+ \ifx \myoption\Plocationfontopt \font\Plocationfont=##2
+ \else
+ \ifx \myoption\linewidthopt
+ \def\myhrule{\hrule height##2}
+ \def\myvrule{\vrule width##2}
+ \def\hrulefill{\leaders\myhrule\hfill}
+ \else
+ \ifx \myoption\linespacewidthopt
+ \def\linespacewidth{\kern ##2}
+ \else
+ \ifx \myoption\linespaceheightopt
+ \def\linespaceheight{\myvrule height##2}
+ \else
+ \ifx \myoption\dayMO \def\MO{##2}
+ \else
+ \ifx \myoption\dayTU \def\TU{##2}
+ \else
+ \ifx \myoption\dayWE \def\WE{##2}
+ \else
+ \ifx \myoption\dayTH \def\TH{##2}
+ \else
+ \ifx \myoption\dayFR \def\FR{##2}
+ \else
+ \ifx \myoption\fromopt \def\from{##2}
+ \else
+ \ifx \myoption\toopt \def\to{##2}
+ \else
+ \ifx \myoption\subjectsfromopt
+ \def\subjectsfrom{##2}
+ \let\testthefromrow=\addthefromrow
+ \else
+ \ifx \myoption\subjectstoopt
+ \def\subjectsto{##2}
+ \let\testthetorow=\addthetorow
+ \else
+ \ifx \myoption\strutopt
+ \def\mystrut{\vrule width0pt ##2}
+ \else
+ \ifx \myoption\headingopt \def\heading{##2}
+ \else \errmessage{Bad option: ##1}
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi}
+ \def\emptythehrules{
+ \def\myline{}
+ \def\mylineO{}
+ \def\mylineE{}
+ \hruleoldbelowbeg=0
+ \hruleoldbelowdur=0
+ \hruleabovebeg=0
+ \hruleabovedur=0
+ \hrulemiddlebeg=0
+ \hrulemiddledur=0
+ \hrulebelowbeg=0
+ \hrulebelowdur=0
+ \def\hruleabove{}
+ \def\hrulemiddle{}
+ \def\hrulebelow{}}
+ \def\testtherests{
+ \ifnum\hruleabovebeg>0
+ \addtohruleabove
+ \else
+ \ifx \empty\hruleabove
+ \edef\hruleabove{\hruleoldbelow}
+ \fi
+ \fi
+ \ifnum\hrulemiddlebeg>0 \addtohrulemiddle \fi
+ \ifnum\hrulebelowbeg>0 \addtohrulebelow \fi
+ \ifnum\hruleoldbelowbeg>0 \addoldbelowtohruleabove \fi}
+ \def\divideintorows{
+ \def\hruleoldbelow{}
+ \emptythehrules
+ \ifx \empty\mylineMO
+ \else
+ \let\browseaction=\analyseOE
+ \let\browsenext=\browse
+ \expandafter\browse\mylineMO *
+ \testtherests
+ \fi
+ \ex\def\ex\mylineMOO\ex{\mylineO}
+ \ex\def\ex\mylineMO\ex{\myline}
+ \ex\def\ex\mylineMOE\ex{\mylineE}
+ \edef\hrulemiddleMO{\hrulemiddle}
+% TUESDAY
+ \edef\hruleoldbelow{\hrulebelow}
+ \emptythehrules
+ \ifx \empty\mylineTU
+ \edef\hruleaboveTU{\hruleoldbelow}
+ \else
+ \let\browseaction=\analyseOE
+ \let\browsenext=\browse
+ \expandafter\browse\mylineTU *
+ \testtherests
+ \edef\hruleaboveTU{\hruleabove}
+ \fi
+ \ex\def\ex\mylineTUO\ex{\mylineO}
+ \ex\def\ex\mylineTU\ex{\myline}
+ \ex\def\ex\mylineTUE\ex{\mylineE}
+ \edef\hrulemiddleTU{\hrulemiddle}
+% WEDNESDAY
+ \edef\hruleoldbelow{\hrulebelow}
+ \emptythehrules
+ \ifx \empty\mylineWE
+ \edef\hruleaboveWE{\hruleoldbelow}
+ \else
+ \let\browseaction=\analyseOE
+ \let\browsenext=\browse
+ \expandafter\browse\mylineWE *
+ \testtherests
+ \edef\hruleaboveWE{\hruleabove}
+ \fi
+ \ex\def\ex\mylineWEO\ex{\mylineO}
+ \ex\def\ex\mylineWE\ex{\myline}
+ \ex\def\ex\mylineWEE\ex{\mylineE}
+ \edef\hrulemiddleWE{\hrulemiddle}
+% THURSDAY
+ \edef\hruleoldbelow{\hrulebelow}
+ \emptythehrules
+ \ifx \empty\mylineTH
+ \edef\hruleaboveTH{\hruleoldbelow}
+ \else
+ \let\browseaction=\analyseOE
+ \let\browsenext=\browse
+ \expandafter\browse\mylineTH *
+ \testtherests
+ \edef\hruleaboveTH{\hruleabove}
+ \fi
+ \ex\def\ex\mylineTHO\ex{\mylineO}
+ \ex\def\ex\mylineTH\ex{\myline}
+ \ex\def\ex\mylineTHE\ex{\mylineE}
+ \edef\hrulemiddleTH{\hrulemiddle}
+% FRIDAY
+ \edef\hruleoldbelow{\hrulebelow}
+ \emptythehrules
+ \ifx \empty\mylineFR
+ \edef\hruleaboveFR{\hruleoldbelow}
+ \else
+ \let\browseaction=\analyseOE
+ \let\browsenext=\browse
+ \expandafter\browse\mylineFR *
+ \testtherests
+ \edef\hruleaboveFR{\hruleabove}
+ \fi
+ \ex\def\ex\mylineFRO\ex{\mylineO}
+ \ex\def\ex\mylineFR\ex{\myline}
+ \ex\def\ex\mylineFRE\ex{\mylineE}
+ \edef\hrulemiddleFR{\hrulemiddle}
+ \emptythehrules}
+ \def\emptysubjectloop{
+ \ifnum \tempnum>0
+ \ifnum \tempnum>1
+ \halignbody=\expandafter{\the\halignbody &&\sepvrule}
+ \else
+ \halignbody=\expandafter{\the\halignbody &&}
+ \ifnum\currentcolumn>\nrofcolumns
+ \halignbody=\ex\ex\ex{\ex\the\ex\halignbody\addstrut\cr}
+ \fi
+ \fi
+ \advance\tempnum by -1
+ \else
+ \let\next=\relax
+ \fi \next}
+ \def\getnexthrulemiddle##1-##2,##3*{
+ \hrulemiddlebeg=##1
+ \hrulemiddledur=##2
+ \def\hrulemiddle{##3}}
+ \def\hrulesubjectsloop{
+ \ifnum \hrulemiddlebeg=0
+ \ifx \empty\hrulemiddle
+ \tempnum=\nextsubjectbeg
+ \advance\tempnum by -\currentcolumn
+ \advance\currentcolumn by \tempnum
+ \let\addstrut=\space
+ \let\next=\emptysubjectloop
+ \let\nexthruleloop=\next
+ \else
+ \expandafter\getnexthrulemiddle\hrulemiddle *
+ \fi
+ \fi
+ \ifnum \hrulemiddlebeg>0
+ \ifnum \nextsubjectbeg<\hrulemiddlebeg % add spaces to next subject
+ \tempnum=\nextsubjectbeg
+ \advance\tempnum by -\currentcolumn
+ \advance\currentcolumn by \tempnum
+ \let\next=\emptysubjectloop
+ \next
+ \else % add spaces to middlehrulebeg
+ \tempnum=\hrulemiddlebeg
+ \advance \tempnum by -\currentcolumn
+ \ifnum \tempnum>0
+ \advance\currentcolumn by \tempnum
+ \let\next=\emptysubjectloop
+ \next
+ \fi
+ \ifnum \hrulemiddlebeg=1
+ \def\begvvrulecorrection{\vvrule}
+ \else
+ \def\begvvrulecorrection{\relax}
+ \fi
+ \tempnum=\hrulemiddlebeg
+ \advance\tempnum by \hrulemiddledur
+ \advance\tempnum by -1
+ \ifnum \tempnum=\nrofcolumns
+ \def\endvvrulecorrection{\vvrule}
+ \else
+ \def\endvvrulecorrection{\relax}
+ \fi
+ \edef\correctedline{\begvvrulecorrection\hrulefill\endvvrulecorrection}
+ \tempnum=\hrulemiddledur
+ \multiply\tempnum by 2
+ \advance\tempnum by 1
+ \advance\currentcolumn by \hrulemiddledur
+ \halignbody=\ex\ex\ex\ex\ex\ex\ex{\ex\ex\ex\the\ex\ex\ex\halignbody
+ \ex\ex\ex\multispan\ex\ex\ex{\ex\the\ex\tempnum\ex}\correctedline}
+ \ifnum \currentcolumn>\nrofcolumns
+ \halignbody=\expandafter{\the\halignbody \cr}
+ \fi
+ \fi
+ \ifnum\currentcolumn<\nextsubjectbeg
+ \tempnum=\hrulemiddlebeg
+ \advance\tempnum by \hrulemiddledur
+ \advance\tempnum by -1
+ \ifnum \currentcolumn>\tempnum
+ \hrulemiddlebeg=0
+ \fi
+ \else
+ \let\nexthruleloop=\relax
+ \fi
+ \fi
+ \nexthruleloop}
+ \def\testthecolumnwidth ##1##2=##3-##4,{
+ \ifx L##1
+ \setbox\tempbox=\hbox{\Lsubjectnamefont\ ##3\Llocationfont ##4\ }
+ \else
+ \setbox\tempbox=\hbox{\Psubjectnamefont\ ##3\Plocationfont ##4\ }
+ \fi
+ \tempdimen=\wd\tempbox
+ \divide \tempdimen by ##2
+ \ifnum \tempdimen>\columnwidth
+ \columnwidth=\tempdimen
+ \fi}
+ \def\drawthesubject##1:##2##3:##4-##5=##6-##7,{
+ \ifnum \currentcolumn<##4 % Is it necessary to add spaces?
+ \if :##3: % add spaces with middlehrules
+ \nextsubjectbeg=##4
+ \hrulemiddlebeg=0
+ \let\nexthruleloop=\hrulesubjectsloop
+ \nexthruleloop
+ \else % add spaces without hrules
+ \edef\addstrut{\higheststrutfont\mystrut}
+ \tempnum=##4
+ \advance\tempnum by -\currentcolumn
+ \advance\currentcolumn by \tempnum
+ \let\next=\emptysubjectloop
+ \next
+ \fi
+ \fi
+ \tempnum=##5
+ \multiply\tempnum by 2
+ \advance\tempnum by -1
+ \advance\currentcolumn by ##5
+ \ifx :##3:
+ \ifx L##2
+ \halignbody=\ex\ex\ex{\ex\the\ex\halignbody \ex &\ex\multispan
+ \ex{\the\tempnum}\hfil\hidewidth \vbox to0pt{\vss\hbox{\Lsubjectnamefont
+ ##6 \mystrut\Llocationfont ##7\mystrut}\vss}\hidewidth\hfil &}
+ \testthecolumnwidth L##5=##6-##7,
+ \else
+ \halignbody=\ex\ex\ex{\ex\the\ex\halignbody \ex &\ex\multispan
+ \ex{\the\tempnum}\hfil\hidewidth \vbox to0pt{\vss\hbox{\Psubjectnamefont
+ ##6 \mystrut\Plocationfont ##7\mystrut}\vss}\hidewidth\hfil &}
+ \testthecolumnwidth P##5=##6-##7,
+ \fi
+ \ifnum\currentcolumn>\nrofcolumns
+ \halignbody=\ex\ex\ex{\ex\the\ex\halignbody \cr}
+ \fi
+ \else
+ \ifx L##3
+ \halignbody=\ex\ex\ex{\ex\the\ex\halignbody \ex &\ex\multispan
+ \ex{\the\tempnum}\hfil\hidewidth\Lsubjectnamefont ##6
+ \Llocationfont ##7\hidewidth\hfil &}
+ \testthecolumnwidth L##5=##6-##7,
+ \else
+ \halignbody=\ex\ex\ex{\ex\the\ex\halignbody \ex &\ex\multispan
+ \ex{\the\tempnum}\hfil\hidewidth\Psubjectnamefont ##6
+ \Plocationfont ##7\hidewidth\hfil &}
+ \testthecolumnwidth P##5=##6-##7,
+ \fi
+ \ifnum\currentcolumn>\nrofcolumns
+ \halignbody=\ex\ex\ex{\ex\the\ex\halignbody\addstrut \cr}
+ \fi
+ \fi}
+ \def\hrulesaboveinit{
+ \halignbody=\expandafter{\the\halignbody \multispan3\vvrule\hrulefill &}
+ \currentcolumn=1
+ \nextsubjectbeg=\nrofcolumns
+ \advance\nextsubjectbeg by 1
+ \let\nexthruleloop=\hrulesubjectsloop
+ \nexthruleloop}
+ \def\longhrule{\multispan3\vvrule\hrulefill&\multispan\restcolumns
+ \span\omit\vvrule\hrulefill\vvrule\cr}
+ \def\drawthelonghrule{\halignbody=\ex{\the\halignbody \longhrule}}
+ \def\testonetime##1|{
+ \ifnum \tempnum<\nrofcolumns
+ \ifx |##1|
+ \halignbody=\ex{\the\halignbody &&}
+ \advance\tempnum by 1
+ \else \typeonetime##1|
+ \fi
+ \fi}
+ \def\typeonetime##1:##2|{
+ \ifnum \tempnum<\nrofcolumns
+ \halignbody=\ex{\the\halignbody &$##1^{##2\mathstrut}\mathstrut$&}
+ \advance\tempnum by 1
+ \setbox\tempbox=\hbox{\ $##1^{##2}$\ }
+ \tempdimen=\wd\tempbox
+ \ifnum \tempdimen>\columnwidth
+ \columnwidth=\tempdimen
+ \fi
+ \fi}
+ \def\addthefromrow{
+ \def\lastvkern{\longhrule\vkern}
+ \halignbody=\ex{\the\halignbody \longhrule &\rowheadingfont\from\mystrut &&}
+ \let\browsenext=\browsetimes
+ \let\browseaction=\testonetime
+ \tempnum=0
+ \expandafter\browsetimes\subjectsfrom |*
+ \ifnum \tempnum<\nrofcolumns
+ \nextsubjectbeg=\tempnum % nextsubjectbeg has the temporary value here
+ \tempnum=\nrofcolumns
+ \advance\tempnum by -\nextsubjectbeg
+ \let\next=\emptytimesloop
+ \next
+ \fi
+ \halignbody=\ex{\the\halignbody \mystrut\cr}}
+ \def\addthetorow{
+ \def\lastvkern{\longhrule\vkern}
+ \halignbody=\ex{\the\halignbody \longhrule &\rowheadingfont\to\mystrut &&}
+ \let\browsenext=\browsetimes
+ \let\browseaction=\testonetime
+ \tempnum=0
+ \expandafter\browsetimes\subjectsto |*
+ \ifnum \tempnum<\nrofcolumns
+ \nextsubjectbeg=\tempnum % nextsubjectbeg has the temporary value here
+ \tempnum=\nrofcolumns
+ \advance\tempnum by -\nextsubjectbeg
+ \let\next=\emptytimesloop
+ \next
+ \fi
+ \halignbody=\ex{\the\halignbody \mystrut\cr}}
+ \def\emptytimesloop{
+ \ifnum \tempnum>0
+ \halignbody=\expandafter{\the\halignbody &&}
+ \advance\tempnum by -1
+ \else
+ \let\next=\relax
+ \fi \next}
+ \def\drawthetimetable{
+ \ifx \empty\environment
+ \ifx \empty\headingfont \font\headingfont=cmb10 \fi
+ \ifx \empty\columnheadingfont \font\columnheadingfont=cmb10 \fi
+ \ifx \empty\rowheadingfont \font\rowheadingfont=cmb10 \fi
+ \ifx \empty\Lsubjectnamefont \font\Lsubjectnamefont=cmss10 \fi
+ \ifx \empty\Llocationfont \font\Llocationfont=cmssi10 \fi
+ \ifx \empty\Psubjectnamefont \font\Psubjectnamefont=cmr10 \fi
+ \ifx \empty\Plocationfont \font\Plocationfont=cmti10 \fi
+ \ifx \empty\MO \def\MO{Monday} \fi
+ \ifx \empty\TU \def\TU{Tuesday} \fi
+ \ifx \empty\WE \def\WE{Wednesday} \fi
+ \ifx \empty\TH \def\TH{Thursday} \fi
+ \ifx \empty\FR \def\FR{Friday} \fi
+ \ifx \empty\from \def\from{from} \fi
+ \ifx \empty\to \def\to{to} \fi
+ \else
+ \def\environmentopt{czech}
+ \ifx \environment\environmentopt
+ \ifx \empty\headingfont \font\headingfont=csb10 \fi
+ \ifx \empty\columnheadingfont \font\columnheadingfont=csb10 \fi
+ \ifx \empty\rowheadingfont \font\rowheadingfont=csb10 \fi
+ \ifx \empty\Lsubjectnamefont \font\Lsubjectnamefont=csss10 \fi
+ \ifx \empty\Llocationfont \font\Llocationfont=csssi10 \fi
+ \ifx \empty\Psubjectnamefont \font\Psubjectnamefont=csr10 \fi
+ \ifx \empty\Plocationfont \font\Plocationfont=csti10 \fi
+ \ifx \empty\MO \def\MO{Pondìlí} \fi
+ \ifx \empty\TU \def\TU{Úterý} \fi
+ \ifx \empty\WE \def\WE{Støeda} \fi
+ \ifx \empty\TH \def\TH{Ètvrtek} \fi
+ \ifx \empty\FR \def\FR{Pátek} \fi
+ \ifx \empty\from \def\from{od} \fi
+ \ifx \empty\to \def\to{do} \fi
+ \else
+ \def\environmentopt{slovak}
+ \ifx \environment\environmentopt
+ \ifx \empty\headingfont \font\headingfont=csb10 \fi
+ \ifx \empty\columnheadingfont \font\columnheadingfont=csb10 \fi
+ \ifx \empty\rowheadingfont \font\rowheadingfont=csb10 \fi
+ \ifx \empty\Lsubjectnamefont \font\Lsubjectnamefont=csss10 \fi
+ \ifx \empty\Llocationfont \font\Llocationfont=csssi10 \fi
+ \ifx \empty\Psubjectnamefont \font\Psubjectnamefont=csr10 \fi
+ \ifx \empty\Plocationfont \font\Plocationfont=csti10 \fi
+ \ifx \empty\MO \def\MO{Pondelok} \fi
+ \ifx \empty\TU \def\TU{Utorok} \fi
+ \ifx \empty\WE \def\WE{Streda} \fi
+ \ifx \empty\TH \def\TH{©tvrtok} \fi
+ \ifx \empty\FR \def\FR{Piatok} \fi
+ \ifx \empty\from \def\from{od} \fi
+ \ifx \empty\to \def\to{do} \fi
+ \else \errmessage{Unknown environment parameter: \environment}
+ \fi
+ \fi
+ \fi
+ \radixsort
+ \divideintorows
+ \def\vvrule{\myvrule\linespacewidth \myvrule}
+ \def\vkern{\multispan\restcolumns
+ \span\omit\span\omit\span\omit\span\omit
+ \linespaceheight \hfil \linespaceheight \cr}
+ \def\addtohalignmask{
+ \ifnum \tempnum=\nrofcolumns
+ \halignbody=\expandafter{\the\halignbody
+ \hbox to\columnwidth{\hfil########\hfil}&########\vvrule\tabskip=0pt}
+ \let\next=\relax
+ \else
+ \halignbody=\expandafter{\the\halignbody
+ \hbox to\columnwidth{\hfil########\hfil}&########\myvrule&}
+ \advance\tempnum by 1
+ \fi \next}
+ \restcolumns=\nrofcolumns
+ \multiply\restcolumns by 2
+ \halignbody={\tabskip=0pt plus 1fil\vvrule ####&
+ \hfil\ ####\ \hfil & ####\tabskip=0pt &
+ \tabskip=0pt plus 1fil\vvrule ####&}
+ \tempnum=1
+ \let\next=\addtohalignmask
+ \next
+ \halignbody=\expandafter{\the\halignbody \cr \noalign{\myhrule} \vkern \cr
+ \longhrule &\headingfont\heading\mystrut&}
+ \def\typetheheading{
+ \ifnum \tempnum=\nrofcolumns
+ \halignbody=\expandafter{\the\halignbody &\columnheadingfont\mystrut
+ \cr \longhrule\vkern \cr \longhrule}
+ \let\next=\relax
+ \else
+ \advance\tempnum by 1
+ \ex\setbox\ex\tempbox\ex\hbox\ex{\ex\columnheadingfont\ex\ \the\tempnum\ }
+ \tempdimen=\wd\tempbox
+ \ifnum \tempdimen>\columnwidth
+ \columnwidth=\tempdimen
+ \fi
+ \halignbody=\ex\ex\ex{\ex\the\ex\halignbody\ex&\ex&\ex\columnheadingfont
+ \the\tempnum}
+ \fi \next}
+ \tempnum=0
+ \let\next=\typetheheading
+ \next
+ \def\initOE{% alternating subjects
+ \hrulemiddlebeg=0
+ \halignbody=\expandafter{\the\halignbody &\omit &&}
+ \currentcolumn=1
+ \let\browsenext=\browse
+ \let\browseaction=\drawthesubject
+ \if \empty\subjects
+ \else
+ \expandafter\browse\subjects *
+ \fi
+ \ifnum \currentcolumn>\nrofcolumns
+ \let\next=\relax
+ \else
+ \tempnum=\nrofcolumns
+ \advance\tempnum by -\currentcolumn
+ \advance\tempnum by 1
+ \advance\currentcolumn by \tempnum
+ \edef\addstrut{\higheststrutfont\mystrut}
+ \let\next=\emptysubjectloop
+ \fi \next}
+ \def\init{% non alternating subjects
+ \hrulemiddlebeg=0
+ \currentcolumn=1
+ \let\browsenext=\browse
+ \let\browseaction=\drawthesubject
+ \ifx \empty\subjects
+ \else
+ \expandafter\browse\subjects *
+ \fi
+ \nextsubjectbeg=\nrofcolumns
+ \advance\nextsubjectbeg by 1
+ \let\addstrut=\space
+ \let\nexthruleloop=\hrulesubjectsloop
+ \nexthruleloop}
+% compute highest strut in subjects
+ \setbox\tempbox=\hbox{\Lsubjectnamefont\mystrut}
+ \tempdimen=\ht\tempbox % \tempdimen = the highest strut
+ \let\higheststrutfont=\Lsubjectnamefont
+ \setbox\tempbox=\hbox{\Psubjectnamefont\mystrut}
+ \ifnum \tempdimen<\ht\tempbox
+ \tempdimen=\ht\tempbox
+ \let\higheststrutfont=\Psubjectnamefont
+ \fi
+ \setbox\tempbox=\hbox{\Llocationfont\mystrut}
+ \ifnum \tempdimen<\ht\tempbox
+ \tempdimen=\ht\tempbox
+ \let\higheststrutfont=\Llocationfont
+ \fi
+ \setbox\tempbox=\hbox{\Plocationfont\mystrut}
+ \ifnum \tempdimen<\ht\tempbox
+ \tempdimen=\ht\tempbox
+ \let\higheststrutfont=\Plocationfont
+ \fi
+% Monday
+ \let\subjects=\mylineMOO
+ \initOE
+ \let\subjects=\mylineMO
+ \let\hrulemiddle=\hrulemiddleMO
+ \halignbody=\expandafter{\the\halignbody &\vbox to0pt{\vss
+ \hbox{\rowheadingfont \MO\mystrut}\vss}&&}
+ \init
+ \let\subjects=\mylineMOE
+ \initOE
+% Tuesday
+ \let\hrulemiddle=\hruleaboveTU
+ \drawthehrulesabove
+ \let\subjects=\mylineTUO
+ \initOE
+ \let\subjects=\mylineTU
+ \let\hrulemiddle=\hrulemiddleTU
+ \halignbody=\expandafter{\the\halignbody &\vbox to0pt{\vss
+ \hbox{\rowheadingfont \TU\mystrut}\vss}&&}
+ \init
+ \let\subjects=\mylineTUE
+ \initOE
+% Wednesday
+ \let\hrulemiddle=\hruleaboveWE
+ \drawthehrulesabove
+ \let\subjects=\mylineWEO
+ \initOE
+ \let\subjects=\mylineWE
+ \let\hrulemiddle=\hrulemiddleWE
+ \halignbody=\expandafter{\the\halignbody &\vbox to0pt{\vss
+ \hbox{\rowheadingfont \WE\mystrut}\vss}&&}
+ \init
+ \let\subjects=\mylineWEE
+ \initOE
+% Thursday
+ \let\hrulemiddle=\hruleaboveTH
+ \drawthehrulesabove
+ \let\subjects=\mylineTHO
+ \initOE
+ \let\subjects=\mylineTH
+ \let\hrulemiddle=\hrulemiddleTH
+ \halignbody=\expandafter{\the\halignbody &\vbox to0pt{\vss
+ \hbox{\rowheadingfont \TH\mystrut}\vss}&&}
+ \init
+ \let\subjects=\mylineTHE
+ \initOE
+% Friday
+ \let\hrulemiddle=\hruleaboveFR
+ \drawthehrulesabove
+ \let\subjects=\mylineFRO
+ \initOE
+ \let\subjects=\mylineFR
+ \let\hrulemiddle=\hrulemiddleFR
+ \halignbody=\expandafter{\the\halignbody &\vbox to0pt{\vss
+ \hbox{\rowheadingfont \FR\mystrut}\vss}&&}
+ \init
+ \let\subjects=\mylineFRE
+ \initOE
+ \halignbody=\ex{\the\halignbody \longhrule \vkern}
+ \testthefromrow
+ \testthetorow
+ \halignbody=\ex{\the\halignbody \lastvkern \noalign{\myhrule}}
+ \expandafter\ialign\tablewidth{\span\the\halignbody}
+ \egroup
+% cancel the changes made by the \newcount commands etc.
+ \count10=\oldcountten
+ \count11=\oldcounteleven
+ \count14=\oldcountfourteen
+ \count15=\oldcountfiveteen}
+% the beginning
+ \offinterlineskip
+ \nrofcolumns=0
+ \def\tablewidth{}
+ \def\heading{}
+ \def\mystrut{\myvrule width0pt height1em depth.35em}
+ \let\sepvrule=\omit
+ \let\drawthehrulesabove=\hrulesaboveinit
+ \let\testthefromrow=\relax
+ \let\testthetorow=\relax
+ \let\lastvkern=\space
+ \def\environment{}
+ \def\headingfont{}
+ \def\columnheadingfont{}
+ \def\rowheadingfont{}
+ \def\Lsubjectnamefont{}
+ \def\Llocationfont{}
+ \def\Psubjectnamefont{}
+ \def\Plocationfont{}
+ \let\myhrule=\hrule
+ \let\myvrule=\vrule
+ \def\linespacewidth{\kern 1.3pt}
+ \def\linespaceheight{\myvrule height1.2pt}
+ \def\dayMO{MO}
+ \def\dayTU{TU}
+ \def\dayWE{WE}
+ \def\dayTH{TH}
+ \def\dayFR{FR}
+ \def\MO{}
+ \def\TU{}
+ \def\WE{}
+ \def\TH{}
+ \def\FR{}
+ \def\from{}
+ \def\to{}
+ \def\subjectsfrom{}
+ \def\subjectsto{}
+ \columnwidth=0pt
+ \let\ex=\expandafter
+ \futurelet\nextchar \testthetimetable}
+\end
diff --git a/macros/plain/contrib/timetable/timetable.tex.sign b/macros/plain/contrib/timetable/timetable.tex.sign
new file mode 100644
index 0000000000..d5022fc664
--- /dev/null
+++ b/macros/plain/contrib/timetable/timetable.tex.sign
@@ -0,0 +1,8 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.0.6 (GNU/Linux)
+Comment: For info see http://www.gnupg.org
+
+iD8DBQA75XzOBZXR7+ZKGhMRAhbUAJ4k+4+NfKeLNy1kk10iPrOkaAdSrACePd7U
+hQ+VWL0x70QrOuhuRTOf+Xw=
+=B3C0
+-----END PGP SIGNATURE-----
diff --git a/macros/plain/contrib/treedef/treedef-annot.tex b/macros/plain/contrib/treedef/treedef-annot.tex
new file mode 100644
index 0000000000..8142197080
--- /dev/null
+++ b/macros/plain/contrib/treedef/treedef-annot.tex
@@ -0,0 +1,308 @@
+% Tree -- a macro to make aligned (horizontal) trees in TeX
+%
+% Input is of the form
+% \tree
+% item
+% \subtree
+% \leaf{item}
+% .
+% .
+% .
+% \endsubtree
+% \subtree
+% .
+% .
+% .
+% \endsubtree
+% \endsubtree
+% \endtree
+%
+% Nesting is to any level. \leaf is defined as a subtree of one item:
+% \def\leaf#1{\subtree#1\endsubtree}.
+%
+% A structure:
+% \subtree
+% item_part1
+% item_part2
+% .
+% .
+% .
+%
+% will print item_part2 directly below item_part1 as a single item
+% as if they were in a \box.
+%
+% The macro is a 3-pass macro. On the first pass it sets up a data
+% structure from the \subtree ... \endsubtree definitions. On the second pass
+% it recursively calculates the width of each level of the tree. On the third
+% pass it sets up the boxes, glue and rules.
+%
+% By David Eppstein, TUGboat, vol. 6 (1985), no. 1, pp. 31--35.
+% Transcribed by Margaret Kromer (peg), Feb., 1986.
+%
+% Pass 1
+% At the end of pass 1, the tree is coded as a nested collection of \hboxes
+% and \vboxes.
+\newbox\treebox\newcount\treeboxcnt
+\def\tree{\message{Begin tree}\treeboxcnt=1\global\setbox\treebox=\boxtree}
+\def\subtree{\ettext \advance\treeboxcnt by 1 \boxtree}
+\def\leaf#1{\subtree#1\endsubtree}
+\def\endsubtree{\ettext \egroup \advance\treeboxcnt-1{}%
+ \ifnum\treeboxcnt=-1 \treeerrora\fi}
+\def\endtree{\endsubtree \ifnum\treeboxcnt>0 \treeerrorb\fi%
+ \settreesizes \typesettree \message{-- end tree}}
+% Error messages for unbalanced tree
+\def\treeerrora{\errhelp=\treeerrorahelp%
+ \errmessage{Unbalanced tree -- too many endsubtrees}}
+\newhelp\treeerrorahelp{There are more subtrees closed than opened}
+\def\treeerrorb{\errhelp=\treeerrorbhelp%
+ \errmessage{Unbalanced tree -- not enough endsubtrees}}
+\newhelp\treeerrorbhelp{Not all the subtrees of the tree are closed.
+If you continue, you'll get some mysterious secondary errors.}
+% Set up \vbox containing root of tree
+\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
+% Pass 2
+% Recursively calculate widths of tree with \setsizes; keep results in
+% \treesizes; \treewidth contains total width calculated so far. \treeworkbox
+% is workspace containing subtree being sized.
+\newbox\treeworkbox
+\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 separator
+\def\settreesizes{\setbox\treeworkbox=\copy\treebox%
+ \global\let\treesizes\nil \setsizes}
+\newdimen\treewidth % Width of this part of the tree
+\def\setsizes{\setbox\treeworkbox=\hbox\bgroup% Get a horiz list as a workspace
+ \unhbox\treeworkbox\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)
+ \setbox\treeworkbox=\lastbox \unskip % ..pull it off list and flush glue
+ \ifhbox\treeworkbox \setsizes % If hbox, it's a subtree - recurse
+ \repeat} % ..and loop; end loop on tree text
+\def\sizelevel{%
+ \ifdim\treewidth<\wd\treeworkbox % If greater than previous maximum
+ \treewidth=\wd\treeworkbox \fi % Then set max to new high
+ \global\cons{\the\treewidth}\treesizes}% In either case, put back on list
+% Pass 3
+% Recursively typeset tree with \maketree by adding an \hbox containing
+% a subtree (in \treebox) to the horizontal 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
+\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
+ \setbox\treeworkbox\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{\setbox\treeworkbox=\vbox{\subtreebox\unvbox\treeworkbox}}
+\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{\dimen\treeworkbox=\treeheight % Get total height
+ \divide\dimen\treeworkbox 2%
+ \advance\dimen\treeworkbox 0.2pt % Divide by two, add half horiz height
+ \hrule width 0.4pt height \dimen\treeworkbox}% Make a vertical rule that high
+\def\makeleaf{\box\treebox} % Add leaf box to horiz list
+\def\makeparent{\ifdim\ht\treebox>%
+ \ht\treeworkbox % If text is higher than subtrees
+ \treeheight=\ht\treebox % ..use that height
+ \else \treeheight=\ht\treeworkbox \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{\box\treeworkbox}} % Add \hrule, subs
+
+************************************************
+% Plain TeX driver for tree.tex
+
+\def\uncatcodespecials{\catcode`@=12\def\do##1{\catcode`##1=12}\dospecials}
+\def\setupverbatim{\tt\obeylines\uncatcodespecials\obeyspaces}
+{\obeyspaces\global\let =\ }
+\def\beginshowoff{\par\begingroup\setupverbatim\doverbatim}
+{\catcode`\!=0 \catcode`\\=12
+!obeylines!gdef!doverbatim^^M#1\endshowoff{#1!endgroup!medbreak!filbreak%
+!smallskip}}
+
+% see The TeXbook, exercise 22.14
+\input tree.tex
+\centerline{\bf TREE TREE}
+\bigskip
+\tree
+ Tree
+ Uses
+ \subtree
+ Computer
+ Science
+ \subtree
+ Data
+ Structures
+ \leaf{Search Tree}
+ \leaf{Priority Queue}
+ \endsubtree
+ \subtree
+ Parsing
+ \leaf{Parse Tree}
+ \leaf{Symbol Table}
+ \endsubtree
+ \subtree
+ Structured
+ Programming
+ \endsubtree
+ \endsubtree
+ \subtree
+ Genealogy
+ \leaf{Ancestors}
+ \leaf{Descendants}
+ \endsubtree
+ \subtree
+ Electrical
+ Engineering
+ \subtree
+ Paper
+ \leaf{{\it Vitae}}
+ \leaf{Announcements}
+ \leaf{Proposals}
+ \leaf{\TeX{} Samples}
+ \endsubtree
+ \endsubtree
+ \subtree
+ Construction
+ \leaf{Fences}
+ \subtree
+ Buildings
+ \subtree
+ Houses
+ \leaf{Human}
+ \leaf{Dog}
+ \leaf{Bird}
+ \leaf{Tree}
+ \endsubtree
+ \leaf{Barns}
+ \leaf{Other}
+ \endsubtree
+ \leaf{\dots}
+ \endsubtree
+ \subtree
+ Taxonomies
+ \leaf{Tree Uses}
+ \endsubtree
+\endtree
+
+\vskip.5truein
+\beginshowoff
+% see The TeXbook, exercise 22.14
+\input tree.tex
+\centerline{TREE TREE}
+\bigskip
+\tree
+ Tree
+ Uses
+ \subtree
+ Computer
+ Science
+ \subtree
+ Data
+ Structures
+ \leaf{Search Tree}
+ \leaf{Priority Queue}
+ \endsubtree
+ \subtree
+ Parsing
+ \leaf{Parse Tree}
+ \leaf{Symbol Table}
+ \endsubtree
+ \subtree
+ Structured
+ Programming
+ \endsubtree
+ \endsubtree
+ \subtree
+ Genealogy
+ \leaf{Ancestors}
+ \leaf{Descendants}
+ \endsubtree
+ \subtree
+ Electrical
+ Engineering
+ \subtree
+ Paper
+ \leaf{{\it Vitae}}
+ \leaf{Announcements}
+ \leaf{Proposals}
+ \leaf{\TeX{} Samples}
+ \endsubtree
+ \endsubtree
+ \subtree
+ Construction
+ \leaf{Fences}
+ \subtree
+ Buildings
+ \subtree
+ Houses
+ \leaf{Human}
+ \leaf{Dog}
+ \leaf{Bird}
+ \leaf{Tree}
+ \endsubtree
+ \leaf{Barns}
+ \leaf{Other}
+ \endsubtree
+ \leaf{\dots}
+ \endsubtree
+ \subtree
+ Taxonomies
+ \leaf{Tree Uses}
+ \endsubtree
+\endtree
+\endshowoff
+\bye
diff --git a/macros/plain/contrib/treedef/treedef.tex b/macros/plain/contrib/treedef/treedef.tex
new file mode 100644
index 0000000000..be4c556cd4
--- /dev/null
+++ b/macros/plain/contrib/treedef/treedef.tex
@@ -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/plain/contrib/treetex/classes.tex b/macros/plain/contrib/treetex/classes.tex
new file mode 100644
index 0000000000..f9dbc98bb9
--- /dev/null
+++ b/macros/plain/contrib/treetex/classes.tex
@@ -0,0 +1,105 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Complete binary trees %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The macro \b@nary{<number>} expands to the description of a complete
+% binary tree with <number> many internal nodes, where each level is filled with
+% the maximal number of internal nodes, and the last level of internal nodes
+% is filled from left to right.
+
+\newcount\b@nno % number of nodes
+\newcount\b@nlv % number of complete levels
+\newcount\b@ndl % number of nodes on incomplete level
+
+\def\ld(#1,#2,#3){% #1, #2, and #3 must be counter registers.
+ % #1 is the input, #1 must be >= 1.
+ % \ld makes the following assignments:
+ % #2:=|_log_2(#1)_|, #3:=2^#2.
+ % The contents of #1 is destroyed during the computation.
+ #2=0 #3=1
+ \loop\ifnum #1>\@ne\relax
+ \divide #1 by\tw@ % this is integer division
+ \advance #2 by\@ne
+ \multiply #3 by\tw@
+ \repeat}
+
+\def\b@nary#1{% draws a complete binary tree with #1 internal nodes,
+ % a complete binary tree with N internal nodes has
+ % lv:=|_log_2(N+1)_| many
+ % complete level of binary nodes and dl:=N-2^{lv}+1 many internal
+ % nodes on an incomplete level.
+ \b@nno=#1\relax\advance\b@nno by \@ne
+ \ld(\b@nno,\b@nlv,\b@ndl)%
+ \b@ndl=-\b@ndl\advance\b@ndl by #1\advance\b@ndl by\@ne
+ \b@n}
+
+\def\b@n{%
+ \ifnum\b@nlv>\@ne
+ \advance\b@nlv by-\@ne
+ \b@n
+ \b@n
+ \advance\b@nlv by\@ne
+ \node{}
+ \else\ifnum\b@ndl>\@ne
+ \advance\b@ndl by-\tw@
+ \node{\le@f\external}\node{\le@f\external}\node{}%
+ \node{\le@f\external}\node{\le@f\external}\node{}%
+ \node{}%
+ \else\ifnum\b@ndl=\@ne
+ \advance\b@ndl by-\@ne
+ \node{\le@f\external}\node{\le@f\external}\node{}%
+ \node{\le@f\external}%
+ \node{}%
+ \else\node{\le@f\external}\node{\le@f\external}\node{}%
+ \fi
+ \fi
+ \fi}
+
+\def\circleleaves{\def\le@f{\type{circle}}}
+\def\squareleaves{\def\le@f{\type{square}}}
+
+\newcount\no@
+\def\no#1{\no@=#1\relax}
+
+\def\binary#1{%
+ \no{1}\circleleaves
+ #1%
+ \b@nary{\no@}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Fibonacci trees %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \f@b expands to the description of a Fibonacci tree
+% of height \f@bht.
+
+\newcount\f@bht
+
+\def\f@b{% draws a Fibonacci tree of depth #1
+ \ifnum\f@bht>1
+ \advance\f@bht by-\@ne\f@b\advance\f@bht by\@ne
+ \advance\f@bht by-\tw@\f@b\advance\f@bht by\tw@
+ \ifunn@des\node{\unary}
+ \fi
+ \node{\lefttop}
+ \else\ifnum\f@bht=1
+ \node{\external\le@f}
+ \node{\external\le@f}
+ \node{}
+ \else\node{\external\le@f}
+ \fi
+ \fi}
+
+\newif\ifunn@des
+
+\let\unarynodes\unn@destrue
+\def\hght#1{\f@bht=#1\relax}
+
+\def\fibonacci#1{%
+ \hght{0}\unn@desfalse\circleleaves
+ #1%
+ \f@b}
+
+
+%
+
diff --git a/macros/plain/contrib/treetex/epodd.bbl b/macros/plain/contrib/treetex/epodd.bbl
new file mode 100644
index 0000000000..0d07cfe5fb
--- /dev/null
+++ b/macros/plain/contrib/treetex/epodd.bbl
@@ -0,0 +1,107 @@
+\begin{thebibliography}{10}
+
+\bibitem{BaezaTrees}
+R.~A. Baeza-Yates.
+\newblock On embedding a binary tree on a hypercube.
+\newblock Submitted for publication, November 1988.
+
+\bibitem{Tables}
+R.~J. Beach.
+\newblock {\em Setting Tables and Illustrations with Style}.
+\newblock PhD thesis, University of Waterloo, 1985.
+
+\bibitem{Karlsruhe}
+A.~Br{\"u}ggemann-Klein, P.~Dolland, and A.~Heinz.
+\newblock How to please authors and publishers: A versatile document
+ preparation system at {K}arlsruhe.
+\newblock In J.~D\'esarm\'enien, editor, {\em {\TeX{}} for Scientific
+ Documentation}, pages 8--31, Strasbourg, France, June 1986.
+\newblock Springer-Verlag Lecture Notes in Computer Science~236.
+
+\bibitem{Exeter}
+A.~Br{\"u}ggemann-Klein and D.~Wood.
+\newblock Drawing trees nicely with {\TeX}.
+\newblock In M.~Clark, editor, {\em Proceedings of the Third European
+ \TeX{}-Conference}, Exeter, England, July 1988.
+\newblock To appear.
+
+\bibitem{BinarySearchTrees}
+L.~Devroye.
+\newblock A note on the height of binary search trees.
+\newblock {\em Journal of the ACM}, 33(3):489--498, July 1986.
+
+\bibitem{BinaryTrees}
+Ph. Flajolet and A.~Odlyzko.
+\newblock The average height of binary trees and other simple trees.
+\newblock {\em Journal of Computer and System Sciences}, 25:171--213, 1982.
+
+\bibitem{DocumentFormatting}
+R.~Furuta, J.~Scofield, and A.~Shaw.
+\newblock Document formatting systems: Surveys, concepts, issues.
+\newblock {\em Computing Surveys}, 14(3):417--472, 1982.
+
+\bibitem{GML}
+Ch.~F. Goldfarb.
+\newblock A generalized approach to document markup.
+\newblock {\em SIGPLAN Notices of the ACM}, 16(6):68--73, June 1981.
+
+\bibitem{KWIFIP}
+R.~Klein and D.~Wood.
+\newblock On binary trees.
+\newblock In G.~Ritter, editor, {\em Proceedings of the 11th World Computer
+ Congress}, San Francisco, USA, 1989.
+\newblock To appear.
+
+\bibitem{ACP}
+D.~E. Knuth.
+\newblock {\em Fundamental Algorithms}, volume~1 of {\em The Art of Computer
+ Programming}.
+\newblock Addison-Wesley, Reading, Massachusetts, 1973.
+
+\bibitem{TeXbook}
+D.~E. Knuth.
+\newblock {\em The {\TeX{}}book}, volume~A of {\em Computers \& Typesetting}.
+\newblock Addison-Wesley, Reading, Massachusetts, 1986.
+
+\bibitem{LaTeX}
+L.~Lamport.
+\newblock {\em {\LaTeX}, User's Guide \& Reference Manual}.
+\newblock Addison-Wesley, Reading, Massachusetts, 1986.
+
+\bibitem{OAPD}
+Th. Ottmann and P.~Widmayer.
+\newblock {\em Algorithmen und Datenstrukturen}.
+\newblock Bibliographisches Institut, Mannheim, 1989.
+\newblock To appear.
+
+\bibitem{Grif}
+V.~Quint, I.~Vatton, and H.~Bedor.
+\newblock Grif: An interactive environment for {\TeX{}}.
+\newblock In J.~D\'esarm\'enien, editor, {\em {\TeX{}} for Scientific
+ Documentation}, pages 145--158, Strasbourg, France, June 1986.
+\newblock Springer-Verlag Lecture Notes in Computer Science~236.
+
+\bibitem{Scribe}
+B.~K. Reid.
+\newblock {\em Scribe: A Document Specification Language and its Compiler}.
+\newblock PhD thesis, Carnegie Mellon University, 1980.
+
+\bibitem{TidierTrees}
+E.~M. Reingold and J.~S. Tilford.
+\newblock Tidier drawings of tree.
+\newblock {\em IEEE Transactions on Software Engineering}, 7(2):223--228, March
+ 1981.
+
+\bibitem{Complexity}
+K.~J. Supowit and E.~M. Reingold.
+\newblock The complexity of drawing trees nicely.
+\newblock {\em Acta Informatica}, 18(4):377--392, 1983.
+
+\bibitem{TidyTrees}
+Ch. Wetherell and A.~Shannon.
+\newblock Tidy drawings of trees.
+\newblock {\em IEEE Transactions on Software Engineering}, 5(5):514--520,
+ September 1979.
+
+\end{thebibliography}
+
diff --git a/macros/plain/contrib/treetex/epodd.tex b/macros/plain/contrib/treetex/epodd.tex
new file mode 100644
index 0000000000..d2f6b36f17
--- /dev/null
+++ b/macros/plain/contrib/treetex/epodd.tex
@@ -0,0 +1,1189 @@
+% This is epodd.tex, the description of the treetex macro package as it will
+% appear in EP-ODD in summer 89. It is in some aspects more general
+% than tree_doc.tex and corrects an error in the computation of
+% the number of registers used by treetex. The user interface of
+% treetex is explained in more detail in tree_doc.tex.
+
+\documentstyle[12pt,fullpage]{article}
+
+\clubpenalty=10000
+\widowpenalty=10000
+
+\def\addcontentsline#1#2#3{\relax}% Some captions are too long for some
+ % TeX installations (buffer size too small)
+
+\newenvironment{lemma}{\begingroup\samepage\begin{lemmma}\ }{\end{lemmma}%
+ \endgroup}
+\newtheorem{lemmma}{Lemma}[section]
+\newenvironment{proof}{\begin{prooof}\rm\ \nopagebreak}{\end{prooof}}
+\newcommand{\proofend}{\qquad\ifmmode\Box\else$\Box$\fi}
+\newtheorem{prooof}{Proof}
+\renewcommand{\theprooof}{} % makes shure that prooof doesn't get numbers
+\newenvironment{Figure}{\begin{figure}\vspace{1\baselineskip}}%
+ {\vspace{1\baselineskip}\end{figure}}
+\newlength{\figspace} % space between figures in a single
+\setlength{\figspace}{30pt} % Figure environment
+
+\newcommand{\var}[1]{{\it #1\/}} % use it for names of variables
+\newcommand{\emph}[1]{{\em #1\/}} % use it for emphazided text
+ % (This notion sticks to the
+ % applicative style of markup.)
+\renewcommand{\O}{{\rm O}} % O-notation, also for math mode
+\newcommand{\T}{{\cal T}} % the set T in math mode
+\newcommand{\TreeTeX}{Tree\TeX}
+\newcommand{\fig}[1]{Figure~\ref{#1}}
+\let\p\par
+
+\input treetex
+\Treestyle{\vdist{20pt}\minsep{16pt}}
+\dummyhalfcenterdim@n=2pt
+
+% \def\Tree#1\end#2{\end{Tree}} % Trees are not processed
+% \let\endTree\relax %
+
+\def\Node(#1,#2){\put(#1,#2){\circle*{4}}}
+\def\Edge(#1,#2,#3,#4,#5){\put(#1,#2){\line(#3,#4){#5}}}
+
+\def\enode{\node{\external\type{dot}}}
+\def\inode{\node{\type{dot}}}
+
+\def\e{\node{\external\type{dot}}}
+\def\i{\node{\type{dot}}}
+\def\il{\node{\type{dot}\leftonly}}
+\def\ir{\node{\type{dot}\rightonly}}
+
+\newcommand{\stack}[3]{%
+ \vtop{\settowidth{\hsize}{#1}%
+ \setlength{\leftskip}{0pt plus 1fill}%
+ \setlength{\baselineskip}{#2}#3}}
+
+\let\multic\multicolumn
+
+\newlength{\hd} % hidden digit
+\setbox0\hbox{1}
+\settowidth{\hd}{\usebox{0}}
+\newcommand{\ds}{\hspace{\hd}} % digit space
+
+\newcommand{\ccol}[1]{\multicolumn{1}{c}{#1}}
+
+\hyphenation{post-or-der sym-bol Karls-ruhe bool-ean}
+
+\begin{document}
+
+\bibliographystyle{plain}
+
+\title{Drawing Trees Nicely with \TeX\thanks{This work was supported by
+ a Natural Sciences and Engineering Research Council of Canada
+ Grant~A-5692, a Deutsche Forschungsgemeinschaft Grant~Sto167/1-1,
+ and a grant from the Information Technology Research Centre.
+ It was begun during the first author's stay with
+ the Data Structuring Group in Waterloo.}}
+\author{Anne Br\"uggemann-Klein\thanks{Institut f\"ur Informatik,
+ Universit\"at Freiburg, Rheinstr.~10--12, 7800~Freiburg,
+ West~Germany}\ \and Derick Wood\thanks{Data
+ Structuring Group, Department of Computer Science, University of
+ Waterloo, Waterloo, Ontario N2L~3G1, Canada}}
+\date{}
+\maketitle
+
+\begin{abstract}
+
+We present a new solution to the tree drawing problem that
+integrates an excellent tree drawing algorithm into one of the best text
+processing systems available. More precisely, we present a \TeX{} macro package
+called \TreeTeX{} that produces drawings of trees from a purely logical
+description. Our approach has three advantages: Labels
+for nodes can be handled in a reasonable way; porting
+\TreeTeX{} to any site running \TeX{} is a trivial operation; and
+modularity in the description of a tree and \TeX{}'s macro capabilities
+allow for libraries of subtrees and tree classes.
+
+In addition, \TreeTeX{} has an option that produces
+drawings that make the
+\emph{structure} of the trees more obvious to the human eye,
+even though they may not be as aesthetically pleasing.
+
+\end{abstract}
+
+\section{Introduction}
+
+The problem of successfully integrating pictures and text in a
+document processing environment is tantalizing and difficult.
+Although there are systems available that allow such integration, they
+fall short in many ways, usually in document quality. Furthermore,
+most authors using document preparation systems are neither book
+designers nor graphic artists. Just as modern document preparation
+systems do not expect an author to be a book designer, so we would
+prefer that they do not expect an author to be a graphic artist. The
+second author, Wood, needed to draw many trees in a series of papers
+on trees and in a projected book on trees. This problem enabled us
+to tackle the integration issue for one subarea of graphics, namely,
+tree drawing. We had the decided advantage that there already existed good
+algorithms to draw trees {\em without any author intervention}.
+Previous experience of the integration of pictures and text had been
+uninspiring; the systems expected the author to prepare each picture
+in total. For example, a tree could be built up from smaller
+subtrees but the relative placement of them was left to the author.
+This situation continues to hold today with the drawing facilities
+available on most personal computers, and, because of this, the
+resulting figures still appear to be ``hand-drawn.'' Additionally,
+they are of inferior quality when compared with the quality of
+the surrounding text.
+
+In this paper we present an entirely new solution that integrates
+a tree drawing algorithm into one of the best text processing
+systems available. More precisely, we describe \TreeTeX{}, a
+\TeX{} macro package that produces an aesthetically pleasing
+drawing of a tree from a purely logical description.
+We made two fundamental design
+decisions that heavily influenced the method of implementation.
+First, we wanted to allow an author to label the nodes of a tree.
+This decision means that the tree drawing package must be able to
+typeset labels exactly as they would be typeset by the typesetting
+program. There are two reasons for this. Text should be typeset
+consistently, wherever it appears in a document, and the tree
+drawing program needs to know the dimensions of the typeset labels.
+Second, we wanted to ensure that the program could be ported
+easily to other installations and sites, so that other, putative
+users would be able to use it easily.
+Indeed, \TreeTeX{} has been used successfully to typeset trees in
+\cite{BaezaTrees}, \cite{KWIFIP}, and \cite{OAPD}.
+
+By basing our package on \TeX{}, which for more subjective
+reasons we preferred over other typesetting systems such as
+troff, we could ensure wide interest
+in the package. By implementing it as a \TeX{} macro package
+instead of a preprocessor
+we made porting trivial and, furthermore, this also ensured
+consistency of typeset text within a document.
+The down side of this decision is that we had to program with
+\TeX{} macros, not an experience to be recommended, and we had to live
+with the inherent register limitations of \TeX{}.
+
+This paper consists of a further nine sections. In Sections~2, 3 and~4,
+we discuss the aesthetics of tree drawing and the algorithm of
+Reingold and Tilford~\cite{TidierTrees}. In Sections~5, 6, and~7, we
+describe our method of incorporating tree drawing into \TeX{}. Then,
+in the last three short sections, we consider the expected number of
+registers \TeX{} needs to draw a tree, the user interface (and three
+\TreeTeX{} examples), and discussion of, among other things, the
+performance of \TreeTeX{}.
+
+\section{Aesthetical criteria for drawing trees}
+
+In this paper, we are dealing with ordered
+trees in the sense of~\cite{ACP}, specifically binary and unary-binary
+trees. A {\em binary tree\/} is a finite set of nodes that either
+is empty, or consists of a root and two disjoint binary trees called
+the left and right subtrees of the root. A {\em unary-binary tree\/} is
+a finite set of nodes that either is empty, or consists of a root and
+two disjoint unary-binary trees, or consists of a root and one
+nonempty unary-binary tree. An {\em extended binary tree\/} is a binary tree
+in which each node has either two nonempty subtrees or two
+empty subtrees.
+
+There are some basic agreements on how such trees should be drawn, reflecting
+the top-down and left-right ordering of nodes in a tree.
+In \cite{TidierTrees} and \cite{TidyTrees} these basic agreements were
+formalized as the following axioms.
+
+\begin{enumerate}
+\item[1.] Trees impose a distance on the nodes; no node
+ should be closer to the root than any of its
+ ancestors.
+\item[2.] Nodes on the same level should lie on a straight
+ line, and the straight lines defining the levels should be
+ parallel.
+\item[3.] The relative order of nodes on any level should be the same
+ as in the level order traversal of the tree.
+\end{enumerate}
+
+These axioms guarantee that trees are drawn as planar graphs: edges do
+not intersect except at nodes. Two further axioms improve the aesthetical
+appearance of trees.
+
+\begin{enumerate}
+\item[4.] In a unary-binary tree, each left child should be positioned
+ to the left of its parent, each
+ right child to the right of its parent, and each unary child
+ should be positioned below its parent.
+\item[5.] A parent should be centered over its children.
+\end{enumerate}
+
+An additional axiom deals with the problem of tree drawings becoming too wide
+and therefore exceeding the physical limit of the output medium:
+
+\begin{enumerate}
+\item[6.] Tree drawings should occupy as little width as possible without
+ violating the other axioms.
+\end{enumerate}
+
+In \cite{TidyTrees}, Wetherell and Shannon introduce two algorithms for
+tree drawings, the first of which fulfills axioms~1--5, and the second
+1--6. However, as Reingold and Tilford in \cite{TidierTrees}
+point out, there is a lack of symmetry in the algorithms of
+Wetherell and Shannon which may lead to unpleasant results;
+therefore, Reingold and Tilford introduce a new structured
+axiom.
+
+\begin{enumerate}
+\item[7.] A subtree of a given tree should be
+ drawn the same way regardless of where it occurs in the tree.
+\end{enumerate}
+
+Axiom~7 allows the same tree to be drawn differently only when it occurs as
+a subtree in different trees.
+Reingold and Tilford give an algorithm which fulfills axioms~1--5
+and~7. Although
+this algorithm doesn't fulfill axiom~6,
+the aesthetical improvements are well worth the additional space.
+\fig{algorithms} illustrates the benefits of axiom~7, and \fig{narrowtrees}
+shows that the algorithm of Reingold and Tilford violates axiom~6.
+
+\begin{Figure}
+\centering
+\leavevmode\noindent
+\begin{Tree}
+\enode
+\enode\enode\inode\enode\enode\inode\inode\inode
+\node{\external\type{dot}\rght{\unskip\hskip2\mins@p\hskip2\dotw@dth}}
+\enode\enode\inode\enode\enode\inode\inode\inode
+\inode
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\begin{Tree}
+\enode
+\enode\enode\inode\enode\enode\inode\inode\inode
+\enode
+\enode\enode\inode\enode\enode\inode\inode\inode
+\inode
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\
+\caption{The left tree is drawn by the algorithm of Wetherell and Shannon,
+and the tidier right one is drawn by the algorithm of Reingold and Tilford.}
+\label{algorithms}
+
+\vspace{\figspace}
+\centering
+\leavevmode\noindent
+\begin{Tree}
+\enode\enode\enode\enode\enode\enode\enode\enode\enode
+\enode\inode\inode\inode
+\enode\inode\inode\inode
+\enode\inode\inode\inode
+\enode\inode\inode\inode
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\begin{Tree}
+\enode\enode\enode\enode\enode\enode\enode\enode
+\node{\external\type{dot}\rght{\unskip\hskip\mins@p\hskip\dotw@dth}}
+\enode\inode\inode\node{\type{dot}\rght{\unskip\hskip\mins@p\hskip\dotw@dth}}
+\enode\inode\inode\node{\type{dot}\rght{\unskip\hskip\mins@p\hskip\dotw@dth}}
+\enode\inode\inode\node{\type{dot}\rght{\unskip\hskip\mins@p\hskip\dotw@dth}}
+\enode\inode\inode\inode
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\
+\caption{The left tree is drawn by the algorithm of Reingold and Tilford, but
+the right tree shows that narrower drawings fulfilling all aesthetic axioms
+are possible.}
+\label{narrowtrees}
+\end{Figure}
+
+
+\section{The algorithm of Reingold and Tilford}
+
+The algorithm of Reingold and Tilford (hereafter called ``the RT~algorithm'')
+takes a modular approach to the
+positioning of nodes. The relative positions of the nodes in a subtree
+are calculated independently of the rest of the tree. After the
+relative positions of two subtrees have been calculated, they can be
+joined as siblings in a larger tree by placing them as close
+together as possible and centering the parent node above them.
+Incidentally, this modular approach is the reason that the
+algorithm fails to fulfill axiom~6; see~\cite{Complexity}.
+Two sibling subtrees are placed as close together as possible,
+during a postorder traversal, as follows.
+Imagine that the two subtrees of a binary node
+have been drawn and cut out of paper along
+their contours. Then, starting with the two subtrees superimposed at their
+roots, move them apart until a minimal agreed upon distance
+between the trees is obtained at each level. This can be done gradually.
+Initially, their roots are separated by some agreed upon minimum
+distance; then, at the next level, they are pushed
+apart until the minimum separation is established there.
+This process is continued at successively lower levels until the
+last level of the shorter subtree is reached. At some levels no movement may be
+necessary, but at no level are the two subtrees moved closer
+together. When the process is complete, the position of the
+subtrees is fixed relative to their parent, which is centered over them.
+Assured that the subtrees will never be placed closer together,
+the postorder traversal is continued.
+
+A nontrivial implementation of
+this algorithm has been obtained by Reingold and Tilford in~\cite{TidierTrees}
+that runs in time $\O(N)$, where $N$ is the number of
+nodes of the tree to be drawn.
+Their crucial idea is to keep track of the contour of the subtrees
+by special pointers, called threads, such that whenever
+two subtrees are joined, only the
+top part of the trees down to the lowest level of the
+smaller tree need to be taken into account.
+
+The nodes are positioned on a fixed grid and are
+considered to have zero width; labeling is not provided.
+Although the algorithm only draws binary trees, it is easily
+extended to multiway trees.
+
+\section{Improving human perception of trees}
+
+It is common understanding in book design that aesthetics and readability
+don't necessarily coincide, and---as Lamport (\cite{LaTeX}) puts it---%
+``documents are meant to be read, not hung in museums.''
+Therefore, readability is more important than aesthetics.
+
+When it comes to tree drawings, readability means that the structure of
+a tree must be easily recognizable. This criterion is not always met
+by the RT~algorithm. As an example, there are trees whose structure is
+different even though they have the same number
+of nodes on each level. The RT~algorithm might assign identical positions to
+these nodes making it very hard to perceive the structural differences.
+Hence, we have modified the RT~algorithm such that additional white space
+is inserted between subtrees of
+\emph{significant} nodes. Here a binary node
+is called significant if the minimum distance
+between its two subtrees is achieved \emph{below} their root level.
+Setting the amount of additional white space to zero retains the original RT~%
+placement. The effect of having nonzero additional white space between
+the subtrees of significant
+nodes is illustrated in \fig{addspace}.
+
+Another feature we have added to the RT~algorithms is the possibility to draw
+an unextended binary tree with the same placement of nodes as its
+associated extended version;
+this makes the structure of a tree more prominent; see \fig{extended}.
+We define the \emph{associated extended version}
+of a binary tree to be the binary tree obtained by replacing each empty subtree
+having a nonempty sibling with a subtree consisting of one node.
+
+\begin{Figure}
+\centering
+\leavevmode\noindent
+\begin{Tree}
+\e\il\e\e\i\i\il % the left subtree
+\e\ir\il % the right subtree
+\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\begin{Tree}
+\e\il\il\il % the left subtree
+\e\e\i\e\i\il % the right subtree
+\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\adds@p10pt
+\begin{Tree}
+\e\il\e\e\i\node{\type{dot}\lft{$\longrightarrow$}}\il % the left subtree
+\e\ir\il % the right subtree
+\node{\type{dot}\lft{$\longrightarrow$}}
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\begin{Tree}
+\e\il\il\il % the left subtree
+\e\e\i\e\i\il % the right subtree
+\node{\type{dot}\lft{$\longrightarrow$}}
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\
+\adds@p0pt
+
+\caption{The nodes of the first two trees are placed in the same positions
+by the RT~algorithm, although the structure of the two trees is different.
+The alternative drawings highlight the structural differences
+of the trees by adding additional white space between the subtrees of
+($\longrightarrow$) significant nodes.}
+\label{addspace}
+\end{Figure}
+
+\begin{Figure}
+\centering
+\leavevmode\noindent
+\begin{Tree}
+\e\e\i\il\e\e\i\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\hbox{}\qquad
+\begin{Tree}
+\e\e\i\e\i\e\ir\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\hbox{}\\
+\extended
+\begin{Tree}
+\e\e\i\il\e\e\i\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\hbox{}\qquad
+\begin{Tree}
+\e\e\i\e\i\e\ir\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\hbox{}\\
+\noextended
+\begin{Tree}
+\e\e\i\e\i\e\e\i\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\
+\caption{As in the previous figure, the nodes of the first two trees
+are placed in the same position by the RT algorithm,
+although their structure is different. The modified
+RT~algorithms highlights the structural differences of the trees by
+drawing them like their identical extended
+version (given in the third row), but suppressing the additional nodes.}
+\label{extended}
+\end{Figure}
+
+
+\section{Trees in a document preparation environment}
+
+Drawings of trees do not usually appear by themselves,
+but are included in some text
+that is itself typeset by a text processing system. Therefore, a typical
+scenario is a pipe of three stages. First, we have a tree drawing
+program that calculates the positioning of the nodes of the tree to
+be drawn and outputs a description of the tree drawing in
+some graphics language; this is followed by
+a graphics system that transforms this
+description into an intermediate language that can be interpreted by the output
+device; and, finally, we have the
+text processing system that integrates the output of the
+graphics system into the text.
+
+This scenario loses its linear structure once nodes have to be labeled, since
+the labeling influences the positioning of the nodes. Labels usually occur
+inside, to the left of, to the right of, or beneath nodes (the latter only for
+external nodes). Their widths should certainly be taken into account
+by the tree drawing algorithm. But the labels have to be typeset first
+to determine their extensions,
+preferably by the typesetting program that
+is used for the regular text, because this ensures uniformity in the textual
+parts of the document and provides the author with the full power of a
+text processing system for composing the labels. Hence, a more complex
+communication scheme than a simple pipe is required.
+
+Although a system of two processes running simultaneously might be the most
+elegant solution, we wanted a system that is easily portable to
+widely different machines at our sites
+including personal computers with single process
+operating systems.
+Therefore, we decided to use a text processing system
+having programming facilities powerful enough to
+program a tree drawing algorithm and graphics facilities powerful enough
+to draw a tree. One text processing system
+rendering outstanding typographic quality and satisfactory programming
+facilities is \TeX, developed by Knuth at Stanford University;
+see~\cite{TeXbook}.
+The \TeX{} system includes the following programming facilities.
+
+\begin{enumerate}
+\item[1.] Datatypes:\\
+ integers~(256), dimensions\footnote{The term \emph{dimension} is used
+ in \TeX\ to describe physical measurements of typographical objects;
+ for example, the length of a word.}~(512),
+ boxes~(256), tokenlists~(256), and
+ boolean variables~(unrestricted).
+\item[2.] Elementary statements:\\
+ $a:=\rm const$, $a:=b$ (all types);\\
+ $a:=a+b$, $a:=a*b$, $a:=a/b$ (integers and dimensions); and\\
+ horizontal and vertical nesting of boxes.
+\item[3.] Control constructs:\\
+ if-then-else statements testing relations between integers,
+ dimensions, boxes, or boolean variables.
+\item[4.] Modularization constructs:\\
+ macros with up to 9~parameters (can be viewed as procedures without
+ the concept of local variables).
+\end{enumerate}
+
+Although the programming
+facilities of \TeX{} hardly exceed the abilities of a Turing machine,
+they are sufficient to
+handle small programs. How about the graphics facilities?
+Although \TeX{} has no built-in graphics facilities, it
+allows the placement of characters in arbitrary positions on
+the page. Therefore, complex pictures can be synthesized from elementary
+picture elements treated as characters. Lamport has included such
+a picture drawing environment in his macro package \LaTeX, using
+quarter circles of different sizes and line segments (with and without
+arrow heads) of different slopes as basic elements; see~\cite{LaTeX}.
+These elements are sufficient for drawing trees.
+
+This survey of \TeX's capabilities implies that \TeX{} may be a suitable
+text processing system to implement a tree drawing algorithm directly.
+We base our algorithm on the RT~algorithm, because this algorithm
+gives, aesthetically, the most pleasing results. In the first version
+presented here, we
+restrict ourselves to unary-binary trees, although our method is
+applicable to arbitrary multiway trees. But to take advantage
+of the text processing environment, we expand the algorithm to allow
+labeled nodes.
+
+In contrast to previous tree drawing programs, we feel no necessity to
+position the nodes of a tree on a fixed grid. While this may be
+reasonable for a plotter with a coarse resolution, it is certainly not
+necessary for \TeX, a system that is capable of handling
+arbitrary dimensions
+and producing device \emph{independent} output.
+
+
+\section{A representation method for \TeX{}trees}
+
+The first problem to be solved in implementing our tree drawing algorithm
+is how to choose a good internal representation
+for trees. A straightforward adaptation
+of the implementation by Reingold and Tilford requires, for each node,
+at least:
+%
+\begin{enumerate}
+\item two pointers to the children of the node,
+\item two dimensions for the offset to the left and the right child (these
+ may be different once there are labels of different widths to the
+ left and right of the nodes),
+\item two dimensions for the $x$- and $y$-coordinates of the final
+ position of the nodes,
+\item three or four labels, and
+\item one token to store the geometric shape (circle, square, framed text, etc.)
+ of the node.
+\end{enumerate}
+%
+Because these data are used frequently in calculations, they should be
+stored in registers (that's what variables are called in \TeX)
+rather than being recomputed, to obtain
+reasonably fast performance. This gives a total of $10N$ registers for
+a tree with $N$ nodes, which quickly exceeds
+\TeX's limited supply of registers. Therefore, we present a
+modified algorithm hand-tailored to the abilities of \TeX{}.
+We start with the following observation.
+Suppose a unary-binary tree is built bottom-up, using a postorder
+traversal. This can be done by repeating the following three steps in
+an order determined by the tree to be built.
+
+\begin{enumerate}
+\item Create a new subtree consisting of one external node.
+\item Create a new subtree by appending the two subtrees last created
+ to a new binary node; see \fig{Construct}.
+\item Create a new subtree by appending the subtree created last as a left,
+ right, or unary subtree of a new node; see \fig{Construct}.
+\end{enumerate}
+
+(A pointer to) each subtree that has been
+created in steps 1--3 is pushed onto a stack, and
+steps 2 and 3 remove two trees or one tree, respectively,
+from the stack before the push
+operation is carried out. The tree to be built is
+the tree remaining on the stack.
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\treesymbol{\lvls{2}}%
+\hspace{-\l@stlmoff}\usebox{\l@sttreebox}\hspace{\l@strmoff}
+$+$
+\treesymbol{\lvls{2}}%
+\hspace{-\l@stlmoff}\usebox{\l@sttreebox}\hspace{\l@strmoff}\quad
+$\Longrightarrow$\quad
+\treesymbol{\lvls{2}}%
+\treesymbol{\lvls{2}}%
+\node{\type{dot}}%
+\hspace{-\l@stlmoff}\raisebox{\vd@st}{\usebox\l@sttreebox}\hspace{\l@strmoff}%
+\end{Tree}
+
+\vskip\baselineskip
+
+\begin{Tree}
+\treesymbol{\lvls{2}}%
+\hspace{-\l@stlmoff}\usebox{\l@sttreebox}\hspace{\l@strmoff}\quad
+$\Longrightarrow$\quad
+\treesymbol{\lvls{2}}%
+\node{\leftonly\type{dot}}%
+\hspace{-\l@stlmoff}\raisebox{\vd@st}{\usebox\l@sttreebox}\hspace{\l@strmoff}%
+\quad or\quad
+\treesymbol{\lvls{2}}%
+\node{\unary\type{dot}}%
+\hspace{-\l@stlmoff}\raisebox{\vd@st}{\usebox\l@sttreebox}\hspace{\l@strmoff}%
+\quad or\quad
+\treesymbol{\lvls{2}}%
+\node{\rightonly\type{dot}}%
+\hspace{-\l@stlmoff}\raisebox{\vd@st}{\usebox\l@sttreebox}\hspace{\l@strmoff}%
+\end{Tree}
+
+\caption{Construction steps 2 and 3}
+\label{Construct}
+\end{Figure}
+
+This tree traversal is performed twice in the RT~algorithm.
+During the first pass,
+at each execution of steps 2 or~3, the relative positions of the
+subtree(s) and of the new node are computed.
+A closer examination of the RT~algorithm reveals that information about the
+subtree's coordinates is not needed during this pass; the contour information
+alone is sufficient. Complete information is only needed in the second
+traversal, when the tree is really drawn. This is where we can use
+a special feature of \TeX{} that allows us to save registers.
+Unlike Pascal, \TeX{} has the capability of
+storing a drawing in a single box register that can be positioned freely in
+later drawings. This means that in our implementation the two passes
+of the original RT~algorithm can be woven into a single pass,
+storing the contour and drawing of each subtree on the stack.
+Although the latter is a complex object, it takes only one of
+\TeX's precious registers.
+
+
+\section{The internal representation}
+
+Given a tree, the corresponding \TeX{}tree is a box containing
+the ``drawing'' of the tree, together with some additional
+information about the contour of the tree.
+The reference point of a \TeX{}tree-box is always in the root of the
+tree. The height, depth, and width of the box of a \TeX{}tree are
+of no importance in this context.
+
+The additional information about the contour of the tree is stored in some
+registers for numbers and dimensions and
+is needed in order to put subtrees together to form a larger tree.
+An array \var{loff} of dimensions contains for each
+level of the tree the horizontal offset between the
+left end of the leftmost node at the current level and the
+left end of the leftmost node at the next level.
+The horizontal offset between the root
+and the leftmost node of the whole tree is hold in \var{lmoff}, and
+the horizontal offset between the root and the leftmost node at
+the bottom level of the tree is hold in \var{lboff}.
+Finally, \var{ltop} holds the distance between the reference point
+of the tree and the leftmost end of the root.
+We use
+\var{roff}, \var{rmoff}, \var{rboff}, and \var{rtop}
+as the corresponding variables for ``left'' replaced by ``right.'' Finally,
+\var{height} holds the height of the tree, and \var{type} holds the
+geometric shape of the root of the tree. \fig{TeXtree} shows an example
+\TeX{}tree, that is a tree drawing and the corresponding additional information.
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\e\ir\ir\e
+ \node{\type{dot}\rightonly\rght{\unskip\vrule height.8pt width5pt depth0pt}}%
+ \i % A
+\end{Tree}
+\leavevmode
+\stack{-10pt}{\vd@st}{%
+ -10pt\\10pt\\10pt\\\var{loff}}%
+\hspace{1em}%
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}%
+\hspace{1em}%
+\stack{-10pt}{\vd@st}{%
+ 15pt\\5pt\\-10pt\\\var{roff}}%
+
+\vskip\baselineskip\raggedright
+height:~3, type:~dot, ltop:~2pt, rtop:~2pt, lmoff:~-10pt, rmoff:~20pt, lboff:~10pt,
+rboff:~10pt.
+
+\caption{A \TeX{}tree consists of the drawing of the tree and the additional
+information. The width of the dots is 4pt, the minimal separation between
+adjacent nodes is 16pt, making for a distance of 20pt center to center.
+The length of the small rule labeling
+one of the nodes is 5pt. The column left (right)
+of the tree drawing is the array \var{loff} (\var{roff}),
+describing the left (right) contour of the tree. At each level,
+the dimension given is the horizontal
+offset between the border at the current and
+at the next level. The offset between
+the left border of the root node and the leftmost node at level~1 is -10pt,
+the offset between the right border of the root node and the rightmost node at
+level~1 is 15pt, etc.}
+\label{TeXtree}
+\end{Figure}
+
+Given two \TeX{}trees \var{A} and \var{B},
+how can a new \TeX{}tree \var{C} be built that
+consists of a new root and has \var{A} and \var{B} as subtrees?
+An example is given in \fig{AddInfo}.
+First we determine which tree is higher; this is
+\var{B} in the example.
+Then we have to compute the minimal distance
+between the roots of \var{A} and \var{B}, such that at all levels
+of the trees there is free space of at least \var{minsep} between
+the trees when they are drawn side by side.
+For this purpose we keep track of two values, \var{totsep} and
+\var{currsep}. The variables \var{totsep} and \var{currsep}
+hold the total distance between the roots and the distance
+between the rightmost node of \var{A} and the leftmost node
+of \var{B} at the current level. To calculate
+\var{totsep} and \var{currsep}, we start at level 0 and
+visit each level of the trees until we reach the bottommost level
+of the smaller tree; this is \var{A} in our example.
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\e\ir\ir\e
+ \node{\type{dot}\rightonly\rght{\unskip\vrule height.8pt width5pt depth0pt}}%
+ \i % A
+\end{Tree}
+\leavevmode
+A: \stack{-10pt}{\vd@st}{%
+ -10pt\\10pt\\10pt\\\ \\\var{loff}(\var{A})}%
+\hspace{1em}%
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}%
+\hspace{1em}%
+\stack{-10pt}{\vd@st}{%
+ 15pt\\5pt\\-10pt\\\ \\\var{roff}(\var{A})}%
+\qquad
+\begin{Tree}
+\e\il\e\i\il\il\ir % B
+\end{Tree}
+\leavevmode
+B: \stack{-10pt}{\vd@st}{%
+ 10pt\\-10pt\\-10pt\\-10pt\\-10pt\\\ \\\var{loff}(\var{B})}%
+\hspace{1em}%
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}%
+\hspace{1em}%
+\stack{-10pt}{\vd@st}{%
+ 10pt\\-10pt\\-10pt\\10pt\\-30pt\\\ \\\var{roff}(\var{B})}%
+\\[\figspace]
+\begin{Tree}
+\e\ir\ir\e
+ \node{\type{dot}\rightonly\rght{\unskip\vrule height.8pt width5pt depth0pt}}%
+ \i % A
+\e\il\e\i\il\il\ir % B
+\i % C
+\end{Tree}
+\leavevmode
+C: \stack{-10pt}{\vd@st}{%
+ -20\\-10pt\\%
+ \makebox[0pt][r]{\var{loff}(\var{A})$\smash{\left\{\vrule height\vd@st
+ depth\vd@st width0pt\right.}$ }%
+ 10pt\\10pt\\%
+ \makebox[0pt][r]{$\longrightarrow$ }%
+ 10pt\\%
+ \makebox[0pt][r]{\raisebox{-.5\vd@st}{\var{loff}(\var{B})$\smash
+ {\left\{\vrule height.5\vd@st
+ depth.5\vd@st width0pt\right.}$ }}%
+ \makebox[0pt][r]{-}10pt\\\ \\\var{loff}(\var{C})}%
+\hspace{1em}%
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}%
+\hspace{1em}%
+\stack{-10pt}{\vd@st}{%
+ 20pt\\10pt\\-10pt\\-10pt%
+ \makebox[0pt][l]{\raisebox{-.5\vd@st}{
+ $\smash{\left\}\vrule height2.5\vd@st
+ depth2.5\vd@st width0pt\right.}$\var{roff}(\var{B})}}%
+ \\10pt\\-30pt\\\ \\\var{roff}(\var{C})}%
+
+\vspace{\figspace}
+\centering
+\begin{tabular}{|l|r|r|r|}
+\hline
+&\multic{1}{c|}{\var{A}}&\multic{1}{c|}{\var{B}}&\multic{1}{c|}{\var{C}}\\
+\hline
+height&\multic{1}{c|}{3}& \multic{1}{c|}{5}& \multic{1}{c|}{6}\\
+type& \multic{1}{c|}{dot}&\multic{1}{c|}{dot}&\multic{1}{c|}{dot}\\
+ltop& 2pt& 2pt& 2pt\\
+rtop& 2pt& 2pt& 2pt\\
+lmoff& -10pt& -30pt& -30pt\\
+rmoff& 20pt& 10pt& 30pt\\
+lboff& 10pt& -30pt& -10pt\\
+rboff& 10pt& -30pt& -10pt\\
+\hline
+\end{tabular}\qquad
+\begin{tabular}{|c|r|r|}
+\hline
+\multic{1}{|c|}{level}&\multic{1}{c|}{\var{totsep}}&
+ \multic{1}{c|}{\var{currsep}}\\
+\hline
+0&20pt&0/16pt\\
+1&25pt&11/16pt\\
+2&40pt&1/16pt\\
+3&40pt&16pt\\
+\hline
+\end{tabular}
+\caption{The \TeX{}trees \var{A} and~\var{B} are combined to form the
+larger \TeX{}\-tree~\var{C}. The first table gives the additional
+information of the three \TeX{}trees,
+and the second table gives the
+history of the computation for \var{totsep} and \var{currsep}.}
+\label{AddInfo}
+\end{Figure}
+
+At level 0, the distance between the roots of \var{A} and \var{B}
+should be at least \var{minsep}. Therefore, we set
+$\var{totsep}:=\var{minsep} + \var{rtop}(\var{A})
++ \var{ltop}(\var{B})$ and $\var{currsep}:=\var{minsep}$.
+Using $\var{roff}(\var{A})$ and $\var{loff}(\var{B})$, we can
+calculate \var{currsep} for the next level.
+If $\var{currsep} < \var{minsep}$, we have to increase \var{totsep} by
+the difference and update \var{currsep}. This process is
+repeated until we reach the lowest level of \var{A}
+at which point \var{totsep} holds the final distance between the
+nodes of \var{A} and \var{B}, as calculated by the RT~algorithm.
+If the root of \var{C} is a significant node, then the additional space,
+which is 0pt by default, is added to \var{totsep}.
+However, the approach of synthesizing
+drawings from simple graphics characters allows only a finite
+number of orientations for the tree edges; therefore, \var{totsep}
+must be increased slightly to fit the next orientation
+available.
+
+Now we are ready to build the box of \TeX{}tree~\var{C}.
+Simply put \var{A} and~\var{B} side by side, with the reference
+points \var{totsep}~units apart, insert a new node
+above them, and connect the parent and children by edges.
+Next, we compute the additional information
+for \var{C}. This can be done by using the additional information
+for \var{A} and~\var{B}.
+Note that most components of $\var{roff}(\var{C})$ and
+$\var{lroff}(\var{C})$ are the same as in the higher tree, which
+is \var{B} in our case.
+So, if we can avoid moving this information around,
+the number of counters we have to access to update the additional information
+for \var{C} is within a small constant of the height of~\var{A}.
+Hence, we can apply the same argument as
+in~\cite{TidierTrees}, which gives
+us a running time of $\O(N)$ for drawing a tree with N nodes.
+
+We must design the allocation of storage registers for
+the additional information of \TeX{}trees carefully to fulfill the
+following requirement. If a new tree is built from
+two subtrees, the additional information of the new tree
+shares storage with its larger subtree.
+Organizational overhead, that is,
+pointers that keep track of the locations of different parts of additional
+information, must be avoided.
+This means that the additional information
+for one \TeX{}tree should be stored in a sequence
+of consecutive dimension registers
+such that only one pointer for access to the first element
+in this sequence is needed. On the other hand, each parent
+tree is higher and, therefore, needs more storage than its subtrees.
+So we must ensure that there is always enough space in the sequence
+for more information.
+
+The obvious way to fulfill these requirements is to use a stack and to
+allow only the topmost \TeX{}trees of this stack to be
+combined into a larger tree at any time.
+This leads to the following allocation of registers: A contiguous sequence of
+box registers contains the treeboxes of the subtrees in the stack. A
+contiguous sequence of token registers contains the type information for the
+nodes of the subtrees in the stack. For each subtree in the stack,
+a contiguous sequence of dimension registers contains the contour
+information of the subtree. The ordering of these groups of dimension
+registers reflects the ordering of the subtrees in the
+stack. Finally, a contiguous sequence of counter registers contains
+the height and the address of the first dimension register for
+each subtree in the stack. Four address counters store the addresses
+of the last treebox, type information, height, and address of contour
+information. A sketch of the register organization for a stack of \TeX{}trees
+is provided in \fig{Registers}.
+
+\begin{Figure}
+Dimension registers\\
+\var{lmoff}(1) \var{rmoff}(1) \var{lboff}(1) \var{rboff}(1) \var{ltop}(1)
+ \var{rtop}(1)\\
+\var{loff}($h_1$) \var{roff}($h_1$) \dots\ \var{loff}(1) \var{roff}(1)\\
+\dots\\
+\var{lmoff}($n$) \var{rmoff}($n$) \var{lboff}($n$) \var{rboff}($n$)
+ \var{ltop}($n$) \var{rtop}($n$)\\
+\var{loff}($h_n$) \var{roff}($h_n$) \dots\ \var{loff}(1) \var{roff}(1)\\
+\mbox{}\\
+Counter registers\\
+\var{lasttreebox} \var{lasttreeheight} \var{lasttreeinfo} \var{lasttreetype}\\
+\var{treeheight}(1) \var{diminfo}(1) \dots\ \var{treeheight}($n$)
+ \var{diminfo}($n$)\\
+\mbox{}\\
+Box registers\\
+\var{treebox}(1) \dots\ \var{treebox}($n$)\\
+\mbox{}\\
+Token registers\\
+\var{type}(1) \dots\ \var{type}($n$)
+
+\caption{\var{lasttreebox}, \var{lasttreeheight}, \var{lasttreeinfo},
+\var{lasttreetype} contain pointers to \var{treebox}($n$)
+\var{treeheight}($n$), \var{lmoff}($n$), \var{type}($n$),
+\var{diminfo}($i$) contains a pointer to
+\var{lmoff}($i$). Unused dimension registers are
+allowed between the dimension registers of subsequent trees. The counter
+registers \var{lasttreebox},\ldots,\var{diminfo}($n$) serve as a directory
+mechanism to access the \TeX{}trees on the stack.}
+\label{Registers}
+\end{Figure}
+
+
+When a new node is pushed onto the stack, the treebox, type information,
+height, address of contour information, and contour information are
+stored in the next free registers of the appropriate type, and the
+four address counters are updated accordingly.
+
+When a new tree is formed from the topmost subtrees on the stack,
+the treebox, type information, height, and address of contour information
+of the new tree are sorted in the registers formerly used by the bottommost
+subtree that has occurred in the construction step,
+and the four address registers are
+updated accordingly. This means that this information for the subtrees
+is no longer accessible. The contour information of the new subtree
+is stored in the same registers as the contour information of the larger
+subtree used in the construction, apart from the left and right offset
+of the root to the left and right child, which are stored in the
+following dimension registers. This means that gaps can occur
+between the contour information of subtrees in the
+stack, namely when the right subtree, which is in a higher position in the
+stack, is higher than the left one. To avoid these
+gaps, the user can specify an option \verb.\lefttop. when entering a
+binary node, which makes the topmost tree in the stack the
+left subtree of the node.
+
+This stack concept also has consequences for the design of the user interface
+that is discussed in Section~\ref{Interface}.
+
+\section{Space cost analysis}
+
+Suppose we want to draw a unary-binary tree $T$ of height $h$ having
+$N$ nodes\footnote{The height $h$ and the number of nodes $N$ refer to the
+drawing of the tree. $N$ is the number of circles, squares,~etc., actually
+drawn, and $h$ is the number of levels in the drawing minus 1.}.
+According to our internal representation,
+for each subtree in the stack we need:
+
+\begin{enumerate}
+\item one box register to store the box of the \TeX{}tree;
+\item one token register to store the type of the root of the subtree;
+\item $2h^\prime+6$ dimension registers to store the additional
+ information, where $h^\prime$ is the height of the
+ subtree; and
+\item three counter registers to store the register numbers of the
+ box register, the token register, and the first dimension register above.
+\end{enumerate}
+
+\begin{lemma}
+Let $T$ be a unary-binary tree of height~$h$ and size~$N$; then:
+\begin{enumerate}
+\item at any time, there are at most $h+1$ subtrees of $T$ on the
+ stack; and
+\item for each set $\T$ of subtrees of $T$ that are on the stack
+ simultaneously we have
+ $$\sum_{T^\prime\in \T}({\rm ht}(T^\prime)+1) \le N$$
+\end{enumerate}
+\end{lemma}
+
+The lemma implies that our implementation
+uses at most $9h+2N$~registers.
+To compare this with the
+$10N$ registers used in the straightforward implementation,
+an estimation of the average height of a tree with $N$ nodes is
+needed. Several results, depending on the type of trees and of the
+randomization model, are cited in \fig{Stat}, which
+compares the number of registers used in a straightforward
+implementation with the average number of registers used in our
+implementation. This table shows clearly the advantage of our
+implementation.
+
+\begin{Figure}
+\centering
+
+\begin{tabular}{|c|c|c|c|c|}
+\hline
+&registers&\multicolumn{3}{c|}{average registers}\\
+\cline{3-5}
+nodes&(straight-&&unary-binary&binary\\
+&forward)&binary trees&trees&search trees\\
+$N$&&($2\sqrt{\pi N}$) \cite{BinaryTrees}&
+ ($\sqrt{3\pi N}$) ~\cite{BinaryTrees}&
+ ($4.311\log N$) \cite{BinarySearchTrees}\\
+\hline
+\ds10 & \ds100 & 120.89 & 107.37 & 109.34 \\
+\ds20 & \ds200 & 182.68 & 163.56 & 156.23 \\
+\ds30 & \ds300 & 234.75 & 211.33 & 191.96 \\
+\ds40 & \ds400 & 281.78 & 254.75 & 223.12 \\
+\ds50 & \ds500 & 325.60 & 295.37 & 251.78 \\
+\ds60 & \ds600 & 367.13 & 334.02 & 278.86 \\
+\ds70 & \ds700 & 406.93 & 371.17 & 304.84 \\
+\ds80 & \ds800 & 445.36 & 407.13 & 330.02 \\
+\ds90 & \ds900 & 482.67 & 442.12 & 354.59 \\
+100 & 1000 & 519.04 & 476.30 & 378.68 \\
+\hline
+\end{tabular}
+
+\caption{The numbers of registers used by a straightforward implementation
+(second column) and by our modified implementation (third to fifth column)
+of the RT~algorithm are
+given for different types of trees and randomization models.
+The formulas in parentheses indicate the average height of the respective
+classes of trees.}
+\label{Stat}
+\end{Figure}
+
+
+\section{The user interface}\label{Interface}
+
+The user interface of \TreeTeX{} has been designed in the spirit of
+the thorough separation of the logical description of document components
+and their layout; see~\cite{DocumentFormatting,GML}. This concept
+ensures both uniformity and flexibility of document layout and frees
+authors from layout problems that have nothing to do with the
+substance of their work. For some powerful implementations and projects
+see \cite{Tables,Karlsruhe,LaTeX,Grif,Scribe}.
+
+The description of a tree consists of a description of its nodes
+in postorder. Each description of a node, in turn, has to specify
+the outdegree, the geometric shape and the labels of the node.
+Defaults are provided for all specifications,
+thereby allowing the user to omit many definitions
+if the defaults match what he or she wants.
+
+A separate style command defines layout parameters for tree drawings
+that are valid for all trees of a document.
+Layout parameters include the font to be used for labels, the diameter
+of circle nodes, the vertical distance between two subsequent levels
+of the tree, and the minimal horizontal distance between nodes.
+
+Standard versions of \TeX{} provide only a limited number of
+font and circle sizes. Hence, the user of the style command must make
+sure that the specified sizes can be realized. This is especially
+cumbersome when everything has to be magnified for later reproduction
+with reduction. But the style variables can be made parametric for
+installations that provide scalable fonts and replace \LaTeX{}'s
+circle- and line-drawing commands with routines that provide arbitrary
+diameters and slopes.
+
+Three examples of tree descriptions are given in
+Figures~\ref{firstex}--\ref{lastex}.
+A more detailed description of the user interface is
+given in~\cite{Exeter}.
+
+\section{Conclusions}
+
+We hope that, by now, we have convinced the reader of the main advantages
+of \TreeTeX{}: It integrates graphics and text; it is portable to all
+sites running \TeX{};
+and it is easy to use for the author, because it derives the drawing
+of a tree from a purely structural description. But our decision to
+implement \TreeTeX{} as a \TeX{} macro package has also some
+drawbacks, both for the programmer and for the user of the system.
+
+>From the programmer's point of view, \TeX{}'s macro language is
+a low level programming language. Hence, maintaining and extending
+the package is a more tedious task than it would be if we had used
+a higher level language with better support for modularization.
+
+>From the author's point of view, \TreeTeX{}'s limitations lie in
+speed, size of trees, and graphical primitives.
+Typesetting all the trees in this article takes about two~minutes on
+a VAX~750, and typesetting a complete binary tree with 63~internal
+and 64~external nodes takes about one~minute on the same machine.
+The size of the trees is limited by three factors, namely,
+the number of registers, the complexity of the nested boxes that
+contain the drawing of a tree, and the limited number of slopes
+that are available for the edges, the latter being the most severe
+problem at present. Hence, the main area of application for
+\TreeTeX{} is modest use such as in textbooks; displaying
+large amounts of statistical data, for example, is out of the question.
+
+Currently edges and circular nodes are drawn from \LaTeX{}'s set of
+predefined graphical characters. Hence, \TreeTeX{} cannot draw
+arbitrarily wide trees or large circular nodes. We consider
+this restriction, however, to be a temporary one, since a committee inside
+the \TeX{} Users Group is working on standard graphic
+extensions to \TeX{} that will remove these limitations.
+
+As to further developments of \TreeTeX{}, it would be desirable to
+draw larger classes of trees, for example multiway trees, and to allow
+labels not only for nodes, but also for edges and whole subtrees.
+
+
+\Treestyle{\vdist{60pt}}
+\dummyhalfcenterdim@n=10pt
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\node{\external\bnth{first}\cntr{1}\lft{Beeton}}
+\node{\external\cntr{3}\rght{Kellermann}}
+\node{\cntr{2}\lft{Carnes}}
+\node{\external\cntr{6}\lft{Plass}}
+\node{\external\bnth{last}\cntr{8}\rght{Tobin}}
+\node{\cntr{7}\rght{Spivak}}
+\node{\leftonly\cntr{5}\rght{Lamport}}
+\node{\cntr{4}\rght{Knuth}}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}\
+
+\begin{verbatim}
+\begin{Tree}
+\node{\external\bnth{first}\cntr{1}\lft{Beeton}}
+\node{\external\cntr{3}\rght{Kellermann}}
+\node{\cntr{2}\lft{Carnes}}
+\node{\external\cntr{6}\lft{Plass}}
+\node{\external\bnth{last}\cntr{8}\rght{Tobin}}
+\node{\cntr{7}\rght{Spivak}}
+\node{\leftonly\cntr{5}\rght{Lamport}}
+\node{\cntr{4}\rght{Knuth}}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}
+\end{verbatim}
+
+\caption{This is an example of a tree that includes labels.}
+\label{firstex}
+\end{Figure}
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\node{\external\type{frame}\bnth{first}\cntr{Beeton}}
+\node{\external\type{frame}\cntr{Kellermann}}
+\node{\type{frame}\cntr{Carnes}}
+\node{\external\type{frame}\cntr{Plass}}
+\node{\external\type{frame}\bnth{last}\cntr{Tobin}}
+\node{\type{frame}\cntr{Spivak}}
+\node{\leftonly\type{frame}\cntr{Lamport}}
+\node{\type{frame}\cntr{Knuth}}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}\
+
+\begin{verbatim}
+\begin{Tree}
+\node{\external\type{frame}\bnth{first}\cntr{Beeton}}
+\node{\external\type{frame}\cntr{Kellermann}}
+\node{\type{frame}\cntr{Carnes}}
+\node{\external\type{frame}\cntr{Plass}}
+\node{\external\type{frame}\bnth{last}\cntr{Tobin}}
+\node{\type{frame}\cntr{Spivak}}
+\node{\leftonly\type{frame}\cntr{Lamport}}
+\node{\type{frame}\cntr{Knuth}}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}
+\end{verbatim}
+\caption{This is an example of a tree with framed center labels.}
+\end{Figure}
+
+\begin{Figure}
+\Treestyle{\treefonts{\small\it}\nodesize{16pt}\vdist{40pt}\minsep{16pt}}
+\centering
+\begin{Tree}
+\node{\external\bnth{first}\cntr{1}\lft{Beeton}}
+\node{\external\cntr{3}\rght{Kellermann}}
+\node{\cntr{2}\lft{Carnes}}
+\node{\external\cntr{6}\lft{Plass}}
+\node{\external\bnth{last}\cntr{8}\rght{Tobin}}
+\node{\cntr{7}\rght{Spivak}}
+\node{\leftonly\cntr{5}\rght{Lamport}}
+\node{\cntr{4}\rght{Knuth}}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}\
+
+\caption{This tree was produced from the same logical description as in
+Figure~\ref{firstex}, but with different style parameters}
+\label{lastex}
+\end{Figure}
+
+\clearpage
+\bibliography{trees}
+\end{document}
+
+
diff --git a/macros/plain/contrib/treetex/l_pic.tex b/macros/plain/contrib/treetex/l_pic.tex
new file mode 100644
index 0000000000..26e71e5475
--- /dev/null
+++ b/macros/plain/contrib/treetex/l_pic.tex
@@ -0,0 +1,839 @@
+% All this stuff comes from latex.tex, most of it from the
+% picture environment. No changes!!!
+% It is needed if you want to use TreeTeX together with plain TeX.
+
+\catcode`\@=11
+
+\def\@height{height}
+\def\@depth{depth}
+\def\@width{width}
+
+\font\tenln=line10
+\font\tencirc=circle10
+\font\tenlnw=linew10
+\font\tencircw=circlew10
+
+\newcount\@tempcnta
+\newcount\@tempcntb
+\newdimen\@tempdima
+\newdimen\@tempdimb
+\newbox\@tempboxa
+
+\def\@whilenoop#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\@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}}
+
+\let\:=\>
+
+% ****************************************
+% * 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
+
+
+
+%
+
diff --git a/macros/plain/contrib/treetex/readme b/macros/plain/contrib/treetex/readme
new file mode 100644
index 0000000000..575afc2fe0
--- /dev/null
+++ b/macros/plain/contrib/treetex/readme
@@ -0,0 +1,19 @@
+TreeTeX is a public domain macro package for drawing
+trees with TeX. It may be freely distributed, provided
+that the following files are kept together:
+
+ README epodd.bbl epodd.tex tree_doc.bbl tree_doc.tex
+ classes.tex l_pic.tex treetex.tex
+
+Copyright is with Anne Brueggemann-Klein and Derick Wood.
+
+All remarks, bug reports etc. should be directed to
+
+ Dr. Anne Brueggemann-Klein
+ Institut fuer Informatik
+ Rheinstr. 10--12
+ 7800 Freiburg, West Germany
+
+ email: abk@sun1.ruf.uni-freiburg.dbp.de
+
+
diff --git a/macros/plain/contrib/treetex/tree_doc.bbl b/macros/plain/contrib/treetex/tree_doc.bbl
new file mode 100644
index 0000000000..88c540ee0b
--- /dev/null
+++ b/macros/plain/contrib/treetex/tree_doc.bbl
@@ -0,0 +1,97 @@
+\begin{thebibliography}{10}
+
+\bibitem{Tables}
+R.~J. Beach.
+\newblock {\it Setting Tables and Illustrations with Style}.
+\newblock PhD thesis, University of Waterloo, 1985.
+
+\bibitem{Karlsruhe}
+A. Br{\"u}ggemann-Klein, P. Dolland, and A. Heinz.
+\newblock How to please authors and publishers: a versatile document
+ preparation system at {K}arlsruhe.
+\newblock In J. D\'esarm\'enien, editor, {\it {\TeX{}} for Scientific
+ Documentation}, Strasbourg, France, June 1986.
+\newblock LNCS~236.
+
+\bibitem{TreeTeX}
+A. Br{\"u}ggemann-Klein and D. Wood.
+\newblock {\it Tree{\TeX}: Documentation and User Handbook}.
+\newblock Technical Report, University of Waterloo, 1987.
+
+\bibitem{AverageHeight}
+N.G. de~Bruijn, D. Knuth, and S.O. Rice.
+\newblock The average height of planted plane trees.
+\newblock In R.C. Read, editor, {\it Graph Theory and Computing}, 1972.
+
+\bibitem{BinarySearchTrees}
+L. Devroye.
+\newblock A note on the height of binary search trees.
+\newblock {\it Journal of the ACM}, 33(3), July 1986.
+
+\bibitem{BinaryTrees}
+Ph. Flajolet and A. Odlyzko.
+\newblock The average height of binary trees and other simple trees.
+\newblock {\it Journal of Computer and System Sciences}, 25, 1982.
+
+\bibitem{DocumentFormatting}
+R. Furuta, J. Scofield, and A. Shaw.
+\newblock Document formatting systems: surveys, concepts, issues.
+\newblock {\it Computing Surveys}, 14(3), 1982.
+
+\bibitem{GML}
+Ch.~F. Goldfarb.
+\newblock A generalized approach to document markup.
+\newblock {\it SIGPLAN Notices of the ACM}, June 1981.
+
+\bibitem{ACP}
+D.~E. Knuth.
+\newblock {\it Fundamental Algorithms}.
+\newblock Volume~1 of {\it The Art of Computer Programming}, Addison-Wesley,
+ Reading, Massachusetts, 1973.
+
+\bibitem{TeXbook}
+D.~E. Knuth.
+\newblock {\it The {\TeX{}}book}.
+\newblock Volume~A of {\it Computers \& Typesetting}, Addison-Wesley, Reading,
+ Massachusetts, 1986.
+
+\bibitem{LaTeX}
+L. Lamport.
+\newblock {\it {\LaTeX}, User's Guide \& Reference Manual}.
+\newblock Addison-Wesley, Reading, Massachusetts, 1986.
+
+\bibitem{Brother}
+Th. Ottmann, H.-W. Six.
+\newblock Eine neue Klasse ausgeglichener Bin\"arb\"aume.
+\newblock {\it Angewandte Informatik}, 9, 1976.
+
+\bibitem{Grif}
+V. Quint, I. Vatton, and H. Bedor.
+\newblock Grif: an interactive environment for {\TeX{}}.
+\newblock In J. D\'esarm\'enien, editor, {\it {\TeX{}} for Scientific
+ Documentation}, Strasbourg, France, June 1986.
+\newblock LNCS~236.
+
+\bibitem{Scribe}
+B.~K. Reid.
+\newblock {\it Scribe: A Document Specification Language and its Compiler}.
+\newblock PhD thesis, Carnegie Mellon University, 1980.
+
+\bibitem{TidierTrees}
+E.~M. Reingold and J.~S. Tilford.
+\newblock Tidier drawings of tree.
+\newblock {\it IEEE Transactions on Software Engineering}, 7(2), March 1981.
+
+\bibitem{Complexity}
+K.~J. Supowit and E.~M. Reingold.
+\newblock The complexity of drawing trees nicely.
+\newblock {\it Acta Informatica}, 18, 1983.
+
+\bibitem{TidyTrees}
+Ch. Wetherell and A. Shannon.
+\newblock Tidy drawings of trees.
+\newblock {\it IEEE Transactions on Software Engineering}, 5(5), September
+ 1979.
+
+\end{thebibliography}
+
diff --git a/macros/plain/contrib/treetex/tree_doc.tex b/macros/plain/contrib/treetex/tree_doc.tex
new file mode 100644
index 0000000000..8746ff12f5
--- /dev/null
+++ b/macros/plain/contrib/treetex/tree_doc.tex
@@ -0,0 +1,1331 @@
+% This is tree_doc.tex, the documentation for the treetex macro package
+% as it will appear in the conference proceedings of the third European
+% TeX meeting in Exeter, England, 1988.
+
+\documentstyle[12pt,DIN-A4]{article}
+
+\advance\voffset by -2cm
+
+\clubpenalty=10000
+\widowpenalty=10000
+\def\addcontentsline#1#2#3{\relax}% Some captions are too long for some
+ % TeX installations (buffer size too small)
+
+
+\newenvironment{lemma}{\begingroup\samepage\begin{lemmma}\ }{\end{lemmma}%
+ \endgroup}
+\newtheorem{lemmma}{Lemma}[section]
+\newenvironment{proof}{\begin{prooof}\rm\ \nopagebreak}{\end{prooof}}
+\newcommand{\proofend}{\qquad\ifmmode\Box\else$\Box$\fi}
+\newtheorem{prooof}{Proof}
+\renewcommand{\theprooof}{} % makes shure that prooof doesn't get numbers
+\newenvironment{Figure}{\begin{figure}\vspace{1\baselineskip}}%
+ {\vspace{1\baselineskip}\end{figure}}
+\newlength{\figspace} % space between figures in a single
+\setlength{\figspace}{30pt} % Figure environment
+
+\newcommand{\var}[1]{{\it #1\/}} % use it for names of variables
+\newcommand{\emph}[1]{{\em #1\/}} % use it for emphazided text
+ % (This notion sticks to the
+ % applicative style of markup.)
+\renewcommand{\O}{{\rm O}} % O-notation, also for math mode
+\newcommand{\T}{{\cal T}} % the set T in math mode
+\newcommand{\TreeTeX}{Tree\TeX}
+\newcommand{\fig}[1]{Figure~\ref{#1}}
+\let\p\par
+
+\input TreeTeX
+\Treestyle{\vdist{20pt}\minsep{16pt}}
+\dummyhalfcenterdim@n=2pt
+
+\def\Node(#1,#2){\put(#1,#2){\circle*{4}}}
+\def\Edge(#1,#2,#3,#4,#5){\put(#1,#2){\line(#3,#4){#5}}}
+
+\def\enode{\node{\external\type{dot}}}
+\def\inode{\node{\type{dot}}}
+
+\def\e{\node{\external\type{dot}}}
+\def\i{\node{\type{dot}}}
+\def\il{\node{\type{dot}\leftonly}}
+\def\ir{\node{\type{dot}\rightonly}}
+
+\newcommand{\stack}[3]{%
+ \vtop{\settowidth{\hsize}{#1}%
+ \setlength{\leftskip}{0pt plus 1fill}%
+ \setlength{\baselineskip}{#2}#3}}
+
+\let\multic\multicolumn
+
+\newlength{\hd} % hidden digit
+\setbox0\hbox{1}
+\settowidth{\hd}{\usebox{0}}
+\newcommand{\ds}{\hspace{\hd}} % digit space
+
+\newcommand{\ccol}[1]{\multicolumn{1}{c}{#1}}
+
+\hyphenation{post-or-der sym-bol Karls-ruhe bool-ean}
+
+\begin{document}
+
+\bibliographystyle{plain}
+
+\title{Drawing Trees Nicely with \TeX\thanks{This work was supported by
+ a Natural Sciences and Engineering Research Council of Canada
+ Grant~A-5692 and a Deutsche Forschungsgemeinschaft Grant~Sto167/1-1.
+ It was started during the first author's stay with
+ the Data Structuring Group in Waterloo.}}
+\author{Anne Br\"uggemann-Klein\thanks{Institut f\"ur Informatik,
+ Universit\"at Freiburg, Rheinstr.~10--12, 7800~Freiburg,
+ West~Germany}\ \and Derick Wood\thanks{Data
+ Structuring Group, Department of Computer Science, University of
+ Waterloo, Waterloo, Ontario, N2L~3G1, Canada}}
+\maketitle
+
+\begin{abstract}
+
+Various algorithms have been proposed for the difficult problem of
+producing aesthetically pleasing drawings of trees, see~%
+\cite{TidierTrees,TidyTrees} but
+implementations only exist as ``special purpose software'',
+designed for special environments. Therefore,
+many users resort to the
+drawing facilities available on most personal computers, but the
+figures obtained in this way still look ``hand-drawn''; their quality is
+inferior to the quality of the surrounding text that can be realized by
+today's high quality text processing systems.
+
+In this paper we present an entirely new solution that
+integrates a tree drawing algorithm into one of the best text
+processing systems available. More precisely, we present a \TeX{} macro package
+\TreeTeX{} that produces a drawing of a tree from a purely logical
+description. Our approach has three advantages. First, labels
+for nodes can be handled in a reasonable way. On the one hand, the tree
+drawing algorithm can compute the widths of the labels and take
+them into account for the positioning of the nodes; on the other hand,
+all the textual parts of the document can be treated uniformly. Second,
+\TreeTeX{} can be trivially ported to any site running \TeX{}. Finally,
+modularity in the description of a tree and \TeX{}'s macro capabilities
+allow for libraries of subtrees and tree classes.
+
+In addition, we have implemented an option that produces
+drawings which make the
+\emph{structure} of the trees more obvious to the human eye,
+even though they may not be as aesthetically pleasing.
+
+\end{abstract}
+
+\section{Aesthetical criteria for drawing trees}
+
+One of the most commonly used data structures in computer science is the tree.
+As many people are using trees in their research or just as illustration
+tools, they are usually struggling with the problem of
+\emph{drawing} trees. We are concerned primarily with ordered
+trees in the sense of~\cite{ACP}, especially binary and unary-binary
+trees. A binary tree is a finite set of nodes which either
+is empty, or consists of a root and two disjoint binary trees called
+the left and right subtrees of the root. A unary-binary tree is
+a finite set of nodes which either is empty, or consists of a root and
+two disjoint unary-binary trees, or consists of a root and one
+nonempty unary-binary tree. An extended binary tree is a binary tree
+in which each node has either two nonempty subtrees or two
+empty subtrees.
+
+For these trees there
+are some basic agreements on how they should be drawn, reflecting
+the top-down and left-right ordering of nodes in a tree;
+see \cite{TidierTrees} and \cite{TidyTrees}.
+
+\begin{enumerate}
+\item[1.] Trees impose a distance on the nodes; no node
+ should be closer to the root than any of its
+ ancestors.
+\item[2.] Nodes of a tree at the same height should lie on a straight
+ line, and the straight lines defining the levels should be
+ parallel.
+\item[3.] The relative order of nodes on any level should be the same
+ as in the level order traversal of the tree.
+\end{enumerate}
+
+These axioms guarantee that trees are drawn as planar graphs: edges do
+not intersect except at nodes. Two further axioms improve the aesthetical
+appearance of trees:
+
+\begin{enumerate}
+\item[4.] In a unary-binary tree, each left child should be positioned
+ to the left of its parent, each
+ right child to the right of its parent, and each unary child
+ should be positioned below its parent.
+\item[5.] A parent should be centered over its children.
+\end{enumerate}
+
+An additional axiom deals with the problem of tree drawings becoming too wide
+and therefore exceeding the physical limit of the output medium:
+
+\begin{enumerate}
+\item[6.] Tree drawings should occupy as little width as possible without
+ violating the other axioms.
+\end{enumerate}
+
+In \cite{TidyTrees}, Wetherell and Shannon introduce two algorithms for
+tree drawings, the first of which fulfills axioms~1--5, and the second
+1--6. However, as Reingold and Tilford in \cite{TidierTrees}
+point out, there is a lack of symmetry in the algorithms of
+Wetherell and Shannon which may lead to unpleasant results.
+Therefore, Reingold and Tilford introduce a new structured
+axiom:
+
+\begin{enumerate}
+\item[7.] A subtree of a given tree should be
+ drawn the same way regardless of where it occurs in the given tree.
+\end{enumerate}
+
+Axiom~7 allows the same tree to be drawn differently when it occurs as
+a subtree in different trees.
+Reingold and Tilford give an algorithm which fulfills axioms~1--5
+and~7. Although
+this algorithm doesn't fulfill axiom~6,
+the aesthetical improvements are well worth the additional space.
+\fig{algorithms} illustrates the benefits of axiom~7, and \fig{narrowtrees}
+shows that the algorithm of Reingold and Tilford violates axiom~6.
+
+\begin{Figure}
+\centering
+\leavevmode\noindent
+\begin{Tree}
+\enode
+\enode\enode\inode\enode\enode\inode\inode\inode
+\node{\external\type{dot}\rght{\unskip\hskip2\mins@p\hskip2\dotw@dth}}
+\enode\enode\inode\enode\enode\inode\inode\inode
+\inode
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\begin{Tree}
+\enode
+\enode\enode\inode\enode\enode\inode\inode\inode
+\enode
+\enode\enode\inode\enode\enode\inode\inode\inode
+\inode
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\
+\caption{The left tree is drawn by the algorithm of Wetherell and Shannon,
+and the tidier right one is drawn by the algorithm of Reingold and Tilford.}
+\label{algorithms}
+
+\vspace{\figspace}
+\centering
+\leavevmode\noindent
+\begin{Tree}
+\enode\enode\enode\enode\enode\enode\enode\enode\enode
+\enode\inode\inode\inode
+\enode\inode\inode\inode
+\enode\inode\inode\inode
+\enode\inode\inode\inode
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\begin{Tree}
+\enode\enode\enode\enode\enode\enode\enode\enode
+\node{\external\type{dot}\rght{\unskip\hskip\mins@p\hskip\dotw@dth}}
+\enode\inode\inode\node{\type{dot}\rght{\unskip\hskip\mins@p\hskip\dotw@dth}}
+\enode\inode\inode\node{\type{dot}\rght{\unskip\hskip\mins@p\hskip\dotw@dth}}
+\enode\inode\inode\node{\type{dot}\rght{\unskip\hskip\mins@p\hskip\dotw@dth}}
+\enode\inode\inode\inode
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\
+\caption{The left tree is drawn by the algorithm of Reingold and Tildford, but
+the right tree shows that narrower drawings fulfilling all aesthetic axioms
+are possible.}
+\label{narrowtrees}
+\end{Figure}
+
+
+\section{The algorithm of Reingold and Tilford}
+
+The algorithm of Reingold and Tilford (hereafter called ``the RT~algorithm'')
+takes a modular approach to the
+positioning of nodes: The relative positions of the nodes in a subtree
+are calculated independently from the rest of the tree. After the
+relative positions of two subtrees have been calculated, they can be
+joined as siblings in a larger tree by placing them as close
+together as possible and centering the parent node above them.
+Incidentally, the modularity principle is the reason that the
+algorithm fails to fulfill axiom~6; see~\cite{Complexity}.
+Two sibling subtrees are placed as close together as possible,
+during a postorder traversal, as follows. At each node \var{T},
+imagine that its two subtrees have been drawn and cut out of paper along
+their contours. Then, starting with the two subtrees superimposed at their
+roots, move them apart until a minimal agreed upon distance
+between the trees is obtained at each level. This can be done gradually:
+Initially, their roots are separated by some agreed upon minimum
+distance. Then, at the next lower level,
+they are pushed
+apart until the minimum separation is established there.
+This process is continued at successively lower levels until the
+bottom of the shorter subtree is reached. At some levels no movement may be
+necessary; but at no level are the two subtrees moved closer
+together. When the process is complete, the position of the
+subtrees is fixed relative to their parent, which is centered over them.
+Assured that the subtrees will never be placed closer together,
+the postorder traversal is continued.
+
+A nontrivial implementation of
+this algorithm has been obtained by Reingold and Tilford that runs
+in time $\O(N)$, where $N$ is the number of
+nodes of the tree to be drawn.
+Their crucial idea is to keep track of the contour of the subtrees
+by special pointers, called threads, such that whenever
+two subtrees are joined, only the
+top part of the trees down to the lowest level of the
+smaller tree need to be taken into account.
+
+The RT algorithm is given in \cite{TidierTrees}.
+The nodes are positioned on a fixed grid and are
+considered to have zero width. No labelling is provided. The algorithm only
+draws binary trees, but is easily extendable to multiway trees.
+
+\section{Improving human perception of trees}
+
+It is common understanding in book design that aesthetics and readability
+don't necessarily coincide, and---as Lamport (\cite{LaTeX}) puts it---%
+books are meant to be read, not to be hung on walls. Therefore, readability is
+more important than aesthetics.
+
+When it comes to tree drawings, readability means that the structure of
+a tree must be easily recognizable. This criterion is not always met
+by the RT~algorithm. As an example, there are trees whose structure is very
+different, the only common thing being the fact that they have the same number
+of nodes at each level. The RT~algorithm might assign identical positions to
+these nodes making it very hard to perceive the different structures.
+Hence, we have modified the RT~algorithm such that additional white space
+is inserted between subtrees of
+\emph{significant} nodes. Here a binary node
+is called significant if the minimum distance
+between its two subtrees is taken \emph{below} their root level.
+Setting the amount of additional white space to zero retains the original RT~%
+placement. The effect of having nonzero additional white space between
+the subtrees of significant
+nodes is illustrated in \fig{addspace} .
+
+Another feature we have added to the RT~algorithms is the possibility to draw
+an unextended binary tree with the same placement of nodes as its
+associated extended version. We define the \emph{associated extended version}
+of a binary tree to be the binary tree obtained by replacing each empty subtree
+having a nonempty sibling with a subtree consisting of one node. This feature
+also makes the structure of a tree more prominent; see \fig{extended}.
+
+\begin{Figure}
+\centering
+\leavevmode\noindent
+\begin{Tree}
+\e\il\e\e\i\i\il % the left subtree
+\e\ir\il % the right subtree
+\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\begin{Tree}
+\e\il\il\il % the left subtree
+\e\e\i\e\i\il % the right subtree
+\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\adds@p10pt
+\begin{Tree}
+\e\il\e\e\i\node{\type{dot}\lft{$\longrightarrow$}}\il % the left subtree
+\e\ir\il % the right subtree
+\node{\type{dot}\lft{$\longrightarrow$}}
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\begin{Tree}
+\e\il\il\il % the left subtree
+\e\e\i\e\i\il % the right subtree
+\node{\type{dot}\lft{$\longrightarrow$}}
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\
+\adds@p0pt
+
+\caption{The first two trees get the same placement of their nodes
+by the RT~algorithm, although the structure of the two trees is very different.
+The alternative drawings highlight the structure of the trees by adding
+additional white space between the subtrees of
+($\longrightarrow$) significant nodes.}
+\label{addspace}
+\end{Figure}
+
+\begin{Figure}
+\centering
+\leavevmode\noindent
+\begin{Tree}
+\e\e\i\il\e\e\i\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\begin{Tree}
+\e\e\i\e\i\e\ir\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\extended
+\begin{Tree}
+\e\e\i\il\e\e\i\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\qquad
+\begin{Tree}
+\e\e\i\e\i\e\ir\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\\
+\noextended
+\begin{Tree}
+\e\e\i\e\i\e\e\i\i
+\end{Tree}
+\hskip\leftdist\box\TeXTree\hskip\rightdist\
+\caption{In the first two drawings, the RT~algorithm assigns the same placement
+to the nodes of two trees although their structure is very different. The modified
+RT~algorithms highlights the structure of the trees by optionally
+drawing them like their extended
+counterpart, which is given in the second row.}
+\label{extended}
+\end{Figure}
+
+
+\section{Trees in a document preparation environment}
+
+Drawings of trees usually don't come alone, but are included in some text
+which is itself typeset by a text processing system. Therefore, a typical
+scenario is a pipe of three stages. First comes the tree drawing
+program which calculates the positioning of the nodes of the tree to
+be drawn and outputs a description of the tree drawing in
+some graphics language; next comes a graphics system which transforms this
+description into an intermediate language which can be interpreted by the output
+device; and finally comes the
+text processing system which integrates the output of the
+graphics system into the text.
+
+This scenario loses its linear structure once nodes have to be labelled, since
+the labelling influences the positioning of the nodes. Labels usually occur
+inside, to the left of, to the right of, or beneath nodes (the latter only for
+external nodes), and their extensions certainly should be taken into account
+by the tree drawing algorithm. But the labels have to be typeset first
+in order to determine their extensions,
+preferably by the typesetting program that
+is used for the regular text, because this method makes for the uniformity in the textual
+parts of the document and provides the author with the full power of the
+text processing system for composing the labels. Hence, a more complex
+communication scheme than a simple pipe is required.
+
+Although a system of two processes running simultaneously might be the most
+elegant solution, we wanted a system that is easily portable to
+a large range of hardware at our sites
+including personal computers with single process
+operating systems.
+Therefore, we thought of using a text processing system
+having programming facilities powerful enough to program a tree drawing algorithm
+and graphics facilities powerful enough
+to draw a tree. One text processing system
+rendering outstanding typographic quality and good enough programming
+facilities is \TeX, developed by Knuth at Stanford University;
+see~\cite{TeXbook}.
+The \TeX{} system includes the following programming facilities:
+
+\begin{enumerate}
+\item[1.] datatypes:\\
+ integers~(256), dimensions\footnote{The term \emph{dimension} is used
+ in \TeX\ to describe physical measurements of typographical objects,
+ like the length of a word.}~(512), boxes~(256), tokenlists~(256), boolean
+ variables~(unrestricted)
+\item[2.] elementary statements:\\
+ $a:=\rm const$, $a:=b$ (all types);\\
+ $a:=a+b$, $a:=a*b$, $a:=a/b$ (integers and dimensions);\\
+ horizontal and vertical nesting of boxes
+\item[3.] control constructs:\\
+ if-then-else statements testing relations between integers,
+ dimensions, boxes, or boolean variables
+\item[4.] modularization constructs:\\
+ macros with up to 9~parameters (can be viewed as procedures without
+ the concept of local variables).
+\end{enumerate}
+
+Although the programming
+facilities of \TeX{} hardly exceed the abilities of a Turing machine,
+they are sufficient to
+handle relatively small programs. How about the graphics facilities?
+Although \TeX{} has no built-in graphics facilities, it
+allows the placement of characters in arbitrary positions on
+the page. Therefore, complex pictures can be synthesized from elementary
+picture elements treated as characters. Lamport has included such
+a picture drawing environment in his macro package \LaTeX, using
+quarter circles of different sizes and line segments (with and without
+arrow heads) of different slopes as basic elements; see~\cite{LaTeX}.
+These elements are sufficient for drawing trees.
+
+This survey of \TeX's capabilities implies that \TeX{} may be a suitable
+text processing system to implement a tree drawing algorithm directly.
+We are basing our algorithm on the RT~algorithm, because this algorithm
+gives the aesthetically most pleasing results. In the first version
+presented here, we
+restrict ourselves to unary-binary trees, although our method is
+applicable to arbitrary multiway trees. But in order to take advantage
+of the text processing environment, we expand the algorithm to allow
+labelled nodes.
+
+In contrast to previous tree drawing programs, we feel no necessity to
+position the nodes of a tree on a fixed grid. While this may be
+reasonable for a plotter with a coarse resolution, it is certainly not
+necessary for \TeX, a system that is capable of handling
+arbitrary dimensions
+and produces device \emph{independent} output.
+
+
+\section{A representation method for \TeX{}trees}
+
+The first problem to be solved in implementing our tree drawing algorithm
+is how to choose a good internal representation
+for trees. A straightforward adaptation
+of the implementation by Reingold and Tilford requires, for each node,
+at least the following fields:
+
+\begin{enumerate}
+\item two pointers to the children of the node
+\item two dimensions for the offset to the left and the right child (these
+ may be different once there are labels of different widths to the
+ left and right of the nodes)
+\item two dimensions for the $x$- and $y$-coordinates of the final
+ position of the nodes
+\item three or four labels
+\item one token to store the geometric shape (circle, square, framed text etc.)
+ of the node.
+\end{enumerate}
+
+Because these data are used very frequently in calculations, they should be
+stored in registers (that's what variables are called in \TeX),
+rather than being recomputed, in order to obtain
+reasonably fast performance. This gives a total of $10N$ registers for
+a tree with $N$ nodes, which would exceed
+\TeX's limited supply of registers. Therefore, we present a
+modified algorithm hand-tailored to the abilities of \TeX{}.
+We start with the following observation.
+Suppose a unary-binary tree is constructed bottom-up, in a postorder
+traversal. This is done by iterating the following three steps in
+an order determined by the tree to be constructed.
+
+\begin{enumerate}
+\item Create a new subtree consisting of one external node.
+\item Create a new subtree by appending the two subtrees created last
+ to a new binary node; see \fig{Construct}.
+\item Create a new subtree by appending the subtree created last as a left,
+ right, or unary subtree of a new node; see \fig{Construct}.
+\end{enumerate}
+
+(A pointer to) each subtree that has been
+created in steps 1--3 is pushed onto a stack, and
+steps 2 and 3 remove two trees or one, respectively,
+from the stack before the push
+operation is carried out. Finally, the tree to be constructed will
+be the remaining tree on the
+stack.
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\treesymbol{\lvls{2}}%
+\hspace{-\l@stlmoff}\usebox{\l@sttreebox}\hspace{\l@strmoff}
+$+$
+\treesymbol{\lvls{2}}%
+\hspace{-\l@stlmoff}\usebox{\l@sttreebox}\hspace{\l@strmoff}\quad
+$\Longrightarrow$\quad
+\treesymbol{\lvls{2}}%
+\treesymbol{\lvls{2}}%
+\node{\type{dot}}%
+\hspace{-\l@stlmoff}\raisebox{\vd@st}{\usebox\l@sttreebox}\hspace{\l@strmoff}%
+\end{Tree}
+
+\vskip\baselineskip
+
+\begin{Tree}
+\treesymbol{\lvls{2}}%
+\hspace{-\l@stlmoff}\usebox{\l@sttreebox}\hspace{\l@strmoff}\quad
+$\Longrightarrow$\quad
+\treesymbol{\lvls{2}}%
+\node{\leftonly\type{dot}}%
+\hspace{-\l@stlmoff}\raisebox{\vd@st}{\usebox\l@sttreebox}\hspace{\l@strmoff}%
+\quad or\quad
+\treesymbol{\lvls{2}}%
+\node{\unary\type{dot}}%
+\hspace{-\l@stlmoff}\raisebox{\vd@st}{\usebox\l@sttreebox}\hspace{\l@strmoff}%
+\quad or\quad
+\treesymbol{\lvls{2}}%
+\node{\rightonly\type{dot}}%
+\hspace{-\l@stlmoff}\raisebox{\vd@st}{\usebox\l@sttreebox}\hspace{\l@strmoff}%
+\end{Tree}
+
+\caption{Construction steps 2 and 3}
+\label{Construct}
+\end{Figure}
+
+This tree traversal is performed twice in the RT~algorithm.
+During the first pass,
+at each execution of step 2 or step 3, the relative positions of the
+subtree(s) and of the new node are computed.
+A closer examination of the RT~algorithm reveals that information about the
+subtree's coordinates is not needed during this pass; the contour information
+alone would be sufficient. Complete information is only needed in the second
+traversal, when the tree is actually drawn. Here a special feature of
+\TeX{} comes in that allows us to save registers.
+Unlike Pascal, \TeX{} provides the capability of
+storing a drawing in a single box register that can be positioned freely in
+later drawings. This means that in our implementation the two passes
+of the original RT~algorithm can be intertwined into a single pass,
+storing for each subtree on the stack its contour and its drawing.
+Although the latter is a complex object, it takes only one of
+\TeX's precious registers.
+
+
+\section{The internal representation}
+
+Given a tree, the corresponding \TeX{}tree is a box containing
+the ``drawing'' of the tree, together with some additional
+information about the contour of the tree.
+The reference point of a \TeX{}tree-box is always in the root of the
+tree. The height, depth, and width of the box of a \TeX{}tree are
+of no importance in this context.
+
+The additional information about the contour of the tree is stored in some
+registers for numbers and dimensions and
+is needed in order to put subtrees together to form a larger tree.
+\var{loff} is an array of dimensions which contains for each
+level of the tree the horizontal offset between the
+left end of the
+leftmost node at the current level and the
+left end of the leftmost node at
+the next level.
+\var{lmoff} holds the horizontal offset between the root
+and the leftmost node of the whole tree. \var{lboff} holds the
+horizontal offset between the root and the leftmost node at
+the bottom level of the tree.
+Finally, \var{ltop} holds the distance between the reference point
+of the tree and the leftmost end of the root.
+The same is true for
+\var{roff}, \var{rmoff}, \var{rboff}, and \var{rtop}; just replace
+``left'' by ``right''. Finally,
+\var{height} holds the height of the tree, and \var{type} holds the
+geometric shape of the root of the tree. \fig{TeXtree} shows an example \TeX{}tree,
+i.e. a tree drawing and the corresponding additional information.
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\e\ir\ir\e
+ \node{\type{dot}\rightonly\rght{\unskip\vrule height.8pt width5pt depth0pt}}%
+ \i % A
+\end{Tree}
+\leavevmode
+\stack{-10pt}{\vd@st}{%
+ -10pt\\10pt\\10pt\\\var{loff}}%
+\hspace{1em}%
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}%
+\hspace{1em}%
+\stack{-10pt}{\vd@st}{%
+ 15pt\\5pt\\-10pt\\\var{roff}}%
+
+\vskip\baselineskip\raggedright
+height:~3, type:~dot, ltop:~2pt, rtop:~2pt, lmoff:~-10pt, rmoff:~20pt, lboff:~10pt,
+rboff:~10pt.
+
+\caption{A \TeX{}tree consists of the drawing of the tree and the
+additional information. The width of the dots is 4pt, the minimal separation between
+adjacent nodes is 16pt, making for a distance of 20pt center to center.
+The length of the small rule labelling one of the nodes is 5pt. The column left (right)
+of the tree drawing is the array \var{loff} (\var{roff}),
+describing the left (right) contour of the tree. At each level,
+the dimension given is the horizontal
+offset between the border at the current and at the next level. The offset between
+the left border of the root node and the leftmost node at level~1 is -10pt,
+the offset between the right border of the root node and the rightmost node at
+level~1 is 15pt, etc.}
+\label{TeXtree}
+\end{Figure}
+
+Given two \TeX{}trees \var{A} and \var{B},
+how can a new \TeX{}tree \var{C} be built that
+consists of a new root and has \var{A} and \var{B} as subtrees?
+An example is given in \fig{AddInfo}.
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\e\ir\ir\e
+ \node{\type{dot}\rightonly\rght{\unskip\vrule height.8pt width5pt depth0pt}}%
+ \i % A
+\end{Tree}
+\leavevmode
+A: \stack{-10pt}{\vd@st}{%
+ -10pt\\10pt\\10pt\\\ \\\var{loff}(\var{A})}%
+\hspace{1em}%
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}%
+\hspace{1em}%
+\stack{-10pt}{\vd@st}{%
+ 15pt\\5pt\\-10pt\\\ \\\var{roff}(\var{A})}%
+\qquad
+\begin{Tree}
+\e\il\e\i\il\il\ir % B
+\end{Tree}
+\leavevmode
+B: \stack{-10pt}{\vd@st}{%
+ 10pt\\-10pt\\-10pt\\-10pt\\-10pt\\\ \\\var{loff}(\var{B})}%
+\hspace{1em}%
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}%
+\hspace{1em}%
+\stack{-10pt}{\vd@st}{%
+ 10pt\\-10pt\\-10pt\\10pt\\-30pt\\\ \\\var{roff}(\var{B})}%
+\\[\figspace]
+\begin{Tree}
+\e\ir\ir\e
+ \node{\type{dot}\rightonly\rght{\unskip\vrule height.8pt width5pt depth0pt}}%
+ \i % A
+\e\il\e\i\il\il\ir % B
+\i % C
+\end{Tree}
+\leavevmode
+C: \stack{-10pt}{\vd@st}{%
+ -20\\-10pt\\%
+ \makebox[0pt][r]{\var{loff}(\var{A})$\smash{\left\{\vrule height\vd@st
+ depth\vd@st width0pt\right.}$ }%
+ 10pt\\10pt\\%
+ \makebox[0pt][r]{$\longrightarrow$ }%
+ 10pt\\%
+ \makebox[0pt][r]{\raisebox{-.5\vd@st}{\var{loff}(\var{B})$\smash
+ {\left\{\vrule height.5\vd@st
+ depth.5\vd@st width0pt\right.}$ }}%
+ \makebox[0pt][r]{-}10pt\\\ \\\var{loff}(\var{C})}%
+\hspace{1em}%
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}%
+\hspace{1em}%
+\stack{-10pt}{\vd@st}{%
+ 20pt\\10pt\\-10pt\\-10pt%
+ \makebox[0pt][l]{\raisebox{-.5\vd@st}{
+ $\smash{\left\}\vrule height2.5\vd@st
+ depth2.5\vd@st width0pt\right.}$\var{roff}(\var{B})}}%
+ \\10pt\\-30pt\\\ \\\var{roff}(\var{C})}%
+
+\vspace{\figspace}
+\centering
+\begin{tabular}{|l|r|r|r|}
+\hline
+&\multic{1}{c|}{\var{A}}&\multic{1}{c|}{\var{B}}&\multic{1}{c|}{\var{C}}\\
+\hline
+height&\multic{1}{c|}{3}& \multic{1}{c|}{5}& \multic{1}{c|}{6}\\
+type& \multic{1}{c|}{dot}&\multic{1}{c|}{dot}&\multic{1}{c|}{dot}\\
+ltop& 2pt& 2pt& 2pt\\
+rtop& 2pt& 2pt& 2pt\\
+lmoff& -10pt& -30pt& -30pt\\
+rmoff& 20pt& 10pt& 30pt\\
+lboff& 10pt& -30pt& -10pt\\
+rboff& 10pt& -30pt& -10pt\\
+\hline
+\end{tabular}\qquad
+\begin{tabular}{|c|r|r|}
+\hline
+\multic{1}{|c|}{level}&\multic{1}{c|}{\var{totsep}}&
+ \multic{1}{c|}{\var{currsep}}\\
+\hline
+0&20pt&0/16pt\\
+1&25pt&11/16\\
+2&40pt&1/16pt\\
+3&40pt&16pt\\
+\hline
+\end{tabular}
+\caption{The \TeX{}trees \var{A} and~\var{B} are combined to form the
+larger \TeX{}\-tree~\var{C}. The small table gives the
+history of computation for \var{totsep} and \var{currsep}.}
+\label{AddInfo}
+\end{Figure}
+
+
+First we determine which tree is higher; this is
+\var{B} in the example.
+Then we have to compute the minimal distance
+between the roots of \var{A} and \var{B}, such that at all levels
+of the trees there is free space of at least \var{minsep} between
+the trees when they are drawn side by side.
+For this purpose we keep track of two values, \var{totsep} and
+\var{currsep}. The variables \var{totsep} and \var{currsep}
+hold the total distance between the roots and the distance
+between the rightmost node of \var{A} and the leftmost node
+of \var{B} at the current level. In order to calculate
+\var{totsep} and \var{currsep}, we start at level 0 and
+visit each level of the trees until we reach the bottom level
+of the smaller tree; this is \var{A} in our example.
+
+At level 0, the distance between the roots of \var{A} and \var{B}
+should be at least \var{minsep}. Therefore, we set
+$\var{totsep}:=\var{minsep} + \var{rtop}(\var{A})
++ \var{ltop}(\var{B})$ and $\var{currsep}:=\var{minsep}$.
+Using $\var{roff}(\var{A})$ and $\var{loff}(\var{B})$, we can
+proceed to calculate \var{currsep} for the next level.
+If $\var{currsep} < \var{minsep}$, we have to increase \var{totsep} by
+the difference and update \var{currsep}. This process is
+iterated until we reach the lowest level of \var{A}.
+Then \var{totsep} holds the final distance between the
+nodes of \var{A} and \var{B}, as calculated by the RT~algorithm.
+If the root of \var{C} is a significant node, then the additional space ,
+which is 0pt by default, is added to \var{totsep}.
+However, the approach of synthesizing
+drawings from simple graphics characters allows only a finite
+number of orientations for the tree edges; therefore, \var{totsep}
+must be increased slightly to fit the next orientation
+available.
+
+Now we are ready to construct the box of \TeX{}tree~\var{C}.
+Simply put \var{A} and~\var{B} side by side, with the reference
+points \var{totsep}~units apart, insert a new node
+above them, and connect the parent and children by edges.
+
+Next, we update the additional information
+for \var{C}. This can be done by using the additional information
+for \var{A} and~\var{B}.
+Note that most components of $\var{roff}(\var{C})$ and
+$\var{lroff}(\var{C})$ are the same as in the higher tree, which
+is \var{B} in our case.
+So, if we can avoid moving this information around, we only have
+to access $\var{height}(\var{A}) + \var{const}$ many counters in
+order to update the additional information for \var{C}.
+This implies that we can apply the same argument as
+in~\cite{TidierTrees}, which gives
+us a running time of $\O(N)$ for drawing a tree with N nodes.
+
+Therefore, we must carefully design the storage allocation for
+the additional information of \TeX{}trees in order to fulfill the
+following requirements:
+If a new tree is built from
+two subtrees, the additional information of the new tree should
+share storage with its larger subtree.
+Organizational overhead, that is,
+pointers which keep track of the locations of different parts of additional
+information, must be avoided.
+This means that all the additional information
+for one \TeX{}tree should be stored in a row of consecutive dimension registers
+such that only one pointer granting access to the first element
+in this row is needed.
+On the other hand, each parent
+tree is higher and therefore needs more storage than its subtrees.
+So we must ensure that there is always enough space in the row
+for more information.
+
+The obvious way to fulfill these requirements is to use a stack and to
+allow only the topmost \TeX{}trees of this stack to be
+combined into a larger tree at any time.
+This leads to the following register allocation: A subsequent number of
+box registers contains the treeboxes of the subtrees in the stack. A
+subsequent number of token registers contains the type information for the
+nodes of the subtrees in the stack. For each subtree in the stack,
+a subsequent number of dimension registers contains the contour
+information of the subtree. The ordering of these groups of dimension
+registers reflects the ordering of the subtrees in the
+stack. Finally, a subsequent number of counter registers contains
+the height and the address of the first dimension register for
+each subtree in the stack. Four address counters store the addresses
+of the last treebox, type information, height, and address of contour
+information. A sketch of the register organization for a stack of \TeX{}trees
+is provided in \fig{Registers}.
+
+\begin{Figure}
+Dimension registers\\
+\var{lmoff}(1) \var{rmoff}(1) \var{lboff}(1) \var{rboff}(1) \var{ltop}(1)
+ \var{rtop}(1)\\
+\var{loff}($h_1$) \var{roff}($h_1$) \dots\ \var{loff}(1) \var{roff}(1)\\
+\dots\\
+\var{lmoff}($n$) \var{rmoff}($n$) \var{lboff}($n$) \var{rboff}($n$)
+ \var{ltop}($n$) \var{rtop}($n$)\\
+\var{loff}($h_n$) \var{roff}($h_n$) \dots\ \var{loff}(1) \var{roff}(1)\\
+\ \\
+Counter registers\\
+\var{lasttreebox} \var{lasttreeheight} \var{lasttreeinfo} \var{lasttreetype}\\
+\var{treeheight}(1) \var{diminfo}(1) \dots\ \var{treeheight}($n$)
+ \var{diminfo}($n$)\\
+\ \\
+Box registers\\
+\var{treebox}(1) \dots\ \var{treebox}($n$)\\
+\ \\
+Token registers\\
+\var{type}(1) \dots\ \var{type}($n$)
+
+\caption{\var{lasttreebox}, \var{lasttreeheight}, \var{lasttreeinfo},
+\var{lasttreetype} contain pointers to \var{treebox}($n$)
+\var{treeheight}($n$), \var{lmoff}($n$), \var{type}($n$),
+\var{diminfo}($i$) contains a pointer to
+\var{lmoff}($i$). Unused dimension registers are
+allowed between the dimension registers of subsequent trees. The counter
+registers \var{lasttreebox},\ldots,\var{diminfo}($n$) serve as a directory
+mechanism to access the \TeX{}trees on the stack.}
+\label{Registers}
+\end{Figure}
+
+
+When a new node is pushed onto the stack, the treebox, type information,
+height, address of contour information, and contour information are
+stored in the next free registers of the appropriate type, and the
+four address counters are updated accordingly.
+
+When a new tree is formed from the topmost subtrees on the stack,
+the treebox, type information, height, and address of contour information
+of the new tree are sorted in the registers formerly used by the bottommost
+subtree that has occured in the construction step, and the four address registers are
+updated accordingly. This means that these informations for the subtrees
+are no longer accessible. The contour information of the new subtree
+is stored in the same registers as the contour information of the larger
+subtree used in the construction, apart from the left and right offset
+of the root to the left and right child, which are stored in the
+following dimension registers. That means that gaps can occur
+between the contour information of subsequent subtrees in the
+stack, namely when the right subtree, which is on a higher position on the
+stack, is higher than the left one. In order to avoid these
+gaps, the user can specify an option \verb.\lefttop. when entering a
+binary node, which makes the topmost tree in the stack the
+left subtree of the node.
+
+This stack concept also has consequences for the design of the user interface
+that is discussed in Section~\ref{Interface}.
+
+\section{Space cost analysis}
+
+Suppose we want to draw a unary-binary tree $T$ of height $h$ having
+$N$ nodes\footnote{The height $h$ and the number of nodes $N$ refer to the
+drawing of the tree. $N$ is the number of circles, squares etc.~actually
+drawn, and $h$ is the number of levels in the drawing minus 1.}.
+According to our internal representation,
+for each subtree in the stack we need
+
+\begin{enumerate}
+\item one box register to store the box of the \TeX{}tree.
+\item one token register to store the type of the root of the subtree.
+\item $2h^\prime+6$ dimension registers to store the additional
+ information, where $h^\prime$ is the height of the
+ subtree.
+\item three counter registers to store the register numbers of the
+ box register, the token register, and the first dimension register above.
+\end{enumerate}
+
+The following lemma relates to $h$ and $N$ the number
+of subtrees of $T$ which are on the
+stack simultaneously and their heights.
+
+\begin{lemma}
+\begin{enumerate}
+\item At any time, there are at most $h+1$ subtrees of $T$ on the
+ stack.
+\item For each set $\T$ of subtrees of $T$ which are on the stack
+ simultaneously we have
+ $$\sum_{T^\prime\in \T}({\rm ht}(T^\prime)+1)
+ \le\min(N,{(h+1)(h+2)\over2}).$$
+\end{enumerate}
+\end{lemma}
+
+\begin{proof}
+\begin{enumerate}
+\item By induction on $h$.\label{stackdepth}
+\item The trees in $\T$ are pairwise disjoint, and each tree of
+ height $h^\prime$ has at least $h^\prime+1$ nodes. This implies
+ $$\sum_{T^\prime\in \T}({\rm ht}(T^\prime)+1)
+ \le N.$$
+ The second part is shown by induction on $h$.
+ The basis $h=0$ is clear.
+ Assume the assumption holds for all trees of height less than
+ $h$. If $\T$
+ contains only subtrees of either the left or the right subtree
+ of $T$, we have
+ $$\sum_{T^\prime\in \T}({\rm ht}(T^\prime)+1)\le
+ {h(h+1)\over2}\le{(h+1)(h+2)\over2}.$$
+ Otherwise, $\T$ contains the left or the right subtree $T_s$ of
+ $T$. Then all elements of $\T-\{T_s\}$ belong to the other
+ subtree. This implies
+ \begin{eqnarray*}
+ \sum_{T^\prime\in \T}({\rm ht}(T^\prime)+1)&\le&
+ {\rm ht}(T_s)+1
+ +\sum_{T^\prime\in \T-\{T_s\}}({\rm ht}(T^\prime)+1)\\
+ &\le& h+{h(h+1)\over2}\le{(h+1)(h+2)\over2}.\proofend
+ \end{eqnarray*}
+\end{enumerate}
+\end{proof}
+
+Therefore, our implementation uses at most $9h+2\min(N,(h+1)(h+2)/2)$
+registers. In order to compare this with the
+$10N$ registers used in the straightforward implementation,
+an estimation of the average height of a tree with $N$ nodes is
+needed. Several results, depending on the type of trees and of the
+randomization model, are cited in \fig{Stat}, which
+compares the number of registers used in a straightforward
+implementation with the average number of registers used in our
+implementation. This table shows clearly the advantage of our
+implementation.
+
+\begin{Figure}
+\centering
+\begin{tabular}{|c|c|c|c|c|}
+\hline
+&registers&\multicolumn{3}{c|}{average registers}\\
+\cline{3-5}
+nodes&(straight-&extended&unary-binary&binary\\
+&forward)&binary trees&trees&
+ search trees\\
+&&($\sqrt{\pi n}$) \cite{AverageHeight}&
+ ($\sqrt{3\pi n}$) ~\cite{BinaryTrees}&
+ ($4.311\log n$) \cite{BinarySearchTrees}\\
+\hline
+\ds8& \ds80& \ds61.12& \ds94.15& \ds51.04\\
+\ds9& \ds90& \ds65.86& 100.89& \ds55.02\\
+ 10& 100& \ds70.44& 107.37& \ds58.80\\
+ 11& 110& \ds74.91& 113.64& \ds62.41\\
+ 12& 120& \ds79.26& 119.71& \ds65.87\\
+ 20& 200& 111.34& 163.56& \ds90.48\\
+ 30& 300& 147.37& 211.33& 117.31\\
+ 40& 400& 180.89& 254.75& 132.58\\
+ 50& 500& 212.80& 295.37& 143.54\\
+\hline
+\end{tabular}
+
+\caption{The numbers of registers used by a straightforward implementation
+(second column) and by our modified implementation (third to fifth column)
+of the RT~algorithm are
+given for different types of trees and randomization models.
+The formula in parentheses indicates the average height of the respective class
+of trees, as depending on the number of nodes.}
+\label{Stat}
+\end{Figure}
+
+
+\section{The user interface}\label{Interface}
+
+\subsection{General design considerations}
+
+The user interface of \TreeTeX{} has been designed in the spirit of
+the thorough separation of the logical description of document components
+and their layout; see~\cite{DocumentFormatting,GML}. This concept
+ensures both uniformity and flexibility of document layout and frees
+authors from layout problems which have nothing to do with the
+substance of their work. For some powerful implementations and projects
+see \cite{Tables,Karlsruhe,LaTeX,Grif,Scribe}.
+
+In this context, the description of a tree is given in a purely
+logical form, and layout variations are defined by a separate style
+command which is valid for all trees of a document.
+
+A second design principle is to provide defaults for all specifications,
+thereby allowing the user to omit many definitions
+if the defaults match what he or she wants.
+
+The node descriptions of a tree must be entered in postorder.
+This fits the internal representation
+of \TeX{}trees best. Although this is a natural method of describing a
+tree, a user might prefer more flexible description methods.
+However, note that instances of well defined tree classes can be described
+easily by \TeX{} macros. In section~\ref{ExampleClasses}. we give examples of macros
+for complete binary trees and Fibonacci trees.
+
+\TreeTeX{} uses the picture making macros of \LaTeX. If \TreeTeX{} is used with
+any other macro package or format, the picture macros of
+\LaTeX{} are included automatically.
+
+\subsection{The description of a tree}
+
+The description of a tree is started by the command \verb.\beginTree.
+and closed by \verb.\endTree. (or \verb.\begin{Tree}. and
+\verb.\end{Tree}. in \LaTeX). The description can be
+started in any mode; it defines a box and two dimensions. The
+box is stored in the box register \verb.\TeXTree. and contains the
+drawing of the tree. The box has zero height and width, and its depth
+is the height of the drawing. The reference point is in the
+center of the node of the tree. The dimensions are stored in the
+registers \verb.\leftdist. and \verb.\rightdist. and describe
+the distance between the reference point and the left and
+right margin of the drawing. These data can be used to position the
+drawing of the tree.
+
+Note that the \TreeTeX{} macros don't contribute anything to the current
+page but only store their results in the registers
+\verb.\TeXTree., \verb.\leftdist., and \verb.\rightdist.. It is the
+user's job to put the drawing onto the page, using the
+commands \verb.\copy. or \verb.\box. (or \verb.\usebox. in \LaTeX).
+
+Each matching pair of \verb.\beginTree. and \verb.\endTree. must
+contain the description for only \emph{one} tree.
+Descriptions of trees cannot be nested and
+new registers cannot be allocated inside
+a matching pair of \verb.\beginTree. and \verb.\endTree..
+
+As already stated, each tree description defines the nodes of the tree in
+postorder, that is, a tree description is a particular sequence of node
+descriptions.
+
+A node description, in turn, consists of the macro \verb.\node.,
+followed by a list of node options, included in braces. The list
+of node options may be empty. The node options describe the labels,
+the geometric shape (type), and the outdegree of the node. Default values are
+provided for all options which are not explicitly specified.
+The following node options are available:
+
+\begin{enumerate}
+\item[1.] \verb.\lft{<label>}., \verb.\rght{<label>}.,
+ \verb.\cntr{<label>}.,\\\verb.\bnth{<label>}.:\\
+ These options describe the labels which are put to the left of, to the
+ right of, in the
+ center of, or beneath the node (the latter only makes sense for
+ external nodes). The arguments of these macros are processed in
+ internal horizontal mode (LR-mode in \LaTeX), but can consist of
+ arbitrary nested boxes for more sophisticated labels. For each of
+ these options, the default is an empty label.
+
+\item[2.] \verb.\external., \verb.\unary.,
+ \verb.\leftonly., \verb.\rightonly.:\\
+ These options describe the outdegree
+ of the node.
+ The default is binary (no outdegree option is specified).
+
+\item[3.] \verb.\type{<type>}.:\\
+ This option describes the type or geometric shape of the node.
+ \verb.<type>. can have the values \verb.square.,
+ \verb.dot., \verb.text., or \verb.frame..
+ The default value is \verb.circle. (no type is specified). A node of type
+ \verb.square. has a fixed width, while a node of type \verb.frame. has its
+ width determined by the center label. A node of type \verb.text. has no frame
+ around its center label. The center label can have arbitrary width.
+
+\item[3.] \verb.\leftthick., \verb.\rightthick.:
+ These options change the thickness of the left or right outgoing edge of
+ a binary node. Defaults are thin edges (neither option is specified).
+
+\item[4.] \verb.\lefttop.:\\
+ The node option \verb.\lefttop. in a binary node makes the
+ last entered subtree the left child of the node (the right child is the
+ default). This option helps to cut down on the number of dimension registers
+ used during the construction of a tree. As a rule of thumb,
+ this option is recommended when the left subtree has a smaller
+ height than the right subtree, that is,
+ in this case the right subtree should
+ be entered before the left one and their parent should be assigned the option
+ \verb.\lefttop..
+\end{enumerate}
+
+\subsection{Macros for classes of trees}
+\label{ExampleClasses}
+
+Tree descriptions can be produced by macros. This is especially useful
+for trees which belong to a larger class of trees and which can be specified
+by some simple parameters. A small library of such
+macros is provided in the file \verb!TreeClasses.tex!.
+
+\begin{enumerate}
+\item[1.] \verb.\treesymbol{<node options>}.:\\
+ This macro produces a triangular tree symbol which can be included in
+ a tree description instead of an external node. Labels for these
+ tree symbols are described as for ordinary nodes. In addition, the
+ options \verb.\lvls{<number>}. and \verb.\slnt{<number>}.
+ are provided. \verb.\lvls. defines the number of levels in the
+ tree over which the triangle extends, and \verb.\slnt. gives
+ the slant of the sides of the triangle, ranging from 1~(minimal)
+ to 24~(maximal). On the other hand,
+ \verb.\treesymbol. does not expand to a tree description, because
+ a tree symbol cannot be built from subtrees, and, on the other hand,
+ it is not a node, because it is allowed to extend over several tree
+ levels and therefore has a longer contour than an ordinary node.
+
+\item[2.] \verb.\binary{<bin specification>}.:\\
+ This macro truly expands to a tree description. It produces
+ a complete binary tree, that is, an extended binary tree,
+ where, for a given $h$, all external nodes appear at level $h$
+ or $h-1$, and all external nodes at level $h$ lie left of those at
+ level $h-1$. \verb.<bin specification>. consists of the
+ following options:
+ \verb.\no{<number>}. defines the number of internal nodes,
+ with \verb.<number>. greater than 0, and
+ \verb.\squareleaves. produces leaves of type
+ \verb.square.. Defaults are \verb.\no{1}. and
+ leaves of type \verb.circle..
+
+\item[3.] \verb.fibonacci{<fib specification>}.:\\
+ This macro produces a Fibonacci tree.
+ \verb.<fib specification>. allows for the three options
+ \verb.\hght{<number>}., \verb.\unarynodes.,
+ and \verb.\squareleaves..
+ Normally, a Fibonacci tree of height $h+2$ is a binary tree
+ with Fibonacci trees of height $h$ and $h+1$ as left and
+ right subtrees. The option \verb.\unarynodes. means that the
+ Fibonacci tree is augmented by unary nodes such that each
+ two subtree siblings have the same height. These are examples
+ of what has been called brother-trees in the literature;
+ see~\cite{Brother}. Defaults are
+ \verb.\hght{0}., the unaugmented version of a Fibonacci tree,
+ and external nodes of type \verb.circle..
+\end{enumerate}
+
+\subsection{Style options for trees}
+\sloppy
+The \TreeTeX{} package includes a style command
+\verb.\Treestyle{<style option>}., where \verb.<style option>.
+contains all the parameter settings the user might want
+to change.
+Normally, the command \verb.\Treestyle. appears only once at the beginning
+of the document and the style options are valid for all trees of the
+document.
+
+\fussy
+The changes in the style options are global. A \verb.\Treestyle. command
+changes only the specified style options; non-specified options retain
+the last specified value or the default value, respectively. The following
+style options are available:
+
+\begin{enumerate}
+\item[1.] \verb.\treefonts{<font options>}.:\\
+ \sloppy
+ \verb.\treefonts. is invoked by \verb.\beginTree., and it simply executes
+ whatever is specified in \verb.<font options>.. Defaults are
+ \verb.\treefonts{\tenrm}. (or \verb.\treefonts{\normalsize\rm}. in
+ \LaTeX).
+
+\fussy
+\item[2.] \verb.\nodesize{<size>}.:\\
+ \verb.\nodesize. defines the size of the nodes. \verb.<size>. is a
+ dimension and specifies the diameter of circle nodes. The
+ width of square nodes is adjusted accordingly to be slightly
+ smaller than the diameter of circle nodes in order to
+ balance their appearance. Furthermore,
+ \verb.\nodesize. adjusts the amount of space by which the
+ baseline of the labels is placed beneath the center of the node.
+ The default value of \verb.\nodesize. suits the default of
+ \verb.\treefonts. (taking into account the size option
+ of \LaTeX's document style).
+
+\item[3.] \verb.\vdist{<dimen>}., \verb.\minsep{<dimen>}.,
+ \verb.\addsep{<dimen>}.:\\
+ \sloppy
+ \verb.vdist. specifies the vertical distance between two
+ subsequent levels of the tree. Default is \verb.\vdist{60pt}..
+ \verb.\minsep. specifies the minimal horizontal distance between two
+ adjacent nodes. Default is \verb.\minsep{20pt}..
+ \verb.\addsep. specifies the additional amount of horizontal space
+ by which two subtree siblings are pushed apart farther than
+ calculated by the RT~algorithm,
+ if the level at which they are closest is beneath
+ their root level. Default is \verb.\addsep{0pt}.
+
+\fussy
+\item[4.] \verb.\extended., \verb.\nonextended.:\\
+ With the option \verb.\extended. in effect, the nodes of a binary
+ tree are placed in exactly the same way as they would be in the
+ associated extended version of the tree (the missing nodes are
+ assumed to have no labels). The default is \verb.\nonextended.,
+ that is the usual layout.
+\end{enumerate}
+
+Some examples of tree descriptions
+are given in the next figures.
+A detailed description of the
+\TreeTeX{} macros is given in~\cite{TreeTeX}.
+
+\Treestyle{\vdist{60pt}}
+\dummyhalfcenterdim@n=10pt
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\node{\external\bnth{first}\cntr{1}\lft{Beeton}}
+\node{\external\cntr{3}\rght{Kellermann}}
+\node{\cntr{2}\lft{Carnes}}
+\node{\external\cntr{6}\lft{Plass}}
+\node{\external\bnth{last}\cntr{8}\rght{Tobin}}
+\node{\cntr{7}\rght{Spivak}}
+\node{\leftonly\cntr{5}\rght{Lamport}}
+\node{\cntr{4}\rght{Knuth}}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}\
+
+\begin{verbatim}
+\begin{Tree}
+\node{\external\bnth{first}\cntr{1}\lft{Beeton}}
+\node{\external\cntr{3}\rght{Kellermann}}
+\node{\cntr{2}\lft{Carnes}}
+\node{\external\cntr{6}\lft{Plass}}
+\node{\external\bnth{last}\cntr{8}\rght{Tobin}}
+\node{\cntr{7}\rght{Spivak}}
+\node{\leftonly\cntr{5}\rght{Lamport}}
+\node{\cntr{4}\rght{Knuth}}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}
+\end{verbatim}
+
+\caption{This is an example of a tree that includes labels.}
+\end{Figure}
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\node{\external\type{frame}\bnth{first}\cntr{Beeton}}
+\node{\external\type{frame}\cntr{Kellermann}}
+\node{\type{frame}\cntr{Carnes}}
+\node{\external\type{frame}\cntr{Plass}}
+\node{\external\type{frame}\bnth{last}\cntr{Tobin}}
+\node{\type{frame}\cntr{Spivak}}
+\node{\leftonly\type{frame}\cntr{Lamport}}
+\node{\type{frame}\cntr{Knuth}}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}\
+
+\begin{verbatim}
+\begin{Tree}
+\node{\external\type{frame}\bnth{first}\cntr{Beeton}}
+\node{\external\type{frame}\cntr{Kellermann}}
+\node{\type{frame}\cntr{Carnes}}
+\node{\external\type{frame}\cntr{Plass}}
+\node{\external\type{frame}\bnth{last}\cntr{Tobin}}
+\node{\type{frame}\cntr{Spivak}}
+\node{\leftonly\type{frame}\cntr{Lamport}}
+\node{\type{frame}\cntr{Knuth}}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}
+\end{verbatim}
+\caption{This is an example of a tree with framed center labels.}
+\end{Figure}
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\binary{\no{6}\squareleaves}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}\
+
+\begin{verbatim}
+\begin{Tree}
+\binary{\no{6}\squareleaves}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}
+\end{verbatim}
+\caption{This is an example of a complete binary tree.}
+\end{Figure}
+
+
+\begin{Figure}
+\centering
+\begin{Tree}
+\fibonacci{\hght{4}\unarynodes\squareleaves}
+\end{Tree}
+
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}\
+
+\begin{verbatim}
+\begin{Tree}
+\fibonacci{\hght{4}\unarynodes\squareleaves}
+\end{Tree}
+\hspace{\leftdist}\usebox{\TeXTree}\hspace{\rightdist}
+\end{verbatim}
+
+\caption{This is an example of a Fibonacci tree.}
+\end{Figure}
+
+
+\clearpage
+\bibliography{trees}
+\end{document}
+
+
+
diff --git a/macros/plain/contrib/treetex/treetex.tex b/macros/plain/contrib/treetex/treetex.tex
new file mode 100644
index 0000000000..0a3ae04f26
--- /dev/null
+++ b/macros/plain/contrib/treetex/treetex.tex
@@ -0,0 +1,1187 @@
+% This is file treetex.tex of TreeTeX, Version 2.1 (May 23, 1989).
+% For changes search for "vs. 2.1".
+%
+% TreeTeX is a public domain macro package for drawing
+% trees with TeX. It may be freely distributed, provided
+% that the following files are kept together:
+%
+% classes.tex, l_pic.tex, readme, tree_doc.aux, tree_doc.bbl
+% tree_doc.dvi, tree_doc.tex, treetex.tex
+%
+% Copyright is with Anne Brueggemann-Klein and Derick Wood.
+% Print tree_doc.dvi to get more information about TreeTeX.
+%
+% All remarks, bug reports etc. should be directed to
+%
+% Dr. Anne Brueggemann-Klein
+% Institut fuer Informatik
+% Rheinstr. 10--12
+% 7800 Freiburg, West Germany
+%
+% email: abk@sun1.ruf.uni-freiburg.dbp.de
+%
+
+\catcode`\@=11
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Only for testing, delete later %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\tracingonline=2 %
+% \showboxbreadth=100 % Only for testing
+% \showboxdepth=100 %
+
+\newcount\cnta\newcount\cntb\newcount\cntc
+
+\def\showlasttree{%
+ \g\cnta\count\l@stdiminfo
+ \g\cntb\cnta
+ \g\advance\cntb 5
+ \g\advance\cntb \count\l@sttreeheight
+ \g\advance\cntb \count\l@sttreeheight
+ \ifnum\count\l@sttreeheight=-1\relax
+ \g\advance\cntb by 2
+ \immediate\write16{Tree contour for dummy node:}
+ \else\immediate\write16{Tree contour:}%
+ \fi
+ \for\cntc:=\cnta\to\cntb\do\immediate\write16{\the\dimen\cntc}\od}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% TeX vs. LaTeX %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\lplain{lplain} % Set \LaTeXtrue if TreeTeX is
+\newif\ifLaTeX % used together with LaTeX,
+\ifx\fmtname\lplain\LaTeXtrue % otherwise set \LaTeXfalse
+ \else\LaTeXfalse\fi % (LaTeX defines \fmtname=={lplain}).
+
+\immediate\write16{This is TreeTeX, Version 2.1, for use with \ifLaTeX LaTeX%
+ \else plain TeX\fi.}
+
+\ifLaTeX \let\lineseg\line % latex_picture is part of latex.tex,
+ \else \let\@line\line % so you don't need it if you use
+ \input l_pic % TreeTeX together with LaTeX. LaTeX
+ \let\lineseg\line % has the command \line for geometric
+ \let\line\@line % lines, and plain TeX has the same
+ \fi % command for lines of text. Because
+ % both versions of \line play an
+ % important role in the respective
+ % macro packages, we introduce a new
+ % command \lineseg in TreeTeX for the
+ % geometric lines, and \line will have
+ % the LaTeX-meaning if TreeTeX is used
+ % with LaTeX, and the plain \TeX
+ % meaning otherwise.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% General programming environment %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\catcode`\@=11
+\let\g\global
+\def\gxdef{\global\xdef}
+
+% The command \newcount is redefined such that it can be used
+% inside a definition (i.e. it is no longer an \outer-command).
+
+\def\newcount{\alloc@0\count\countdef\insc@unt}
+
+% Implementing a for-loop (first argument must be a counter).
+% Usage: \for<counter>:=<start value>\to<stop value>\do<operations>\od
+% Semantics: the same as a PASCAL for-loop
+% Precautions: Don't change the counter-value inside the loop!
+% for-loops cannot be nested (nor can the \loop-commands!).
+
+\def\for#1:=#2\to#3\do#4\od{%
+ \def\f@rcount{#1}\def\upp@rlimit{#3}\def\b@dy{#4}\f@rcount=#2\relax\dof@r}
+
+\def\dof@r{\ifnum\f@rcount>\upp@rlimit\relax\let\n@xt\relax
+ \else\b@dy\advance\f@rcount\@ne\let\n@xt\dof@r\fi
+ \n@xt}
+
+% \ex repeats a sequence of commands a predetermined number of times.
+% Usage: \ex<number>\times<operations>\xe
+% Semantics: <operations> is executed as often as <number> says
+% Precautions: \ex commands cannot be nested.
+
+\newcount\@xcount
+\newcount\t@mes
+
+\def\ex#1\times#2\xe{%
+ \@xcount1 \t@mes#1\def\b@dy{#2}\do@x}
+
+\def\do@x{\ifnum\@xcount>\t@mes\let\n@xt\relax
+ \else\b@dy\advance\@xcount\@ne\let\n@xt\do@x\fi
+ \n@xt}
+
+% \rect@ngle produces a rectangle with horizontal edge length #1, vertical
+% edge length #2 and line thickness #3. The reference point is in the center of
+% the rectangle. The width is 0pt.
+
+\newskip\thickn@ss
+\newskip\@nner
+\newskip\@uter
+
+\def\rect@ngle#1#2#3{\hbox to 0pt{%
+ \thickn@ss#3%
+ \g\@nner#2\g\advance\@nner-\thickn@ss
+ \g\divide\@nner\tw@
+ \g\@uter#2\g\advance\@uter\thickn@ss
+ \g\divide\@uter\tw@
+ \hskip 0pt minus .5fil%
+ \vrule height\@uter depth\@nner width\thickn@ss
+ \vrule height\@uter depth-\@nner width#1%
+ \hskip 0pt minus 1fil%
+ \vrule height-\@nner depth\@uter width#1%
+ \vrule height\@nner depth\@uter width\thickn@ss
+ \hskip 0pt minus .5fil%
+ }% \hbox
+ }% \def
+
+% \s@ries takes two arguments. The first one is a name, say XXX, and
+% the second is a series of arguments, devided by two slashs (//).
+% \s@ries assigns this last series of arguments one after another to the
+% control sequences \XXXi, \XXXii, and so on. Furthermore, a control
+% sequence \XXX is defined, which takes a number k as its argument and
+% expands to \XXXk', where k' is the roman numeral equivalent to k.
+
+\def\s@ries#1#2{%
+ \g\t@mpcnta1
+ \gdef\t@mp{#1}%
+ \@ssign#2/\l@st % \l@st is a sentinal element
+ \expandafter\gdef\csname#1\endcsname##1{%
+ \csname#1\romannumeral##1\endcsname}%
+ }
+
+\def\@ssign#1/#2{%
+ \expandafter\gdef\csname\t@mp\romannumeral\t@mpcnta\endcsname{#1}%
+ \g\advance\t@mpcnta\@ne
+ \ifx#2\l@st
+ \g\let\n@xt\relax
+ \else\g\let\n@xt\@ssign
+ \fi
+ \n@xt}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Allocation of internal registers %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newdimen\leftdist
+\newdimen\rightdist
+\newbox\TeXTree
+
+\newcount\sl@pe
+\newcount\l@vels
+\newcount\s@ze
+
+\newbox\circleb@x
+\newbox\squareb@x
+\newbox\dotb@x
+\newbox\triangleb@x
+\newbox\textb@x
+\newbox\frameb@x
+
+\newdimen\circlew@dth
+\newdimen\squarew@dth
+\newdimen\dotw@dth
+\newdimen\trianglew@dth
+\newdimen\textw@dth
+\newdimen\framew@dth
+
+\newdimen\vd@st
+\newdimen\hd@st
+\newdimen\based@st
+\newdimen\dummyhalfcenterdim@n
+
+\newcount\t@mpcnta
+\newcount\t@mpcntb
+\newcount\t@mpcntc
+\newcount\t@mpcntd
+\newdimen\t@mpdima
+\newdimen\t@mpdimb
+\newdimen\t@mpdimc
+\newbox\t@mpboxa
+\newbox\t@mpboxb
+
+\newbox\leftb@x
+\newbox\rightb@x
+\newbox\centerb@x
+\newbox\beneathb@x
+\newtoks\typ@
+\newbox\centerb@@x
+\newdimen\centerdim@n
+\newdimen\halfcenterdim@n
+
+\newdimen\mins@p
+\newdimen\halfmins@p
+\newdimen\tots@p
+\newdimen\halftots@p
+\newdimen\currs@p
+\newdimen\adds@p
+\newcount\l@ftht
+\newcount\r@ghtht
+\newcount\l@ftinfo
+\newcount\r@ghtinfo
+\newbox\l@ftbox
+\newbox\r@ghtbox
+
+\newif\ifr@ghthigher % true iff the right subtree is higher than the left one
+\newif\ifadds@p
+
+\newcount\@larg
+\newcount\@rarg
+
+\newif\ifl@fttop
+\newif\ifl@ftonly
+\newif\ifr@ghtonly
+\newif\if@xt
+\newif\ifl@ftedge
+\newif\ifr@ghtedge
+\newif\ifext@nded
+
+\newdimen\lm@ff
+\newdimen\rm@ff
+\newdimen\lb@ff
+\newdimen\rb@ff
+\newdimen\lt@p
+\newdimen\rt@p
+
+\newcount\l@sttreebox % These four counter allocations have been copied
+\newcount\l@sttreeheight % to this position from the \Tree command
+\newcount\l@stdiminfo % (vs. 2.1). Previously each tree allocated its own
+\newcount\l@sttreetype % counters, using up counters for nothing.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Slope handling for the edges %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The picture environment of LaTeX gives us a choice of 24 positive
+% slopes for lines (i.e. edges of trees in this context),
+% including vertical ones. The slope of a line is
+% given by an x- and an y-value, see L. Lamport, LaTeX, pp. 105f for
+% further details. x/y can have the following values (decreasing amount
+% of slope): 0/1 1/6 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 5/6 1/1 6/5 5/4
+% 4/3 3/2 5/3 2/1 5/2 3/1 4/1 5/1 6/1.
+% The x-values are allocated to \xv@li, \xv@lii,..., \xv@lxxiv, and
+% they can conveniently be accessed by the command \xv@l{<number>}.
+% The same holds for the y-values.
+
+\s@ries{xv@l}{0//1//1//1//1//2//1//3//2//3//4//5//1//6//%
+ 5//4//3//5//2//5//3//4//5//6}
+\s@ries{yv@l}{1//6//5//4//3//5//2//5//3//4//5//6//1//5//%
+ 4//3//2//3//1//2//1//1//1//1}
+
+% \hv@ldef calculates \hv@li, \hv@lii,..., \hv@lxxiv for a given dimen
+% \vd@st according to the following picture:
+%
+% /-|
+% / |
+% / |
+% / |
+% / |\vd@st
+% / |
+% / |
+% / -| |
+% / |\yv@l|
+% / _| _|
+%
+% |___|
+% \xv@l
+% |_________|
+% .5\hv@l
+%
+% \hv@li,..., \hv@lxxiv are initialized in \beginTree, when the
+% actual value for \vd@st is known (\vd@st will depend on the point size of
+% the picture). As before, these values can conveniently be accessed by the
+% command \hv@l{<number>}.
+
+\def\hv@ldef{%
+ \for\t@mpcnta:=1\to24%
+ \do\g\t@mpdima\vd@st\g\multiply\t@mpdima by\xv@l{\t@mpcnta}%
+ \g\divide\t@mpdima by\yv@l{\t@mpcnta}\g\multiply\t@mpdima by 2
+ \expandafter\gxdef\csname hv@l\romannumeral\t@mpcnta\endcsname{%
+ \the\t@mpdima}%
+ \od}
+
+\def\hv@l#1{\csname hv@l\romannumeral#1\endcsname}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Naming trees %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% A TeXtree is stored in TeX's internal registers in the following way:
+% A TeXtree of height h has associated to itself the following internal
+% TeX registers: a box, holding the graphical appearance of the tree,
+% a consecutive number of 6+2h internal dimen registers, holding the
+% additional information about the contour of the tree, a counter
+% holding the height h of the tree, a counter holding the first
+% position of the additional information registers, and a toks register
+% holding the type of the node (circle, square, dot, triangle, text, or frame).
+% The height and position
+% of additional information are stored in consecutive order for
+% consecutive trees. The same is true for the boxes and toks.
+
+% Four key numbers, the register numbers (addresses)
+% for the height, diminfo, box, and type
+% of a tree, enable you to access all information which is stored about the
+% tree. For the last tree on the stack, the four key numbers are stored in the
+% counters \l@sttreeheight, \l@stdiminfo, \l@sttreebox, and \l@sttreetype,
+% the key numbers for the next tree are \l@sttreeheight-2, \l@stdiminfo-2,
+% \l@sttreebox-1, and \l@sttreetype-1, and so on.
+
+% The macro \n@metree gives names to some registers associated with the tree.
+% The tree to be named is specified by its four key numbers. \n@metree takes
+% five arguments, namely the keynumbers for height, info, box and type of the
+% tree, and the name to be given to the tree. If the tree gets the name XXX and
+% the key numbers are h, i, b, and t, the commands on the left side of the
+% following list get the meaning on the right side.
+
+% \XXXht <--- \count h
+% \XXXinfo <--- \count i
+% \XXXbox <--- b
+% \XXXtype <--- \toks t
+% \XXXlmoff <--- \dimen f where f is the address stored
+% in \count i
+% \XXXrmoff <--- \dimen (f+1)
+% \XXXlboff <--- \dimen (f+2)
+% \XXXrboff <--- \dimen (f+3)
+% \XXXltop <--- \dimen (f+4)
+% \XXXrtop <--- \dimen (f+5)
+% \XXXloff <--- \dimen (f+4+2g) where g is the height stored in
+% \count h, i.e. \dimen (f+4+2g)
+% holds loff(1) of the tree, if g>0
+% \XXXroff <--- \dimen (f+5+2g)
+
+% The macro \pr@vioustree sets \l@sttreeheight, \l@stdiminfo,
+% \l@sttreebox and \l@sttreetype to the key numbers of the previous tree
+% and gives the name `l@st' to this tree.
+
+% The macro \@ddname which has two names n1 and n2 as arguments, gives
+% the tree with name n1 the additional name n2.
+
+% The macro \n@mel@st gives the name `l@st' to the tree with the
+% key numbers \l@sttreeheight, \l@stdiminfo, \l@sttreebox and \l@sttreetype.
+
+% The macro \n@xttree sets \l@sttreebox, \l@sttreeheight, \l@stdiminfo,
+% \count\l@stdiminfo, and \l@sttreetype to the next free position.
+
+% The macro \@ppenddummy pushs a dummy onto the stack and names it `l@st'.
+% The dummy has height -1, its box is the empty box, its type is circle,
+% and all dimensions are 0pt.
+
+% \p@s#1#2#3 sets counter #1 to position #2 of tree #3. #1 must be a counter,
+% #3 must be a name for the tree. If the tree has the name XXX, \XXXinfo
+% must be a number holding the first position of the dimen-parameters of
+% the tree and \XXXht must hold the height of the tree.
+% #2 must be one of the following control sequences indicating the
+% desired position: \lmoff, \rmoff, \lboff, \rboff, \ltop, \rtop, \loff, or
+% \roff. \loff and \roff give the left resp. right offset of the *top*
+% level of the tree.
+
+\def\p@s#1#2#3{%
+ \g#1\csname#3info\endcsname
+ \gxdef\t@mp{\csname#3ht\endcsname}%
+ \ifnum\t@mp<0 \gxdef\t@mp{0}\fi
+ #2{#1}%
+ }
+
+\chardef\@lmoff0 \chardef\@rmoff1 \chardef\@ltop4 \chardef\@rtop5
+\chardef\@lboff2 \chardef\@rboff3 \chardef\@loff4 \chardef\@roff5
+
+\def\lmoff#1{\g\advance#1 by\@lmoff}
+\def\rmoff#1{\g\advance#1 by\@rmoff}
+\def\lboff#1{\g\advance#1 by\@lboff}
+\def\rboff#1{\g\advance#1 by\@rboff}
+\def\ltop#1{\g\advance#1 by\@ltop}
+\def\rtop#1{\g\advance#1 by\@rtop}
+\def\loff#1{\g\advance#1 by\@loff\g\advance#1 by\t@mp
+ \g\advance#1 by\t@mp\relax}
+\def\roff#1{\g\advance#1 by\@roff\g\advance#1 by\t@mp
+ \g\advance#1 by\t@mp\relax}
+
+% \n@meinfo#1 defines for an argument XXX (name of a tree) \XXXlmoff,
+% \XXXrmoff, ... as lmoff(XXX), rmoff(XXX),... .
+% The following arguments will be used: l@ft, r@ght, l@st,
+% m@n, and m@x.
+
+\def\n@meinfo#1{%
+ \n@me@nfo{#1}{lmoff}\n@me@nfo{#1}{rmoff}%
+ \n@me@nfo{#1}{lboff}\n@me@nfo{#1}{rboff}%
+ \n@me@nfo{#1}{ltop}\n@me@nfo{#1}{rtop}%
+ \n@me@nfo{#1}{loff}\n@me@nfo{#1}{roff}%
+ }
+
+\def\n@me@nfo#1#2{%
+ \p@s\t@mpcnta{\csname#2\endcsname}{#1}%
+ \expandafter\gxdef\csname#1#2\endcsname{\dimen\the\t@mpcnta}}
+
+\def\n@metree#1#2#3#4#5{%
+ \expandafter\gxdef\csname#5ht\endcsname{\count\the#1}%
+ \expandafter\gxdef\csname#5info\endcsname{\count\the#2}%
+ \expandafter\gxdef\csname#5box\endcsname{\the#3}%
+ \expandafter\gxdef\csname#5type\endcsname{\toks\the#4}%
+ \n@meinfo{#5}%
+ }
+
+\chardef\@cntoff3 \chardef\@boxoff1 \chardef\@dimoff2 \chardef\@typeoff1
+
+\def\pr@vioustree{%
+ \g\advance\l@sttreeheight by-\@cntoff
+ \g\advance\l@stdiminfo by-\@cntoff
+ \g\advance\l@sttreetype by-\@cntoff
+ \g\advance\l@sttreebox by-\@boxoff
+ \n@mel@st
+ }
+
+\def\@ddname#1#2{%
+ \expandafter\gxdef\csname#2ht\endcsname{\csname#1ht\endcsname}%
+ \expandafter\gxdef\csname#2info\endcsname{\csname#1info\endcsname}%
+ \expandafter\gxdef\csname#2type\endcsname{\csname#1type\endcsname}%
+ \expandafter\gxdef\csname#2box\endcsname{\csname#1box\endcsname}%
+ \n@meinfo{#2}%
+ }
+
+\def\n@xttree{%
+ \p@s\t@mpcnta\loff{l@st}\g\advance\t@mpcnta by\@dimoff
+ \g\advance\l@sttreeheight by\@cntoff
+ \g\advance\l@stdiminfo by\@cntoff
+ \g\advance\l@sttreetype by\@cntoff
+ \g\advance\l@sttreebox by\@boxoff
+ \g\count\l@stdiminfo\t@mpcnta
+ }
+
+\def\@ppenddummy{% pushs a dummy onto the stack and names it `l@st'
+ % The dummy has height -1, its box is the empty box, the type
+ % is circle, and all dimensions are 0pt.
+ \n@xttree \g\count\l@sttreeheight-\@ne\n@mel@st
+ \l@sttype{circle}%
+ \g\setbox\l@stbox\copy\voidb@x
+ \g\l@stlmoff=0pt\g\l@strmoff=0pt\g\l@stlboff=0pt\g\l@strboff=0pt%
+ \g\l@stltop=0pt\g\l@strtop=0pt\g\l@stloff=0pt\g\l@stroff=0pt%
+ }
+
+\def\g@tchildren{% enables us to talk about the left and the right child
+ % (names l@ft resp. r@ght) and the smaller and the larger
+ % child (names m@n resp. m@x)
+ \ifl@fttop\@ddname{l@st}{l@ft}%
+ \pr@vioustree
+ \@ddname{l@st}{r@ght}%
+ \else\@ddname{l@st}{r@ght}%
+ \pr@vioustree
+ \@ddname{l@st}{l@ft}%
+ \fi
+ \ifnum\r@ghtht>\l@ftht\relax
+ \r@ghthighertrue
+ \@ddname{r@ght}{m@x}%
+ \@ddname{l@ft}{m@n}%
+ \else\r@ghthigherfalse
+ \@ddname{l@ft}{m@x}%
+ \@ddname{r@ght}{m@n}%
+ \fi
+ }
+
+\def\n@mel@st{%
+ \n@metree\l@sttreeheight\l@stdiminfo\l@sttreebox\l@sttreetype{l@st}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Initialization of the tree environment %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\beginTree{%
+ \begingroup
+ \unitlength 1pt%
+ \divide\unitlength by 65536
+ \l@sttreebox\count14
+ \l@sttreeheight\count10
+ \advance\l@sttreeheight by \@ne
+ \count\l@sttreeheight=-1
+ \l@stdiminfo\l@sttreeheight
+ \advance\l@stdiminfo by \@ne
+ \count\l@stdiminfo\count11
+ \advance\count\l@stdiminfo by -5
+ \l@sttreetype\l@stdiminfo
+ \advance\l@sttreetype by\@ne
+ \count\l@sttreetype\count15
+ \n@mel@st\ignorespaces
+ }
+
+\let\Tree\beginTree
+
+\def\endTree{%
+ \g\leftdist-\l@stlmoff\g\advance\leftdist by \l@stltop
+ \g\rightdist\l@strmoff\g\advance\rightdist by\l@strtop
+ \g\setbox\TeXTree\box\l@stbox\endgroup\ignorespaces}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Specification of nodes %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% A node is defined by the command \node{<specifications>}.
+% <specifications> defines the labels, graphical appearence and the order
+% of the node and the thickness of the edges.
+% Labels are defined by the commands \lft, \rght, \cntr,
+% and \bnth. The specification of empty labels may be omitted.
+% The graphical appearence is defined by the command \type{<type>}.
+% <type> can have the values `circle', `square', `dot',
+% `triangle', 'text', or 'frame'. The thickness of the edges is defined by
+% \leftthick and \rightthick that give thick edges instead of the
+% normal thin ones. Furthermore,
+% the order of the node is given by the following commands:
+% \external (if the node is an external node), \leftonly (if the node has a
+% left successor only), \rightonly (analogous), \unary (if the node is an
+% unary one), and \lefttop (the
+% node which has been defined before this one, is supposed to be the left
+% successor instead of the right one).
+% Default: two children, no labels, type circle, thin edges,
+% left child has been entered first.
+
+\def\th@ck{\let\@linefnt\tenlnw
+ \@wholewidth\fontdimen8\tenlnw\@halfwidth.5\@wholewidth}
+
+\def\leftthick{\g\let\l@ftthick\th@ck}
+\def\rightthick{\g\let\r@ghtthick\th@ck}
+\def\lft#1{\g\setbox\leftb@x\hbox{#1\ }}
+\def\rght#1{\g\setbox\rightb@x\hbox{\ #1}}
+\def\cntr#1{\g\setbox\centerb@x\hbox{#1\strut}}
+\def\bnth#1{\g\setbox\beneathb@x\hbox to0pt{\hss\strut#1\hss}}
+\def\type#1{%
+ \g\setbox\centerb@@x\copy\csname#1b@x\endcsname
+ \g\centerdim@n\csname#1w@dth\endcsname
+ \typ@{#1}%
+ \g\halfcenterdim@n=.5\centerdim@n}
+
+\def\ext@nded{\g\ext@ndedfalse} % This definition must precede
+ % \input TreeTeX.sty (outdated now!)
+
+\def\node#1{%
+ %%% Initialization (node type and labels), defaults and actual values
+ \g\setbox\leftb@x\copy\voidb@x
+ \g\setbox\rightb@x\copy\voidb@x
+ \g\setbox\centerb@x\copy\voidb@x
+ \g\setbox\beneathb@x\copy\voidb@x
+ \type{circle}%
+ \g\l@fttopfalse\g\l@ftonlyfalse\g\l@ftedgetrue
+ \g\r@ghtonlyfalse\g\r@ghtedgetrue\g\@xtfalse\ext@nded\n@dummy
+ \g\let\l@ftthick\relax\g\let\r@ghtthick\relax
+ #1%
+ \@pdcenter
+ \d@mmy
+ \n@de
+ \ignorespaces
+ }
+
+\def\@pdcenter{\csname\the\typ@ @cntr\endcsname}
+
+\let\circle@cntr\relax
+\let\square@cntr\relax
+\let\triangle@cntr\relax
+\let\dot@cntr\relax
+
+\def\text@cntr{%
+ \g\centerdim@n\wd\centerb@x
+ \g\halfcenterdim@n.5\centerdim@n}
+
+\def\frame@cntr{%
+ \g\setbox\centerb@x\hbox{\ \unhcopy\centerb@x\ }
+ \g\centerdim@n\wd\centerb@x
+ % \g\advance\centerdim@n\fontdimen2\font
+ \g\halfcenterdim@n.5\centerdim@n
+ \g\setbox\centerb@@x\rect@ngle{\centerdim@n}{\squarew@dth}{.4pt}}
+
+\def\leftonly{\g\l@ftonlytrue\g\r@ghtedgefalse\g\let\d@mmy\l@ftdummy}
+\def\rightonly{\g\r@ghtonlytrue\g\l@ftedgefalse\g\let\d@mmy\r@ghtdummy}
+\def\unary{\g\r@ghtedgefalse\g\let\d@mmy\@ndummy}
+\def\external{\g\@xttrue\g\l@ftedgefalse\g\r@ghtedgefalse\g\let\d@mmy\@xtdummy}
+
+\def\lefttop{\g\l@fttoptrue}
+
+\def\@xtdummy{%
+ \@ppenddummy
+ \g\l@strtop-\halfmins@p
+ \@ppenddummy
+ \g\l@stltop-\halfmins@p
+ }
+
+\def\n@dummy{\g\let\d@mmy\relax}
+
+\def\l@ftdummy{% cf. \g@tposition
+ \@ppenddummy
+ \g\l@stltop=\dummyhalfcenterdim@n
+ \g\l@strtop=\dummyhalfcenterdim@n
+ }
+
+\def\r@ghtdummy{% cf. \g@tposition
+ \lefttop
+ \@ppenddummy
+ \g\l@stltop=\dummyhalfcenterdim@n
+ \g\l@strtop=\dummyhalfcenterdim@n
+ }
+
+\def\@ndummy{%
+ \g\t@mpdima\l@strtop\relax
+ \@ppenddummy
+ \g\l@stltop-\mins@p\g\advance\l@stltop by-\t@mpdima
+ \g\l@strtop=\t@mpdima
+ }
+
+\def\n@de{%
+ \g@tposition % naming children and calculating \sl@pe and \tots@p
+ \g@tlt@p\g@trt@p % calculating \lt@p and \rt@p
+ \g@tlm@ff\g@trm@ff % calculating \lm@ff and \rm@ff
+ \g@tlb@ff\g@trb@ff % calculating \lb@ff and \rb@ff
+ \@pdlroff % updating loff and roff for all levels but the top one
+ \@pdloffl\@pdroffl % updating loff(1) and roff(1) of the parent tree
+ \@pddim % updating ltop, rtop, lmoff, rmoff, lboff, and rboff
+ \@pdinfo\@pdht % updating diminfo and treeheight
+ \@pdbox % updating treebox
+ \@pdtype % updating type
+ \n@mel@st % giving the name `l@st' to the new tree
+ \ignorespaces
+ }
+
+\def\g@tposition{% naming children and calculating \sl@pe, \tots@p, and node offsets
+ \g@tchildren\c@lcsep\c@lcslope\c@lcoffsets
+ \ifext@nded\relax
+ \else\ifl@ftonly\g\r@ghtrtop=-\tots@p
+ \g\advance\r@ghtrtop by\l@ftrtop
+ \fi
+ \ifr@ghtonly\g\l@ftltop=-\tots@p
+ \g\advance\l@ftltop by\r@ghtltop
+ \fi
+ \fi % cf. \l@ftdummy and \r@ghtdummy
+ }
+
+\def\@pdinfo{% updating diminfo
+ \g\l@stinfo=\m@xinfo\relax
+ }
+
+\def\@pdht{% updating treeheight
+ \g\l@stht=\m@xht
+ \g\advance\l@stht by\@ne
+ }
+
+\def\@pdtype{% updating type
+ \g\l@sttype\typ@
+ }
+
+\def\g@tlt@p{% calculating \lt@p
+ \g\lt@p\wd\leftb@x\g\advance\lt@p by\halfcenterdim@n
+ }
+
+\def\g@trt@p{% calculating \rt@p
+ \g\rt@p\wd\rightb@x\g\advance\rt@p by\halfcenterdim@n
+ }
+
+\def\g@tlm@ff{% calculating \lm@ff
+ % \lm@ff:=lmoff(left tree)-ltop(left tree)
+ % -.5\tots@p+\lt@p
+ \g\lm@ff\l@ftlmoff
+ \g\advance\lm@ff by-\l@ftltop
+ \g\advance\lm@ff by-\halftots@p
+ \g\advance\lm@ff by\lt@p\relax
+ % if ht(left tree) < ht(right tree)
+ % \t@mpdima:=lmoff(right tree)-ltop(right tree)+.5\tots@p+\lt@p
+ % \lm@ff:=min(\lm@ff,\t@mpdima) fi
+ \ifnum\l@ftht<\r@ghtht\relax
+ \g\t@mpdima\r@ghtlmoff
+ \g\advance\t@mpdima by-\r@ghtltop
+ \g\advance\t@mpdima by\halftots@p
+ \g\advance\t@mpdima by\lt@p\relax
+ \ifdim\t@mpdima<\lm@ff\relax
+ \g\lm@ff\t@mpdima
+ \fi
+ \fi
+ % \lm@ff:=min(\lm@ff,0pt)
+ \ifdim0pt<\lm@ff\relax
+ \g\lm@ff=0pt%
+ \fi
+ }
+
+\def\g@trm@ff{% calculating \rm@ff
+ % analog to lm@ff
+ % \rm@ff:=rmoff(right tree)+rtop(right tree)
+ % +.5\tots@p-\rt@p
+ \g\rm@ff\r@ghtrmoff
+ \g\advance\rm@ff by\r@ghtrtop
+ \g\advance\rm@ff by\halftots@p
+ \g\advance\rm@ff by-\rt@p\relax
+ % \t@mpdima:=rmoff(left tree)+rtop(left tree)-.5\tots@p-\rt@p
+ \ifnum\r@ghtht<\l@ftht\relax
+ \g\t@mpdima\l@ftrmoff
+ \g\advance\t@mpdima by\l@ftrtop
+ \g\advance\t@mpdima by-\halftots@p
+ \g\advance\t@mpdima by-\rt@p\relax
+ \ifdim\t@mpdima>\rm@ff\relax
+ \g\rm@ff\t@mpdima
+ \fi
+ \fi
+ % \rm@ff:=max(\rm@ff,0pt)
+ \ifdim0pt>\rm@ff\relax
+ \g\rm@ff=0pt
+ \fi
+ }
+
+\def\g@tlb@ff{% calculating \lb@ff
+ % \lb@ff:=lboff(right tree)-ltop(right tree)+.5\tots@p+\lt@p
+ % resp.:=lboff(left tree)-ltop(left tree)
+ % -.5\tots@p+\lt@p
+ \if@xt\g\lb@ff0pt%
+ \else\ifnum\l@ftht<\r@ghtht\relax
+ \g\lb@ff\r@ghtlboff
+ \g\advance\lb@ff by-\r@ghtltop
+ \g\advance\lb@ff by\halftots@p
+ \g\advance\lb@ff by\lt@p\relax
+ \else\g\lb@ff\l@ftlboff
+ \g\advance\lb@ff by-\l@ftltop
+ \g\advance\lb@ff by-\halftots@p
+ \g\advance\lb@ff by\lt@p\relax
+ \fi
+ \fi
+ }
+
+\def\g@trb@ff{% calculating \rb@ff
+ % \rb@ff:=rboff(left tree)+rtop(left tree)-.5\tots@p-\rt@p
+ % resp.:=rboff(right tree)+rtop(right tree)
+ % +.5\tots@p-\rt@p
+ \if@xt\g\rb@ff0pt%
+ \else\ifnum\r@ghtht<\l@ftht\relax
+ \g\rb@ff\l@ftrboff
+ \g\advance\rb@ff by\l@ftrtop
+ \advance\rb@ff by-\halftots@p
+ \g\advance\rb@ff by-\rt@p\relax
+ \else\g\rb@ff\r@ghtrboff
+ \g\advance\rb@ff by\r@ghtrtop
+ \g\advance\rb@ff by\halftots@p
+ \g\advance\rb@ff by-\rt@p\relax
+ \fi
+ \fi
+ }
+
+\def\@pdlroff{% updating loff and roff for all levels but the top one
+ % if right tree higher \t@mpdima:=-ltop(right tree)
+ % \t@mpdimb:=lboff(left tree)-ltop(left tree)
+ % % \t@mpdimb holds the offset between the node
+ % % and the left edge of the bottom of the left tree
+ % else \t@mpdima:=rtop(left tree)
+ % \t@mpdimb:=lboff(right tree)+rtop(right tree)
+ % % substitute left by right
+ % fi
+ \ifr@ghthigher\g\t@mpdima-\r@ghtltop\relax
+ \g\t@mpdimb\l@ftlboff
+ \g\advance\t@mpdimb by-\l@ftltop\relax
+ \else\g\t@mpdima\l@ftrtop\relax
+ \g\t@mpdimb\r@ghtlboff
+ \g\advance\t@mpdimb by\r@ghtrtop\relax
+ \fi
+ \ifr@ghthigher\p@s\t@mpcnta\loff{m@n}% pointer to loff(1) of smaller tree
+ \p@s\t@mpcntb\loff{m@x}% pointer to loff(1) of larger tree
+ \else\p@s\t@mpcnta\roff{m@n}% pointer to roff(1) of smaller tree
+ \p@s\t@mpcntb\roff{m@x}% pointer to roff(1) of larger tree
+ \fi % if the right tree is the higher one you have to shift
+ % the left profile of the smaller tree, otherwise the
+ % right one
+ % For every level, \t@mpdima contains the offset between the node of the
+ % higher tree and the inner edge of the next level. Furthermore, if the
+ % right tree is the higher one, the left profile of the left tree becomes
+ % the upper part of the left profile of the parent tree, otherwise
+ % substitute `left' by `right.'
+ \ex\m@nht\times
+ \g\advance\t@mpdima by\dimen\t@mpcntb
+ \g\dimen\t@mpcntb\dimen\t@mpcnta
+ \g\advance\t@mpcnta by-\@dimoff
+ \g\advance\t@mpcntb by-\@dimoff\relax
+ \xe
+ % The link between the last outer level of the smaller tree and the next
+ % level of the higher one:
+ % \dimen\t@mpcntb:=\dimen\t@mpcntb+\t@mpdima+\tots@p-\t@mpdimb
+ % if left tree is smaller than right tree
+ % resp.\dimen\t@mpcntb+\t@mpdima-\tots@p-\t@mpdimb
+ % if right tree is smaller than left tree
+ \ifnum\m@xht=\m@nht\relax
+ \else\g\advance\dimen\t@mpcntb by\t@mpdima
+ \ifnum\l@ftht<\r@ghtht\relax
+ \g\advance\dimen\t@mpcntb by\tots@p
+ \else\g\advance\dimen\t@mpcntb by-\tots@p
+ \fi
+ \g\advance\dimen\t@mpcntb by-\t@mpdimb
+ \fi
+ }
+
+\def\@pdloffl{% updating loff(1) of parent tree
+ % loff(1) of parent tree:=+\lt@p-.5\tots@p-ltop(left tree)
+ \p@s\t@mpcnta\loff{m@x}%
+ \g\advance\t@mpcnta by \@dimoff\relax % pointer to loff(0) of parent tree
+ \g\dimen\t@mpcnta\lt@p
+ \g\advance\dimen\t@mpcnta by-\halftots@p
+ \g\advance\dimen\t@mpcnta by-\l@ftltop\relax
+ }
+
+\def\@pdroffl{% updating roff(1) of parent tree
+ % roff(l) of parent tree:=-\rt@p+.5\tots@p+rtop(right tree)
+ \p@s\t@mpcnta\roff{m@x}%
+ \g\advance\t@mpcnta by \@dimoff\relax % pointer to roff(0) of parent tree
+ \g\dimen\t@mpcnta-\rt@p
+ \g\advance\dimen\t@mpcnta by\halftots@p
+ \g\advance\dimen\t@mpcnta by\r@ghtrtop\relax
+ }
+
+\def\@pddim{% updating ltop, rtop, lmoff, rmoff, lboff, and rboff
+ \g\m@xlmoff=\lm@ff\g\m@xrmoff=\rm@ff
+ \g\m@xlboff=\lb@ff\g\m@xrboff=\rb@ff
+ \g\m@xltop=\lt@p\g\m@xrtop=\rt@p
+ }
+
+\def\@pdbox{% pushing the nodebox on the stack: updating treebox
+ \g\@xarg\xv@l\sl@pe\g\@yarg\yv@l\sl@pe
+ \ifnum\sl@pe=1 % vertical edge
+ \g\t@mpdima\vd@st
+ \g\advance\t@mpdima by-\y@ff\typ@
+ \g\advance\t@mpdima by-\y@ff\l@fttype
+ \g\@larg\t@mpdima % \@larg is a number register!
+ \g\t@mpdima\vd@st
+ \g\advance\t@mpdima by-\y@ff\typ@
+ \g\advance\t@mpdima by-\y@ff\r@ghttype
+ \g\@rarg\t@mpdima % \@rarg is a number register!
+ \else\g\t@mpdima\halftots@p
+ \g\advance\t@mpdima by-\x@ff\typ@
+ \g\advance\t@mpdima by-\x@ff\l@fttype
+ \g\@larg\t@mpdima % \@larg is a number register!
+ \g\t@mpdima\halftots@p
+ \g\advance\t@mpdima by-\x@ff\typ@
+ \g\advance\t@mpdima by-\x@ff\r@ghttype
+ \g\@rarg\t@mpdima % \@rarg is a number register!
+ \fi
+ \g\setbox\l@sttreebox\hbox{%
+ \ifvoid\leftb@x\relax
+ \else\hskip-\halfcenterdim@n\hskip-\wd\leftb@x
+ \unhcopy\leftb@x\hskip\halfcenterdim@n
+ \fi
+ \ifvoid\centerb@x\relax
+ \else\g\t@mpdima-.5\wd\centerb@x\hskip\t@mpdima
+ \unhbox\centerb@x\hskip\t@mpdima
+ \fi
+ \ifvoid\rightb@x\relax
+ \else\g\t@mpdima-\wd\rightb@x\hskip\halfcenterdim@n
+ \unhbox\rightb@x\hskip\t@mpdima\hskip-\halfcenterdim@n
+ \fi
+ \raise\based@st\copy\centerb@@x
+ \if@xt\relax
+ \lower\s@ze pt\hbox to0pt{\hss\unhbox\beneathb@x\hss}%
+ \else\hskip-\halftots@p
+ \lower\vd@st\box\l@ftbox
+ \ifl@ftedge\drawl@ftedge\else\hskip\halftots@p\fi
+ \ifr@ghtedge\drawr@ghtedge\else\hskip\halftots@p\fi
+ \lower\vd@st\box\r@ghtbox
+ \hskip-\halftots@p
+ \fi
+ }% of hbox
+ }
+
+\def\drawl@ftedge{%
+ \hskip\x@ff\l@fttype
+ \g\t@mpdimc\y@ff\l@fttype\g\advance\t@mpdimc by\based@st
+ \g\advance\t@mpdimc-\vd@st
+ \raise\t@mpdimc
+ \hbox{\l@ftthick\lineseg(\@xarg,\@yarg){\@larg}}%
+ \hskip\x@ff\typ@
+ }
+
+\def\drawr@ghtedge{%
+ \hskip\x@ff\typ@
+ \g\t@mpdimc\vd@st
+ \g\advance\t@mpdimc by \based@st
+ \g\advance\t@mpdimc by -\y@ff\typ@\relax
+ \g\advance\t@mpdimc by- \vd@st
+ \raise\t@mpdimc
+ \hbox{\r@ghtthick\lineseg(\@xarg,-\@yarg){\@rarg}}%
+ \hskip\x@ff\r@ghttype
+ }
+
+\def\x@ff#1{%
+ \csname\the#1x@ff\endcsname\sl@pe
+ }
+
+\def\y@ff#1{%
+ \csname\the#1y@ff\endcsname\sl@pe
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Calculating the separation of subtrees %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \c@lcslope will calculate the required slope of the edges
+% when the nodes are to be \vd@st apart vertically
+% and at least \tots@p apart horizontally. This slope is returned by
+% the value of the counter \sl@pe (a number between 1 and 23).
+% Furthermore, \tots@p is updated in order to fit to this slope.
+
+\def\c@lcslope{%
+ \g\sl@pe1
+ \loop
+ \ifdim\hv@l\sl@pe < \tots@p
+ \g\advance\sl@pe by1
+ \repeat
+ \g\tots@p\hv@l\sl@pe
+ \g\halftots@p.5\tots@p}
+
+
+\def\c@lcsep{%
+ %%% \tots@p:=\mins@p + rtop(left tree) + ltop(right tree)
+ %%% \currs@p:=\mins@p
+ \g\tots@p\mins@p
+ \g\advance\tots@p by\l@ftrtop
+ \g\advance\tots@p by\r@ghtltop\relax
+ \g\currs@p\mins@p
+ %%% \t@mpcnta:= pointer to roff(0) of left tree
+ %%% \t@mpcntb:= pointer to loff(0) of right tree
+ \p@s\t@mpcnta\roff{l@ft}%
+ \p@s\t@mpcntb\loff{r@ght}%
+ %%% Calculate \currs@p and update \tots@p for each level of the
+ %%% smaller tree
+ %%% If at any level the subtrees are as close or closer than at
+ %%% the level of their roots, they will be moved apart by the additional
+ %%% amount of \adds@p
+ \g\adds@pfalse
+ \g\t@mpcntc\m@nht
+ \ex\t@mpcntc\times
+ \g\advance\currs@p by-\dimen\t@mpcnta
+ \g\advance\currs@p by \dimen\t@mpcntb
+ \ifdim\mins@p<\currs@p
+ \else\g\adds@ptrue
+ \fi
+ \ifdim\currs@p<\mins@p
+ \g\advance\tots@p by\mins@p
+ \g\advance\tots@p by -\currs@p
+ \g\currs@p\mins@p
+ \fi
+ \g\advance\t@mpcnta by -\@dimoff
+ \g\advance\t@mpcntb by -\@dimoff
+ \xe
+ \ifadds@p\g\advance\tots@p by\adds@p\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Predefined trees %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \tri@ngle produces a triangle which covers \l@vels many level of a tree.
+% The slope of the edges is given by \sl@pe, the reference point of the
+% triangle is in the top, the width is 0pt.
+
+\def\tri@ngle{%
+ \vtop{\g\@xarg\xv@l\sl@pe \g\@yarg\yv@l\sl@pe
+ \g\t@mpdimc\l@vels\vd@st
+ \g\advance\t@mpdimc by .5\squarew@dth
+ \g\multiply\t@mpdimc\xv@l\sl@pe
+ \g\divide\t@mpdimc\yv@l\sl@pe
+ \g\@larg\t@mpdimc
+ \offinterlineskip
+ \vskip0pt% Force the reference point to the top
+ \hbox to0pt{\hss\lineseg(\@xarg,\@yarg){\@larg}%
+ \hskip\t@mpdimc\rlap{\lineseg(-\@xarg,\@yarg){\@larg}}%
+ \hss}%
+ \setbox\t@mpboxa
+ \hbox to0pt{\hss\vrule height.2pt depth.2pt width2\t@mpdimc\hss}%
+ \t@mpdimc-.5\squarew@dth\advance\t@mpdimc\based@st
+ \ht\t@mpboxa0pt\dp\t@mpboxa\t@mpdimc\copy\t@mpboxa
+ }%
+ }
+
+\def\lvls#1{\g\l@vels#1}
+\def\slnt#1{\g\sl@pe#1}
+
+\def\treesymbol#1{%
+ \g\setbox\leftb@x\copy\voidb@x
+ \g\setbox\rightb@x\copy\voidb@x
+ \g\setbox\centerb@x\copy\voidb@x
+ \g\setbox\beneathb@x\copy\voidb@x
+ \lvls{1}\slnt{3}%
+ #1%
+ \g\centerdim@n\trianglew@dth
+ \g\halfcenterdim@n.5\trianglew@dth
+ \n@xttree
+ \g\count\l@sttreeheight\l@vels% \g\advance\count\l@sttreeheight by\tw@
+ \g\toks\l@sttreetype{triangle}%
+ \n@mel@st
+ \g\hd@st\hv@l\sl@pe \g\divide\hd@st by\tw@
+ \g\l@stltop=\halfcenterdim@n\g\advance\l@stltop by\wd\leftb@x
+ \g\l@strtop=\halfcenterdim@n\g\advance\l@strtop by\wd\rightb@x
+ \g\l@stlboff=-\hd@st \g\multiply\l@stlboff by\l@vels
+ \g\advance\l@stlboff by\wd\leftb@x
+ \g\l@strboff=\hd@st \g\multiply\l@strboff by\l@vels
+ \g\advance\l@strboff by-\wd\rightb@x
+ \g\l@stlmoff=\l@stlboff\relax
+ \ifdim\l@stlmoff>0pt\relax\g\l@stlmoff=0pt\fi
+ \g\l@strmoff=\l@strboff
+ \ifdim\l@strmoff<0pt\relax\g\l@strmoff=0pt\fi
+ \g\t@mpcnta\l@stinfo\g\advance\t@mpcnta by6% preliminary
+ \ex\l@vels\times
+ \g\dimen\t@mpcnta-\hd@st\g\advance\t@mpcnta by\@ne
+ \g\dimen\t@mpcnta\hd@st\g\advance\t@mpcnta by\@ne
+ \xe
+ \g\advance\t@mpcnta by-\tw@
+ \g\advance\dimen\t@mpcnta by\wd\leftb@x
+ \g\advance\t@mpcnta by\@ne
+ \g\advance\dimen\t@mpcnta by-\wd\rightb@x
+ \g\setbox\l@stbox\vtop % to\l@vels\vd@st
+ {\offinterlineskip
+ \g\setbox\t@mpboxa
+ \hbox{\hskip-\halfcenterdim@n\hskip-\wd\leftb@x\unhbox\leftb@x
+ \hskip\halfcenterdim@n
+ \raise\based@st\tri@ngle
+ \hskip\halfcenterdim@n\t@mpdima-\wd\rightb@x
+ \unhbox\rightb@x\hskip\t@mpdima\hskip-\halfcenterdim@n}
+ \g\ht\t@mpboxa=0pt\box\t@mpboxa
+ \setbox\centerb@x\hbox to0pt{\hss\unhbox\centerb@x\hss}%
+ \ht\centerb@x0pt\dp\centerb@x0pt\box\centerb@x
+ \vskip\s@ze pt
+ \ht\beneathb@x0pt\box\beneathb@x
+ \vskip-\dp\beneathb@x\vskip-\ht\beneathb@x}%
+ \ignorespaces
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Node sizes %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The algorithm (macros \@pdbox, \drawl@ftedge, \drawr@ghtedge) accesses the
+% horizontal and vertical offset fo any node type XXX (circle, square,
+% dot, triangle, text, and frame) via the macros \XXXx@ff resp. \XXXy@ff.
+% These two macros take the slope of the outgoing edges
+% of the current node as their argument. Though horizontal offsets can
+% be calculated from the vertical offsets and vice versa, there is no
+% room to do so in the \XXXx@ff or \YYYy@ff macros, because these macros
+% have to expand to a dimension!
+%
+% Let k be a <number>. Actually k will be the slope of the outgoing
+% edges of the current node.
+%
+% There are three methods how, e.g., \XXXx@ff can be defined , depending
+% on the node type and the x- or y-orientation.
+% First, \XXXx@ff can be defined to expand to \XXXx@ffk', k' beeing
+% the roman numeral representation of the value of k, that in turn
+% expands to the appropriate dimension (example: \circley@ff).
+% In this case, \XXXx@ffi,...,\XXXx@ffiv are predefined by a \s@ries
+% command.
+% Second, \XXXx@ff can be defined to expand to a fixed dimension,
+% independent of its argument (example: \dotx@ff).
+% Third, the value of \XXXx@ff can be defined by the macro
+% \c@lcoffsets, when the slope k is already known. In this case,
+% the computation of \XXXx@ff makes use of the actual value
+% of k and possibly other offsets that are already predefined by method I
+% (examples: \circlex@ff, \squarex@ff).
+
+\def\norm@ff{% everything set up for 10pt node size
+\s@ries{circley@ff}{0.50000pt//0.49320pt//0.49029pt//0.48507pt//%
+ 0.47434pt//0.46424pt//0.44721pt//0.42875pt//%
+ 0.41603pt//0.40000pt//0.39043pt//0.38411pt//%
+ 0.35355pt//0.32009pt//0.31235pt//0.30000pt//%
+ 0.27735pt//0.25725pt//0.22361pt//0.18570pt//%
+ 0.15811pt//0.12127pt//0.09806pt//0.08220pt}%
+ }
+
+\def\dotx@ff#1{0pt}
+\def\doty@ff#1{0pt}
+
+\def\trianglex@ff#1{0pt}
+\def\triangley@ff#1{0pt}
+
+\def\c@lcoffsets{%
+ % \circlex@ff uses predefined \circley@ffi, \circley@ffii etc.
+ \ifnum\sl@pe=\@ne\relax
+ \xdef\circlex@ff##1{0pt}%
+ \else\g\t@mpcnta26 % number of slopes + 2
+ \g\advance\t@mpcnta-\sl@pe
+ \xdef\circlex@ff##1{\circley@ff\t@mpcnta}%
+ \fi
+ % \squarex@ff and \squarey@ff are computed directly from \sl@pe and \squarew@dth
+ \ifnum\sl@pe<13\relax % incoming edge meets upper border of a square node
+ % (slope 13 corresponds to 45 degrees)
+ \g\t@mpdima.5\squarew@dth
+ \xdef\squarey@ff##1{\the\t@mpdima}%
+ \g\multiply\t@mpdima\xv@l\sl@pe
+ \g\divide\t@mpdima\yv@l\sl@pe
+ \xdef\squarex@ff##1{\the\t@mpdima}%
+ \else\g\t@mpdima.5\squarew@dth
+ \xdef\squarex@ff##1{\the\t@mpdima}%
+ \g\multiply\t@mpdima\yv@l\sl@pe
+ \g\divide\t@mpdima\xv@l\sl@pe
+ \xdef\squarey@ff##1{\the\t@mpdima}%
+ \fi
+ % \texty@ff is .5\squarew@dth, \textx@ff is adjusted accordingly
+ \g\t@mpdima.5\squarew@dth
+ \xdef\texty@ff##1{\the\t@mpdima}%
+ \g\multiply\t@mpdima\xv@l\sl@pe
+ \g\divide\t@mpdima\yv@l\sl@pe
+ \xdef\textx@ff##1{\the\t@mpdima}%
+ \let\framex@ff\textx@ff
+ \let\framey@ff\texty@ff
+ }
+
+\def\upds@ze#1{%
+ \for\t@mpcntc:=1\to24
+ \do\g\t@mpdimc=\csname#1\romannumeral\t@mpcntc\endcsname\relax
+ \g\multiply\t@mpdimc by\s@ze
+ \expandafter\gxdef\csname#1\romannumeral\t@mpcntc\endcsname
+ {\the\t@mpdimc}%
+ \od}
+
+\def\nodes@ze{%
+ \begingroup
+ \unitlength 1pt%
+ \divide\unitlength by 65536
+ \g\based@st\s@ze pt\g\divide\based@st by 10 % \based@st is 10 % of
+ % circle diameter
+ \g\dummyhalfcenterdim@n=\s@ze pt\g\divide\dummyhalfcenterdim@n by\tw@
+ \g\circlew@dth=\s@ze pt%
+ \g\t@mpcntc\s@ze\g\multiply\t@mpcntc by 65536
+ \g\setbox\circleb@x\hbox to0pt{\circle{\t@mpcntc}\hss}%
+ \upds@ze{circley@ff}%
+ \g\squarew@dth.9pt\g\multiply\squarew@dth by\s@ze
+ \g\setbox\squareb@x\rect@ngle{\squarew@dth}{\squarew@dth}{.4pt}%
+ \g\dotw@dth=\s@ze pt\g\divide\dotw@dth by 5
+ \ifdim\dotw@dth < 1pt\relax
+ \g\dotw@dth1pt\relax
+ \fi
+ \g\t@mpcntc\dotw@dth
+ \g\setbox\dotb@x\hbox to 0pt{\circle*{\t@mpcntc}\hss}%
+ \g\trianglew@dth=\s@ze pt\g\multiply\trianglew@dth by \tw@
+ \g\divide\trianglew@dth by 3
+ \g\textw@dth=0pt%
+ \g\setbox\textb@x\copy\voidb@x
+ \g\framew@dth0pt%
+ \g\setbox\frameb@x\copy\voidb@x
+ \hv@ldef
+ \endgroup
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Changing the style %%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\treefonts#1{#1}
+\def\vdist#1{\g\vd@st=#1\relax}
+\def\minsep#1{\g\mins@p=#1\relax\g\halfmins@p=.5\mins@p}
+\def\addsep#1{\g\adds@p=#1\relax}
+\def\extended{\def\ext@nded{\g\ext@ndedtrue}}
+\def\noextended{\def\ext@nded{\g\ext@ndedfalse}}
+\def\nodesize#1{\g\t@mpdima=#1\relax\g\s@ze=\t@mpdima
+ \g\divide\s@ze by 65536\relax} % conversion from dimension to number
+\def\Treestyle#1{\norm@ff#1\nodes@ze\ignorespaces}
+
+\input classes
+
+\Treestyle{%
+ \ifLaTeX\treefonts{\normalsize\rm}%
+ \else\treefonts{\tenrm}%
+ \fi
+ \vdist{60pt}%
+ \minsep{20pt}%
+ \addsep{0pt}%
+ \nodesize{20pt}%
+ }
+
+
+%
+
+
diff --git a/macros/plain/contrib/tugboat/README b/macros/plain/contrib/tugboat/README
new file mode 100644
index 0000000000..9d83562a36
--- /dev/null
+++ b/macros/plain/contrib/tugboat/README
@@ -0,0 +1,11 @@
+$Id: README 242 2019-06-12 22:01:32Z karl $
+(This README file is public domain.)
+
+The plain style files for TUGboat, the journal of the TeX Users Group.
+See https://tug.org/TUGboat for all issues, contact information,
+ notes for authors, and all else.
+
+tugboat.sty is for both regular and proceedings issue. Just \input it.
+tugproc.sty was for proceedings issue, but is no longer used.
+tugboat.cmn had definitions common for both (could/should also be common
+ to the LaTeX TUGboat style, but isn't).
diff --git a/macros/plain/contrib/tugboat/tubguide.pdf b/macros/plain/contrib/tugboat/tubguide.pdf
new file mode 100644
index 0000000000..d2bf8de4c7
--- /dev/null
+++ b/macros/plain/contrib/tugboat/tubguide.pdf
Binary files differ
diff --git a/macros/plain/contrib/tugboat/tubguide.tex b/macros/plain/contrib/tugboat/tubguide.tex
new file mode 100644
index 0000000000..4c2ec29c44
--- /dev/null
+++ b/macros/plain/contrib/tugboat/tubguide.tex
@@ -0,0 +1,823 @@
+%% @texfile{
+%% filename = "tubguide.tex",
+%% version = "1.22",
+%% date = "2016/09/26",
+%% filetype = "TUGboat Authors' Guide",
+%% copyright = "Copyright 1989, 1992, 2006, 2012-2016 TeX Users Group.
+%% Unlimited copying and redistribution of this file
+%% are permitted as long as this file is not
+%% modified. Modifications (and redistribution of
+%% modified versions) are also permitted, but only if
+%% the resulting file is renamed."
+%% email = "TUGboat@tug.org",
+%% codetable = "ISO/ASCII",
+%% keywords = "tex users group, tugboat, plain authors' guide",
+%% supported = "yes",
+%% abstract = "This file is an updated version of the file
+%% that produced the original Authors' Guide in
+%% TUGboat 10, no. 3, November 1989.",
+%% }
+%% $Id: tubguide.tex 157 2016-09-26 23:34:10Z karl $
+%% *********************************************************
+%%
+%% TeXing this file requires the following files:
+%% TUGBOAT.STY (version 1.09+)
+%% TUGBOAT.CMN (version 1.08+) (loaded by TUGBOAT.STY)
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\input tugboat.sty
+
+% tugboat.sty used to default to this, and no point in changing lots of
+% text to fix overfull boxes.
+\StretchyTenPointSpacing
+\StretchyNinePointSpacing
+\StretchyEightPointSpacing
+
+\enablemetacode
+\everyverbatim{\enablemetacode}
+\def\halfline{\vskip 0.5\baselineskip \ignoreendline}
+
+% ****************************************************************
+
+\pageno=1
+\def\rtitlex{\def\tubfont{\tenpoint\rm}\TUB{} Authors' Guide, May 2012}
+\def\midrtitle{}
+
+\title *\TUB\/ authors' guide*
+
+\author * Barbara Beeton *
+\address * American Mathematical Society\\
+ 201 Charles Street\\
+ Providence, RI 02904-2294 *
+\netaddress * TUGboat@tug.org *
+
+\author * Ron Whitney *
+%\address * \TUG *
+%\netaddress * TUGboat@Math.AMS.com *
+
+
+\vfootnote{}{Revised March 1992, May 2006, May 2012, September 2016; the
+original appeared in
+\tubissue 10(3), November 1989.}
+
+\article
+
+With this report we hope to fill a lacuna (some might say ``void'')
+whose existence we have been attributing to the usual factors: tight
+schedules, alternative priorities and warty \TeX\ code. We now feel
+the macros in use for \TUB\/ have stabilized to the extent that
+documentation and suggestions for authors will remain fairly constant,
+and we hope this article can serve as a reasonable guide to
+preparation of manuscripts for \TUB. Authors who have used the \TUB\/
+macros before will note several changes (including more modern names
+for the style files). Suggestions and comments are quite welcome at
+the addresses listed below.
+
+\TUB\/ was originally typeset with a package based only on \plain.
+Later, as demand for style files follows wherever \LaTeX-devotees
+wander, a \TUB\/ variant of the \LaTeX\ {\tt article} class was also
+created\Dash see |ltugboat.cls| and its documentation in the separate
+package |tugboat| (|http://ctan.org/pkg/tugboat|) . The two macro sets
+yield much the same output, and many input conventions are identical,
+with differences where they seemed natural.
+
+Below we describe various aspects of the \TUB\/ package for the
+\plain-based macros. We conclude with some general suggestions to help
+make the lives of those on the receiving end of (any kind of) electronic
+copy a little easier.
+
+
+\head * The \plain-based macros: {\tt tugboat.sty} *
+
+The macros are contained in two files, |tugboat.sty| and
+|tugboat.cmn|.\footnote{$^1$}{1) A file |tugproc.sty| is also
+distributed, but no longer used. 2) |tugboat.cmn| used to be named {\tt
+tugboat.com}, but that notation was in conflict with conventions of
+\acro{MS-DOS} and other operating systems; no conflicts are known to
+exist for the new name.}
+
+\subhead * General description of tags * We attempt wherever possible to
+tag the various elements of \TUB\/ articles in a ``generic'' way,
+modified in some respects by convenience. Authors and editors need
+tools to shape their articles to the form they desire, but we also wish
+to encourage a tagging style which is appropriate for electronic
+interchange. It seems unfair to expect much thought from authors
+concerning the markup of their information if we only provide a bag of
+widgets and do-hickies to hack and pound an article together. The tags
+whose use we encourage are the higher-level tags that mark the logical
+document structure. Below these are formatting macros that we recognize
+may be essential for certain applications. Both sorts of tags are
+described in the following article.
+
+Generally, to ``mark up'' the data <foo>, a tag |\xxx| will precede
+<foo> and |\endxxx| will follow (thus: |\xxx <foo>\endxxx|). We use
+the |{...}| form to delimit arguments of lower-level formatting
+macros. Optional commands follow tags and are enclosed in
+|[\lastoption][...]|, \`a la \LaTeX. Several options may be enclosed
+within one set of square brackets, or each
+option may be enclosed in its own set of brackets. These ``options''
+are actually just \TeX{} commands, and it is always possible to
+insert raw \TeX{} code as an option. Such practice violates truly
+generic markup, but it is {\it helpful\/} and at least confines
+The Raw and Dirty to a smaller area.
+\subtext
+Perhaps a little more detail is of use to some readers here.
+Upon encountering a tag, the general operational scheme of the
+macros is as follows:
+\verbatim[\makecomment\%]%
+[\def\lquote{`}\def\rquote{'}\makeescape\|\makebgroup\`\makeegroup\']%
+[\displaystyle{\everypar{\hangindent2\parindent}\advance\baselineskip by 1pt}]
+<read tag>
+\begingroup
+<set defaults>
+\the\every...
+<read options>
+<branch to appropriate action,|hfil|break|ignoreendline
+using `|rm|lquote|lquote'argument|/`|rm|rquote|rquote' as necessary>
+<cleanup>
+\endgroup
+\endverbatim
+The scheme shows that code inserted as an option is localized and that
+it may be used to override certain defaults and to guide branching.
+Things are not always simple, however. Sometimes parameters are set
+after a branch is taken (e.g.\ the macros might only call |\raggedright|
+after determining whether the mode is ``|\inline|'' or
+``|\display|''), and, despite localization, parameter setting might
+affect the current paragraph if a branch has yet to be taken.
+This is {\it not\/} to say the macros don't work, but rather that
+those authors who venture beyond the documented regions of the
+macros should do so with their eyes open.
+\endtext
+
+For convenience, we also allow the |*| as a delimiter for the
+higher-level tags; thus we could use either
+||\title \TUB\/ Authors' Guide \endtitle||
+or
+||\title * \TUB\/ Authors' Guide *||
+to indicate the title of this paper. To typeset a \ast{} within text
+delimited by |*|, the \plain\ control sequence |\ast| has been extended
+to give
+\ast{} in text and the usual $\ast$ in math.
+\subtext
+This markup scheme may suffer at the hands of \TeX's parsing mechanism
+when tagged data is nested. In these cases, one may group (|{...}|)
+embedded data so that \TeX{} knows to proceed to the next |\end...|
+or |*|.
+\endtext
+
+In the cases where we show extra spaces and carriage returns around
+arguments in this article, those (discretionary) spaces are
+accommodated in the macros. Thus, for example, when the argument to
+|\title| above is typeset, |\ignorespaces| and |\unskip| surround it
+and the extra spaces have no untoward effect. Spaces are also
+gobbled between options.
+
+
+\subhead * Outer form *
+At the outermost level, a source file will have the form (using the
+|*...*| delimiters):
+\verbatim[\makeescape\|]
+\input tugboat.sty
+|halfline
+<perhaps additional macros for article>
+|halfline
+\title * <title> *
+\author * <author> *
+\address * <address> *
+\netaddress * <network address> *
+|halfline
+\article
+|vellipsis
+<body of article>
+|vellipsis
+\makesignature
+\endarticle
+\endverbatim
+
+Data preceding |\article| is saved and typeset when |\article|
+is encountered. Each author should have his/her own
+||
+\author ...
+\address ...
+\netaddress ...
+||
+block, and the macros will do their best to combine the information
+properly in the appropriate places. Explicit linebreaks can be
+achieved within any of these items via |\\|. Title and authors are,
+of course, set at the beginning of an article; the address
+information is listed separately in a ``signature'' near the end of
+an article, and is present for the convenience of those who might
+photocopy excerpts from an issue of \TUB. |\makesignature| does the
+typesetting work. Generally authors are listed separately in the
+signature. In cases where authors and addresses are to be combined,
+one may use |\signature{...}| and |\signaturemark| with some or all
+of
+||
+\theauthor {<author number>}
+\theaddress {<author number>}
+\thenetaddress {<author number>}
+||
+to get the desired result. For example, for an article with%
+\footnote{$^2$}{\xEdNote The \TUB{} email address shown in examples
+was current when this article first appeared, but is now obsolete;
+it has been left intact to avoid other problems. The correct address
+is now {\tt TUGboat@tug.org}.}
+\verbatim[\outputtofile{ray.vbm}]
+\author * Ray Goucher *
+\address * \TUG *
+\netaddress *TUG@Math.AMS.com*
+
+\author * Karen Butler *
+\address * \TUG *
+\netaddress *TUG@Math.AMS.com*
+\endverbatim
+we could say
+\verbatim[\outputtofile{sig.vbm}]
+\signature {
+ \signaturemark
+ \theauthor1 and \theauthor2\\
+ \theaddress1\\
+ \thenetaddress1}
+\endverbatim
+to obtain the signature
+\begingroup
+\authornumber=0
+\input ray.vbm
+\input sig.vbm
+\makesignature
+\medskip
+\endgroup
+
+\noindent
+Use of at least |\thenetaddress| is recommended for this just so that
+the network address gets formatted properly. The optional command
+|[\lastoption][\network{...}]| will introduce the network address
+with a network name, so
+||[\outputtofile{code.vbm}]
+\netaddress[\network{Internet}]
+ * TUGboat@Math.AMS.com *
+||
+produces
+{\authornumber=1
+ \input code.vbm
+ \figure[\mid\nofloat] \leftline{\kern\parindent\thenetaddress1} \endfigure
+}
+
+\leavevmode|\endarticle| marks the end of input and is defined as
+|\vfil\end| for most uses. We redefine it as |\endinput| to
+assemble streams of articles in \TUB.
+
+
+\subhead * Section heads *
+Heads of sections, subsections, etc.\ are introduced with |\head|,
+|\subhead|, etc., respectively. The underlying macros all use
+|\head|, so |\endhead| is the long-form ending for all these tags.
+For example, the first two heads of this article could have been
+keyed as
+||
+\head The \plain-based macros:
+ {\tt tugboat.sty} \endhead
+||
+and
+||
+\subhead General description of
+ tags \endhead
+||
+
+In \TUB\/ style, the paragraph following a first-level head is not
+indented. This is achieved by a look-ahead mechanism which gobbles
+|\par|s and calls |\noindent|. Actually all of the |\...head| tags
+gobble pars and spaces after their occurrence. This allows one to
+enter a blank line in the source file between head and text, such
+practice being a visual aid to your friendly \TUB\/ editors (if not to
+you). Be careful of that |\noindent| after a first-level head:
+you will be in horizontal mode after the |\head *...*|, so spaces
+which {\it appear\/} innocuous, may not be so.
+
+
+\subhead * Lists *
+Lists are everywhere, and a simple list hierarchy can
+transform a one-dimensional typesetting problem into something
+nasty. All of which is to say, we are certainly not done with
+this area of tagging, but here are the available macros.
+
+Not surprisingly, |\list| marks the beginning of a list. A list
+can be itemized, wherein each item is tagged with |\item|, or
+unitemized wherein items are delimited by |^^M| (the end of your
+input line). The itemized
+style is the default and |[\lastoption][\unitemized]| will get
+the other. Tags for the items default to the |\bullet|
+($=\bullet$), but can be changed by feeding an argument to
+|\tag{...}|. The |[\lastoption][\tag{...}]| option
+used with |\list| assigns the tag for each item of the entire
+list, while |[\lastoption][\tag{...}]| used with |\item| changes
+only the tag for that item. The obvious dynamical tags are available
+with options
+\verbatim[\makeescape\|\makebgroup\`\makeegroup\']
+\numbered
+\romannumeraled
+\lettered `|rm(lowercase)'
+\Lettered `|rm(uppercase)'
+\endverbatim
+
+Lists can be set in several columns by setting |\cols=...|. The
+columns are aligned on their top baselines and the user must
+break the columns with |\colsep|. Thus,
+\verbatim[\outputtofile{code.vbm}]
+\list[\unitemized\numbered][\cols=2]
+Fourscore
+and seven
+years ago
+our fathers
+\colsep
+brought forth
+on this
+continent
+\endlist
+\endverbatim
+yields
+\input code.vbm
+
+|\everylist| is a token register which is scanned at the beginning
+of each list
+after the default parameters are set and before
+options are read. If you want all your lists numbered, for example,
+you might insert ||\everylist{\numbered}|| at the top of your file
+rather than giving an option to each list.
+
+Implementation of sublists is under construction.
+
+\subhead * Verbatim modes *
+
+There are several variations on this theme. In each case, text is
+printed in a typewriter font and (almost) all input characters
+produce the glyph in the font position of their character-code (i.e.\
+you get what you type, no escaping it). In addition to the long form
+||\verbatim...\endverbatim|| the \verbinline|\endverbatim\ character
+can be used to enter and leave verbatim mode, acting as a toggle much
+as the |$| does with math. \verbinline|...|\endverbatim\space
+produces inline verbatim text, while \verbinline||...||\endverbatim
+displays its output. |\verbatim| itself defaults to display form,
+but |\verbatim[\inline]| and its contraction |\verbinline| (both
+terminated by |\endverbatim|) produce the inline form. |^^M| yields
+a space inline, and a new paragraph in display. Generally, for
+snippets of text we use the \verbinline|...|\endverbatim form, and
+for longer items the
+||[\makeescape\!]
+\verbatim
+!vellipsis
+\endverbatim
+||
+form (although \verbinline||...||\endverbatim is a good way to
+display a single line of code).
+
+The display verbatim output is in nine-point typewriter by default, as
+shown in this document. We've found the extra characters of width
+gained as a result are very useful. If |\smallverbdisplay| is defined
+to be a no-op, it will be in the usual ten-point. (This change was
+introduced in 2012.)
+
+As well as formatting verbatim text between |\verbatim| and
+|\endverbatim|, |\verbatim| can read and write data from and to
+files. We find this variant useful in ({\it almost\/}) guaranteeing
+consonance between macros in use and their published listings.
+||[\makeescape\!]
+\verbatim[\inputfromfile{foo.inp}]
+!vellipsis
+\endverbatim
+||
+will incorporate the contents of file |foo.inp| in the listing before
+the text between |\verbatim| and |\endverbatim|. The shortened form
+||\verbfile{foo.inp}\endverbatim|| accomplishes the above in the case
+that the text is empty. While the code around the data, |foo.inp|,
+above looks excessively long, do remember the implementation
+uses the basic |\verbatim| macro, so options can also be read after
+the filename. For example,
+||
+\verbfile{foo.inp}[\numbered]
+\endverbatim
+||
+would number the lines of the listing.
+
+We often rearrange code supplied to us so
+that it fits in the narrow measure of \TUB's two-column format, and
+we sometimes make corrections to macro sets (you thought you were
+perfect!). Since errors can (and do\Dash we aren't perfect either)
+creep in with these modifications, we use the above technique to
+maintain consistency between the listing published in \TUB\/ and the
+underlying macros used for examples.
+
+To write out information, use
+||[\makeescape\!]
+\verbatim[\outputtofile{foo.out}]
+!vellipsis
+\endverbatim
+||
+An added bonus here is that characters which get internalized as
+moribund ``letters'' or ``others'' in the process of listing them,
+can return revitalized for perhaps their real use when written out to
+another file and read in again. The example above involving Ray
+and Karen was coded as
+||[\makeescape\/][\makeactive\!][\def!{\VertChar}]
+... to get the desired result. For
+example, for an article with
+\verbatim[\outputtofile{ray.vbm}]
+\author * Ray Goucher *
+/vellipsis
+\endverbatim
+we could say
+\verbatim[\outputtofile{sig.vbm}]
+\signature {
+ \signaturemark
+ \theauthor1 and \theauthor2\\
+ \theaddress1\\
+ \thenetaddress1}
+\endverbatim
+to obtain the signature
+\begingroup
+\authornumber=0
+\input ray.vbm
+\input sig.vbm
+\makesignature
+\endgroup
+||
+This is perhaps not the most edifying example, but you get the gist.
+(We localize the process of storing and retrieving these
+authors and addresses so as not to clobber our own.)
+We would encourage our authors to use these mechanisms for connecting
+verbatim text to external files for the sake of maintaining
+consistency between active code and its documentation.
+
+\leavevmode|\verbatim| scans to |\endverbatim| (a 12-token sequence
+since the |\| is of type `other' after |\verbatim| gets going). Only
+this sequence of characters will interrupt the scan. On the other
+hand, \verbinline|\endverbatim and \verbinline||\endverbatim scan to
+the next \verbinline|\endverbatim and \verbinline||\endverbatim,
+respectively. Needless to say, one should use forms of |\verbatim|
+to set text which contains \verbinline|\endverbatim (and
+\verbinline|\endverbatim or \verbinline||\endverbatim to set text
+containing |\endverbatim| if you are writing an article like this
+one). Both the \verbinline|\endverbatim and |\verbatim| tags scan
+ahead for the usual |[\lastoption][| to check for options. In those
+rare cases when the |[\lastoption][| is really supposed to be the
+first character of the verbatim text, use the option
+|[\lastoption][\lastoption]| to stop option parsing. For example, to
+show ||[\lastoption][\lastoption]|| we keyed
+\verbatim
+|[\lastoption][\lastoption]|
+\endverbatim
+
+There are situations where one wants to typeset most things verbatim,
+but ``escape'' to format something exceptional. For example, the
+insertions of metacode given in the listings above require some
+access to the italic font. By giving the option
+|[\lastoption][\makeescape\!]| to |\verbatim|, the |!| is made an
+escape character in that block. Thus,
+||[\makeescape\/]
+\verbatim[\makeescape\!]
+/vellipsis
+...!it...
+/vellipsis
+\endverbatim
+||
+really calls the italic font in the middle of the listing (one might
+also want to use |\makebgroup| and |\makeegroup| in the options to define
+characters to localize this call; see p.~7). Situations
+will dictate preferences for what character may be used as an escape
+(we use the \verbinline|\endverbatim, |!|, and |/| in this article).
+There is also a means of changing the setup of every occurrence of
+verbatim mode. The contents of token register |\everyverbatim|
+is scanned after the defaults of verbatim mode
+have been set. In this article, for example, we have made
+|[\makeother\<]<| active and defined it in such a way that
+|[\makeother\<]<...>| typesets as metacode. Since |\verbatim|
+ordinarily changes |[\makeother\<]<| to type `other' on startup, we key
+||\everyverbatim{\enablemetacode}|| at the beginning of the file
+to have the proper adjustment made whenever verbatim is started.
+
+When ``escaping'' within a verbatim block, one should be aware that
+spaces and carriages returns are {\it active\/} and hence not gobbled
+as usual. Using the |!| as the active character, one might key
+||[\makeescape\/]
+\verbatim[\makeescape\!]
+/vellipsis
+!vskip .5!baselineskip
+/vellipsis
+\endverbatim
+||
+to get an extra half line of space in the middle of the listing. The
+space and carriage return on this line, however, cause problems. The
+space expands to |\ifvmode\indent\fi\space| and \TeX\ will not like
+the |\indent| after |\vskip|. The |^^M| expands to
+|\leavevmode\endgraf|, and therefore puts an extra line into the
+listing. The solutions, in this case, are to drop the space and to
+use |!ignoreendline| (which just gobbles the |^^M|), but one should
+be aware, generally, that some thought may be required in these situations.
+
+The option |[\lastoption][\numbered]| causes the lines of a
+verbatim listing to be numbered, while |[\lastoption][\ruled]|
+places rules around the whole thing:
+\verbatim[\numbered\ruled]
+<code>
+<more code>
+<yet more code>
+...
+\endverbatim
+The option |[\lastoption][\continuenumbers]| picks up the numbering
+where it last left off.
+\verbatim[\continuenumbers]
+<more>
+<and more>
+...
+\endverbatim
+
+The code underlying |\verbatim| in display style implements each line
+as a paragraph and places math-display-size whitespace above and
+below the verbatim section. Page and column breaks {\it are\/}
+permitted within these listings. To prohibit breaks at specific
+points or globally, one must insert penalties or redefine |^^M| to
+insert |\nobreak| in the vertical list at the end of each
+``paragraph'' (i.e.\ line). We should also note that the bottom of
+such a verbatim listing is implemented so that ensuing
+text may or may not start a new paragraph depending on whether an
+intervening blank line (or |\par|) is or is not present.
+
+
+\subhead * Figures and page layout *
+Figures are keyed as
+\verbatim[\makeescape\|]
+\figure
+|halfline
+<vertical mode material>
+|halfline
+\endfigure
+\endverbatim
+These are generally implemented as single-column floating
+top-insertions, but the options |[\lastoption][\mid]| and
+|[\lastoption][\bot]| can change specific items to be mid- or
+bottom-insertions, respectively. Here we recommend that the
+long-form terminator be used ({\it not\/} the |*...*| form). One can
+think of the information ``passed'' as being ``long'' in the sense of
+possibly containing paragraphs, this being a mnemonic device only.
+The primary reason for the recommendation is that one is (in some
+sense, maybe) more likely to encounter a rogue |*| in longer text
+than in shorter text and hence more likely to encounter a surprising
+result due to a macro stopping short at the wrong |*|.
+
+\subtext
+Perhaps here is a natural place to mention also that these macros
+sometimes read their arguments and then act, and sometimes act on the
+fly, not actually storing an argument as a string of tokens at all.
+|\title|, for example, is in the former category, while |\figure| is
+in the latter. Reasons may vary for the choice in
+methods. Storing a string of tokens as an argument does not allow
+re-interpretation of the category codes of the underlying
+character string. Thus, storing
+the ``argument'' of |\figure| all at once might misinterpret some
+characters which should appear as verbatim text. For this reason we
+set figures as we go and just close off the box with |\endfigure|. On
+the other hand, using information in multiple situations (e.g.\
+titles and running heads) requires storing the information as a token
+string, not as a typeset list.
+
+When text delimited by |*...*| is read as an argument, the |*|s are
+dropped by the parsing process. When the text is handled on the fly,
+the first |*| is gobbled and the second is made active to perform
+whatever action is necessary at the close of the macro. When
+possible, we prefer to operate on the fly since nested tags are
+handled properly in that case and no memory is consumed to store
+arguments. Examination of |tugboat.sty| will show which case applies
+in a given situation, but this general knowledge may help when trying
+to debug those situations in which an unexpected |*| has disrupted
+things.
+\endtext
+
+
+A primitive |\caption{...}| option is available to |\ulap|
+(i.e.\ lap upward) its argument into the figure space, but
+formatting of the caption is left to the user. For example,
+the code:
+\verbatim[\outputtofile{code.vbm}]
+\figure[\top]
+ [\caption{\centerline{Odd Fig.~1}}]
+\vbox to 5pc{}
+\endfigure
+\endverbatim
+produces the figure at the top of this column or the next.
+
+\input code.vbm
+
+Figures spanning columns at the top and bottom of a page are currently
+supported only on the first page of an article, but we expect they
+will soon be allowed on any page (a general rewrite of the output
+routine is in progress). |\twocolfigure| (terminated by |\endfigure|)
+starts up such a figure and currently {\it must\/} occur before any
+material has been typeset on the first page (i.e.\ {\it before\/}
+|\article|).
+
+
+Macros |\onecol|, |\twocol|, and |\threecol| provide one-, two-, and
+three-column layouts, but these cannot currently be intermixed on a
+page. We hope to provide automatic column-balancing and convenient
+switching between one- and two-column format within a year.
+|\newpage| in each format is defined to fill and eject enough columns
+to get to the next page. |\newcol| is just |\par\vfill\eject|.
+
+\subhead * Command list summary *
+Tags are listed in the order discussed. Options are
+listed under tags.
+||
+\title
+\author
+\address
+\netaddress
+ \network
+\signature
+\article
+\makesignature
+\endarticle
+\head
+\subhead
+\subsubhead
+\list
+ \numbered
+ \romannumeraled
+ \lettered
+ \Lettered
+ \ruled
+ \tag{...}
+\item
+ \tag{...}
+\everylist
+\verbatim
+ \numbered
+ \ruled
+ \inputfromfile{...}
+ \outputtofile{...}
+\verbinline
+\verbfile
+\figure
+ \mid
+ \bot
+ \caption{...}
+\twocolfigure
+||
+and \verbinline|\endverbatim and \verbinline||\endverbatim input syntax.
+
+
+\head * Common abbreviations and utilities *
+
+Definitions of a number of commonly used abbreviations such as |\MF|
+and |\BibTeX| are contained in |tugboat.cmn|. Please use these whenever
+possible rather than creating your own. We will add to the list as
+necessary.
+
+A nicety for the sake of appearance is the command |\acro|, which
+sets an acronym in caps one size smaller than the surrounding text.
+Compare CTAN (full size), \CTAN{} (|\acro{CTAN}|) and {\smc ctan}
+(small caps). Acronyms in |tugboat.cmn| use |\acro| consistently,
+except in (some) bibliographies.
+
+Several other constructions that we have found useful for both
+\plain- and \LaTeX-style input have been incorporated in
+|tugboat.cmn|. Various |\*lap|\,s (|\ulap|, |\dlap|, |\xlap|,
+|\ylap|, |\zlap|) and |\*smash|\,es provide means of setting type
+which ``laps'' into neighboring regions.
+|\Dash| is an em-dash with surrounding thinspaces, our preferred style.
+|\slash| is a breakable slash.
+|\cs{foo}| typesets |\foo|, just like \verbinline|\foo|\endverbatim (but
+since |\cs| is the usual \TUB\ \LaTeX\ convention, we support it here too).
+The macro
+\verbatim
+\makestrut [<ascender dimen>;
+ <descender dimen>]
+\endverbatim
+allows {\it ad hoc\/} construction of
+struts.
+
+|\makeatletter| |\catcode|s the |@| for internal control-sequences.
+There are also more general functions
+\verbatim
+\makeescape
+\makebgroup
+\makeegroup
+\makeletter
+\makeother
+\makeactive
+\endverbatim
+that change the category of a given character into the type mentioned
+at the end of the macro name. For example, |\makeactive\!| changes the
+category of the |!| to 13. We have given many other examples of these in
+this article. Readers may look at the end of |tugboat.cmn| after the
+|\endinput| statement to see further documentation on the contents of the file.
+
+
+\subhead * Issue makeup *
+Constructing an entire issue of \TUB\/ requires use of a few features
+that authors may notice when articles are returned for proofing.
+|\xrefto| allows for symbolic cross-referencing, but is enabled only
+late in the production process. The distribution version of
+|tugboat.cmn| defines |\xrefto| so that ``???''\ is typeset whenever it
+is called. Not to worry.
+
+We also put notes into the file since there are many things to
+remember, and these appear as |\TBremark{...}|. Authors can look for
+such things, if they are interested.
+
+
+\head * General coding suggestions *
+
+Probably 90\% of the code we receive is easily handled, and for this
+we are most appreciative. We do have suggestions of a general nature
+that authors should keep in mind as they create articles for
+transmission here or anywhere else.
+
+Those who create code find it much easier to read and understand their
+own code than do others who read the ``finished'' product. In fact,
+some people seem to forget that the electronic file will be viewed (in
+fact, studied) in addition to the printed copy. Documentation and
+uniform habits of presentation always help. Blank lines are easier to
+digest by eye than |\par|s. Tables and display math can often be
+keyed in such a way that rows and columns are clear in the source file
+on a display screen as well as in print. Explanations or warnings of
+tricky code can be {\it very} helpful. Authors should place font and
+macro definitions in one location at the beginning of an article
+whenever possible.
+
+Authors should anticipate that articles will undergo some
+transformation, and that positioning of some elements may change
+simply because articles are {\it run together\/} in \TUB. Decisions
+on linebreaks, pagebreaks, figure and table placement are generally
+made after the text is deemed correct. We avoid inserting ``hard''
+line- and page-breaks whenever possible, and will not do so, in any
+case, until the last minute. We also use floating insertions for
+figure and table placement when we first receive an article. It is
+easier for us to work with a clean file containing some bad breaks,
+overfull boxes or other unsightliness, than it is to handle a document
+containing {\it ad hoc\/} code dedicated to a beauteous (but
+narrowly specific) result.
+
+
+When authors proof their articles in formats other than that of \TUB\/
+(for example), they should expect that \TUB's changes in pagewidth and
+pagedepth may drastically alter text layout. Paragraphs are rebroken
+automatically when |\hsize| and |\vsize| change, but |\centerline| does
+not break, and we often see tables and math displays which are rigidly
+laid out. When possible, authors might use paragraphing techniques
+instead of calls to, say, |\centerline|, and they should try to code
+tables in such a way that widths of columns can be changed easily.
+Generally, authors should attempt to anticipate the work that might be
+necessary if requests for other reasonable formats of their texts are
+made. In the case of \TUB, we make a strong effort to stuff macro
+listings and tables into the two-column format. Since these types of
+items are not generally susceptible to automatic line-breaking, we give
+thanks to stuffings made by authors ahead of time. In this context, we
+recommend the use of |\verbfile{...}| (see the section `{Verbatim
+modes}') to maintain consistency between documentation and reality.
+
+Specifically in the domain of \TeX\ macros, we find that many authors
+throw in unnecessary |%| characters to end code lines. Except in
+cases where the |^^M| means something other than end-of-line,
+linebreaks can reliably be placed after control-words and numerical
+assignments. We have seen \TeX's buffer size exceeded when |%|
+was placed after {\it every\/} line.
+
+A wider perspective in the matter of naming macros can prevent
+problems that occur when definitions are overwritten as articles are
+run together. The names of control sequences used in \plain, \LaTeX,
+and \AmSTeX\ are documented and authors should avoid using them for
+other purposes. It is also wise to avoid commonly used names such as
+|\temp|, |\result|, |\1|, and |\mac| in presenting code that might be
+cribbed by other users. The frequently used technique of temporarily
+|\catcode|ing a character to be a letter (e.g.\ the |@|) provides a
+good method of hiding control sequences so that they will not be
+clobbered later. Readers are in need of small macros to do little
+tricks, and they often try suggestions brought forth in \TUB. A
+little extra effort in making these macros consistent with the macros
+in wide distribution and in making them robust will be much
+appreciated.
+
+
+\head * Electronic documentation and submissions *
+
+The TUGboat styles for both \LaTeX\ and plain \TeX\ are available on
+\CTAN\ and already included in most \TeX\ distributions:
+
+||http://ctan.org/pkg/tugboat
+http://ctan.org/pkg/tugboat-plain||
+
+Please address all electronic correspondence to the \TUB{} maildrop:
+||TUGboat@tug.org||
+Mail to personal addresses is liable to go unseen if
+vacation or illness intervenes. We also request that you supply
+an abstract of any expository article. This will be used as the
+basis for translation of abstracts to languages other than that
+in which the article is published.
+
+\smallskip
+The \TUB\ home page on the web is |http://tug.org/TUGboat|.
+
+\makesignature
+
+\endarticle
diff --git a/macros/plain/contrib/tugboat/tugboat.cmn b/macros/plain/contrib/tugboat/tugboat.cmn
new file mode 100644
index 0000000000..979b0eee65
--- /dev/null
+++ b/macros/plain/contrib/tugboat/tugboat.cmn
@@ -0,0 +1,1128 @@
+%% @texfile{
+%% filename = "tugboat.cmn",
+%% copyright = "Copyright 1993-1996,2006,2008,2011-2018 TeX Users Group.
+%% Unlimited copying and redistribution of this file
+%% are permitted as long as this file is not
+%% modified. Modifications (and redistribution of
+%% modified versions) are also permitted, but only if
+%% the resulting file is renamed."
+%% version = "see below \fileversion"
+%% date = "see below \filedate",
+%% filetype = "common (plain) macros for TUGboat",
+%% supported = "yes",
+%% email = "TUGboat@tug.org",
+%% codetable = "ISO/ASCII",
+%% keywords = "tex users group, tugboat, common macros, plain tex",
+%% abstract = "This file contains macros potentially common to
+%% the various style files for TUGboat,
+%% Among other things, it contains supplementary
+%% definitions for abbreviations and logos that
+%% appear in TUGboat."
+%% }
+%% $Id: tugboat.cmn 207 2018-09-06 17:32:17Z karl $
+
+% do nothing when reading this file a second time.
+\ifx\tugboatcmn\undefined
+ \let\next\relax
+\else
+ \expandafter\let\expandafter\next\csname endinput\endcsname
+\fi
+\next
+
+\def\fileversion{v1.24}
+\def\filedate{2018-09-05}
+
+\message{File `TUGBOAT.CMN' \fileversion \space\space <\filedate>}
+
+%
+% ***** TUGBOAT.CMN *****
+%
+% See the bottom of the file (after \endinput) for a list of
+% items defined.
+%
+
+% *************************************************************************
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** helpful shorthand *****
+%
+
+% The following allow for easier changes of category. These require that
+% the character be addressed as a control-sequence: e.g. \makeescape\/ will
+% make the / an escape character.
+
+\def\makeescape#1{\catcode`#1=0 }
+\def\makebgroup#1{\catcode`#1=1 }
+\def\makeegroup#1{\catcode`#1=2 }
+\def\makemath#1{\catcode`#1=3 }
+\def\makealign#1{\catcode`#1=4 }
+\def\makeeol#1{\catcode`#1=5 }
+\def\makeparm#1{\catcode`#1=6 }
+\def\makesup#1{\catcode`#1=7 }
+\def\makesub#1{\catcode`#1=8 }
+\def\makeignore#1{\catcode`#1=9 }
+\def\makespace#1{\catcode`#1=10 }
+\def\makeletter#1{\catcode`#1=11 }
+\def\makeother#1{\catcode`#1=12 }
+\def\makeactive#1{\catcode`#1=13 }
+\def\makecomment#1{\catcode`#1=14 }
+
+\def\makeatletter{\catcode`\@=11 } % included for historical reasons
+\chardef\other=12
+\def\makeatother{\catcode`\@=\other}
+
+ % alternative to localization
+\def\savecat#1{%
+ \expandafter\xdef\csname\string#1savedcat\endcsname{\the\catcode`#1}}
+\def\restorecat#1{\catcode`#1=\csname\string#1savedcat\endcsname}
+
+
+\savecat\@
+\makeletter\@ % used, as in PLAIN, in protected control sequences
+
+ % for restoring meanings of global control sequences
+\def\SaveCS#1{%
+ \def\scratch{\expandafter\let\csname saved@@#1\endcsname}%
+ \expandafter\scratch\csname#1\endcsname}
+\def\RestoreCS#1{%
+ \def\scratch{\expandafter\let\csname#1\endcsname}%
+ \expandafter\scratch\csname saved@@#1\endcsname}
+
+
+% To distinguish between macro files loaded
+
+\def\plaintubstyle{plain}
+\def\latextubstyle{latex}
+\ifx\tugstyloaded@\undefined\let\tugstyloaded@\plaintubstyle\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** abbreviations and logos *****
+%
+
+\def\acro#1{{\SMC #1}\spacefactor1000 }
+
+\def\AllTeX{(\La)\TeX}
+\def\AMS{American Mathematical Society}
+\def\AmS{{\the\textfont2 A}\kern-.1667em\lower.5ex\hbox
+ {\the\textfont2 M}\kern-.125em{\the\textfont2 S}}
+\def\AmSLaTeX{\AmS-\LaTeX}
+\def\AmSTeX{\AmS-\TeX}
+\def\ANSI{\acro{ANSI}}
+\def\API{\acro{API}}
+\def\ASCII{\acro{ASCII}}
+\def\aw{\acro{A\kern.04em\raise.115ex\hbox{-}W}}
+\def\AW{Addison\kern.1em-\penalty\z@\hskip\z@skip Wesley}
+\def\BibTeX{{\rm B\kern-.05em{\smc i\kern-.025emb}\kern-.08em\TeX}}
+\def\CandT{{\sl Computers \& Typesetting}}
+\def\ConTeXt{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt}
+\def\Cplusplus{C\plusplus}
+\def\plusplus{\raise.7ex\hbox{$_{++}$}}
+\def\CSS{\acro{CSS}}
+\def\CSabbr{$\cal C$\kern-.1667em\lower.5ex\hbox{$\cal S$}} % from opmac.tex
+\def\CSTUG{\CSabbr\acro{TUG}}
+\def\CTAN{\acro{CTAN}}
+\def\DTD{\acro{DTD}}
+\def\DVD{\acro{DVD}}
+\def\DVI{\acro{DVI}}
+\def\DVIPDFMx{\acro{DVIPDFM}$x$}
+\def\DVItoVDU{DVIto\kern-.12em VDU}
+\def\eTeX{$\varepsilon$-\kern-.125em\TeX}
+\def\FAQ{\acro{FAQ}}
+\def\FTP{\acro{FTP}}
+\def\GNU{\acro{GNU}}
+\def\GUI{\acro{GUI}}
+\def\Hawaii{Hawai`i}
+\def\HTML{\acro{HTML}}
+\def\HTTP{\acro{HTTP}}
+\def\IDE{\acro{IDE}}
+\def\ISBN{\acro{ISBN}}
+\def\ISO{\acro{ISO}}
+\def\ISSN{\acro{ISSN}}
+\def\JPEG{\acro{JPEG}}
+% Japanese TeX
+\def\JTeX{\leavevmode\hbox{\lower.5ex\hbox{J}\kern-.18em\TeX}}
+\def\JoT{{\sl The Joy of \TeX\/}}
+\def\LAMSTeX{L\raise.42ex\hbox{\kern-.3em\the\scriptfont2 A}%
+ \kern-.2em\lower.376ex\hbox{\the\textfont2 M}\kern-.125em
+ {\the\textfont2 S}-\TeX}
+% note -- \LaTeX definition is from LATEX.TEX 2.09 of 7 Jan 86,
+% adapted for additional flexibility in TUGboat
+%\def\LaTeX{\TestCount=\the\fam \leavevmode L\raise.42ex
+% \hbox{$\fam\TestCount\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+% note -- broken in two parts, to permit separate use of La,
+% as in (La)TeX
+\def\La{\TestCount=\the\fam \leavevmode L%
+ \setbox\TestBox=\hbox{$\fam\TestCount\scriptstyle A$}%
+ \kern-.5\wd\TestBox\raise.42ex\box\TestBox}
+\def\LaTeX{\La\kern-.15em\TeX}
+\def\LaTeXe{\LaTeX{}\kern.05em2$_{\textstyle\varepsilon}$}
+\def\LyX{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX}
+\def\MacOSX{Mac\,\acro{OS\,X}}
+\def\MathML{Math\acro{ML}}
+% for Robert McGaffey
+\def\Mc{\setbox\TestBox=\hbox{M}M\vbox to\ht\TestBox{\hbox{c}\vfil}}
+\def\MF{{\manual META}\-{\manual FONT}\spacefactor1000 }
+\def\MP{{\manual META}\-{\manual POST}\spacefactor1000 }
+\def\mf{{\smc Metafont}}
+\def\MFB{{\sl The \slMF\kern1pt book}}
+% multilingual (INRS) TeX
+\def\mtex{T\kern-.1667em\lower.5ex\hbox{\^E}\kern-.125emX\spacefactor1000 }
+\def\NTStext{N\mkern-4mu \lower.5ex\hbox{$\cal T$}\mkern-2mu S}
+\def\NTS{{\ifmmode \cal\NTStext \else $\cal\NTStext $\fi}}
+\def\OMEGA{$\Omega$}
+\def\OCP{\OMEGA\acro{CP}}
+\def\OTP{\OMEGA\acro{TP}}
+\def\Pas{Pascal}
+\def\pcMF{\leavevmode\raise.5ex\hbox{p\kern-.3ptc}MF\spacefactor1000 }
+\def\PCTeX{PC\thinspace\TeX}
+\def\pcTeX{\leavevmode\raise.5ex\hbox{p\kern-.3ptc}\TeX}
+\def\PDF{\acro{PDF}}
+\def\PGF{\acro{PGF}}
+\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC\spacefactor1000 }
+\def\PiCTeX{\PiC\kern-.11em\TeX}
+\def\plain{{\tt plain}}
+\def\PNG{\acro{PNG}}
+\def\POBox{P.\thinspace O.~Box }
+%\def\POBoxTUG{\POBox\unskip~9506, Providence, RI~02940}
+\def\PS{{Post\-Script}}
+\def\PSTricks{\acro{PST}ricks}
+\def\RGB{\acro{RGB}}
+\def\RTF{\acro{RTF}}
+\def\SC{Steering Committee}
+\def\SGML{\acro{SGML}}
+\def\SliTeX{{\rm S\kern-.06em{\smc l\kern-.035emi}\kern-.06em\TeX}}
+\def\slMF{{\manualsl META}\-{\manualsl FONT}\spacefactor1000 }
+% Atari ST (Klaus Guntermann)
+\def\stTeX{{\smc st\rm\kern-0.13em\TeX}}
+\def\SVG{\acro{SVG}}
+\def\TANGLE{{\tt TANGLE}\spacefactor1000 }
+\def\TB{{\sl The \TeX book\/}}
+\def\TP{{\sl \TeX\/}: {\sl The Program\/}}
+\def\TeX{T\kern-.1667em\lower.424ex\hbox{E}\kern-.125emX\spacefactor1000 }
+\def\TeXhax{\TeX hax}
+% Don Hosek
+\def\TeXMaG{\TeX M\kern-.1667em\lower.5ex\hbox{A}\kern-.2267emG%
+ \spacefactor1000 }
+%\def\TeXtures{\TestCount=\the\fam
+% \TeX\-\hbox{$\fam\TestCount\scriptstyle TURES$}}
+\def\TeXtures{{\it Textures}}
+\let\Textures=\TeXtures
+\def\TeXworks{\TeX\kern-.07em works}
+\def\TeXXeT{\TeX-{}-\XeT}
+\def\TFM{\acro{TFM}}
+\def\Thanh{H\`an~Th\^e\llap{\raise.5ex\hbox{\'{}}}~Th\`anh}
+\def\TIFF{\acro{TIFF}}
+\def\TikZ{Ti{\it k}Z}
+\def\ttn{{\sl TTN}\spacefactor1000 }
+\def\TTN{{\sl \TeX{} and TUG NEWS}\spacefactor1000 }
+\def\tubfont{\sl} % redefined in other situations
+\def\TUB{{\tubfont TUGboat\/}}
+\def\TUG{\TeX\ \UG}
+\def\tug{\acro{TUG}}
+\def\UG{Users Group}
+\def\UNIX{\acro{UNIX}}
+\def\UTF{\acro{UTF}}
+\def\VAX{V\kern-.12em A\kern-.1em X\spacefactor1000 }
+\def\VorTeX{V\kern-2.7pt\lower.5ex\hbox{O\kern-1.4pt R}\kern-2.6pt\TeX}
+\def\XeT{X\kern-.125em\lower.424ex\hbox{E}\kern-.1667emT\spacefactor1000 }
+\def\XML{\acro{XML}}
+\def\WEB{{\tt WEB}\spacefactor1000 }
+\def\WEAVE{{\tt WEAVE}\spacefactor1000 }
+% the Xe\TeX logo requires Eplain, which is not assumed here, so
+% the definition is omitted.
+\def\XHTML{\acro{XHTML}}
+\def\XSLT{\acro{XSLT}}
+
+%********************************************************************
+
+\newlinechar=`\^^J
+\normallineskiplimit=1pt
+
+\clubpenalty=10000
+\widowpenalty=10000
+
+\def\NoParIndent{\parindent=\z@}
+\newdimen\normalparindent \normalparindent=20pt % plain = 20pt
+\def\NormalParIndent{\global\parindent=\normalparindent}
+\NormalParIndent
+
+\def\BlackBoxes{\overfullrule=5pt }
+\def\NoBlackBoxes{\overfullrule=\z@ }
+\def\newline{\hskip\z@ plus \pagewd \break}
+\def\nohyphens{\hyphenpenalty\@M\exhyphenpenalty\@M}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** utility registers and definitions *****
+%
+
+% test registers for transient use; paired - internal/external
+\newbox\T@stBox \newbox\TestBox
+\newcount\T@stCount \newcount\TestCount
+\newdimen\T@stDimen \newdimen\TestDimen
+\newif\ifT@stIf \newif\ifTestIf
+
+
+% \cs existence test, stolen from TeXbook exercise 7.7
+\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax }
+
+% LaTeX conventions which are also useful here.
+\ifx\tugstyloaded@\plaintubstyle
+ \let\@@input\input
+ \def\iinput#1{\@@input#1 }
+ \def\tub@inputcheck{\if\@nextchar\bgroup
+ \expandafter\iinput\else\expandafter\@@input\fi}
+ \def\input{\futurelet\@nextchar\tub@inputcheck}
+\fi
+
+% Smashes repeated from AMS-TeX; PLAIN implements only full \smash .
+\newif\iftop@ \newif\ifbot@
+\def\topsmash{\top@true\bot@false\smash@}
+\def\botsmash{\top@false\bot@true\smash@}
+\def\smash{\top@true\bot@true\smash@}
+\def\smash@{\relax\ifmmode\def\next{\mathpalette\mathsm@sh}%
+ \else\let\next\makesm@sh\fi \next }
+\def\finsm@sh{\iftop@\ht\z@\z@\fi\ifbot@\dp\z@\z@\fi\box\z@}
+
+
+% Vertical `laps'; cf. \llap and \rlap
+\long\def\ulap#1{\vbox to \z@{\vss#1}}
+\long\def\dlap#1{\vbox to \z@{#1\vss}}
+
+% And centered horizontal and vertical `laps'
+\def\xlap#1{\hbox to \z@{\hss#1\hss}}
+\long\def\ylap#1{\vbox to \z@{\vss#1\vss}}
+\long\def\zlap#1{\ylap{\xlap{#1}}}
+
+
+% Avoid unwanted vertical glue when making up pages.
+\def\basezero{\baselineskip\z@skip \lineskip\z@skip}
+
+
+% Empty rules for special occasions
+\def\nullhrule{\hrule height\z@ depth\z@ width\z@ }
+\def\nullvrule{\vrule height\z@ depth\z@ width\z@ }
+
+% Support ad-hoc strut construction.
+\def\makestrut[#1;#2]{\vrule height#1 depth#2 width\z@ }
+
+% Construct box for figure pasteup, etc.
+% height = #1, width = #2, rule thickness = #3
+\def\drawoutlinebox[#1;#2;#3]{\T@stDimen=#3
+ \vbox to#1{\hrule height\T@stDimen depth\z@
+ \vss\hbox to#2{\vrule width\T@stDimen
+ \hfil\makestrut[#1;\z@]%
+ \vrule width\T@stDimen}\vss
+ \hrule height\T@stDimen depth\z@}}
+
+
+% Today's date, to be printed on drafts. Based on TeXbook, p.406.
+
+\def\today{\number\day\space \ifcase\month\or
+ Jan \or Feb \or Mar \or Apr \or May \or Jun \or
+ Jul \or Aug \or Sep \or Oct \or Nov \or Dec \fi
+ \number\year}
+
+% Current time; this may be system dependent!
+\newcount\hours
+\newcount\minutes
+\def\SetTime{\hours=\time
+ \global\divide\hours by 60
+ \minutes=\hours
+ \multiply\minutes by 60
+ \advance\minutes by-\time
+ \global\multiply\minutes by-1 }
+\SetTime
+\def\now{\number\hours:\ifnum\minutes<10 0\fi\number\minutes}
+
+\def\Now{\today\ \now}
+
+\newif\ifPrelimDraft \PrelimDraftfalse
+
+\def\midrtitle{\ifPrelimDraft {{\tensl preliminary draft, \Now}}\fi}
+
+% Section heads. The following set of macros is used to set the large
+% TUGboat section heads (e.g. "General Delivery", "Fonts", etc.)
+
+\newdimen\PreTitleDrop \PreTitleDrop=\z@
+
+\newskip\AboveTitleSkip \AboveTitleSkip=12pt
+\newskip\BelowTitleSkip \BelowTitleSkip=8pt
+
+\newdimen\strulethickness \strulethickness=.6pt
+\def\sthrule{\hrule height\strulethickness depth \z@ }
+\def\stvrule{\vrule width\strulethickness }
+
+\newdimen\stbaselineskip \stbaselineskip=18pt
+
+\def\@sectitle #1{%
+ \par \SecTitletrue
+ \penalty-1000
+ \secsep
+ \vbox{
+ \sthrule
+ \hbox{%
+ \stvrule
+ \vbox{
+ \advance\hsize by -2\strulethickness
+ \raggedcenter
+ \def\\{\unskip\break}%
+ \sectitlefont
+ \makestrut[2\stfontheight;\z@]
+ #1\unskip
+ \makestrut[\z@;\stfontheight]\endgraf
+ }%
+ \stvrule }
+ \sthrule }
+ \nobreak
+ \vskip\baselineskip }
+
+% distance between articles which are run together
+\def\secsep{\vskip 5\baselineskip}
+
+\newif\ifSecTitle
+\SecTitlefalse
+
+
+
+% Registration marks; permit them to be invisible
+
+\newdimen\RegRuleThickness \RegRuleThickness=0.2pt
+
+\def\HorzR@gisterRule{\vrule height\RegRuleThickness depth \z@ width 0.5in }
+\def\DownShortR@gisterRule{%
+ \vrule height 0.2pt depth 1pc width\RegRuleThickness }
+\def\UpShortR@gisterRule{\vrule height 1pc depth \z@ width\RegRuleThickness }
+
+
+% ``T'' marks centered on top and bottom edges of paper
+
+\def\ttopregister{\dlap{%
+ \hbox to \trimwd{\HorzR@gisterRule \hfil \HorzR@gisterRule
+ \HorzR@gisterRule \hfil \HorzR@gisterRule}%
+ \hbox to \trimwd{\hfil \DownShortR@gisterRule \hfil}}}
+\def\tbotregister{\ulap{%
+ \hbox to \trimwd{\hfil \UpShortR@gisterRule \hfil}%
+ \hbox to \trimwd{\HorzR@gisterRule \hfil \HorzR@gisterRule
+ \HorzR@gisterRule \hfil \HorzR@gisterRule}}}
+
+\def\topregister{\ttopregister}
+\def\botregister{\tbotregister}
+
+
+
+% PLAIN's definition of \raggedright doesn't permit any stretch, and
+% results in too many overfull boxes. We also turn off hyphenation.
+\newdimen\raggedskip \raggedskip=\z@
+\newdimen\raggedstretch \raggedstretch=5em % ems of font set now (10pt)
+\newskip\raggedparfill \raggedparfill=\z@ plus 1fil
+
+\def\raggedspaces{\spaceskip=.3333em \relax \xspaceskip=.5em \relax }
+% Some applications may have to add stretch, in order to avoid
+% all overfull boxes.
+
+\def\raggedright{%
+ \nohyphens
+ \rightskip=\raggedskip plus\raggedstretch \raggedspaces
+ \parfillskip=\raggedparfill }
+\def\raggedleft{%
+ \nohyphens
+ \leftskip=\raggedskip plus\raggedstretch \raggedspaces
+ \parfillskip=\z@skip }
+\def\raggedcenter{%
+ \nohyphens
+ \leftskip=\raggedskip plus\raggedstretch
+ \rightskip=\leftskip \raggedspaces
+ \parindent=\z@ \parfillskip=\z@skip }
+
+\def\normalspaces{\spaceskip\z@skip \xspaceskip\z@skip }
+
+
+% Miscellaneous useful stuff
+
+\def\,{\relax\ifmmode\mskip\thinmuskip\else\thinspace\fi}
+
+%\def~{\penalty\@M \ } % tie -- this is PLAIN value; it is reset in AMS-TeX
+\def~{\unskip\nobreak\ \ignorespaces} % AMS-TeX value
+
+\def\newbox{\alloc@4\box\chardef\insc@unt} % remove \outer
+\def\boxcs#1{\box\csname#1\endcsname}
+\def\setboxcs#1{\setbox\csname#1\endcsname}
+\def\newboxcs#1{\expandafter\newbox\csname#1\endcsname}
+
+\def\gobble#1{}
+
+\def\vellipsis{%
+ \leavevmode\kern0.5em
+ \raise1pt\vbox{\baselineskip6pt\vskip7pt\hbox{.}\hbox{.}\hbox{.}}
+ }
+
+\def\bull{\vrule height 1ex width .8ex depth -.2ex } % square bullet
+\def\cents{{\rm\raise.2ex\rlap{\kern.05em$\scriptstyle/$}c}}
+\def\cs#1{{\tt \char`\\#1}}
+\def\Dag{\raise .6ex\hbox{$\scriptstyle\dagger$}}
+
+\def\careof{\leavevmode\hbox{\raise.75ex\hbox{c}\kern-.15em
+ /\kern-.125em\smash{\lower.3ex\hbox{o}}} \ignorespaces}
+\def\sfrac#1/#2{\leavevmode\kern.1em
+ \raise.5ex\hbox{\the\scriptfont\z@ #1}\kern-.1em
+ /\kern-.15em\lower.25ex\hbox{\the\scriptfont\z@ #2}}
+
+\def\thinskip{\hskip 0.16667em\relax}
+\def\endash{--}
+\def\emdash{\endash-}
+\def\d@sh#1#2{\unskip#1\thinskip#2\thinskip\ignorespaces}
+\def\dash{\d@sh\nobreak\endash}
+\def\Dash{\d@sh\nobreak\emdash}
+\def\ldash{\d@sh\empty{\hbox{\endash}\nobreak}}
+\def\rdash{\d@sh\nobreak\endash}
+\def\Ldash{\d@sh\empty{\hbox{\emdash}\nobreak}}
+\def\Rdash{\d@sh\nobreak\emdash}
+
+% Hack to permit automatic hyphenation after an actual hyphen.
+
+\def\hyph{-\penalty\z@\hskip\z@skip }
+
+\def\slash{/\penalty\z@\hskip\z@skip } % "breakable" slash
+
+% Adapted from c.t.t posting by Donald Arseneau, 26 May 93.
+\def\nth#1{\TestCount=#1\relax
+ \ifnum\TestCount <0 \multiply\TestCount by\m@ne \fi % subdue negatives
+ \T@stCount=\TestCount
+ \divide\T@stCount by 100 \multiply\T@stCount by 100
+ \advance\TestCount by-\T@stCount % n mod 100
+ \ifnum\TestCount >20 \T@stCount=\TestCount
+ \divide\T@stCount by 10 \multiply\T@stCount by 10
+ \advance\TestCount by-\T@stCount % n mod 10
+ \fi
+ \T@stCount=\the\fam\relax
+ $\fam\T@stCount#1^{\fam\T@stCount
+ \ifcase\TestCount th% 0th
+ \or st% 1st
+ \or nd% 2nd
+ \or rd% 3rd
+ \else th% nth
+ \fi
+ }$}
+
+
+% Format information on reviewed items for book review articles.
+
+\def\Review:#1{\ifx[#1\@Rev[%
+ \else Book review:\enspace\sl #1%
+ \fi
+ }
+\def\@Rev[#1]{\ignorespaces#1\unskip:\enspace\ignorespaces\sl}
+\def\reviewitem{%
+ \def\revauth##1{\def\therevauth{##1, }\ignorespaces}%
+ \def\revtitle##1{\def\therevtitle{{\sl##1}. }\ignorespaces}%
+ \def\revpubinfo##1{\def\therevpubinfo{##1.}\ignorespaces}%
+ }
+\def\endreviewitem{{\noindent\interlinepenalty=10000
+ \therevauth\therevtitle\therevpubinfo\endgraf}%
+ \vskip\medskipamount
+ \ifx\tugstyloaded@\plaintubstyle
+ \DeleteOptionalSpacesandPars{\noindent\ignorespaces}%
+ \fi
+ }
+
+\def\booktitle#1{{\sl #1\/}}
+
+
+% Dates and other items which identify the volume and issue
+
+% To use: \vol 5, 2.
+% \issdate October 1984.
+% \issueseqno=10
+% For production, these are set in a separate file, TUGBOT.DATES,
+% which is issue-specific.
+
+\newcount\issueseqno \issueseqno=-1
+
+\def\v@lx{\gdef\volx{Volume~\volno~(\volyr), No.~\issno}}
+\def\volyr{}
+\def\volno{}
+\def\vol #1,#2.{\gdef\volno{#1\unskip}%
+ \gdef\issno{\ignorespaces#2\unskip}%
+ \setbox\TestBox=\hbox{\volyr}%
+ \ifdim \wd\TestBox > .2em \v@lx \fi }
+
+% Original issue date included month and year.
+\def\issdate #1#2 #3.{\gdef\issdt{#1#2 #3}\gdef\volyr{#3}%
+ \gdef\bigissdt{#1{\smc\uppercase{#2}} #3}%
+ \setbox\TestBox=\hbox{\volno}%
+ \ifdim \wd\TestBox > .2em \v@lx \fi }
+% Beginning in 2002, only year
+\def\issyear #1.{\gdef\issdt{#1}\gdef\volyr{#1}%
+ \gdef\bigissdt{#1}%
+ \setbox\TestBox=\hbox{\volno}%
+ \ifdim \wd\TestBox > .2em \v@lx \fi }
+
+\vol 0, 0. % volume, issue.
+\issdate Thermidor, 2001. % month, year of publication
+
+
+\ifx\tugstyloaded@\plaintubstyle
+ \def\tubissue#1(#2){\TUB~#1, no.~#2}
+\else
+ \def\tubissue#1#2{\TUB~#1, no.~#2}
+\fi
+
+\def\xEdNote{{\tenuit Editor's note:\enspace }}
+
+
+% TUGboat conventions include the issue number in the file name.
+% Permit this to be incorporated into file names automatically.
+% If issue number = 11, \Input filnam will read tb11filnam.tex.
+
+
+\def\infil@{\jobname}
+\def\Input #1 {\ifnum\issueseqno<0 \def\infil@{#1}%
+ \else \def\infil@{tb\number\issueseqno#1}\fi
+ \edef\jobname{\infil@}\@readFLN
+ \@@input \infil@\relax
+ \ifRMKopen\immediate\closeout\TBremarkfile\RMKopenfalse\fi}
+
+\newif\ifRMKopen \RMKopenfalse
+\newwrite\TBremarkfile
+\def\TBremarkON#1{%
+ \ifRMKopen\else\RMKopentrue\immediate\openout\TBremarkfile=\infil@.rmk \fi
+ \toks@={#1}%
+ \immediate\write\TBremarkfile{^^J\the\toks@}%
+ \immediate\write16{^^JTBremark:: \the\toks@^^J}}
+\def\TBremarkOFF#1{}
+\let\TBremark=\TBremarkOFF
+
+% for marking locations in articles that pertain to remarks
+% in another file of editorial comments
+\def\TUBedit#1{}
+
+% for using different filenames in Providence than those supplied
+% by authors
+
+\def\TUBfilename#1#2{\expandafter\def\csname file@@#1\endcsname{#2}}
+\newread\@altfilenames
+\def\@readFLN{\immediate\openin\@altfilenames=\jobname.fln
+ \ifeof\@altfilenames\let\@result\relax\else
+ \def\@result{\@@input\jobname.fln }\fi
+ \immediate\closein\@altfilenames
+ \@result}
+\@readFLN
+\everyjob=\expandafter{\the\everyjob\@readFLN}
+
+% Following needs to work entirely in TeX's mouth
+\def\@tubfilename#1{\expandafter\ifx\csname file@@#1\endcsname\relax
+ #1\else\csname file@@#1\endcsname\fi}
+
+\def\fileinput#1{\@@input\@tubfilename{#1} }
+
+% Write out (both to a file and to the log) the starting page number
+% of an article, to be used for cross references and in contents.
+% \pagexref is used for articles fully processed in the TUGboat run.
+% \PageXref is used for "extra" pages, where an item is submitted
+% as camera copy, and only running heads (at most) are run.
+
+\ifx\tugstyloaded@\plaintubstyle
+\def\pagexrefON#1{%
+ \write-1{\def\expandafter\noexpand\csname#1\endcsname{\number\pageno}}%
+ \write\ppoutfile{%
+ \def\expandafter\noexpand\csname#1\endcsname{\number\pageno}}%
+ }
+\def\PageXrefON#1{%
+ \immediate\write-1{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\pageno}}%
+ \immediate\write\ppoutfile{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\pageno}}}
+\else
+\def\pagexrefON#1{%
+ \write-1{\def\expandafter\noexpand\csname#1\endcsname{\number\c@page}}%
+ \write\ppoutfile{%
+ \def\expandafter\noexpand\csname#1\endcsname{\number\c@page}}%
+ }
+\def\PageXrefON#1{%
+ \immediate\write-1{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\c@page}}%
+ \immediate\write\ppoutfile{\def\expandafter
+ \noexpand\csname#1\endcsname{\number\c@page}}}
+\fi
+
+\def\pagexrefOFF#1{}
+\let\pagexref=\pagexrefOFF
+\def\PageXrefOFF#1{}
+\let\PageXref=\PageXrefOFF
+
+\def\xreftoON#1{%
+ \ifundefined{#1}%
+ ???\TBremark{Need cross reference for #1.}%
+ \else\csname#1\endcsname\fi}
+\def\xreftoOFF#1{???}
+\let\xrefto=\xreftoOFF
+
+\def\TBdriver#1{}
+
+
+% Authors, addresses, signatures
+
+\def\theauthor#1{\csname theauthor#1\endcsname}
+\def\theaddress#1{\csname theaddress#1\endcsname}
+\def\thenetaddress#1{\csname thenetaddress#1\endcsname}
+
+\newcount\count@@
+\def\@defaultauthorlist{% % standard way of listing authors
+ \count@=\authornumber
+ \advance\count@ by -2
+ \count@@=0
+ \loop
+ \ifnum\count@>0
+ \advance\count@@ by 1
+ \ignorespaces\csname theauthor\number\count@@\endcsname\unskip,
+ \advance\count@ by -1
+ \repeat
+ \count@=\authornumber
+ \advance\count@ by -\count@@
+ \ifnum\authornumber>0
+ \ifnum\count@>1
+ \count@=\authornumber
+ \advance\count@ by -1
+ \ignorespaces\csname theauthor\number\count@\endcsname\unskip\ and
+ \fi
+ \ignorespaces\csname theauthor\number\authornumber\endcsname\unskip
+ \fi
+ }
+
+\def\signature#1{\def\@signature{#1}}
+\def\@signature{\@defaultsignature}
+
+\def\@defaultsignature{%
+ \count@=0
+ \loop
+ \ifnum\count@<\authornumber
+ \medskip
+ \advance\count@ by \@ne
+ \signaturemark
+ \theauthor{\number\count@}\\
+ \leavevmode\theaddress{\number\count@}\\
+ \leavevmode\thenetaddress{\number\count@}\\
+ \repeat
+ }
+
+\newdimen\signaturewidth \signaturewidth=12pc
+\def\makesignature{%
+ \par
+ \penalty9000
+ \vskip\medskipamount
+ \rightline{%
+ \vbox{\hsize\signaturewidth \ninepoint \raggedright
+ \parindent \z@ \everypar={\hangindent 1pc }
+ \parskip \z@skip
+ \netaddrat
+ \netaddrpercent
+ \def\|{\unskip\hfil\break}%
+ \def\\{\endgraf}%
+ \def\net{\tt}%
+ \def\phone{\rm Phone: } \rm
+ \@signature}}
+ }
+
+{\makeactive\@
+ \gdef\signatureat{\makeactive\@\def@{\char"40\discretionary{}{}{}}}
+ \makeactive\%
+ \gdef\signaturepercent{\makeactive\%\def%{\char"25\discretionary{}{}{}}}
+}
+
+\def\signaturemark{\leavevmode\llap{$\diamond$\enspace}}
+
+
+% some hyphenation exceptions, unless \tubomithyphenations
+% is defined (used in tb*hyf.tex).
+\ifx\tubomithyphenations\@thisisundefined
+\hyphenation{Del-a-ware Dijk-stra Duane Eijk-hout
+ Flor-i-da Free-BSD Ghost-script Ghost-view
+ Hara-lam-bous Jac-kow-ski Karls-ruhe
+ Mac-OS Ma-la-ya-lam Math-Sci-Net
+ Net-BSD Open-BSD Open-Office
+ Pfa-Edit Post-Script Rich-ard Skoup South-all
+ Vieth VM-ware Win-Edt
+ acro-nym acro-nyms analy-sis ap-pen-di-ces ap-pen-dix asyn-chro-nous
+ bib-lio-graph-i-cal bit-map bit-mapped bit-maps buf-fer buf-fers bool-ean
+ col-umns com-put-able com-put-abil-ity cus-tom-iz-able
+ data-base data-bases
+ de-allo-cate de-allo-cates de-allo-cated de-allo-ca-tion
+ de-riv-a-tive de-riv-a-tives de-riv-a-ble der-i-va-tion dis-trib-ut-able
+ es-sence
+ fall-ing
+ half-way
+ in-fra-struc-ture
+ key-note
+ long-est
+ ma-gyar man-u-script man-u-scripts meta-table meta-tables
+ mne-mon-ic mne-mon-ics mono-space mono-spaced
+ name-space name-spaces
+ off-line over-view
+ pal-ettes par-a-digm par-a-dig-mat-ic par-a-digms
+ pipe-line pipe-lines
+ plug-in plug-ins pres-ent-ly pro-gram-mable
+ re-allo-cate re-allo-cates re-allo-cated re-printed
+ set-ups se-vere-ly spell-ing spell-ings stand-alone strong-est
+ sub-ex-pres-sion sub-tables sur-gery syn-chro-ni-city syn-chro-nous
+ text-height text-length text-width
+ time-stamp time-stamped time-stamps
+ vis-ual vis-ual-ly
+ which-ever white-space white-spaces wide-spread wrap-around
+}
+\fi
+
+\restorecat\@
+
+\let\tugboatcmn = t % so we can avoid being read twice.
+
+\endinput
+
+
+% *************************************************************************
+
+Contents and Notes
+------------------
+
+\makeescape, ..., \makecomment allow users to change category
+codes a little more easily.
+
+\savecat#1 and \restorecat#1 will save and restore the category
+of a given character. These are useful in cases where one doesn't
+wish to localize the settings and therefore be required to globally
+define or set things.
+
+\SaveCS#1 and \RestoreCS#1 save and restore `meanings' of control
+sequences. Again this is useful in cases where one doesn't want to
+localize or where global definitions clobber a control sequence which
+is needed later with its `old' definition.
+
+Abbreviations. Just a listing with indications of expansion where
+that may not be obvious. For full definitions, see real code above.
+
+\AllTeX (\La)\TeX
+\AMS American Mathematical Society
+\AmSLaTeX
+\AmSTeX
+\ANSI
+\ASCII
+\aw A-W (abbreviation for Addison-Wesley)
+\AW Addison-Wesley
+\BibTeX
+\CandT Computers \& Typesetting
+\ConTeXt
+\Cplusplus C++
+\CSS
+\CTAN
+\DTD
+\DVD
+\DVI
+\DVIPDFMx
+\DVItoVDU
+\eTeX
+\FAQ
+\FTP
+\GNU
+\GUI
+\Hawaii Hawai`i
+\HTML HTML
+\HTTP
+\ISBN ISBN
+\ISO
+\ISSN
+\JPEG
+\JTeX
+\JoT The Joy of \TeX
+\LAMSTeX
+\LaTeX
+\LaTeXe
+\MacOSX Mac OS X
+\MathML
+\Mc M ``w/ raised c''
+\MF METAFONT
+\mf Metafont (using small caps)
+\MFB The Metafont book
+\MP METAPOST
+\mtex multilingual TeX
+\NTS
+\OMEGA
+\OCP \Omega CP
+\OTP \Omega TP
+\Pas Pascal
+\pcMF pcMF
+\PCTeX
+\pcTeX
+\PDF PDF
+\PiCTeX
+\plain plain (in typewriter font)
+\PNG
+\POBox P. O. Box
+\POBoxTUG TUG PO Box
+\PS PostScript
+\RTF
+\SC Steering Committee
+\SGML SGML
+\SliTeX
+\slMF Metafont (slanted)
+\stTeX TeX for the Atari ST
+\SVG
+\TANGLE
+\TB The \TeX book
+\TP \TeX the Program
+\TeX
+\TeXhax
+\TeXMaG
+\TeXtures
+\Textures
+\TeXXeT
+\TFM
+\Thanh Han The Thanh
+\TIFF
+\ttn TTN
+\TTN \TeX and TUG News
+\TUB TUGboat
+\TUG TeX Users Group
+\tug
+\UG Users Group
+\UNIX
+\UTF
+\VAX
+\VorTeX
+\XeT
+\XML
+\WEB
+\WEAVE
+\XHTML
+\XSLT
+
+\NoBlackBoxes turns off marginal rules marking overfull boxes
+\BlackBoxes turns them back on
+\newline horizontal glue plus a break
+
+\ifundefined#1 checks argument with \csname against \relax
+
+\topsmash smashes above baseline (from AMSTeX)
+\botsmash smashes below baseline (from AMSTeX)
+\smash smashes both (from plain)
+
+\ulap lap upwards
+\dlap lap downwards
+\xlap reference point at center horizontally; 0 width
+\ylap reference point at center vertically; 0 height, depth
+\zlap combination \xlap and \ylap
+
+\basezero to avoid insertion of baselineskip and lineskip glue
+
+\nullhrule empty \hrule
+\nullvrule empty \vrule
+
+\makestrut[#1;#2] ad hoc struts; #1=height, #2=depth
+
+\today today's date
+\SetTime converts \time to hours, minutes
+\now displays time in hours and minutes
+\Now shows current date and time
+
+\ifPrelimDraft flag to indicate status as preliminary draft
+
+\rtitlex TUGboat volume and number info for running head
+\midrtitle information for center of running head
+
+\HorzR@gisterRule pieces of registration marks ("trimmarks")
+\DownShortR@gisterRule
+\UpShortR@gisterRule
+
+\ttopregister top registration line with `T' in center
+\tbotregister bottom registration line with inverted `T' in center
+\topregister register actually used
+\botregister
+
+
+\raggedskip parameters used for ragged settings
+\raggedstretch
+\raggedparfill
+\raggedspaces
+
+\raggedright
+\raggedleft
+\raggedcenter
+\normalspaces
+\raggedbottom
+
+\bull square bullet
+\cents ``cents'' sign
+\Dag superscripted dagger
+\careof c/o
+\sfrac slashed fraction
+
+\dash en-dash surrounded by thinspaces; only breakable AFTER
+\Dash em-dash, as above
+
+\hyph permit automatic hyphenation after an actual hyphen
+
+\slash "breakable" slash
+\nth for obtaining "1^{st}", "2^{nd}", 3^{rd}, etc.
+
+\tubissue gets \TUB followed by volume and issue numbers
+
+\xEdNote Editor's Note:
+
+\Review: Review: (for title of book review article)
+\reviewitem begin data for item being reviewed
+ \revauth with one argument, author(s) of item being reviewed
+ \revtitle with one argument, title of ...
+ \revpubinfo with one argument, other info pertaining to ...
+\endreviewitem end data for item being reviewed
+\booktitle with one argument, format book title in text
+
+\Input \input with some other bookkeeping for
+ case where multiple articles are put together
+
+\TBremark reminder to TUGboat editorial staff
+\TBremarkON
+\TBremarkOFF
+
+\pagexref used to write out page numbers to screen and
+\pagexrefON external files
+\pagexrefOFF
+\PageXref
+\PageXrefON
+\PageXrefOFF
+
+\xrefto used for symbolic cross-reference to other pages
+\xreftoON in TUGboat
+\xreftoOFF
+
+\TBdriver marks code which only takes effect when articles
+ are run together in a driver file
+
+\signatureat items for signatures
+\signaturepercent
+\signaturemark
+\signaturewidth
+
+
+% *************************************************************************
+
+% Change history
+------------------
+
+Version Date Changes
+------- --------- ---------------------------------------------------
+1.24 5 Sep 18 \tugboatcmn sentinent, \plusplus separated out.
+
+1.23 19 Mar 17 move \manual and \manualsl to tugboat.sty.
+
+1.22 31 Oct 16 define \CSabbr, \CSTUG;
+ use logosl10 (\manualsl) for \slMF.
+
+1.21 2 Aug 13 define \LyX
+
+1.20 4 Apr 12 allow omission of hyphenation list
+
+1.19 20 May 08 additions to hyphenation list
+
+1.18 7 Jun 06 another fix to repair a stupid mistake
+
+1.16-1.17 24 May 06 fixes to repair stupid mistakes in 1.15
+
+1.15 30 Apr 06 additions to match ltugboat.cls v2.0, 2006/04/25:
+ name macros and hyphenation exceptions
+
+1.14 21 Jun 04 added numerous name macros and hyphenation exceptions
+
+1.13l 15 Nov 03 updated header address to Portland, OR
+
+1.13k 28 Jun 03 added \RegRuleThickness to allow easy modification
+
+1.13j 16 Feb 03 added \issyear to handle removal of month
+
+1.13i 14 Oct 96 updated header and installed CRC-16 checksum
+
+1.13h 10 Nov 95 added \acro and converted all \SMC entries to use it
+ added acronyms \HTML and \PDF
+
+1.13g 4 Nov 95 added \MP for METAPOST
+
+1.13f 15 Apr 94 added \@Rev[...] to permit variable text for reviews
+
+1.13e 14 Mar 94 revised definition of \La to use actual width of A
+ added \LaTeXe definition
+
+1.13d 5 Jan 94 added {} to \TeX-{}-\Xet
+
+1.13c 11 Nov 93 removed extraneous " from header
+ added \AmSLaTeX, \CTAN, \ISSN
+
+1.13b 4 Nov 93 added \hyphenation{Eijk-hout}
+
+1.13a 18 Aug 93 corrected \nth to produce ordinal in current font
+
+1.13 27 May 93 upgraded \nth based on algorithm by Donald Arseneau
+ in comp.text.tex, 26 May 93
+
+1.12 19 Feb 93 added \spacefactor1000 to all replacement text that ends
+ with a capital letter, so that if these items end a
+ sentence, there will be a normal end-of-sentence space
+ removed \hbox from definitions of \TeX, etc.; no longer
+ needed
+ changed definition of \TeXXeT to use \XeT rather than
+ unique dimensions
+ installed new TUG address and phone number in header
+ reformatted change history, similar to tugboat.sty
+
+1.11c 29 Nov 92 added macros to format book review and related items for
+ review articles
+ added \SGML
+ changed def of \UNIX to use \SMC rather than \smc
+
+1.11b 20 Oct 92 added font code for \ISBN font ("big small caps")
+ added \Textures as the current form
+
+1.11a 6 Jun 92 added \drawoutlinebox
+
+1.11 15 Mar 92 added \ttn and \TTN
+
+1.10 8 Mar 92 added \AllTeX
+ changed file name from .COM to .CMN to avoid objection
+ that .COM files have a special significance on DOS
+ and other operating systems
+ added standard headers, prepared for archive installation
+
+1.09 5 May 91 inserted large penalty at top of \makesignature to
+ inhibit break between article and signature
+
+1.08 24 Oct 90 modified signature slightly (took \medskip out of box)
+ fixed bug in previous rendition of \@readFLN
+
+1.07 16 Oct 90 added \TUBedit to facilitate editorial marking
+ added \iinput variant from LaTeX; \input redefined now
+ as with LaTeX
+ added mechanism for local file names in Providence
+ (\TUBfilename, \fileinput, etc.)
+ \tugstyload@ defaults to plain if it's not defined
+
+1.06 3 Aug 90 added \leavevmode to \@defaultsignature so that
+ \everypar is not executed inside a group
+ dash routines modified and corrected (to suppress
+ insertion of discretionary node after -- and ---;
+ and to allow hyphenation of ensuing word)
+ changed \lDash to \Ldash and \rDash to \Rdash
+
+1.05 29 Mar 90 added \lDash and \rDash for `parenthetical' dashing
+ added \TP for TeX: The Program
+ added \relax after file input of \Input
+ added \relax before \ifmmode of \,
+
+1.04 28 Feb 90 modified pagexref macros to work in both plain and
+ latex styles (this should NOT affect authors)
+
+1.03 26 Feb 90 removed <tab>s and adjusted definition of \slMF
+
+1.02 25 Feb 90 added definitions of \plaintubissue, \latextubissue
+ added definition of \tubissue
+
+1.01 19 Feb 90 added \signaturewidth to allow for modification
+ added \nth to obtain 1^{st}, etc.
diff --git a/macros/plain/contrib/tugboat/tugboat.sty b/macros/plain/contrib/tugboat/tugboat.sty
new file mode 100644
index 0000000000..5320e42097
--- /dev/null
+++ b/macros/plain/contrib/tugboat/tugboat.sty
@@ -0,0 +1,2308 @@
+%% @texfile{
+%% filename = "tugboat.sty",
+%% copyright = "Copyright 1993,1999,2003,2006,2011-2019 TeX Users Group.
+%% Unlimited copying and redistribution of this file
+%% are permitted as long as this file is not
+%% modified. Modifications (and redistribution of
+%% modified versions) are also permitted, but only if
+%% the resulting file is renamed."
+%% version = "see below \fileversion"
+%% date = "see below \filedate",
+%% filetype = "Plain TeX macros for TUGboat",
+%% requires = "tugboat.cmn",
+%% supported = "yes",
+%% email = "TUGboat@tug.org",
+%% codetable = "ISO/ASCII",
+%% keywords = "tex users group, tugboat, plain tex",
+%% abstract = "This file contains the plain-based macros
+%% for preparation of items in TUGboat, the
+%% Communications of the TeX Users Group.",
+%% }
+%% $Id: tugboat.sty 242 2019-06-12 22:01:32Z karl $
+
+\def\thistubstyle{plain}
+\def\fileversion{v1.25}
+\def\filedate{2019-06-10}
+
+% general items
+
+\def\makeatletter{\catcode`\@=11 }
+\makeatletter % used, as in PLAIN, in protected control sequences
+
+% stop reading this file if it's been loaded already
+\ifx\tugstyloaded@\thistubstyle\makeatother\initializearticle
+ \endinput\else\let\tugstyloaded@\thistubstyle\fi
+
+\message{File `TUGBOAT.STY' \fileversion \space\space <\filedate>}
+
+\input tugboat.cmn % macros intended to be common to tugboat.sty and
+ % ltugboat.sty (latex style file)
+
+
+% some things with the same names as in, or reiterated from, AMS-TeX
+
+\def\document{} % override an AMS-TeX convention
+
+\output{\output@}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Directory.
+%
+% ** fonts
+% ** page dimensions
+% ** headers/footers
+% ** page adjustment
+% ** output
+% ** general mechanism for tags
+% ** titles, authors, addresses
+% ** heads
+% ** text and subtext
+% ** lists
+% ** verbatim
+% ** figures
+% ** utilities
+% ** initialization
+
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** fonts *****
+%
+
+
+% Struts give ascenders and descenders to assist in baseline alignment
+% (e.g. of adjoining vertical boxes); useful only with text fonts.
+%
+% \strut is defined in PLAIN . The structure of \strutt is equivalent.
+
+\newbox\struttbox
+\def\strutt{\relax\ifmmode\copy\struttbox\else\unhcopy\struttbox\fi}
+
+% Struts are given the following dimensions for use in TUGboat:
+%
+% \strut = height/depth of parenthesis in current font
+% (not the same as PLAIN)
+% \strutt height + depth = \normalbaselineskip,
+% height = same as \strut
+% (equivalent to PLAIN \strut )
+
+
+% The fonts below are sufficient for most ordinary TUGboat production.
+% Additional titling fonts are defined elsewhere, and occasionally an
+% extra font will be needed for a particular item (e.g. the device
+% charts) and defined in that file.
+
+% All PLAIN CM fonts.
+
+\font\tenrm=cmr10
+\font\ninerm=cmr9
+\font\eightrm=cmr8
+\font\sevenrm=cmr7
+\font\sixrm=cmr6
+\font\fiverm=cmr5
+
+\font\teni=cmmi10 \skewchar\teni='177
+\font\ninei=cmmi9 \skewchar\ninei='177
+\font\eighti=cmmi8 \skewchar\eighti='177
+\font\seveni=cmmi7 \skewchar\seveni='177
+\font\sixi=cmmi6 \skewchar\sixi='177
+\font\fivei=cmmi5 \skewchar\fivei='177
+
+\font\tensy=cmsy10 \skewchar\tensy='60
+\font\ninesy=cmsy9 \skewchar\ninesy='60
+\font\eightsy=cmsy8 \skewchar\eightsy='60
+\font\sevensy=cmsy7 \skewchar\sevensy='60
+\font\sixsy=cmsy6 \skewchar\sixsy='60
+\font\fivesy=cmsy5 \skewchar\fivesy='60
+
+\font\tenex=cmex10
+
+\font\tenbf=cmbx10
+\font\ninebf=cmbx9
+\font\eightbf=cmbx8
+\font\sevenbf=cmbx7
+\font\sixbf=cmbx6
+\font\fivebf=cmbx5
+
+\font\tentt=cmtt10
+\font\ninett=cmtt9
+\font\eighttt=cmtt8
+
+\ifx\tubhyphenatett\@thisisundefined
+ % do not hyphenate typewriter unless explicitly requested (as
+ % tb0hyf.tex does).
+ \hyphenchar\tentt=-1
+ \hyphenchar\ninett=-1
+ \hyphenchar\eighttt=-1
+\fi
+
+\font\tensl=cmsl10
+\font\ninesl=cmsl9
+\font\eightsl=cmsl8
+\font\sevensl=cmti7 % Would use cmsl7 if it were standard.
+ % Currently needed only for \def of \LaTeX
+
+\font\tenit=cmti10
+\font\nineit=cmti9
+\font\eightit=cmti8
+\font\sevenit=cmti7
+
+\font\tenuit=cmu10
+\font\tenbfsl=cmbxsl10
+
+\font\tensmc=cmcsc10
+\font\ninesmc=cmcsc10 % redefine if cmcsc9 and/or cmcsc8 exist
+\font\eightsmc=cmcsc10
+
+\font\tentex=cmtex10 % for ASCII character set
+
+\def\mit{\fam\@ne} % from plain
+\def\cal{\fam\tw@} % from plain
+\def\sy{\cal}
+
+% cmss fonts are not needed all the time. Permit as-needed access.
+\def\LoadSansFonts{%
+ \global\font\twelvess=cmss10 scaled \magstep1
+ \global\font\tenss=cmss10
+ \global\font\niness=cmss9
+ \global\font\eightss=cmss8
+ \addto\tenpoint{\def\ssf{\tenss}}
+ \addto\ninepoint{\def\ssf{\niness}}
+ \addto\eightpoint{\def\ssf{\eightss}}
+ \gdef\LoadSansFonts{}}
+
+% TUGboat section heads
+\font \seventeenssb=cmssbx10 scaled \magstep3
+\font \twelvessb=cmssbx10 scaled \magstep1
+
+\newfam\sectitlefam
+\textfont\sectitlefam=\seventeenssb \scriptfont\sectitlefam=\twelvessb
+
+% \stbaselineskip set in tugboat.com
+\def\sectitlefont{%
+ \fam\sectitlefam \seventeenssb \baselineskip=\stbaselineskip }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** Definitions of \tenpoint, \ninepoint, etc. *****
+%
+
+% Following is a facility for adding commands to \tenpoint, \ninepoint
+% and \eightpoint. \LoadSansFonts uses this technique above.
+% Also used to add math families, as with:
+% \addto\tenpoint{\textfont\frakfam...}
+% to add a Fraktur family.
+%
+\def\addto#1#2{%
+ \csname @addsto\string#1\endcsname=
+ \expandafter{\the\csname @addsto\string#1\endcsname#2}}
+\def\@additionsto#1{\expandafter\the\csname @addsto\string#1\endcsname}
+\expandafter\newtoks\csname @addsto\string\tenpoint\endcsname
+\expandafter\newtoks\csname @addsto\string\ninepoint\endcsname
+\expandafter\newtoks\csname @addsto\string\eightpoint\endcsname
+
+
+\newskip\ttglue
+\def\setttglue{%
+ \edef\@thefont{\the\font}% to restore this font after the setting
+ \tt \ttglue=.5em plus .25em minus .15em
+ \@thefont}
+
+% We assume that \scriptscriptfonts remain the same throughout
+\scriptscriptfont\z@=\fiverm
+\scriptscriptfont\@ne=\fivei
+\scriptscriptfont\tw@=\fivesy
+\scriptscriptfont\thr@@=\tenex
+\scriptscriptfont\bffam=\sixbf
+
+\newdimen\normaltenpointstretch \normaltenpointstretch=1.6667pt
+\def\NormalTenPointSpacing{\AdjustNormalSpacing\tenpoint{}}
+\def\StretchyTenPointSpacing{\AdjustNormalSpacing\tenpoint{2.4}}
+
+\def\tenpoint{%
+ \normalbaselineskip=12pt
+ \abovedisplayskip=3pt plus 3pt minus 1pt
+ \belowdisplayskip=3pt plus 3pt minus 1pt
+ \abovedisplayshortskip=0pt plus 3pt
+ \belowdisplayshortskip=1pt plus 3pt minus 1pt
+ \def\rm{\def\sl{\fam\slfam\tensl}\fam\z@\tenrm}%
+ \textfont\z@=\tenrm \scriptfont\z@=\sevenrm
+ \def\oldstyle{\fam\@ne\teni}%
+ \textfont\@ne=\teni \scriptfont\@ne=\seveni
+ \textfont\tw@=\tensy \scriptfont\tw@=\sevensy
+ \textfont\thr@@=\tenex \scriptfont\thr@@=\tenex
+ \def\it{\fam\itfam\tenit}%
+ \textfont\itfam=\tenit \scriptfont\itfam=\sevenit
+ \def\sl{\fam\slfam\tensl}%
+ \textfont\slfam=\tensl \scriptfont\slfam=\sevensl
+ \def\bf{\def\sl{\tenbfsl}\fam\bffam\tenbf}%
+ \textfont\bffam=\tenbf \scriptfont\bffam=\eightbf
+ \def\smc{\tensmc}%
+ \def\SMC{\ninerm}%
+ \font\manual=logo10
+ \font\manualsl=logosl10
+ \def\tt{\tentt}%
+ \setttglue
+ \def\upright{\tenuit}%
+ \setbox\strutbox=\hbox{\vrule height7.5pt depth2.5pt width\z@}%
+ \setbox\struttbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}%
+ \normalbaselines \rm
+ \@additionsto\tenpoint}
+
+\tenpoint % initialize -- default font
+
+
+\newdimen\normalninepointstretch \normalninepointstretch=1.5pt
+\def\NormalNinePointSpacing{\AdjustNormalSpacing\ninepoint{}}
+\def\StretchyNinePointSpacing{\AdjustNormalSpacing\ninepoint{2.4}}
+
+\def\ninepoint{\normalbaselineskip=11pt
+ \abovedisplayskip=2.5pt plus 2.5pt minus 1pt
+ \belowdisplayskip=2.5pt plus 2.5pt minus 1pt
+ \abovedisplayshortskip=0pt plus 2.5pt
+ \belowdisplayshortskip=1pt plus 2.5pt minus 1pt
+ \def\rm{\fam\z@\ninerm}%
+ \textfont\z@=\ninerm \scriptfont\z@=\sevenrm
+ \def\oldstyle{\fam\@ne\ninei}%
+ \textfont\@ne=\ninei \scriptfont\@ne=\seveni
+ \textfont\tw@=\ninesy \scriptfont\tw@=\sevensy
+ \def\it{\fam\itfam\nineit}%
+ \textfont\itfam=\nineit
+ \def\sl{\fam\slfam\ninesl}%
+ \textfont\slfam=\ninesl
+ \def\bf{\fam\bffam\ninebf}%
+ \textfont\bffam=\ninebf \scriptfont\bffam=\sevenbf
+ \def\smc{\ninesmc}%
+ \def\SMC{\eightrm}%
+ \font\manual=logo9
+ \font\manualsl=logosl10 at 9pt
+ \def\tt{\ninett}%
+ \setttglue
+ \setbox\strutbox=\hbox{\vrule height 6.75pt depth 2.25pt width\z@}%
+ \setbox\struttbox=\hbox{\vrule height 7.75pt depth 3.25pt width\z@}%
+ \normalbaselines \rm
+ \@additionsto\ninepoint }
+
+% The following setting can be used when baselineskip = 10pt
+% \setbox\struttbox=\hbox{\vrule height 7.25pt depth 2.75pt width\z@}%
+
+
+\newdimen\normaleightpointstretch \normaleightpointstretch=1.333pt
+\def\NormalEightPointSpacing{\AdjustNormalSpacing\eightpoint{}}
+\def\StretchyEightPointSpacing{\AdjustNormalSpacing\eightpoint{2.25}}
+
+\def\eightpoint{\normalbaselineskip=10pt
+ \abovedisplayskip=2pt plus 2pt minus 1pt
+ \belowdisplayskip=2pt plus 2pt minus 1pt
+ \abovedisplayshortskip=0pt plus 2pt
+ \belowdisplayshortskip=1pt plus 2pt minus 1pt
+ \def\rm{\fam\z@\eightrm}%
+ \textfont\z@=\eightrm \scriptfont\z@=\sixrm
+ \def\oldstyle{\fam\@ne\eighti}%
+ \textfont\@ne=\eighti \scriptfont\@ne=\sixi
+ \textfont\tw@=\eightsy \scriptfont\tw@=\sixsy
+% \textfont\thr@@=\eightex \scriptfont\thr@@=\eightex
+ \def\it{\fam\itfam\eightit}%
+ \textfont\itfam=\eightit
+ \def\sl{\fam\slfam\eightsl}%
+ \textfont\slfam=\eightsl
+ \def\bf{\fam\bffam\eightbf}%
+ \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
+ \def\smc{\eightsmc}%
+ \def\SMC{\sevenrm}%
+ \font\manual=logo8
+ \font\manualsl=logosl10 at 8pt
+ \def\tt{\eighttt}%
+ \setttglue
+ \setbox\strutbox=\hbox{\vrule height 6pt depth 2pt width\z@}%
+ \setbox\struttbox=\hbox{\vrule height 7pt depth 3pt width\z@}%
+ \normalbaselines \rm
+ \@additionsto\eightpoint }
+
+% The 8pt cap/small cap font is not loaded. See a corresponding remark
+% above for the 9pt csc font.
+
+% this is equivalent to baselineskip = 9pt
+% \setbox\struttbox=\hbox{\vrule height 6.5pt depth 2.5pt width\z@}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Following will allow text to be a bit stretchier than the built-in
+% setting; TeXbook, page 433, 355
+
+\def\@setstretch{\fontdimen3\the\font=}
+\def\AdjustNormalSpacing#1#2{% #1=pointsize, #2=adjustment factor
+ {\T@stDimen=#2\csname normal\expandafter\gobble\string#1stretch\endcsname
+ #1%
+ \rm\@setstretch\T@stDimen
+ \it\@setstretch\T@stDimen
+ \bf\@setstretch\T@stDimen
+ }}
+
+% ring accent, which plain.tex defines no macro for. \r is the LaTeX name.
+\def\r#1{\accent"17 #1}
+
+% Anticipated changes to this font handling scheme:
+%
+% Dynamic loading of fonts, probably in groups according to size
+% Removal of \rm, \bf, etc., from \*point expansions, replacement
+% by generic \rm, \bf, etc. definitions
+% Mechanism for switching neatly between serif and sans-serif
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** page dimensions *****
+%
+
+
+% vertical dimensions
+
+\newdimen\trimlgt \trimlgt=11in % 10.5in (vols 7-9)
+\newdimen\headmargin \headmargin=3.5pc % 2.5pc (vols 7-9)
+\newdimen\pagelgt
+\newdimen\rheadlgt \rheadlgt=2.5pc % + headmargin = 6pc = 1in
+\newdimen\toplgt \toplgt=\z@
+\newdimen\normalcollgt \normalcollgt=54pc % 52pc for 5#2
+\newdimen\collgt \collgt=\normalcollgt
+\newdimen\Collgt
+\maxdepth=2pt
+\newdimen\botlgt \botlgt=\z@
+\newdimen\rfootlgt \rfootlgt=2pc
+
+\newif\ifThisIsFirstPage \ThisIsFirstPagefalse
+
+\def\resetpagelgt{%
+ \pagelgt=\collgt \Collgt=\collgt
+ \advance\pagelgt by \rheadlgt
+ \ifThisIsFirstPage \advance\Collgt by-\toplgt
+ \advance\Collgt by-\botlgt \fi
+ \advance\pagelgt by \maxdepth
+ \global\advance\pagelgt by \rfootlgt
+ \global\vsize=\Collgt }
+
+\def\resetfpagelgt{%
+ \global\ThisIsFirstPagetrue
+ \resetpagelgt } % exclude special first page material
+
+\resetpagelgt
+\raggedbottom
+
+% horizontal dimensions
+
+\newdimen\colwd
+\newdimen\intercolwd \intercolwd=\z@
+\newdimen\pagewd \pagewd=39pc
+\newdimen\trimwd \trimwd=\pagewd
+\newdimen\oddleftindent \oddleftindent\z@
+\newdimen\evenleftindent \evenleftindent\z@
+
+\def\onecol{\colwd=\pagewd \OneCol }
+
+\newdimen\onenarrowcolwd \onenarrowcolwd=30pc
+\def\onenarrow{\colwd=\onenarrowcolwd \OneCol }
+
+% before 5#2, `narrow' was 34pc
+\newdimen\onemediumcolwd \onemediumcolwd=34pc
+\def\onemedium{\colwd=\onemediumcolwd \OneCol }
+
+\newdimen\twocolcolwd \twocolcolwd=18.75pc
+\def\twocol{\colwd=\twocolcolwd \intercolwd=1.5pc \TwoCol }
+
+\newdimen\threecolcolwd \threecolcolwd=12pc
+\def\threecol{\colwd=\threecolcolwd \intercolwd=1.5pc \ThreeCol }
+
+\def\CenterOneCol{%
+ \oddleftindent\pagewd
+ \advance\oddleftindent -\colwd
+ \divide\oddleftindent\tw@
+ \evenleftindent\oddleftindent
+ \coloffset\ifodd\pageno\oddleftindent\else\evenleftindent\fi
+ }
+
+\def\OneCol{\hsize=\colwd \CenterOneCol \numcols=1 \resetmaxcols}
+\def\ZeroLeftIndents{\oddleftindent\z@ \evenleftindent\z@ \coloffset\z@ }
+\def\TwoCol{\hsize=\colwd \numcols=2 \resetmaxcols \ZeroLeftIndents}
+\def\ThreeCol{\hsize=\colwd \numcols=3 \resetmaxcols \ZeroLeftIndents}
+
+\def\resetmaxcols{%
+ \ifnum\numcols>\maxcols
+ \ifOverlaysinTeX \maxcols=\numcols
+ \else \immediate\write\sixt@@n{%
+ The new setting of \string\numcols is greater than \string\maxcols.^^J
+ Either allow overlays in TeX or increase \string\maxcols.}\fi
+ \fi}
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** headers/footers *****
+%
+
+
+\def\pagenoprefix{}
+
+\def\rtitlex{\def\tubfont{\tenpoint\rm}\TUB, \volx }
+\def\rtitle{%
+ \hbox to \pagewd{%
+ \tenrm
+ \makestrut[10pt;\z@]%
+ \ifodd\pageno \rtitlex\qquad\midrtitle\hfil\pagenoprefix\number\pageno
+ \else \pagenoprefix\number\pageno\hfil\midrtitle\qquad\rtitlex \fi
+ }%
+ }
+
+\def\runhead{\vbox to \rheadlgt{\rtitle \vfil }}
+
+\def\rfoot{%
+ \hbox to \pagewd{%
+ \tenrm
+ \makestrut[\z@;0.5pc]%
+ \ifPrelimDraft
+ \midrtitle\hfil\midrtitle
+ \else
+ \ifodd\pageno
+ \hfil\thetitle
+ \else
+ \footauthors\hfil
+ \fi
+ \fi
+ }%
+ }
+
+\def\footauthors{%
+ \bgroup
+ \count1=1
+ \authorloop
+ \egroup}
+
+\def\authorloop{%
+ \ifnum\count1>1
+ \ifnum\count1<\authornumber
+ , % Wanted space.
+ \else
+ {} and % Idem.
+ \fi
+ \fi
+ \theauthor{\the\count1}%
+ \ifnum\count1<\authornumber
+ \advance\count1 by 1
+ \authorloop
+ \fi}
+
+\def\runfoot{\vbox to \rfootlgt{\vfil \rfoot }}
+
+% Macros to produce extra running heads for stripping onto pages
+% received as camera copy. Format must be preset to \OneCol, and
+% start on a new page.
+
+% Generate 5 (4 + normal running head) per page.
+
+\def\DrawT@pLines{%
+ \vskip\topskip
+ \ulap{%
+ \line{%
+ \raise 1ex\rlap{\leaders\hrule\hskip\pagewd}%
+ \leaders\hrule\hfill
+ }}
+ \medskip}
+
+\def\r@nhead{%
+ \vbox to .23\vsize{%
+ \basezero \hsize=\pagewd \vfil
+ \topregister \vskip\headmargin \runhead \DrawT@pLines }
+ \medskip
+ \advancepageno }
+
+\def\nextrunner{%
+ \ifnum\T@stCount>0
+ \ifnum\T@stCount>5 \TestCount=5 \else\TestCount=\T@stCount \fi
+ \advance\T@stCount by-\TestCount
+ \DrawT@pLines % always one at top of page
+ \loop\ifnum\TestCount>1 \r@nhead \advance\TestCount by\m@ne \repeat
+ \newpage
+ \def\@next{\nextrunner}%
+ \else \def\@next{}%
+ \fi
+ \@next }
+
+% Use \ExtraRunheads to generate running heads for stripping (e.g. for
+% author-supplied camera-ready copy). E.g., ``\ExtraRunheads 12, {}.'' will
+% generate 12 TUGboat running heads, up to 5 per page, starting with
+% the current page number.
+
+\def\ExtraRunheads #1, #2.{%
+ \T@stCount=#1
+ \gdef\pageprefix{#2}% % as in A-10 for appendices; not used just now
+ \nextrunner }
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** insertions *****
+%
+
+
+\newif\if@floatable \@floatabletrue % sometimes we don't want
+\def\nofloat{\@floatablefalse} % midinsertions to float
+
+% redefine \@ins to avoid the \par of PLAIN
+\def\@ins{\begingroup\setbox\z@\vbox\bgroup}
+
+\newinsert\botins
+\newif\ifp@ge \newif\if@mid \newif\if@bot
+\def\topinsert{\@midfalse\p@gefalse\@botfalse\@ins}
+\def\botinsert{\@midfalse\p@gefalse\@bottrue\@ins}
+\def\midinsert{\@midtrue\@botfalse\@ins}
+\def\pageinsert{\@midfalse\@botfalse\p@getrue\@ins}
+\skip\botins=\z@skip
+\count\botins=1000
+\dimen\botins=\maxdimen
+\def\endinsert{\egroup % finish the \vbox
+ \gdef\@next{}%
+ \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@
+ \advance\dimen@12\p@ \advance\dimen@\pagetotal
+ \if@floatable
+ \ifdim\dimen@>\pagegoal\@midfalse\@botfalse\p@gefalse\fi\fi
+ \fi
+ \if@mid
+ \vskip\abovedisplayskip
+ \box\z@
+ \vskip\belowdisplayskip
+ \gdef\@next{\@asifbelowdisplay}%
+ \else\insert\if@bot\botins\else\topins\fi
+ {\penalty100 % floating insertion
+ \if@bot\medskip\nobreak\fi
+ \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@\fi
+ \if@bot\else\medskip\fi
+ }%
+ \fi\endgroup\@next}
+
+% Footnotes are mainly supported by PLAIN format, with these
+% exceptions.
+
+\skip\footins=10pt
+\def\footnoterule{\kern-5pt
+ \hrule width 5pc \kern 4.6pt } % the \hrule is .4pt high
+
+\newif\ifDelayFirstPar \DelayFirstParfalse
+\def\vfootnote#1{\ifFirstPar \DelayFirstPartrue \fi
+ \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
+ \rm \parindent=\normalparindent % always indent footnotes; added for TUGboat
+ \TUBstartfootnotehook
+ \textindent{#1}\makestrut[10pt;\z@]\futurelet\next\fo@t}
+\def\@foot{\strut\egroup\TUBendfootnotehook
+ \ifDelayFirstPar \SetupFirstPar \global\DelayFirstParfalse \fi }
+\newif\ifFirstPar \FirstParfalse
+\def\SetupFirstPar{\global\parindent=\z@ \global\FirstPartrue }
+
+\def\TUBstartfootnotehook{}
+\def\TUBendfootnotehook{}
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** output *****
+%
+
+
+% Reorganize \pagecontents from PLAIN to put footnotes at very
+% bottom of page, even if \raggedbottom. Also add bottom insertions.
+
+\def\pagecontents{%
+ \ifvoid\topins\else\unvbox\topins\fi
+ \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins\fi
+ \ifvoid\botins\else
+ \vskip\skip\botins
+ \unvbox\botins\fi }
+
+
+% Trim (registration) marks may or may not be placed around the pages;
+% Overlaying may or may not be done within TeX (as opposed
+% to the device driver).
+
+\newif\ifTrimmarks \Trimmarksfalse
+\newif\ifOverlaysinTeX \OverlaysinTeXtrue
+
+
+% All columns containing data are formatted by \midpage. Trim marks
+% are put on all columns, but running heads only on the last column
+% (i.e. column number = \numcols)
+
+\def\midpage#1{%
+ \vbox{
+ \basezero
+ \hrule height\z@ depth\z@ width\p@
+ \ifTrimmarks
+ \vskip-1in % default offset for laser printers
+ % this puts top trim at edge of paper
+ \vbox to \trimlgt \bgroup
+ \topregister
+ \vskip \headmargin
+ \else
+ \vskip-\rheadlgt % this puts runhead above default offset
+ \fi
+ \vbox to \pagelgt{
+ \ifnum\xcol=\numcols \runhead \else \vbox to \rheadlgt{}\fi
+ \ifThisIsFirstPage \firsthead \fi
+ \hbox to \pagewd{#1} % \vsize applied in \pagebody
+ \ifThisIsFirstPage \firstfoot \fi
+ \vfil % if no depth, avoid underfull box
+ \ifnum\xcol=\numcols \runfoot \else \vbox to \rfootlgt{}\fi
+ }
+ \ifTrimmarks \vfill \botregister \egroup \fi
+ }}
+
+% The production version includes trim marks, which are required
+% on photographic paper, but are unsuitable for laser printer output
+% (because they land at the edges of the page). For multiple
+% column output, allowance is made for column overlays either
+% within TeX or by the driver. The default is to have all
+% overlays done within TeX, but large pages or matters of efficiency
+% may dictate that driver-overlay is more appropriate.
+
+% When the overlaying is done within TeX, the .dvi contains just
+% one page for each page to be printed. However, in the case
+% that a driver is to do the overlaying we must anticipate that
+% it will not be smart enough to properly overlay different numbers
+% of .dvi pages for different printed pages (e.g. in the case that
+% one job has both single- and double-column layout). Thus, for
+% each printed page, TeX constructs a constant number (=\maxcols)
+% of .dvi pages. Columns 1 through and including \numcols will
+% be usual .dvi pages containing information for the typeset columns.
+% Upon reaching column number \numcols, TeX will `fill out' the
+% printed page with empty columns to \maxcols.
+
+
+% set up auxiliary `page numbers'
+% \pageno = \count0 as used in PLAIN
+
+% \xcol is the column number within a page; ranges from 1 to \maxcols
+\countdef\xcol=1 \xcol=1
+
+% \spoolno is the ordinal number of `.dvi' pages (i.e. the number
+% of \shipouts performed)
+\countdef\spoolno=2 \spoolno=0
+
+\def\newcol{\endgraf\vfill\eject}
+
+\def\newpage{%
+ \vfill\eject
+ \loop
+ \ifnum\xcol>1
+ {\leavevmode\endgraf\vfill\eject} % \xcol is advanced in the output routine
+ \repeat
+ }
+
+\newcount\numcols % `real' number of columns
+
+\newcount\@maxcolsofar % internal counter for box allocation
+\@maxcolsofar=0
+
+\newcount\maxcols % job-wide maximum number of columns
+\maxcols=2
+
+
+ % save the column or ship it out
+\def\@saveorship{%
+ \ifOverlaysinTeX
+ \ifnum\xcol>\@maxcolsofar % if we need another column box allocated
+ \global\advance\@maxcolsofar\@ne
+ \newboxcs{column\number\xcol}%
+ \fi
+ \global\setboxcs{column\number\xcol}%
+ \else
+ \global\advance\spoolno\@ne
+ \shipout
+ \fi
+ }
+
+% horizontal offset of column from left edge of page
+\newdimen\coloffset \coloffset\z@
+\def\incrcoloffset{%
+ \global\advance\coloffset\colwd
+ \global\advance\coloffset\intercolwd
+ }
+
+\def\output@{%
+ \@saveorship\midpage{\kern\coloffset\pagebody\hfil}
+ \incrcoloffset
+ \ifnum\xcol=\numcols % if at `real' last column, fill out page with
+ \loop % empty columns
+ \ifnum\xcol<\maxcols
+ \global\advance\xcol\@ne
+ \@saveorship\midpage{\vbox to \collgt{}\hfil}
+ \repeat
+ \fi
+ \ifnum\xcol=\maxcols % put page together if TeX is overlaying
+ \ifOverlaysinTeX
+ \global\advance\spoolno\@ne
+ \shipout\hbox{%
+ \xcol=1
+ \loop \rlap{\boxcs{column\number\xcol}}%
+ \ifnum\xcol<\maxcols
+ \global\advance\xcol\@ne
+ \repeat
+ \hbox to \pagewd{}%
+ }%
+ \fi
+ \D@EndPage % possible shortening of next page
+ \global\coloffset\ifodd\pageno\oddleftindent\else\evenleftindent\fi
+ \global\xcol=1
+ \else
+ \global\advance\xcol\@ne
+ \fi
+ \ExecuteNextDC % possible `Delayed Command'
+ }
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** page adjustment *****
+%
+
+
+% In the absence of automatic column-balancing, provide a mechanism
+% for manually shortening a specified page.
+
+\newif\ifSh@rtPage \Sh@rtPagefalse
+\newif\ifSh@rtPagePending \Sh@rtPagePendingfalse
+\newcount\Sh@rtPageNo
+\newdimen\Sh@rtPageLgt
+
+\def\@to{to} \def\@by{by}
+% #1 = to/by; #2 = \dimen; #3 = <dimen>; #4 = * of Shorten*Page
+\def\@toby#1#2#3#4{%
+ \def\@tb{#1}%
+ \ifx \@tb\@to \global #2=#3
+ \else \ifx \@tb\@by \T@stDimen=#3 % accommodate negative #3
+ #2=\normalcollgt \global\advance #2 by -\T@stDimen
+ \else \errmessage{#1 is invalid syntax; \string\Shorten#4Page
+ requires "to" or "by"}\fi
+ \fi }
+
+\def\@plusno#1#2;{%
+ \if +#1\T@stCount=\pageno \advance\T@stCount by #2
+ \else \T@stCount=#1#2 \fi }
+
+\def\ShortenPage #1 #2 #3. {%
+ \global\Sh@rtPagePendingtrue
+ \@plusno#1;\global\Sh@rtPageNo=\T@stCount
+ \@toby{#2}{\Sh@rtPageLgt}{#3}{}}
+\def\ShortenThisPage #1 #2. {%
+ \global\Sh@rtPagetrue
+ \@toby{#1}{\vsize}{#2}{This}}
+
+% Two cases: 0 = last page was nonstandard; reset \vsize
+% 1 = do not reset \vsize: okay or length already reset
+\def\D@EndPage{%
+ \global\advancepageno
+ \T@stCount=1
+ \ifThisIsFirstPage \T@stCount=0 \global\ThisIsFirstPagefalse
+ \resetfirsthead \resetfirstfoot
+ \global\collgt=\normalcollgt \fi
+ \ifSh@rtPage \T@stCount=0 \global\Sh@rtPagefalse \fi
+ \ifSh@rtPagePending
+ \ifnum\pageno = \Sh@rtPageNo \T@stCount=1
+ \global\vsize=\Sh@rtPageLgt
+ \global\Sh@rtPagePendingfalse
+ \global\Sh@rtPagetrue \fi
+ \fi
+ \ifcase \T@stCount \resetpagelgt \fi }
+
+% Add more powerful means of adjusting pages by keeping a list of
+% commands to be executed prior to making up the next page. This
+% technique will be expanded in the next version of the output
+% routine.
+
+% "\DelayedCommand <page number> <column number> <command>\endCommand"
+% places the token list <command> at the end of a list of "things to do".
+% At the end of every column, the output routine checks this list to
+% see whether the head of the list should be "executed" prior to
+% building the next column. If so, the execution is performed.
+% Right now, items must be placed in the execution list in order,
+% and all items for a given column must be combined into a single
+% token list.
+
+% Natural applications are double column figures and column size
+% adjustments. E.g.
+% \DelayedCommand +5 1 \global\advance\vsize by 2\baselineskip\endCommand
+% will increase the \vsize of the first column of the page 5 pages from
+% "now" by 2 baselines. To pull the \vsize back to normal would require
+% another use of \DelayedCommand. Double column figures can be achieved
+% with insertions called by \DelayedCommand.
+
+% Right now the technique is messy, but it can be used by those who know
+% how it's implemented and know its limitations.
+
+\newtoks\@DelayedCommandList
+
+\def\DelayedCommand #1 #2 #3\endCommand{%
+ \@plusno#1;%
+ \edef\@temp{\the\@DelayedCommandList<\number\T@stCount>}%
+ \global\@DelayedCommandList=\expandafter{\@temp<#2>#3\endCommand}%
+ }
+
+\def\@FindNextDCPoint <#1><#2>#3\endList{%
+ \def\DCpage{#1}\def\DCcolumn{#2}}
+
+\def\FindNextDCPoint{%
+ \edef\@temp{\the\@DelayedCommandList}%
+ \ifx\@temp\empty \def\DCpage{\@M}\def\DCcolumn{0}%
+ \else
+ \edef\@form{%
+ \noexpand\@FindNextDCPoint\the\@DelayedCommandList\noexpand\endList}%
+ \@form
+ \fi}
+
+\def\@ExecuteNextDC <#1><#2>#3\endCommand#4\endList{%
+ \global\@DelayedCommandList={#4}%
+ #3}
+
+\def\ExecuteNextDC{%
+ \FindNextDCPoint
+ \ifnum \pageno=\DCpage \ifnum\xcol=\DCcolumn
+ \edef\@form{%
+ \noexpand\@ExecuteNextDC\the\@DelayedCommandList\noexpand\endList}%
+ \@form
+ \fi \fi}
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** general mechanism for tags *****
+%
+
+% Upon sensing an opening tag (call it `\foo' here), the following process
+% is set in motion:
+% 1. \begingroup (so definitions and settings are localized);
+% 2. the default situation for \foo is set up;
+% 3. if appropriate, an \everyfoo list is read (this allows one
+% to override the TUGboat.sty factory defaults);
+% 4. optional commands are read. This involves looking ahead for
+% a `[' and `normalizing' the optional environment so that
+% backslashes and braces are interpreted as their standard selves.
+% After the options are read, the `\',`{', and `}' are restored
+% to their status appropriate to \foo;
+% 5. the \@beginfoo macro is executed. This
+% may involve branching dependent upon flags set by options. It may
+% also be a place where spaces and carriage-returns are activated.
+% 6. the `argument' to \foo is read and stored or processed on
+% the fly (the method employed is generally fixed for each tag).
+% The argument may be delimited by *...* (called the `short-form'
+% here), or up to ...\endfoo (called the `long-form').
+% 7. a cleanup macro is executed which also ends the current group.
+% This may do all the work if an argument has been read and stored.
+
+% Checking ahead.
+% Often we check ahead to determine the next course of action.
+% \@checknexttoken is used to check for optional commands, to check for the
+% short-form argument-delimiter, and to ignore characters in certain
+% situations. The macro is just a check; applications must do whatever
+% is appropriate with the ensuing token.
+
+% \@checknexttoken checks the next token against argument #1. If the
+% two are the same, #2 is executed, otherwise #3. The comparison is
+% done with \ifx. Since we check ahead with \futurelet, the first
+% argument is stored with \let as well. To include the case
+% where #1 may be a space, we have to go through a small contortion
+% to \let\@basetoken= that space.
+
+% At times, the \@nexttoken will be \outer and this will prevent its
+% being incorporated in the definition of \@next below. For this reason,
+% we store `\ifx\@basetoken\@nexttoken' away in a definition at a time
+% when \@nexttoken is undefined and won't cause a problem.
+
+\def\if@baseis@next{\ifx\@basetoken\@nexttoken}
+
+\long\def\@checknexttoken #1#2#3{%
+ \futurelet\@basetoken\iffalse#1\fi
+ \long\def\@next{%
+% \ifx \@basetoken\@nexttoken
+ \if@baseis@next
+ \long\def\@@next{#2}%
+ \else\long\def\@@next{#3}\fi
+ \@@next}%
+ \futurelet\@nexttoken\@next}
+
+% Eliminating characters from input.
+% The following macros check ahead to see whether the next token is a
+% token to be parsed from the input stream. \@ignoreall keeps
+% checking to eliminate all such characters, whereas \@ignoreone drops
+% at most one. Argument #2 is executed after characters are eliminated.
+
+% The token is removed by defining a control sequence whose
+% contextual form includes the token.
+
+ % execute #2 after ignoring (possibly) one occurrence of #1
+\long\def\@ignoreone#1#2{%
+ \def\@ignoreform#1{#2}%
+ \@checknexttoken{#1}{\@ignoreform}{#2}%
+ }
+
+ % execute #2 after ignoring all occurrences of #1
+\long\def\@ignoreall#1#2{%
+ \def\@ignoreform#1{\@ignoretest}%
+ \def\@ignoretest{\@checknexttoken{#1}{\@ignoreform}{#2}}%
+ \@ignoretest
+ }
+
+% Particularly useful ignorances.
+
+ % execute #1 after ignoring spaces
+\def\DeleteOptionalSpaces#1{%
+ \@ignoreall{ }{#1}%
+ }
+ % execute #1 after ignoring spaces and \pars
+\def\DeleteOptionalSpacesandPars#1{%
+ \@ignoreall{ }{\@ignoreall{\par}{#1}}%
+ }
+
+
+% Checking and reading options.
+% To check for the next optional argument, the macros must look
+% ahead to the next character. If the next character is a `[',
+% the option-reading mechanism is invoked. This check may be suppressed if
+% the user has executed the \lastoption option. If \@lastoption is
+% "true" or if the [ is NOT next, the macro goes on to reading any
+% arguments and executing appropriately.
+
+\def\@checkoptions{%
+ \if@lastoption
+ \def\@next{\@executetoend}%
+ \else
+ \def\@next{\@checknexttoken {[}{\@readoptions}{\@executetoend}}%
+ \fi
+ \@next
+ }
+
+% Default "options" on start-up. Unless over-ridden, the situation
+% will be:
+% 1. there may be another option to check (i.e. \@lastoptionfalse);
+% 2. it will be necessary to read the input file to determine the
+% method of marking arguments (i.e. \@longformfalse);
+% 3. arguments will be handled on the fly (i.e. \@savingargumentfalse);
+% 4. the long-form ending delimiter will be \end... (where ... is
+% the tag with which we're currently operating.
+
+\newif\if@lastoption \@lastoptionfalse
+\def\lastoption{\@lastoptiontrue}
+
+\newif\if@longform \@longformfalse
+\def\longform{\@longformtrue}
+
+\newif\if@savingargument \@savingargumentfalse
+
+\newtoks\enddelim
+
+\def\@defaultoptions{%
+ \@lastoptionfalse
+ \@longformfalse
+ \@savingargumentfalse
+ \enddelim=\expandafter{\csname end\CurrentTag\endcsname}%
+ \let\@long\empty
+ }
+
+% To read an optional command, \catcodes of \ { } are restored to their plain
+% values, and the [...] form is parsed out by \@@readoptions. The argument
+% to \@@readoptions is then executed, the 3 specials are restored and
+% the we check again for [ after deleting spaces. One might, alternatively,
+% parse out the initial `[' and activate the `]' to end options, but
+% this would make it awkward to place options within other macros (since
+% the `]' would have to be \catcoded properly for the definition).
+
+\def\@readoptions{%
+ \savecat\\\makeescape\\%
+ \savecat\{\makebgroup\{%
+ \savecat\}\makeegroup\}%
+ \@@readoptions}
+
+\def\@@readoptions[#1]{%
+ #1%
+ \restorecat\\\restorecat\{\restorecat\}%
+ \DeleteOptionalSpaces{\@checkoptions}%
+ }
+
+
+% Short Form Tagging.
+% We specify a character (*) to be used as a begin/end delimiter
+% for the argument to most tags. This code could be copied and
+% altered a bit to use another character.
+
+% The character will be encountered as either type `other' or as
+% an `active' character.
+
+\newtoks\@otherSFD
+\@otherSFD={*}
+\let\@SFD=* % used in \@checknexttoken
+
+\newtoks\@activeSFD
+{\makeactive\*
+ \global\@activeSFD={*}%
+}
+
+\let\@plainast=\ast
+\def\ast{\ifmmode\@plainast\else *\fi}
+
+
+% Reading to the end-tag.
+% Macros may just do their business after options have been
+% read. In this case, there is no end-tag to worry about.
+% Otherwise, the macros either read to the "long-form" of end-tag
+% (e.g. \endtitle or \endauthor) or to the short-form (assumed to
+% be * here). Unless an option has specified
+% that the long-form is to be used, the macros look ahead to
+% see whether the short-form delimiter occurs next. If so,
+% it is assumed that the short-form is being used. In any case,
+% the appropriate \@begin... macro is executed before the argument is
+% handled.
+
+\newcount\@numarguments \@numarguments=1
+
+\def\@executetoend{%
+ \ifnum\@numarguments>0
+ \if@longform \def\@afterbegintag{\@longparse}%
+ \else
+ \def\@afterbegintag{\@checknexttoken
+ {\@SFD}{\@shortparse}{\@longparse}}%
+ \fi
+ \else
+ \def\@afterbegintag{}%
+ \fi
+ \csname @begin\CurrentTag\endcsname
+ \@afterbegintag
+ }
+
+% If the short-form is being used and an argument is to be saved,
+% we must define a "form" which TeX may follow to pull out the
+% tag's argument. The argument is stored away in the token register
+% \@argument, and the appropriate end-operation is performed.
+% Otherwise (the `argument' is processed on-the-fly), we parse out
+% the initial short-form delimiter and activate the ending one.
+
+\newtoks\@argument
+
+\def\@shortparse{%
+ \if@savingargument
+ \edef\@form{%
+ \def\noexpand\@@shortparse\the\@otherSFD####1\the\@otherSFD}%
+ \@long\@form{\@argument{##1}\csname end\CurrentTag\endcsname}%
+ \else
+ \expandafter\makeactive\csname\the\@otherSFD\endcsname
+ \expandafter\def\the\@activeSFD
+ {\csname end\CurrentTag\endcsname
+ \expandafter\makeother\csname\the\@otherSFD\endcsname}%
+ \def\@@shortparse{%
+ \expandafter\@ignoreone\expandafter{\the\@otherSFD}%
+ {}%
+ }%
+ \fi
+ \@@shortparse}
+
+% On the other hand, if the long form is used, TeX must parse to
+% the long-form ending tag. Ordinarily we know the ending-tag
+% because it is just the \end... which corresponds to the tag
+% which initiated the process. We do allow for the possibility,
+% however, that we may want to switch this for some reason. E.g.
+% the different \verbatim styles allow for \verbatim...\endverbatim
+% and ||...||. The easiest way to implement the || style is
+% to have the first || call \verbatim and have \verbatim know
+% to look for || as the end-tag instead of \endverbatim. This may
+% be accomplished by allowing for the possibility of different
+% end-tags as below.
+
+\def\@longparse{%
+ \if@savingargument
+ \edef\@form{\def\noexpand\@@longparse####1\the\enddelim}%
+ \@long\@form{\@argument{##1}\csname end\CurrentTag\endcsname}%
+ \else \def\@@longparse{}\fi
+ \@@longparse
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros generally available to tags.
+
+\def\longargument{\def\@long{\long}}
+
+\def\@authorstyle{\@@@a}
+\def\@inlinestyle{\@@@i}
+\def\@displaystyle{\@@@d}
+\def\@altinlinestyle{}
+\def\@altdisplaystyle{}
+
+\newif\if@removeprewhite \@removeprewhitefalse
+\newif\if@removepostwhite \@removepostwhitefalse
+\def\removeprewhite{\@removeprewhitetrue}
+\def\removepostwhite{\@removepostwhitetrue}
+
+% Allow for line numbers on a listing as well as rules above and below.
+\newif\if@ruled \@ruledfalse
+\newif\if@numbered \@numberedfalse
+\newcount\linenumber
+\newcount\globallinenumber \globallinenumber = 0
+\newif\if@continuingnumbers \@continuingnumbersfalse
+\def\continuenumbers{\numbered\@continuingnumberstrue}
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** title, section title, authors, addresses *****
+%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% title
+
+\def\title{%
+ \begingroup
+ \def\CurrentTag{title}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endtitle{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\thetitle{\ignorespaces\the\toks@\unskip}%
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% section titles
+
+% Material mostly in tugboat.com now
+
+\setbox\T@stBox=\hbox{\sectitlefont O}
+\newdimen\stfontheight \stfontheight=\ht\T@stBox
+
+\def\sectitle{%
+ \begingroup
+ \def\CurrentTag{sectitle}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \global\SecTitletrue
+ \@checkoptions}
+
+\def\endsectitle{%
+ \@sectitle{\the\@argument}%
+ \endgroup
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% authors
+
+\newcount\authornumber
+
+\def\author{%
+ \begingroup
+ \def\CurrentTag{author}%
+ \global\advance\authornumber by 1
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endauthor{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \expandafter\edef\csname theauthor\number\authornumber\endcsname
+ {\ignorespaces\the\toks@\unskip}%
+ \expandafter\let\csname theaddress\number\authornumber\endcsname\relax
+ \expandafter\let\csname thenetaddress\number\authornumber\endcsname\relax
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% addresses
+
+\newif\if@address \@addressfalse
+\def\address{%
+ \@addresstrue
+ \begingroup
+ \def\CurrentTag{address}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \let\@addressstyle=\@authorstyle
+ \def\inline{\let\@addressstyle=\@inlinestyle}%
+ \def\display{\let\@addressstyle=\@displaystyle}%
+ \@checkoptions}
+
+\def\endaddress{%
+ \ifx\@addressstyle\@inlinestyle
+ \def\\{, }\the\@argument
+ \endgroup
+ \def\@next{}%
+ \else\ifx\@addressstyle\@displaystyle
+ \endgraf\raggedright
+ \everypar={\hangindent 1.5\parindent}%
+ \def\\{\endgraf}%
+ \def\|{\unskip\hfil\break}%
+ \vskip\abovedisplayskip
+ \the\@argument\endgraf
+ \vskip\belowdisplayskip
+ \@asifbelowdisplay
+ \endgroup
+ \def\@next{\ignorespaces}%
+ \else
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \expandafter\edef\csname theaddress\number\authornumber\endcsname
+ {\ignorespaces\the\toks@\unskip}%
+ \def\@next{}%
+ \fi \fi
+ \@next
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% network addresses
+
+\def\netaddress{%
+ \begingroup
+ \def\CurrentTag{netaddress}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \let\@network\relax
+ \def\network##1{\def\@network{##1: }}%
+ \@SpecialsGetOther
+ \makeescape\\%
+ \netaddrat
+ \netaddrpercent
+ \@checkoptions}
+
+{\makeactive\@
+ \gdef\netaddrat{\makeactive\@\def@{\char"40\discretionary{}{}{}}}
+ \makeactive\%
+ \gdef\netaddrpercent{\makeactive\%\def%{\char"25\discretionary{}{}{}}}
+}
+
+% We want the definition of \thenetaddress... to land at the right
+% nesting level, so we have to first pull it to the top, then
+% drop back to where we are.
+
+\def\endnetaddress{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \ifx\@network\relax
+ \gdef\@@network{}%
+ \else
+ \xdef\@@network{\@network}%
+ \fi
+ \endgroup
+ \expandafter\edef\csname thenetaddress\number\authornumber\endcsname
+ {{\noexpand\rm\@@network}%
+ {\noexpand\netaddrat\noexpand\netaddrpercent\noexpand\net
+ \ignorespaces\the\toks@\unskip}}%
+ }
+
+\def\net{\tt}
+
+% Overrides to default author and signature formats
+
+\def\authorlist#1{\def\@authorlist{#1}}
+
+% Except for the first article in a section, beginnings of articles
+% are announced by a horizontal rule the width of the column.
+% In the case that this rule happens to fall at the top of a column,
+% we have to make sure that it appears at the VERY top of the column
+% and not just on the first baseline. To accomplish this, we insert
+% an empty rule first and then jump back over it to place the rule that
+% readers will see.
+
+\def\article{%
+ \@allowspanningfigsfalse
+ \ifSecTitle \global\SecTitlefalse
+ \else \vskip\AboveTitleSkip
+ \kern\topskip
+ \nullhrule
+ \kern-\topskip
+ \kern-\strulethickness
+ \hrule height\strulethickness depth\z@
+ \nobreak
+ \kern\medskipamount
+ \fi
+ \ifx\thetitle\relax
+ \else
+ \nobreak
+ {\parskip\z@\interlinepenalty\@M
+ \noindent\def\\{\unskip\break}\raggedstretch=.3\colwd\raggedright\bf
+ \ignorespaces\thetitle\unskip\endgraf}%
+ \fi
+ \ifnum\authornumber>0
+ \nobreak
+ \vskip4pt
+ {\parskip\z@\interlinepenalty\@M
+ \def\\{\unskip\hfil\break}\hangindent\parindent\raggedright
+ \@authorlist\endgraf}
+ \fi
+ \nobreak
+ \vskip \BelowTitleSkip
+ \vskip -\parskip
+ \tenpoint
+ \DeleteOptionalSpacesandPars{\noindent\ignorespaces}%
+ }
+
+
+\def\endarticle{\vfil\end} % redefined in drivers
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** heads *****
+%
+
+% Heads are set by first saving the text of the head in \@argument
+% and then operating appropriately depending upon the \headlevel.
+% Selection among the different heads is made by an \ifcase.
+
+% To remove extra \par tokens between heads and ensuing text in the
+% input file, we call \DeleteOptionalSpacesandPars. To do this outside
+% the `head' group and just before TeX returns to the normal input stream
+% following a call to \head, we must define (globally) a control sequence
+% (\@next) and call it at the very end.
+
+\newcount\headlevel \headlevel=1
+
+\def\head{%
+ \begingroup
+ \def\CurrentTag{head}%
+ \@allowindentfalse
+ \@defaultoptions
+ \@savingargumenttrue
+ \def\\{\break}%
+ \@checkoptions}
+
+\def\endhead{%
+ \endgraf
+ \ifcase\headlevel\or\@domainhead\or\@dosubhead\or\@dosubsubhead\fi
+ \endgroup
+ \@next
+ }
+
+\def\@domainhead{%
+ \if@removeprewhite\else\vskip\baselineskip\fi
+ \noindent{\raggedright\bf\ignorespaces\the\@argument\unskip\endgraf}%
+ \if@removepostwhite % usually we want the white space
+ \else\kern0.5\baselineskip\fi
+ \nobreak
+ \gdef\@next{%
+ \if@allowindent\def\@next{}% usually we don't want to indent here
+ \else\def\@next{\DeleteOptionalSpacesandPars{\noindent\ignorespaces}}\fi
+ \@next
+ }%
+ }
+
+\def\@dosubhead{%
+ \if@removeprewhite\else\medskip\fi
+ \noindent{\frenchspacing\bf\ignorespaces\the\@argument
+ \unskip\if@headpunctuation.\fi}%
+ \hskip 0.5em plus \fontdimen3\the\font
+ \gdef\@next{\DeleteOptionalSpacesandPars{}}%
+ }
+
+\def\@dosubsubhead{%
+ {\frenchspacing\bf\ignorespaces\the\@argument\unskip}%
+ \hskip 0.5em plus \fontdimen3\the\font
+ \gdef\@next{\DeleteOptionalSpacesandPars{}}%
+ }
+
+\def\subhead{\head[\headlevel=2]}
+\def\subsubhead{\head[\headlevel=3]}
+
+\newif\if@headpunctuation \@headpunctuationtrue
+\def\nopunctuation{\@headpunctuationfalse}
+
+\newif\if@allowindent
+\def\allowindent{\global\@allowindenttrue}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** text and subtext *****
+%
+
+% The code here exists primarily to implement \subtext. The treatment
+% is similar to that for \head in that an \ifcase statement is called
+% to choose between the various text levels. Here, however, we handle
+% the `text' on the fly instead of saving it as an argument.
+
+\newcount\textlevel \textlevel=1
+
+\def\text{%
+ \begingroup
+ \def\CurrentTag{text}%
+ \@defaultoptions
+ \@savingargumentfalse
+ \@checkoptions}
+
+\def\@begintext{%
+ \endgraf
+ \ifcase\textlevel\or\or\@setupsubtext\fi
+ }
+
+\def\@setupsubtext{%
+ \vskip\abovedisplayskip
+ \advance\leftskip by 0.5\parindent
+ \advance\rightskip by 0.5\parindent
+ \ninepoint\rm
+ }
+
+\def\endtext{%
+ \gdef\@next{}%
+ \ifcase\textlevel\or\or\@dosubtext\fi
+ \endgroup
+ \@next
+ }
+
+\def\@dosubtext{%
+ \endgraf
+ \vskip\belowdisplayskip
+ \gdef\@next{\@asifbelowdisplay}%
+ }
+
+\def\subtext{\text[\textlevel=2]}
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** lists *****
+%
+
+\newcount\listlevel \listlevel=1
+\newif\if@itemized
+\newcount\itemnumber
+\newtoks\@itemtag
+\newcount\@cols % number of columns in list
+\newdimen\colsepwidth
+\newdimen\@listindent
+\newdimen\@listhangindent
+\newif\if@firstitem % when first item is handled differently
+\newtoks\everylist
+
+\def\list{%
+ \begingroup
+ \def\CurrentTag{list}%
+ \let\@liststyle=\@displaystyle
+ \def\inline{\let\@liststyle=\@inlinestyle}%
+ \def\display{\let\@liststyle=\@displaystyle}%
+ \def\displaystyle##1{\def\@altdisplaystyle{##1}}%
+ \def\inlinestyle##1{\def\@altinlinestyle{##1}}%
+ \def\item{%
+ \begingroup
+ \def\CurrentTag{item}%
+ \@numarguments=0
+ \@checkoptions}%
+ \@itemtag={$\bullet$}%
+ \def\tag##1{\@itemtag{##1}}%
+ \def\tagform##1{\llap{##1\strutt\enspace}}%
+ \@itemizedtrue
+ \def\unitemized{\@itemizedfalse}%
+ \itemnumber=0
+ \def\numbered{\@itemtag={\number\itemnumber.}}%
+ \def\romannumeraled{\@itemtag={\romannumeral\itemnumber.}}%
+ \def\Romannumeraled{\@itemtag=
+ {\uppercase\expandafter{\romannumeral\itemnumber.}}}%
+ \def\lettered{\itemnumber="60 \@itemtag={\char\itemnumber.}}%
+ \def\Lettered{\itemnumber="40 \@itemtag={\char\itemnumber.}}%
+ \def\ruled{\@ruledtrue}%
+ \@ruledfalse
+ \@cols=1
+ \def\cols{\@cols}%
+ \@firstitemtrue
+ \def\@itemseparator{, }%
+ \def\itemseparator##1{\def\@itemseparator{##1}}%
+ \@defaultoptions
+ \@savingargumentfalse
+ \the\everylist
+ \@checkoptions}
+
+\def\@beginlist{%
+ \ifx\@liststyle\@displaystyle
+ \endgraf
+ \ifnum\listlevel=1
+ \if@ruled \if@removeprewhite\else\medskip\fi \hrule\kern5pt \nobreak
+ \else \if@removeprewhite\else\vskip\abovedisplayskip \fi\fi
+ \fi
+ \advance\leftskip\parindent
+ \@listindent=\parindent
+ \@listhangindent=\@listindent
+ \parindent\@listindent
+ \lineskip\z@
+ \if@itemized
+ \else
+ \parskip\z@skip
+ \parindent\z@
+ \raggedright
+ \everypar={\advance\itemnumber\@ne
+ \tagform{\the\@itemtag}}%
+ \makeCtrlMendgraf
+ \fi
+ \def\colsep{%
+ \global\count@\itemnumber
+ \egroup\kern\colsepwidth
+ \vtop\bgroup
+ \@altdisplaystyle
+ \itemnumber=\count@\ignoreendline}%
+ \ifnum\@cols>1
+ \dimen@\colsepwidth
+ \multiply\dimen@\@cols
+ \advance\dimen@-\colsepwidth
+ \advance\hsize-\dimen@
+ \divide\hsize by\@cols
+ \hbox\bgroup\vtop\bgroup
+ \fi
+ \@altdisplaystyle
+ \else
+ \def\tagform##1{##1\strutt\ }%
+ \if@itemized
+ \else
+ \makeCtrlMseparator
+ \advance\itemnumber by \@ne
+ \tagform{\the\@itemtag}%
+ \fi
+ \def\colsep{}%
+ \@altinlinestyle
+ \fi
+ }
+
+
+\def\endlist{%
+ \ifx\@liststyle\@displaystyle
+ \if@itemized\endgraf\fi
+ \ifnum\@cols>1
+ \egroup % vtop
+ \egroup % hbox
+ \fi
+ \ifnum\listlevel=1
+ \if@ruled \kern5pt\hrule\nobreak\vskip2\medskipamount
+ \else %\nobreak
+ \if@removepostwhite\else\vskip\belowdisplayskip\fi
+ \fi
+ \gdef\@next{\@asifbelowdisplay}%
+ \fi
+ \else \gdef\@next{}%
+ \fi
+ \endgroup % list
+ \@next
+ }
+
+\def\sublist{\list[\listlevel=2]}
+
+
+\newtoks\everyitem \everyitem{}
+
+
+\def\@beginitem{%
+ \ifx\@liststyle\@displaystyle
+ \endgraf
+ \if@firstitem\@firstitemfalse\else\vskip\smallskipamount\fi
+ \advance\itemnumber by \@ne
+ \noindent\leavevmode
+ \the\everyitem
+ \tagform{\the\@itemtag}%
+ \else
+ \def\item{\if@firstitem\@firstitemfalse\else\unskip\@itemseparator\fi
+ \advance\itemnumber by \@ne\the\@itemtag\enspace}%
+ \fi
+ \global\count@\itemnumber
+ \global\dimen@\hangindent
+ \endgroup
+ \itemnumber\count@
+ \hangindent\dimen@
+ }
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** verbatim *****
+%
+
+% Operation here is very similar to that for the other tags.
+% The opening tag sets up the situation and looks for optional
+% commands and the short-form delimiters. Since initial setup
+% involves changing the special characters to characters of
+% type other, some juggling must be done when optional commands
+% are read. In addition, to allow for implementation of the
+% |...| style using the more verbose \verbatim...\endverbatim,
+% we parameterize the ending-delimiter.
+
+ % sets default to display style
+\def\verbatim{\@verbatim[\display]}
+
+\def\@verbatim{%
+ \begingroup
+ \setupverbatim
+ \@checkoptions
+ }
+
+\def\setupverbatim{%
+ \def\CurrentTag{verbatim}%
+ \@defaultoptions
+ \def\inline{\let\@verbstyle\@inlinestyle}%
+ \def\display{\par\smallverbdisplay\let\@verbstyle\@displaystyle}%
+ \def\displaystyle##1{\def\@altdisplaystyle{##1}}%
+ \def\inlinestyle##1{\def\@altinlinestyle{##1}}%
+ \def\numbered{\@numberedtrue}%
+ \def\ruled{\@ruledtrue}%
+ \def\smallcode{\ninepoint\tt }%
+ \let\@verbinputvar\relax
+ \let\@verbinputfile\relax
+ \@SpecialsGetOther
+ \enddelim=\expandafter{\endverbdelimiter}%
+ \normalspaces\frenchspacing
+ \obeylines
+ \@savingargumenttrue
+ \the\everyverbatim
+ }
+
+% By default, switch to 9pt tt for verbatim displays.
+\def\smallverbdisplay{\smallcode}
+
+\def\@SpecialsGetOther{%
+ \catcode`\\=\other
+ \catcode`\{=\other \catcode`\}=\other \catcode`\$=\other
+ \catcode`\&=\other \catcode`\#=\other \catcode`\%=\other
+ \catcode`\~=\other \catcode`\_=\other \catcode`\^=\other
+ \the\@AdditionsToSpecialsGetOther}
+
+% The \@Additions... register above should be used whenever another
+% character is declared to be special for some purpose. E.g.,
+% we will use the | for the short-form |...| verbatim notation.
+% Since the | is generally active for this purpose, it's category
+% won't get changed to \other for use in \verbatim...\endverbatim
+% unless we add it via this mechanism.
+
+\newtoks\@AdditionsToSpecialsGetOther
+
+\def\AddToSpecialsGetOther#1{%
+ \@AdditionsToSpecialsGetOther=
+ \expandafter{\the\@AdditionsToSpecialsGetOther#1}}
+
+% Altering the verbatim setup.
+% Users can alter the setup to their purpose by
+% putting tokens in the register \everyverbatim.
+
+\newtoks\everyverbatim
+
+% Ordinarily the end-tag would be the single token `\endverbatim'.
+% The following allows us to `see' the tag when `\' is of type `other'.
+{\catcode`\|=0 \catcode`\\=\other
+|gdef|endverbdelimiter{\endverbatim}}
+
+% Input from an external variable or file
+
+\def\inputfromvar#1{\def\@verbinputvar{#1}}%
+\def\inputfromfile#1{\def\@verbinputfile{#1}}%
+\let\@verbinputvar\relax
+\let\@verbinputfile\relax
+
+% Outputs
+
+\newif\if@outputtotype \@outputtotypetrue
+\def\notype{\@outputtotypefalse}
+\def\outputtovar#1{\def\@verboutputvar{#1}}
+\def\outputtofile#1{\def\@verboutputfile{#1}}
+\let\@verboutputvar\relax
+\let\@verboutputfile\relax
+\newwrite\verboutfile
+
+\def\@beginverbatim{\obeyspaces}%\obeylines}
+
+\def\endverbatim{%
+ \ifx\@verboutputvar\relax\else % output to `variable'
+ \expandafter\xdef\csname\@verboutputvar\endcsname{\the\@argument}%
+ \fi
+ \ifx\@verboutputfile\relax\else % output to file
+ \immediate\openout\verboutfile=\@verboutputfile
+ \makeCtrlMnewlinechar
+ \iffalse{\fi\expandafter\@setupverbwrite\the\@argument}% use \@setupwrite to
+ \immediate\closeout\verboutfile % get rid of initial ^^M
+ \fi
+ \gdef\@next{}% % in case following clause is false
+ \if@outputtotype % output typeset on page
+ \tt
+ \ifx\@verbstyle\@inlinestyle
+ \@beforeverbinline
+ \@altinlinestyle
+ \else
+ \@beforeverbdisplay
+ \@altdisplaystyle
+ \fi
+ \ifx\@verbinputvar\relax\else % input from `variable'
+ \csname\@verbinputvar\endcsname
+ \fi
+ \ifx\@verbinputfile\relax\else % input from file
+ \fileinput{\@verbinputfile}%
+ \@endverbatim
+ \fi
+ \expandafter\@ignoreCtrlMverbendline\the\@argument\@endverbatim
+ \ifx\@verbstyle\@inlinestyle
+ \@afterverbinline
+ \else
+ \@afterverbdisplay\gdef\@next{\@asifbelowdisplay}%
+ \fi
+ \fi
+ \endgroup
+ \@next
+ }
+
+
+\def\@beforeverbinline{%
+ \makeCtrlMverbspace
+ \let\@endverbatim=\empty
+ }
+
+\def\@beforeverbdisplay{%
+ \def\@endverbatim{\verbendline}%
+ \if@ruled \medskip \hrule\kern5pt \nobreak
+ \else \vskip\abovedisplayskip
+ \fi
+ \makespaceverbspace
+ \makeCtrlMverbendline
+ \parskip=\z@skip
+ \if@numbered \parindent=\z@
+ \if@continuingnumbers
+ \else \global\globallinenumber = \z@ \fi
+ \linenumber=\z@ \fi
+ \everypar={\global\advance\globallinenumber by\@ne
+ \advance\linenumber by\@ne
+ \ifnum\linenumber<3 \vadjust{\nobreak}\fi
+ \if@numbered \leavevmode
+ \hbox to\normalparindent{\hss\sevenrm\the\globallinenumber.\ }%
+ \fi}%
+ \frenchspacing\rightskip=-\ttrightskip \hyphenpenalty\@M
+ }
+
+% \ttrightskip is the permissible overhang beyond right margin;
+% in MANMAC, this is 5pc, which is fine for the TeXbook, but too much here.
+
+\newdimen\ttrightskip \ttrightskip=1pc
+
+\def\@afterverbinline{}
+
+\def\@afterverbdisplay{%
+ \if@ruled \kern5pt\hrule\fi
+ \ifnum\linenumber<3 \penalty\z@ \fi
+ \if@removepostwhite\else
+ \if@ruled \vskip2\medskipamount \else \vskip\belowdisplayskip\fi
+ \fi
+ }
+
+\def\@asifbelowdisplay{%
+ \toks@=\expandafter{\the\everypar}%
+ \noindent
+ \everypar=\expandafter{\the\toks@}%
+ \ignorespaces}
+
+
+% Definitions of spaces and ^^M
+% \@ignoreCtrlMverbendline is used to lop off an initial ^^M in
+% verbatim text and to remove an \@endverbatim (the latter in case the
+% verbatim text is actually empty)
+
+\def\@ignoreendverbatim{\@ignoreone{\@endverbatim}{}}
+\def\verbendline{\leavevmode\null\endgraf}
+\def\makeCtrlMactive{\catcode`\^^M=\active}
+{\makeCtrlMactive
+\gdef\makeCtrlMverbendline{\makeCtrlMactive%
+ \def^^M{\@ignoreone{\@endverbatim}{\verbendline}}}%
+\makeCtrlMverbendline%
+\gdef\@ignoreCtrlMverbendline{\@ignoreone{
+}{\@ignoreendverbatim}}%
+\gdef\@setupverbwrite{\@ignoreone{
+}{\immediate\write\verboutfile\bgroup}}%
+\gdef\makeCtrlMverbspace{\makeCtrlMactive\def^^M{\verbatimspace}}%
+\gdef\makeCtrlMnewlinechar{\newlinechar=`\^^M}%
+\gdef\makeCtrlMendgraf{\makeCtrlMactive\def^^M{\strutt\endgraf}}%
+\gdef\makeCtrlMseparator{\makeCtrlMactive%
+ \def^^M{%
+ \@checknexttoken {\endlist}{}{%
+ \@itemseparator\advance\itemnumber by \@ne \tagform{\the\@itemtag}%
+ \ignorespaces}}}%
+}
+
+% to read a variable or file name properly, we must interpret
+% spaces and ^^M as nothing or as spaces
+
+{\makeCtrlMactive\obeyspaces%
+\gdef\makeCtrlMempty{\def^^M{}}%
+\gdef\makespaceempty{\def {}}%
+}
+{\makeCtrlMactive\obeyspaces%
+\gdef\makeCtrlMspace{\def^^M{\space}}%
+\gdef\makespacespace{\def {\space}}%
+}
+
+{\makeCtrlMactive%
+\gdef\@ignoreCtrlM#1{\@ignoreone{^^M}{#1}}%
+\gdef\ignoreendline{\@ignoreCtrlM{}}%
+}
+
+% From David Eppstein's ``Trees'' paper (6#1), preserve initial spaces.
+\def\verbatimspace{\ifvmode\indent\fi\space}
+{\obeyspaces\gdef\makespaceverbspace{\def {\verbatimspace}}}
+
+
+
+% Options and variants.
+
+\def\verbinline{\@verbatim[\inline]} % \@verbatim to avoid \display
+\def\verbdisplay{\verbatim[\display]} % already the default, but what the heck
+\def\verbfile#1{\verbatim[\inputfromfile{#1}]}
+
+
+% Verbatim with the other characters (e.g. |...|).
+% Procedures are parameterized so that it is easy to allow
+% different characters to perform this function. Any character
+% that's chosen could cause problems if it occurs unexpectedly
+% in the middle of what is supposed to be verbatim text. We call
+% the current special character for this purpose the "verbchar"
+% and store it in active form in the token register \@verbchar.
+
+\newtoks\@verbchar
+
+% On hitting a "verbchar" in the middle of text, TeX must look ahead
+% to see whether the verbchar occurs again. Since this
+% look-ahead fixes the category of the token examined, we must change
+% the categories of all characters appropriately before looking
+% (and we read \everyverbatim in case it contains a category change).
+% We must also "gobble" the second verbchar if we hit one.
+% Depending upon whether 1 or 2 verbchars are found, we call
+% \verbatim with the appropriate style command. We also use an
+% optional command to change the delimiter which ends this \verbatim
+% block. We naturally localize the changes to category codes made on
+% startup. It's easier to end this group here at the beginning and to
+% restart everything in a standard \verbatim than it is to add an extra
+% \endgroup after the verbatim text.
+
+\def\@firstverbchar{%
+ \begingroup
+ \setupverbatim
+% \@SpecialsGetOther
+ \makeverbcharactive
+ \expandafter\@checknexttoken\expandafter{\the\@verbchar}%
+ {\expandafter\@ignoreone\expandafter{\the\@verbchar}%
+ {\endgroup\verbatim[\longform\maketwoendverb]}}%
+ {\endgroup\@verbatim[\inline\longform\makeoneendverb]}%
+ }
+
+\def\setupverbchar{%
+ \def\makeoneendverb{\catcode\expandafter`\csname\expandafter
+ \string\the\@verbchar\endcsname=
+ \active\edef\endverbdelimiter{\the\@verbchar}%
+ \enddelim=\expandafter{\endverbdelimiter}}%
+ \def\maketwoendverb{\catcode\expandafter`\csname\expandafter
+ \string\the\@verbchar\endcsname=
+ \active\edef\endverbdelimiter{\the\@verbchar\the\@verbchar}%
+ \enddelim=\expandafter{\endverbdelimiter}}%
+ \expandafter\let\the\@verbchar\@firstverbchar
+ \makeverbcharactive
+ \AddToSpecialsGetOther{%
+ \catcode\expandafter`\csname
+ \expandafter\string\the\@verbchar\endcsname=\other}%
+ }
+
+\def\makeverbcharactive{%
+ \catcode\expandafter`\csname
+ \expandafter\string\the\@verbchar\endcsname=\active}
+
+{\makeother\| \gdef\VertChar{|}}
+{\makeactive\|
+\gdef\makevertverbchar{%
+ \@verbchar={|}%
+ \setupverbchar
+ }
+}
+
+{\makeother\! \gdef\WowChar{!}}
+{\makeactive\!
+\gdef\makewowverbchar{%
+ \@verbchar={!}%
+ \setupverbchar
+ }
+}
+
+
+\def\MTH{$}
+\def\sb{_}
+\def\sp{^}
+\def\SP{{\tt\char"20 }} % "visible" space
+\chardef\bs=`\\
+\def\vrt{{\tt\char`\|}}
+\def\brokenvert{\hbox to 5.24998pt{\hfill
+ \lower 1.5pt\vbox to 8.5pt{\hrule width .9pt height 3.25pt
+ \vfill\hrule width .9pt height 3.25pt}\hfill}}
+
+
+
+\def\@lt{$<$}
+\def\@gt{$>$}
+{\makeactive\<
+\gdef\enablemetacode{%
+ \AddToSpecialsGetOther{\catcode`\<=\other}%
+ \makeactive\<%
+ \def<##1>{$\langle${\it\makeCtrlMspace\makespacespace##1\/}$\rangle$}%
+ }
+}
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** figures *****
+%
+
+
+\newif\if@@mid \@@midfalse
+\newif\if@@bot \@@botfalse
+\def\@caption{}
+\def\abovecaptionskip{\bigskip}
+
+\newif\if@fixed \@fixedfalse
+
+ % items for top and bottom ``banners'' on first page
+\def\resetfirsthead{\global\toplgt=\z@ \gdef\firsthead{}}
+\resetfirsthead
+\newbox\firsth@@d \newbox\firsth@ad
+
+\def\resetfirstfoot{\global\botlgt=\z@ \gdef\firstfoot{}}
+\resetfirstfoot
+\newbox\firstf@@t \newbox\firstf@ot
+
+\newif\if@allowspanningfigs
+
+\newcount\@figurepage
+\newcount\@figurescol
+\newcount\@figureecol
+
+
+\def\figure{%
+ \begingroup
+ \def\CurrentTag{figure}%
+ \@defaultoptions
+ \@savingargumentfalse
+ \def\top{}%
+ \def\bot{\@@bottrue}%
+ \def\mid{\@@midtrue}%
+ \def\caption##1{\def\@caption{\ulap{\abovecaptionskip##1\smallskip}}}%
+ \def\fixed{\@fixedtrue}%
+ \def\scol{\@figurescol}%
+ \def\ecol{\@figureecol}%
+ \@figurepage=\pageno
+ \@figurescol=1
+ \@figureecol=\numcols
+ \def\page{%
+ \@ignoreall{\space}%
+ {\@ignoreone{=}%
+ {\@ignoreall{\space}%
+ {\@checknexttoken{+}{\@ignoreone{+}{\advance\@figurepage by}}%
+ {\@figurepage=}%
+ }%
+ }%
+ }%
+ }%
+ \@checkoptions}
+
+\def\@beginfigure{%
+ \if@fixed
+ \global\ThisIsFirstPagetrue
+ \setbox\T@stBox=\vbox\bgroup \hsize\pagewd
+ \else
+ \if@@mid\midinsert\else\if@@bot\botinsert\else\topinsert\fi\fi
+ \fi
+ }
+
+\def\endfigure{%
+ \@caption
+ \if@fixed
+ \egroup
+ \if@allowspanningfigs
+ \ifnum\@figurepage>\pageno
+ \immediate\write\sixt@@n{^^J
+ Setting multiple column figures currently not allowed on pages^^J
+ other than the first of each article. Check your source file.^^J}%
+ \else
+ \if@@bot
+ \ifdim \botlgt=\z@ \global\botlgt=\ht\T@stBox \resetpagelgt \fi
+ \global\setbox\firstf@ot=\vbox to \botlgt{\box\T@stBox \vfil}%
+ \global\setbox\firstf@@t=\vbox to \botlgt{\vfil}%
+ \gdef\firstfoot{\ifnum \xcol=2 \copy\firstf@ot
+ \else \copy\firstf@@t \fi }%
+ \else
+ \ifdim \toplgt=\z@ \global\toplgt=\ht\T@stBox \resetpagelgt \fi
+% assume that \firsth@ad ends with glue, hence no \dp
+ \global\setbox\firsth@ad=\vbox to \toplgt{\box\T@stBox \vfil}%
+ \global\setbox\firsth@@d=\vbox to \toplgt{\vfil}%
+ \gdef\firsthead{\ifnum \xcol=2 \box\firsth@ad
+ \else \copy\firsth@@d \fi }%
+ \fi
+ \fi
+ \else
+ \immediate\write\sixt@@n{^^J
+ Setting multiple column figures currently not allowed after^^J
+ article has begun.^^J}%
+ \fi
+ \else \endinsert
+ \fi
+ \endgroup
+ }
+
+\def\twocolfigure{%
+ \figure[\fixed]}
+
+
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** utilities *****
+%
+
+
+
+\def\linebreak{\unskip\break} % conflicts with LaTeX definition
+
+% Define a structure that will permit a list (using \obeylines)
+% to be made into 2 columns, split by \vsplit, indented the
+% normal \parindent
+
+\def\NormalizeBlockHeight{%
+ \TestCount=1 % \@ne
+ \TestDimen=\dimen0 \advance\TestDimen by-\topskip
+ \CutOneLine }
+\def\CutOneLine{%
+ \advance\TestCount by 1 \advance\TestDimen by-\baselineskip
+ \ifdim\TestDimen < \baselineskip % \@ne
+ \def\result{%
+ \TestDimen=\baselineskip
+ \multiply\TestDimen by \TestCount
+ \advance\TestDimen by \topskip
+ \global\dimen0=\TestDimen }%
+ \else \def\result{\CutOneLine }\fi
+ \result }
+
+\def\twosplit{%
+ {\topskip=\baselineskip \splittopskip=\topskip
+ \setbox0=\copy\TestBox
+ \dimen0=\ht\TestBox
+ \NormalizeBlockHeight
+ \divide\dimen0 by 2
+ \setbox\LeftHalf=\vsplit\TestBox to \dimen0
+ \ifdim\ht\TestBox > \ht\LeftHalf
+ \advance\dimen0 by \baselineskip
+ \setbox\TestBox=\copy0
+ \setbox\LeftHalf=\vsplit\TestBox to \dimen0
+ \fi
+ \line{\kern\parindent\valign{##\vfil\cr
+ \unvbox\LeftHalf\cr\noalign{\hfil}\unvbox\TestBox\cr}}%
+ }%
+ \global\setbox0=\null}
+
+\newbox\LeftHalf
+\newdimen\HalfWd
+\HalfWd=\twocolcolwd
+\advance\HalfWd by-\normalparindent
+\divide\HalfWd by 2
+
+{\obeylines
+\gdef\twouplist #1{%
+ \topskip=\baselineskip \splittopskip=\topskip
+ \begingroup \parindent=\z@ \obeylines
+% next line ends with intentional <cr>
+ \def\endtwouplist{
+ \egroup % % end of \vbox
+ \endgroup % % end of \obeylines group
+ \twosplit }%
+ \global\setbox\TestBox=\vbox\bgroup\hsize=\HalfWd %
+ \indent\vrule height\topskip width \z@ #1}%
+}
+
+% Tags for special formatting of editor's notes (See also TUGBOAT.COM)
+
+\def\Editor{\noindent To the Editor:\par}
+\def\EdNote #1{%
+ \if #1[%
+ \ifvmode \smallskip\noindent \else \unskip\hskip1em \fi
+ [\thinspace\xEdNote\ignorespaces
+ \else \ifFirstPar \else \medskip\noindent \fi
+ \xEdNote #1\fi }
+
+
+
+% Draw a box around a whole page, e.g. announcements page;
+% format must be \onenarrow or \onemedium, and start on a new page.
+
+\def\bigbox{\hrule \hbox\bgroup \vrule\kern 1pc
+ \vbox\bgroup \vskip 1pc }
+\def\endbox{\endgraf \vskip 1pc \egroup \kern 1pc\vrule \egroup \hrule }
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** initialization *****
+%
+
+
+\def\initializearticle{%
+ \let\thetitle=\relax
+ \authornumber=0
+ \def\@signature{\@defaultsignature}%
+ \def\@authorlist{\@defaultauthorlist}%
+ \@allowspanningfigstrue
+ }
+
+
+\makeother\@
+
+% @ is prohibited in AMS-TeX, but should not be in TUGboat
+
+
+\twocol
+\maxcols=2
+\hfuzz=1pt % don't worry about small overfulls
+\OverlaysinTeXtrue
+\Trimmarksfalse
+\PrelimDrafttrue
+\initializearticle
+\pageno=901 % number of title page
+
+% Stretchy spacing was the default for many years, but in 2012 it
+% looked too stretchy. Comment out.
+%\StretchyTenPointSpacing
+%\StretchyNinePointSpacing
+%\StretchyEightPointSpacing
+
+\makevertverbchar
+
+\endinput
+
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% History of changes
+
+Version Date Changes
+------- --------- ---------------------------------------------------
+1.25 12 Jun 19 \tenpoint \rm: reset \sl to \tensl,
+ since the \tenpoint \bf changes it to \tenbfsl.
+
+1.24 5 Sep 18 only version number bump to match tugboat.cmn.
+
+1.23 19 Mar 17 define \manual and \manualsl in each of \tenpoint,
+ \ninepoint, \eightpoint; define \SMC in \eightpoint.
+
+1.22 7 Nov 16 \smallcode: do not reduce baselineskip.
+ \abovecaptionskip: generalize \bigskip; no change
+ to default.
+ \pageno: start at 901 to make LaTeX.
+ \hfuzz: initialize to 1pt to match existing practice.
+
+1.21 <skipped this version number>
+
+1.20 22 May 12 Do not hyphenate in typewriter.
+ Add footnote hooks.
+ No \Stretchy*Spacing by default.
+ \smallcode for verbatim displays (not inline)
+ via \smallverbdisplay.
+
+1.19 4 Mar 11 added \r
+
+1.18 4 Feb 11 changed \rfoot to give same results as LaTeX class
+
+1.17 3 Jun 06 clarified copyright.
+
+1.16 2 Jan 06 updated TUG address and phone in header
+
+1.15 15 Aug 05 added switch \if@address to avoid skip in signature
+
+1.14c 14 Oct 96 lowered footnoterule by 3pt
+
+1.14b 14 Apr 94 added \interlinepenalty=10000 to avoid page breaks
+ in very long titles and author lists
+
+1.14a 8 Nov 93 removed extraneous " from header
+
+1.14 19 Feb 93 installed new TUG address and phone number in header
+
+1.13 13 Oct 92 Added \SMC in \ninepoint
+
+1.12 4 Jun 92 Added stretchability to \rightskip in ragged title
+
+1.11 8 Mar 92 Changed name of tugboat.com to tugboat.cmn to avoid
+ conflict with special meaning of .com with some
+ operating systems
+ Within verbatim, added \smallcode (from tugproc)
+ Added standard headers, prepared for archive installation
+
+1.10 21 Oct 91 Corrected font for \SMC in \tenpoint to \ninerm
+ (\ninesmc was used, but set to cmcsc10)
+ Changed \EdNote to detect \ifvmode when tag followed
+ by [ and to \smallskip and \noindent in that case
+ rather than performing \hskip1em
+
+1.09 11 Mar 91 Made \ an escape character in network addresses.
+ Added mechanism for saving \long arguments of
+ TUGboat macros (see uses of \@long).
+
+1.08 18 Oct 90 Incorporated redefinition of \sl within \bf
+ Changed an \input within \verbatim to \fileinput.
+ Added means of turning off punctuation after subheads.
+ Removed \nobreak after lists
+1.07 8 Jun 90 Corrected definition of \newpage
+
+1.06 13 May 90 Added \@setupverbwrite to eliminate initial ^^M
+ as \verbatim writes to a file.
+
+ Made strut on first line of footnote slightly taller
+ so as to separate footnotes.
+
+ Reset \@verbinputfile and \@verbinputvar to \relax
+ to allow nesting
+
+ Removed some \global assignments to \@argument and
+ 2 verbatim flags to allow nesting.
+
+1.05 23 Apr 90 Added "\setupverbatim" to \@firstverbchar so
+ that category switches are accomodated properly.
+
+1.04 7 Mar 90 Added \colsepwidth to allow for separation between
+ columns of lists
+
+1.03 1 Mar 90 Modified \@dosubhead and \@dosubsubhead to allow
+ stretchable space afterward
+
+1.02 25 Feb 90 Added \resetmaxcols to allow for automatic adjustment
+ of \maxcols; if overlays are done by the driver,
+ \maxcols needs to be set to an overall job maximum
+ at the start of the job.
+
+ Added setting of \SecTitletrue to definition
+ of \sectitle.
+
+ Added indicator of style file loaded (\tubstyle).
+
+1.01 17 Jan 90 Modified \@executetoend so that \@next would not
+ be clobbered by \csname @begin\CurrentTag\endcsname;
+ \@next changed to \@afterbegintag
+
+ Added `\the' before \@otherSFD within definition of
+ \@shortparse
+
+ added \@altdisplaystyle to definition of \colsep
diff --git a/macros/plain/contrib/tugboat/tugproc.sty b/macros/plain/contrib/tugboat/tugproc.sty
new file mode 100644
index 0000000000..765151f2cb
--- /dev/null
+++ b/macros/plain/contrib/tugboat/tugproc.sty
@@ -0,0 +1,363 @@
+%% @texfile{
+%% filename="tugproc.sty",
+%% version = "see below \fileversion"
+%% date = "see below \filedate",
+%% filetype = "was plain TeX macros for TUG Proceedings; now unused",
+%% copyright = "Copyright 1990-2016 TeX Users Group.
+%% Unlimited copying and redistribution of this file
+%% are permitted as long as this file is not
+%% modified. Modifications (and redistribution of
+%% modified versions) are also permitted, but only if
+%% the resulting file is renamed."
+%% email = "TUGboat@tug.org",
+%% codetable = "ISO/ASCII",
+%% keywords = "tex users group, tugboat, proceedings, plain tex",
+%% abstract = "This file contains the plain-based macros
+%% that were used in proceedings issues of TUGboat, the
+%% Communications of the TeX Users Group. Now unused."
+%% }
+%% *********************************************************
+%%
+%% Use of this file also requires the following files:
+%% TUGBOAT.STY (version 1.09+)
+%% TUGBOAT.CMN (version 1.08+) (loaded by TUGBOAT.STY)
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\fileversion{v1.22}
+\def\filedate{26 Sep 16}
+
+\message{File `TUGPROC.STY' \fileversion \space\space <\filedate>}
+
+% initialize year/issue-specific elements for standalone use
+\def\mtgyear{1994}
+\def\volyr{1994}
+\def\volno{15}
+\def\issno{3}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\input tugboat.sty
+
+\savecat\@ \makeletter\@
+\ifx\tugprocloaded@\undefined \let\tugprocloaded@\end
+\else \restorecat\@ \xdef\startingpage{\number\pageno}\endinput \fi
+
+\newdimen\tubpagelgt
+\tubpagelgt=\pagelgt \advance\tubpagelgt 1pc % for running feet
+
+% fonts
+
+\font\twelverm=cmr10 scaled 1200
+\font\twelvebf=cmbx10 scaled 1200
+\font\fourteenrm=cmr10 scaled 1440
+\font\fourteenit=cmti10 scaled 1440
+\font\fourteensl=cmsl10 scaled 1440
+
+\def\twelvepoint{%
+ \normalbaselineskip=14pt
+ \def\rm{\fam\z@\twelverm}%
+ \textfont\z@=\twelverm
+ \def\bf{\fam\bffam\twelvebf}%
+ \textfont\bffam=\twelvebf
+ \normalbaselines \rm}
+
+\def\fourteenpoint{%
+ \normalbaselineskip=18pt
+ \def\rm{\fam\z@\fourteenrm}%
+ \textfont\z@=\fourteenrm
+ \def\it{\fam\itfam\fourteenit}%
+ \textfont\itfam=\fourteenit
+ \def\sl{\fam\slfam\fourteensl}%
+ \textfont\slfam=\fourteensl
+ \normalbaselines \rm}
+
+\def\AUTHORfont{\twelvepoint\rm}
+\def\HEADfont{\twelvepoint\bf}
+\def\TITLEfont{\fourteenpoint\rm}
+\def\addressfont{\ninepoint\rm}
+\def\netaddrfont{\ninepoint\tt}
+
+\def\br{\unskip\hfil\break} % version for titles
+\def\degrade{\def\br{\unskip\space\ignorespaces}%
+ \let\\\br} % in running heads.
+
+% running heads & feet
+%\newcount\startingpage % Number of first page of article
+\newif\ifpreprint \preprinttrue
+\def\preprint{\preprinttrue
+ \ifExtrAbs\breaklines\fi} % (*)
+\newif\ifproof \prooffalse \let\filename\relax
+\def\Proof{\prooftrue\immediate\write16{File name?}
+ \immediate\read16 to\filename}
+\def\stamp{\ifproof{\tt \filename}\quad\Now\else\space\fi}
+\let\midrtitle=\null
+\def\rtitlex{%
+ \ifodd\pageno\degrade\rhtitle\else\rhauthor\fi}
+\def\rtitle{%
+ \hbox to \pagewd{%
+ \tenpoint
+ \makestrut[10pt;\z@]%
+ \ifnum\the\pageno=\startingpage\hfill\stamp\else
+ \ifodd\pageno
+ \stamp\hfill\rtitlex
+ \else
+ \rtitlex\hfill\stamp
+ \fi\fi
+ }%
+ }
+
+\ifx\startingpage\undefined \def\startingpage{1001}\fi
+\pageno=\startingpage
+\def\rfoot{%
+ \hbox to \pagewd{%
+ \tenpoint
+ \makestrut[\z@;0.5pc]%
+ \ifpreprint
+ \ifodd\pageno
+ \pfoottext\hfil\Now\hfil$^.$\number\pageno
+ \else
+ \number\pageno$^.$\hfil\Now\hfil\pfoottext
+ \fi
+ \else
+ \ifodd\pageno
+ \rfoottext\hfil\number\pageno
+ \else
+ \number\pageno\hfil\rfoottext
+ \fi
+ \fi
+ }%
+ }
+
+\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}}
+
+% midpage redone to align running feet.
+\def\midpage#1{%
+ \vbox{
+ \basezero
+ \hrule height\z@ depth\z@ width\p@
+ \ifTrimmarks
+ \vskip-1in % default offset for laser printers
+ % this puts top trim at edge of paper
+ \vbox to \trimlgt \bgroup
+ \topregister
+ \vskip \headmargin
+ \else
+ \vskip-\rheadlgt % this puts runhead above default offset
+ \fi
+ \dlap{\vbox to\tubpagelgt{\vfil
+ \ifnum\xcol=\numcols \runfoot \else \vbox to \rfootlgt{}\fi}}
+ \vbox to \pagelgt{
+ \ifnum\xcol=\numcols \runhead \else \vbox to \rheadlgt{}\fi
+ \ifThisIsFirstPage \firsthead \fi
+ \hbox to \pagewd{#1} % \vsize applied in \pagebody
+ \ifThisIsFirstPage \firstfoot \fi
+ \vfil % if no depth, avoid underfull box
+% \ifnum\xcol=\numcols \runfoot \else \vbox to \rfootlgt{}\fi
+ }
+ \ifTrimmarks \vfill \botregister \egroup \fi
+ }}
+
+% ***************************************************
+% Bibliography
+\def\Hang{1em}
+\def\entry #1{\noindent\frenchspacing\hangindent\Hang #1}
+
+% Appendix
+\def\appendix #1\endappendix{\newpage\onecol\centerline{\HEADfont #1}}
+
+% Box for deadlines:
+\newbox\textbox % \twocolcolwd=18.75pc [cf. tugboat.sty]
+\long\def\boxit #1{\vbox{\hrule\hbox{\vrule\kern3pt
+ \vbox{\kern3pt\vskip 4pt#1\vskip 4pt\kern3pt}\kern3pt\vrule}\hrule}}
+\long\def\boxedlist #1{$$\boxit{\setbox\textbox=\vbox{\hsize 18pc
+ \strut{#1}\strut}\box\textbox}$$} % TeXbook, 94 & 223 (exer 21.3)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% top matter
+\def\endtitle{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\thetitle{\ignorespaces\the\toks@\unskip}%
+ \let\rhtitle\thetitle
+ }
+ % If your title is too long for the running head,
+ % use this to construct a shorter version:
+\def\shorttitle{%
+ \begingroup
+ \def\CurrentTag{shorttitle}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endshorttitle{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\rhtitle{\ignorespaces\the\toks@\unskip}%
+ }
+
+\def\rhauthor{\@defaultauthorlist}
+ % Use the following for running heads if more than
+ % one author or author's name is too long to fit:
+\def\shortauthor{%
+ \begingroup
+ \def\CurrentTag{shortauthor}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endshortauthor{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\rhauthor{\ignorespaces\the\toks@\unskip}%
+ }
+
+%\long\def\Abstract #1\endAbstract{\long\def\@abstract{#1}}
+\def\abstract{\@abstract[\longargument]}
+\def\@abstract{%
+ \begingroup
+ \def\CurrentTag{abstract}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endabstract{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\theabstract{\ignorespaces\the\toks@\unskip}%
+ }
+
+\newif\ifExtrAbs \ExtrAbsfalse % Extract abstract from paper
+\def\breaklines{\begingroup\catcode`\^^M=\active\newlinechar=`\^^M}
+\def\endbreaklines{\endgroup}
+
+\def\prefnote{\@prefnote[\longargument]}
+\def\@prefnote{%
+ \begingroup
+ \def\CurrentTag{prefnote}%
+ \@defaultoptions
+ \@savingargumenttrue
+ \@checkoptions}
+
+\def\endprefnote{%
+ \global\toks@=\expandafter{\the\@argument}%
+ \endgroup
+ \edef\theprefnote{\ignorespaces\the\toks@\unskip}%
+ }
+
+\let\theprefnote\relax
+
+\def\@defaultsignature{%
+ \count@=0
+ \loop
+ \ifnum\count@<\authornumber
+ \vskip20pt
+ \advance\count@ by \@ne
+ \noindent{\AUTHORfont\theauthor{\number\count@}}\endgraf
+ \noindent{\addressfont\theaddress{\number\count@}}\endgraf
+ \noindent{\netaddrfont\thenetaddress{\number\count@}}\endgraf
+ \repeat
+ }
+
+\newbox\startbox % \newdimen\startheight
+\def\article{% \ifExtrAbs\endbreaklines\fi % (*)
+ \setbox\startbox=\hbox to\colwd
+ {\hbox to\pagewd{\vbox{
+ \hsize\pagewd\raggedright\advance\rightskip0pt plus 1fil\tenpoint\rm
+ \let\\\break
+ \noindent{\TITLEfont\thetitle\endgraf}%
+ \@defaultsignature
+ \ifx\theprefnote\relax\else
+ \vskip 20pt
+ \hbox to \pagewd{\hfil\vbox{\hsize 0.6\pagewd
+ \rightskip\z@skip \parfillskip0pt plus 1fil \spaceskip\z@skip
+ \noindent{\bf Author's Note: }\ignorespaces\theprefnote\par}\hfil}
+ \fi
+ \vskip 20pt
+ \hbox to \pagewd{\hfil\vbox{\hsize 0.75\pagewd
+ \rightskip\z@skip \parfillskip0pt plus 1fil \spaceskip\z@skip
+ \centerline{\bf Abstract}\vskip 5pt
+ \noindent\theabstract\par}\hfil}
+ \vskip 1pc}}\hss}
+ \twocolfigure\box\startbox\endfigure
+ \ifExtrAbs % (*)
+ \immediate\write\titleabs{\string\TITLE\string\bf\space
+ \rhauthor:\ \string\rm \rhtitle;;}
+ \immediate\write\titleabs{\space}
+ \immediate\write\titleabs{\string\ABS\string\bf\space
+ Abstract.\ \theabstract;;}
+ \immediate\write\titleabs{\space}
+ \immediate\write\titleabs{\string\endinput}
+ \immediate\closeout\titleabs \endbreaklines
+ \fi % (*)
+}
+
+% \head (This writes over a definition in tugboat.sty)
+\def\@domainhead{%
+ \if@removeprewhite\else\vskip\baselineskip\fi
+ \noindent{\HEADfont\baselineskip15pt % larger type than usual
+ \raggedright\bf\ignorespaces\the\@argument\unskip\endgraf}%
+ \if@removepostwhite % usually we want the white space
+ \else\kern0.5\baselineskip\fi
+ \nobreak
+ \gdef\@next{%
+ \if@allowindent\def\@next{}% usually we don't want to indent here
+ \else\def\@next{\DeleteOptionalSpacesandPars{\noindent\ignorespaces}}\fi
+ \@next
+ }%
+ }
+
+\restorecat\@
+
+% \Trimmarkstrue % for final copy
+% \overfullrule=0pt
+
+\endinput
+
+%% *********************************************************
+
+Change History
+--------------
+1.22 update header; remark that this is no longer used; no changes to code.
+
+<interim versions skipped>
+
+1.11 changed TUG address in header to Santa Barbara
+ parameterized dates, etc., in running footers
+ initialized them at top of file instead of in footer text
+
+1.10 changed \tenrm to \tenpoint in definitions of \rtitle and \rfoot
+ so that \sl will be properly defined if used in that context
+
+1.09 removed \smallcode definition; it is now in tugboat.sty
+ increased width of abstract from 60-75% of text width
+ added standard headers, prepared for archive installation
+
+1.08 changed \start to \startingpage
+ added definition of \startingpage at top of file so running heads
+ will be empty on first page of article
+
+1.07 removed \Pageno
+ added check for previous input
+ altered \\ in running heads
+
+Previous:
+
+%%% TUGPROC.sty 11-mar-90 (*) 15-mar-90 30-mar-90 10-apr-90
+%%% 26-jun-90 [changed running feet, page numbers, \start]
+%%% 28-jun-90 [added \stamp, \ifproof] 29-jun-90 [\Proof]
+%%% TUGPROC.sty 03-feb-90 (renamed 13-feb-90) 20-feb-90
+%%%
+%%% Supplementary header file for TUG Proceedings volume
+%%% for use with plain TeX. No longer used.
+%%%
+%%% (*) This version writes the title and abstract into
+%%% a file, for use in preparing the Title-Abstract-Bio
+%%% section in the program. Author-Title and Abstract are
+%%% written into a file as one-liners; if these lines are
+%%% too long, they should be reformatted manually before
+%%% the file is \input.
diff --git a/macros/plain/contrib/varisize/10point.tex b/macros/plain/contrib/varisize/10point.tex
new file mode 100644
index 0000000000..f3331c9df9
--- /dev/null
+++ b/macros/plain/contrib/varisize/10point.tex
@@ -0,0 +1,36 @@
+%%% This file is public domain.
+%%% Originally written 1992, Don Hosek.
+%%% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%%%
+%%%
+%%% Set up the tenpoint macros
+%%%
+%%% Unhappy things will happen if this file is loaded twice
+%%% So don't... as a matter of fact, don't load it directly, let one of the
+%%% other size changing macros do it for you.
+%%%
+%%% Written by Don Hosek
+%%%
+\ifx\loadedfrommacro Y\else
+ \message{10point.TeX must be loaded from a macro package.}
+ \message{Input terminated.}
+ \endinput\fi
+
+\font\tencsc=cmcsc10
+
+\newfam\scfam
+
+\def\tenpoint{\def\rm{\fam0\tenrm}% switch to 10-point type
+ \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+ \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+ \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \textfont\itfam=\tenit \def\it{\fam\itfam\tenit}%
+ \textfont\slfam=\tensl \def\sl{\fam\slfam\tensl}%
+ \textfont\ttfam=\tentt \def\tt{\fam\ttfam\tentt}%
+ \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf
+ \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam\tenbf}%
+ \textfont\scfam=\tencsc \def\sc{\fam\scfam\tencsc}%
+ \normalbaselineskip=12pt
+ \setbox\strutbox=\hbox{\vrule height8.5pt depth 3.5pt width0pt}%
+ \normalbaselines\rm}
diff --git a/macros/plain/contrib/varisize/10pointss.tex b/macros/plain/contrib/varisize/10pointss.tex
new file mode 100644
index 0000000000..8cbe71170a
--- /dev/null
+++ b/macros/plain/contrib/varisize/10pointss.tex
@@ -0,0 +1,45 @@
+%%% This file is public domain.
+%%% Originally written 1992, Don Hosek.
+%%% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file sets up an ten point sans-serif environment for TeX. It can be
+% initialized with the '\tenpointss' macro.
+% It also sets up a '\tenpoint' macro in case you want to get serifs back.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\tenpoint\undefined\let\loadedfrommacro=Y
+ \input 10point
+ \let\loadedfrommacro=N\fi
+
+%%%
+%%% Load in the fonts
+%%%
+\font\tenss=cmss10 \font\eightss=cmss8
+\font\tenssbf=cmssbx10
+\font\tensssl=cmssi10 \font\eightsl=cmssi8
+
+%%% The following fonts are loaded in to make super- and sub- scripts uniform
+%%% in all fonts.
+\font\eighti=cmti8
+\font\eightsy=cmsy8
+
+%%%
+%%% Set up the tenpointss macros
+%%%
+\ifx\tenpointss\undefined
+ \def\tenpointss{\def\rm{\fam0\tenss}% switch to 10-point ss type
+ \textfont0=\tenss \scriptfont0=\eightss \scriptscriptfont0=\eightss
+ \textfont1=\teni \scriptfont1=\eighti \scriptscriptfont1=\eighti
+ \textfont2=\tensy \scriptfont2=\eightsy \scriptscriptfont2=\eightsy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \textfont\itfam=\tensssl \def\it{\fam\itfam\tensssl}%
+ \textfont\slfam=\tensssl \def\sl{\fam\slfam\tensssl}%
+ \textfont\ttfam=\tentt \def\tt{\fam\ttfam\tentt}%
+ \textfont\bffam=\tenssbf \scriptfont\bffam=\eightss
+ \scriptscriptfont\bffam=\eightss \def\bf{\fam\bffam\tenssbf}%
+ \textfont\scfam=\tencsc \def\sc{\fam\scfam\tencsc}%
+ \normalbaselineskip=12pt
+ \setbox\strutbox=\hbox{\vrule height10pt depth2pt width0pt}%
+ \normalbaselines\rm}
+ \fi
diff --git a/macros/plain/contrib/varisize/11point.tex b/macros/plain/contrib/varisize/11point.tex
new file mode 100644
index 0000000000..0a0c06f21b
--- /dev/null
+++ b/macros/plain/contrib/varisize/11point.tex
@@ -0,0 +1,52 @@
+%%% This file is public domain.
+%%% Originally written 1992, Don Hosek.
+%%% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file sets up an eleven point environment for TeX. It can be initialized
+% with the '\elevenpoint' macro.
+% It also sets up a '\tenpoint' macro in case you want to go back down.
+% By Don Hosek
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\tenpoint\undefined\let\loadedfrommacro=Y
+ \input 10point
+ \let\loadedfrommacro=N\fi
+
+%%%
+%%% Load in the fonts
+%%%
+\font\elevenrm=cmr10 scaled \magstephalf
+\font\eleveni=cmmi10 scaled \magstephalf
+\font\elevensy=cmsy10 scaled \magstephalf
+\font\elevenex=cmex10 scaled \magstephalf
+\font\elevenbf=cmbx10 scaled \magstephalf
+\font\elevensl=cmsl10 scaled \magstephalf
+\font\eleventt=cmtt10 scaled \magstephalf
+\font\elevenit=cmti10 scaled \magstephalf
+\font\elevencsc=cmcsc10 scaled \magstephalf
+
+\font\eightrm=cmr8 \font\sixrm=cmr6
+\font\eighti=cmmi8 \font\sixi=cmmi6
+\font\eightsy=cmsy8 \font\sixsy=cmsy6
+\font\eightbf=cmbx8 \font\sixbf=cmbx6
+
+%%%
+%%% Set up the elevenpoint macros
+%%%
+\ifx\elevenpoint\undefined
+ \def\elevenpoint{\def\rm{\fam0\elevenrm}% switch to 11-point type
+ \textfont0=\elevenrm \scriptfont0=\eightrm \scriptscriptfont0=\sixrm
+ \textfont1=\eleveni \scriptfont1=\eighti \scriptscriptfont1=\sixi
+ \textfont2=\elevensy \scriptfont2=\eightsy \scriptscriptfont2=\sixsy
+ \textfont3=\elevenex \scriptfont3=\elevenex\scriptscriptfont3=\elevenex
+ \textfont\itfam=\elevenit \def\it{\fam\itfam\elevenit}%
+ \textfont\slfam=\elevensl \def\sl{\fam\slfam\elevensl}%
+ \textfont\ttfam=\eleventt \def\tt{\fam\ttfam\eleventt}%
+ \textfont\bffam=\elevenbf \scriptfont\bffam=\eightbf
+ \scriptscriptfont\bffam=\sixbf \def\bf{\fam\bffam\elevenbf}%
+ \textfont\scfam=\elevencsc \def\sc{\fam\scfam\elevencsc}%
+ \normalbaselineskip=14pt
+ \setbox\strutbox=\hbox{\vrule height9pt depth4pt width0pt}%
+ \normalbaselines\rm}
+ \fi
diff --git a/macros/plain/contrib/varisize/12point.tex b/macros/plain/contrib/varisize/12point.tex
new file mode 100644
index 0000000000..55622d052e
--- /dev/null
+++ b/macros/plain/contrib/varisize/12point.tex
@@ -0,0 +1,52 @@
+%%% This file is public domain.
+%%% Originally written 1992, Don Hosek.
+%%% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file sets up a twelve point environment for TeX. It can be initialized
+% with the '\twelvepoint' macro.
+% It also sets up a '\tenpoint' macro in case you want to go back down.
+% By Don Hosek
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\tenpoint\undefined\let\loadedfrommacro=Y
+ \input 10point
+ \let\loadedfrommacro=N\fi
+
+%%%
+%%% Load in the fonts
+%%%
+\font\twelverm=cmr12
+\font\twelvei=cmmi12
+\font\twelvesy=cmsy10 scaled \magstep1
+\font\twelveex=cmex10 scaled \magstep1
+\font\twelvebf=cmbx12
+\font\twelvesl=cmsl12
+\font\twelvett=cmtt12
+\font\twelveit=cmti12
+\font\twelvecsc=cmcsc10 scaled \magstep1
+
+\font\ninerm=cmr9 \font\sevenrm=cmr7
+\font\ninei=cmmi9 \font\seveni=cmmi7
+\font\ninesy=cmsy9 \font\sevensy=cmsy7
+\font\ninebf=cmbx9 \font\sevenbf=cmbx7
+
+%%%
+%%% Set up the twelvepoint macros
+%%%
+\ifx\twelvepoint\undefined
+ \def\twelvepoint{\def\rm{\fam0\twelverm}% switch to 11-point type
+ \textfont0=\twelverm \scriptfont0=\ninerm \scriptscriptfont0=\sevenrm
+ \textfont1=\twelvei \scriptfont1=\ninei \scriptscriptfont1=\seveni
+ \textfont2=\twelvesy \scriptfont2=\ninesy \scriptscriptfont2=\sevensy
+ \textfont3=\twelveex \scriptfont3=\twelveex\scriptscriptfont3=\twelveex
+ \textfont\itfam=\twelveit \def\it{\fam\itfam\twelveit}%
+ \textfont\slfam=\twelvesl \def\sl{\fam\slfam\twelvesl}%
+ \textfont\ttfam=\twelvett \def\tt{\fam\ttfam\twelvett}%
+ \textfont\bffam=\twelvebf \scriptfont\bffam=\ninebf
+ \scriptscriptfont\bffam=\sevenbf \def\bf{\fam\bffam\twelvebf}%
+ \textfont\scfam=\twelvecsc \def\sc{\fam\scfam\twelvecsc}%
+ \normalbaselineskip=14pt
+ \setbox\strutbox=\hbox{\vrule height9.5pt depth4.5pt width0pt}%
+ \normalbaselines\rm}
+ \fi
diff --git a/macros/plain/contrib/varisize/14point.tex b/macros/plain/contrib/varisize/14point.tex
new file mode 100644
index 0000000000..8eb102baa1
--- /dev/null
+++ b/macros/plain/contrib/varisize/14point.tex
@@ -0,0 +1,48 @@
+%%% This file is public domain.
+%%% Originally written 1992, Don Hosek.
+%%% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file sets up a fourteen point environment for TeX. It can be initialized
+% with the '\fourteenpoint' macro.
+% It also sets up a '\tenpoint' macro in case you want to go back down.
+% By Don Hosek
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\tenpoint\undefined\let\loadedfrommacro=Y
+ \input 10point
+ \let\loadedfrommacro=N\fi
+
+%%%
+%%% Load in the fonts
+%%%
+\font\fourteenrm=cmr12 scaled \magstep1
+\font\fourteeni=cmmi12 scaled \magstep1
+\font\fourteensy=cmsy10 scaled \magstep2
+\font\fourteenex=cmex10 scaled \magstep2
+\font\fourteenbf=cmbx12 scaled \magstep1
+\font\fourteensl=cmsl12 scaled \magstep1
+\font\fourteentt=cmtt12 scaled \magstep1
+\font\fourteenit=cmti12 scaled \magstep1
+\font\fourteencsc=cmcsc10 scaled \magstep2
+
+%%%
+%%% Set up the fourteenpoint macros
+%%%
+\ifx\fourteenpoint\undefined
+ \def\fourteenpoint{\def\rm{\fam0\fourteenrm}% switch to 14-point type
+ \textfont0=\fourteenrm \scriptfont0=\tenrm \scriptscriptfont0=\sevenrm
+ \textfont1=\fourteeni \scriptfont1=\teni \scriptscriptfont1=\seveni
+ \textfont2=\fourteensy \scriptfont2=\tensy \scriptscriptfont2=\sevensy
+ \textfont3=\fourteenex \scriptfont3=\fourteenex
+ \scriptscriptfont3=\fourteenex
+ \textfont\itfam=\fourteenit \def\it{\fam\itfam\fourteenit}%
+ \textfont\slfam=\fourteensl \def\sl{\fam\slfam\fourteensl}%
+ \textfont\ttfam=\fourteentt \def\tt{\fam\ttfam\fourteentt}%
+ \textfont\bffam=\fourteenbf \scriptfont\bffam=\tenbf
+ \scriptscriptfont\bffam=\sevenbf \def\bf{\fam\bffam\fourteenbf}%
+ \textfont\scfam=\fourteencsc \def\sc{\fam\scfam\fourteencsc}%
+ \normalbaselineskip=17pt
+ \setbox\strutbox=\hbox{\vrule height11.9pt depth6.3pt width0pt}%
+ \normalbaselines\rm}
+ \fi
diff --git a/macros/plain/contrib/varisize/17point.tex b/macros/plain/contrib/varisize/17point.tex
new file mode 100644
index 0000000000..3cb304ef23
--- /dev/null
+++ b/macros/plain/contrib/varisize/17point.tex
@@ -0,0 +1,57 @@
+%%% This file is public domain.
+%%% Originally written 1992, Don Hosek.
+%%% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file sets up a seventeen point environment for TeX. It can be initialized
+% with the '\seventeenpoint' macro.
+% It also sets up a '\tenpoint' macro in case you want to go back down.
+% By Don Hosek
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\tenpoint\undefined\let\loadedfrommacro=Y
+ \input 10point
+ \let\loadedfrommacro=N\fi
+
+%%%
+%%% Load in the fonts
+%%%
+\font\seventeenrm=cmr17
+\font\seventeeni=cmmi12 scaled \magstep2
+\font\seventeensy=cmsy10 scaled \magstep3
+\font\seventeenex=cmex10 scaled \magstep3
+\font\seventeenbf=cmbx12 scaled \magstep2
+\font\seventeensl=cmsl12 scaled \magstep2
+\font\seventeentt=cmtt12 scaled \magstep2
+\font\seventeenit=cmti12 scaled \magstep2
+\font\seventeencsc=cmcsc10 scaled \magstep3
+\font\twelverm=cmr12
+\font\twelvei=cmmi12
+\font\twelvesy=cmsy10 scaled \magstep1
+\font\twelvebf=cmbx12
+
+\font\ninerm=cmr9
+\font\ninei=cmmi9
+\font\ninesy=cmsy9
+\font\ninebf=cmbx9
+
+%%%
+%%% Set up the seventeenpoint macros
+%%%
+\ifx\seventeenpoint\undefined
+ \def\seventeenpoint{\def\rm{\fam0\seventeenrm}% switch to 17-point type
+ \textfont0=\seventeenrm \scriptfont0=\twelverm \scriptscriptfont0=\ninerm
+ \textfont1=\seventeeni \scriptfont1=\twelvei \scriptscriptfont1=\ninei
+ \textfont2=\seventeensy \scriptfont2=\twelvesy \scriptscriptfont2=\ninesy
+ \textfont3=\seventeenex \scriptfont3=\seventeenex
+ \scriptscriptfont3=\seventeenex
+ \textfont\itfam=\seventeenit \def\it{\fam\itfam\seventeenit}%
+ \textfont\slfam=\seventeensl \def\sl{\fam\slfam\seventeensl}%
+ \textfont\ttfam=\seventeentt \def\tt{\fam\ttfam\seventeentt}%
+ \textfont\bffam=\seventeenbf \scriptfont\bffam=\twelvebf
+ \scriptscriptfont\bffam=\ninebf \def\bf{\fam\bffam\seventeenbf}%
+ \textfont\scfam=\seventeencsc \def\sc{\fam\scfam\seventeencsc}%
+ \normalbaselineskip=21pt
+ \setbox\strutbox=\hbox{\vrule height17pt depth4pt width0pt}%
+ \normalbaselines\rm}
+ \fi
diff --git a/macros/plain/contrib/varisize/20point.tex b/macros/plain/contrib/varisize/20point.tex
new file mode 100644
index 0000000000..0f8fcd2e48
--- /dev/null
+++ b/macros/plain/contrib/varisize/20point.tex
@@ -0,0 +1,52 @@
+%%% This file is public domain.
+%%% Originally written 1992, Don Hosek.
+%%% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file sets up a twenty point environment for TeX. It can be initialized
+% with the '\twentypoint' macro.
+% It also sets up a '\tenpoint' macro in case you want to go back down.
+% By Don Hosek (modified to 20 point by J. Leon)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\tenpoint\undefined\let\loadedfrommacro=Y
+ \input 10point
+ \let\loadedfrommacro=N\fi
+
+\ifx\fourteenpoint\undefined
+ \input 14point
+ \fi
+
+%%%
+%%% Load in the fonts
+%%%
+\font\twentyrm=cmr17 scaled \magstep1
+\font\twentyi=cmmi12 scaled \magstep3
+\font\twentysy=cmsy10 scaled \magstep4
+\font\twentyex=cmex10 scaled \magstep4
+\font\twentybf=cmbx12 scaled \magstep3
+\font\twentysl=cmsl12 scaled \magstep3
+\font\twentytt=cmtt12 scaled \magstep3
+\font\twentyit=cmti12 scaled \magstep3
+\font\twentycsc=cmcsc10 scaled \magstep4
+
+%%%
+%%% Set up the twentypoint macros
+%%%
+\ifx\twentypoint\undefined
+ \def\twentypoint{\def\rm{\fam0\twentyrm}% switch to 20-point type
+ \textfont0=\twentyrm \scriptfont0=\fourteenrm \scriptscriptfont0=\tenrm
+ \textfont1=\twentyi \scriptfont1=\fourteeni \scriptscriptfont1=\teni
+ \textfont2=\twentysy \scriptfont2=\fourteensy \scriptscriptfont2=\tensy
+ \textfont3=\twentyex \scriptfont3=\twentyex
+ \scriptscriptfont3=\twentyex
+ \textfont\itfam=\twentyit \def\it{\fam\itfam\twentyit}%
+ \textfont\slfam=\twentysl \def\sl{\fam\slfam\twentysl}%
+ \textfont\ttfam=\twentytt \def\tt{\fam\ttfam\twentytt}%
+ \textfont\bffam=\twentybf \scriptfont\bffam=\fourteenbf
+ \scriptscriptfont\bffam=\tenbf \def\bf{\fam\bffam\twentybf}%
+ \textfont\scfam=\twentycsc \def\sc{\fam\scfam\twentycsc}%
+ \normalbaselineskip=25pt
+ \setbox\strutbox=\hbox{\vrule height20pt depth5pt width0pt}%
+ \normalbaselines\rm}
+ \fi
diff --git a/macros/plain/contrib/varisize/7point.tex b/macros/plain/contrib/varisize/7point.tex
new file mode 100644
index 0000000000..82079f8a67
--- /dev/null
+++ b/macros/plain/contrib/varisize/7point.tex
@@ -0,0 +1,46 @@
+%%% This file is public domain.
+%%% Originally written 1992, Don Hosek.
+%%% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file sets up an seven point environment for TeX. It can be initialized
+% with the '\sevenpoint' macro.
+% It also sets up a '\tenpoint' macro in case you want to go back down.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\tenpoint\undefined\let\loadedfrommacro=Y
+ \input 10point
+ \let\loadedfrommacro=N\fi
+
+%%%
+%%% Load in the fonts
+%%%
+
+\font\sevenit=cmti7
+%
+% When reduced size fonts are available, they will be loaded here.
+% Instead, at present, necessary fonts are simulated using existing ones.
+%
+\let\sevensl=\sevenit \let\seventt=\sevenrm
+
+\let\fourrm=\fiverm \let\fouri=\fivei \let\foursy=\fivesy
+\let\fourbf=\fivebf
+
+%%%
+%%% Set up the sevenpoint macros
+%%%
+\ifx\sevenpoint\undefined
+ \def\sevenpoint{\def\rm{\fam0\sevenrm} %switch to a 7-point type
+ \textfont0=\sevenrm \scriptfont0=\fiverm \scriptscriptfont0=\fourrm
+ \textfont1=\seveni \scriptfont1=\fivei \scriptscriptfont1=\fouri
+ \textfont2=\sevensy \scriptfont2=\fivesy \scriptscriptfont2=\foursy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \textfont\itfam=\sevenit \def\it{\fam\itfam\sevenit}%
+ \textfont\slfam=\sevensl \def\sl{\fam\slfam\sevensl}%
+ \textfont\ttfam=\seventt \def\tt{\fam\ttfam\seventt}%
+ \textfont\bffam=\sevenbf \scriptfont\bffam=\fivebf
+ \scriptscriptfont\bffam=\fourbf \def\bf{\fam\bffam\sevenbf}%
+ \normalbaselineskip=10pt
+ \setbox\strutbox=\hbox{\vrule height7.5pt depth2.5pt width0pt}%
+ \normalbaselines\rm}
+ \fi
diff --git a/macros/plain/contrib/varisize/8point.tex b/macros/plain/contrib/varisize/8point.tex
new file mode 100644
index 0000000000..4f0d86a8f1
--- /dev/null
+++ b/macros/plain/contrib/varisize/8point.tex
@@ -0,0 +1,40 @@
+%%% This file is public domain.
+%%% Originally written 1992, Don Hosek.
+%%% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file sets up an eight point environment for TeX. It can be initialized
+% with the '\eightpoint' macro.
+% It also sets up a '\tenpoint' macro in case you want to go back down.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\tenpoint\undefined\let\loadedfrommacro=Y
+ \input 10point
+ \let\loadedfrommacro=N\fi
+
+%%%
+%%% Load in the fonts
+%%%
+\font\eightrm=cmr8 \font\sixrm=cmr6
+\font\eighti=cmmi8 \font\sixi=cmmi6
+\font\eightsy=cmsy8 \font\sixsy=cmsy6
+\font\eightbf=cmbx8 \font\sixbf=cmbx6
+\font\eightsl=cmsl8 \font\eighttt=cmtt8 \font\eightit=cmti8
+%%%
+%%% Set up the eightpoint macros
+%%%
+\ifx\eightpoint\undefined
+ \def\eightpoint{\def\rm{\fam0\eightrm} %switch to a 8-point type
+ \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \textfont\itfam=\eightit \def\it{\fam\itfam\eightit}%
+ \textfont\slfam=\eightsl \def\sl{\fam\slfam\eightsl}%
+ \textfont\ttfam=\eighttt \def\tt{\fam\ttfam\eighttt}%
+ \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam\eightbf}%
+ \normalbaselineskip=10pt
+ \setbox\strutbox=\hbox{\vrule height7.5pt depth2.5pt width0pt}%
+ \normalbaselines\rm}
+ \fi
diff --git a/macros/plain/contrib/varisize/9point.tex b/macros/plain/contrib/varisize/9point.tex
new file mode 100644
index 0000000000..44b3743b72
--- /dev/null
+++ b/macros/plain/contrib/varisize/9point.tex
@@ -0,0 +1,44 @@
+%%% This file is public domain.
+%%% Originally written 1992, Don Hosek.
+%%% This declaration added by Clea F. Rees 2008/11/16 with the permission of Dan Hosek.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file sets up an nine point environment for TeX. It can be initialized
+% with the '\ninepoint' macro.
+% It also sets up a '\tenpoint' macro in case you want to go back down.
+% By Don Hosek
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\tenpoint\undefined\let\loadedfrommacro=Y
+ \input 10point
+ \let\loadedfrommacro=N\fi
+
+%%%
+%%% Load in the fonts
+%%%
+\font\ninerm=cmr9 \font\sixrm=cmr6
+\font\ninei=cmmi9 \font\sixi=cmmi6
+\font\ninesy=cmsy9 \font\sixsy=cmsy6
+\font\ninebf=cmbx9 \font\sixbf=cmbx6
+\font\ninesl=cmsl9 \font\ninett=cmtt9 \font\nineit=cmti9
+\font\ninecsc=cmcsc10
+
+%%%
+%%% Set up the ninepoint macros
+%%%
+\ifx\ninepoint\undefined
+ \def\ninepoint{\def\rm{\fam0\ninerm} %switch to a 9-point type
+ \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
+ \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei
+ \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
+ \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+ \textfont\itfam=\nineit \def\it{\fam\itfam\nineit}%
+ \textfont\slfam=\ninesl \def\sl{\fam\slfam\ninesl}%
+ \textfont\ttfam=\ninett \def\tt{\fam\ttfam\ninett}%
+ \textfont\bffam=\ninebf \scriptfont\bffam=\sixbf
+ \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam\ninebf}%
+ \textfont\scfam=\ninecsc \def\sc{\fam\scfam\ninecsc}%
+ \normalbaselineskip=11pt
+ \setbox\strutbox=\hbox{\vrule height8pt depth3pt width0pt}%
+ \normalbaselines\rm}
+ \fi
diff --git a/macros/plain/contrib/varisize/README b/macros/plain/contrib/varisize/README
new file mode 100644
index 0000000000..5f808a07a0
--- /dev/null
+++ b/macros/plain/contrib/varisize/README
@@ -0,0 +1,7 @@
+varisize
+--------
+Change font size in Plain TeX.
+
+varisize was originally written by Don Hosek and is public domain.
+
+This README added by Clea F. Rees 2008/11/16.
diff --git a/macros/plain/contrib/vertex/READ.ME b/macros/plain/contrib/vertex/READ.ME
new file mode 100644
index 0000000000..859c05af5e
--- /dev/null
+++ b/macros/plain/contrib/vertex/READ.ME
@@ -0,0 +1,24 @@
+About 5 years ago I developed some TeX files for economics working papers and journals. My model at the time was AMSTeX. I use a variant of these files for my own working papers, but I've supplemented my files with various additional macros.
+
+These files really aren't fit for public distribution but I've had so many requests for them that I will release them anyway. One of these days I might find time to get back to this package and do it right.
+
+If I were starting over I would probably use LaTeX and bibtex, but perhaps it would make sense to wait for LaTeX 3.0.
+
+Have fun with the files. Note that they are completely unsupported; don't ask me any questions about them. However, if you make significant enhancements or bug fixes I would like to see them.
+
+ Hal.Varian@umich.edu
+ July 25, 1992
+
+-----------original readme file
+
+Here is release 1.0 of VerTeX. Please note that there are two sets of
+"standard" TeX fonts, the "Computer Modern" (CM) versions and the "Almost
+Modern" (AM) versions. Users are encouraged to switch to the final
+release of the CM fonts, rather than stick with the outmoded AM
+fonts.
+
+In VerTeX I have \font loading statements for both the CM and the AM
+fonts. You should comment out the font definitions that you are not using.
+The \font statements are at the start of vertex.tex, ppt.sty, etc.
+
+Good luck. \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/aer.sty b/macros/plain/contrib/vertex/aer.sty
new file mode 100644
index 0000000000..1ce3e76b3d
--- /dev/null
+++ b/macros/plain/contrib/vertex/aer.sty
@@ -0,0 +1,155 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is the AER.STY for ECON.TEX
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Special fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\font\fourteenHelv=cmss10 at 14pt
+\font\sctwelve=cmcsc10 scaled\magstep1
+\font\sctwelve=cmcsc10
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set pagesize
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\input twocol
+
+\newdimen\pageheight \pageheight=49pc
+\newdimen\pagewidth \pagewidth=34pc
+\newdimen\fullsize \fullsize=34pc
+\newdimen\ruleht \ruleht=.5pt
+
+\vsize=49pc
+\hsize=34pc
+\colwidth=16pc
+
+\hoffset=.5in
+\voffset=0in
+
+\parindent=20pt
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Headline and footline
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\nopagenumbers
+\def\rightheadline{\hbox to \fullsize{{VOL. 99 No. 9\hfil\scten\runname\hskip 3em\runtitle}\hfil{\folio}}}
+\def\leftheadline{\hbox to \fullsize{\folio \hfil {\tenpoint THE ARMENIAN ECONOMIC REVIEW}\hfil JUNE, 1986}}
+\headline={\ifodd\pageno\rightheadline \else\leftheadline\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define topmatter style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\TitleFont{\fourteenHelv}
+\def\AuthorFont{\sctwelve}
+
+\def\DoCenteredTitle#1{
+ \titlepage\global
+ \CenterBox
+ \titlebox
+ \TitleFont
+ {17pt}
+ {#1}}
+
+\def\title#1{\DoCenteredTitle{#1}}
+
+\def\author#1{\DoCenteredAuthor{{\it By}\space{#1$^*$}}}
+\def\authortwo#1{\message{Use ``author'' for both authors in this style.}}
+
+\def\affil#1{\global\setbox\affilbox\hbox{\tenit\noindent #1}}
+\def\affiltwo#1{\message{In the aer.sty, affiliations go in the
+"thanks" footnote.}}
+
+\def\thanks#1{\global\setbox\thanksbox\hbox{\eightpoint $^*$#1}}
+
+\def\date#1{\global\setbox\datebox\vbox{\tenrm #1 \hfil}}
+
+\def\abstract#1{\global\setbox\abstractbox\vbox{\sl\hsize=23pc #1}}
+
+\def\keywords#1{}
+\def\address#1{}
+
+\def\topmatter{\relax}
+\def\endtopmatter{\DoTop}
+\def\document{\DoPaper}
+
+\RomanSectiontrue
+\let\SectionFont=\bf
+
+\def\section#1\par{\bigskip\goodbreak
+ \SubsectionNumber=0\noindent
+ {\hfil\bf\uppercase\expandafter{\romannumeral\SectionNumber}.\enskip #1\hfil}
+ \nobreak\medskip
+ \global\advance\SectionNumber by 1
+ \noindent}
+
+% Something is screwed up with \romannumeral and centering
+%\def\section#1{\DoCenteredSection{#1}}
+
+\def\subsection#1\par{\bigskip\goodbreak\noindent
+ {\hfil\it \number\SectionNumber.\number\SubsectionNumber.\enspace #1\hfil}
+ \nobreak\medskip\noindent}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\RefFont=\tenpoint
+
+\def\Refs{\vskip1in{\hfil\tenpoint REFERENCES\hfil}\vskip 2pc\RefFont}
+
+\def\by#1{\setbox\bybox\hbox{\ninepoint\bf #1}}
+\def\vol#1{\setbox\volbox\hbox{\it #1}}
+
+\def\SetRef{
+ \ifjour\jourfalse\vbox{\HangRef
+ \unhbox\bybox (\unhbox\yrbox), ``\unhbox\paperbox,''
+ \unhbox\jourbox, {\unhbox\volbox},
+ \ifvoid\nobox\relax\else (\unhbox\nobox), \fi
+ \unhbox\pagesbox. \par}\fi
+
+ \ifbook\bookfalse\par\vbox{\HangRef
+ \unhbox\bybox\space {\it \unhbox\bookbox}. \unhbox\publaddrbox :
+ \unhbox\publbox , \unhbox\yrbox.\par}\fi
+
+ \ifinbook\inbookfalse\par\vbox{\HangRef
+ \unhbox\bybox\space (\unhbox\yrbox): ``\unhbox\paperbox,'' in
+ {\it \unhbox\bookbox}, ed. by {\rm \unhbox\editorbox}.
+ \unhbox\publaddrbox : \unhbox\publbox \ifvoid\pagesbox\relax
+ \else, \unhbox\pagesbox .\fi\par}\fi
+
+ \ifunpublished\unpublishedfalse\par\vbox{\HangRef
+ \unhbox\bybox\space(\unhbox\yrbox):
+ ``\unhbox\paperbox,'' \unhbox\paperinfobox .\par}\fi
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set the paper
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\parindent=20pt
+
+\def\DoTop{\Reset
+\vbox{
+\line{\hfil\box\titlebox\hfil}
+\vskip 2pc
+\line{\hfil\box\authorbox\hfil}
+\vskip1pc
+\line{\hfil\box\abstractbox\hfil}
+\vfootnote{*}{\unhbox\thanksbox}
+\vskip2pc}}
+
+\def\DoPaper{\begindoublecolumns}
+
+\let\eqno=\leqno
+\tenpoint
+\hfuzz=8pt
+\def\bye{\enddoublecolumns\vfill\eject\end}
+\def\footnoterule{} \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/ecnmet.sty b/macros/plain/contrib/vertex/ecnmet.sty
new file mode 100644
index 0000000000..5569d6df48
--- /dev/null
+++ b/macros/plain/contrib/vertex/ecnmet.sty
@@ -0,0 +1,151 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ecnmet.sty -- Economagica style for VerTeX
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set pagesize
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\hsize=29pc
+\vsize=46pc
+\hoffset=1in
+\voffset=1in
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Headline and footline
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\runningname{Use $\$ runningname}
+\runningtitle{Use $\$ runningtitle}
+
+\nopagenumbers
+\def\rightheadline{\hbox to \hsize{{\hfil\scten\runtitle}\hfil{\folio}}}
+\def\leftheadline{\hbox to \hsize{\folio \hfil {\scten\runname}\hfil}}
+\headline={\ifodd\pageno\rightheadline \else\leftheadline\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Redefine figure macro
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\Figure#1#2#3{
+ \midinsert
+ \vbox to #2{\vfil}
+ \hbox to \hsize{\hss\vbox{\parindent=0pt
+ {\scten Figure \number#1}.---\rm #3}}
+ \endinsert}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define topmatter style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\TitleFont=\sctwelve
+\let\AuthorFont=\scten
+
+\def\title#1{\DoCenteredTitle{\expandafter\uppercase{#1}}}
+
+\def\author#1{\DoCenteredAuthor{By #1}}
+\def\authortwo#1{\message{Use ``author'' for both authors in this style.}}
+
+\def\affil#1{\global\setbox\affilbox\vbox{\nineit\noindent #1}}
+\def\affiltwo#1{\message{Do not use "affiltwo" in this style.}}
+
+\def\thanks#1{\global\setbox\thanksbox\hbox{{\eightpoint #1\par}}}
+
+\def\date#1{\global\setbox\datebox\vbox{\tenrm #1 \hfil}}
+\def\version#1{}
+
+\def\abstract#1{\global\setbox\abstractbox\vbox
+ {\eightpoint\hsize=23pc\parindent=8pt#1\par}}
+
+\def\keywords#1{}
+\def\address#1{}
+
+\def\topmatter{\relax}
+\def\endtopmatter{\DoTop}
+
+\let\SectionFont=\scten
+
+\RomanSectionfalse
+
+\def\section#1\par{\DoCenteredSection{\uppercase{#1}}}
+
+\def\subsection#1\par{\BigBreak\noindent
+ {\hfil \it \number\SectionNumber.\number\SubsectionNumber\enspace #1\hfil}
+ \nobreak\medskip\noindent}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Math conventions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\outer\def\proclaim #1. #2\par{\medbreak
+ {\scten#1:\enspace}{\sl#2}\par
+ \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}
+
+\let\eqno=\leqno
+\let\eqalignno=\leqalignno
+
+\def\proof{\goodbreak{\scten Proof:\enspace}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\RefFont=\tenpoint
+\def\vol#1{\setbox\volbox\hbox{#1}}
+
+\def\Refs{\vskip1in
+\centerline{\scten REFERENCES}
+\vskip 2pc\RefFont}
+
+\def\by#1{\setbox\bybox\hbox{\scten{#1}}}
+
+\def\SetRef{
+ \vskip 3pt
+ \ifjour\jourfalse\vbox{\HangRef
+ \unhbox\bybox:\space ``\unhbox\paperbox,''
+ {\unhbox\jourbox} \unhbox\volbox\space
+ \ifvoid\nobox\relax\else\space no. \unhbox\nobox \fi
+ (\unhbox\yrbox), \unhbox\pagesbox. \par}\fi
+
+ \ifbook\bookfalse\par\vbox{\HangRef
+ \unhbox\bybox\space {\it \unhbox\bookbox}. \unhbox\publaddrbox :
+ \unhbox\publbox , \unhbox\yrbox.\par}\fi
+
+ \ifinbook\inbookfalse\par\vbox{\HangRef
+ \unhbox\bybox\space (\unhbox\yrbox): ``\unhbox\paperbox,'' in
+ {\it \unhbox\bookbox}, ed. by {\rm \unhbox\editorbox}.
+ \unhbox\publaddrbox : \unhbox\publbox \ifvoid\pagesbox\relax
+ \else, \unhbox\pagesbox .\fi\par}\fi
+
+ \ifunpublished\unpublishedfalse\par\vbox{\HangRef
+ \unhbox\bybox:
+ ``\unhbox\paperbox, '' \unhbox\paperinfobox,\space\unhbox\yrbox.\par}\fi
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set the paper
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\titlehead{\line{\hfil\eightpoint{\it Economagica}, Vol. 99, No. 9 (March, 1999) pp. 9--99\hfil}}
+\def\titlefoot{\hfil}
+
+\def\DoTop{
+\vglue 1pc
+\line{\hfil\box\titlebox\hfil}
+\vskip 1pc
+\line{\hfil\box\authorbox\hfil}
+\ifvoid\thanksbox\relax\else
+ \vfootnote{$^1$}{\eightpoint \unhbox\thanksbox \par}\fi
+\vskip1pc
+\line{\hfil\box\abstractbox\hfil}
+\vskip 2.5pc}
+
+\def\document{\tenpoint\relax}
+
+\parindent=10pt
+\tenpoint
+\def\footnoterule{} \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/files.lst b/macros/plain/contrib/vertex/files.lst
new file mode 100644
index 0000000000..59e226abc7
--- /dev/null
+++ b/macros/plain/contrib/vertex/files.lst
@@ -0,0 +1,20 @@
+!!!!READ !ME Information about TeX fonts
+VERTEX DOC Documentation
+VERTEX HST History of revisions
+FILES LST This file
+USERS LST List of users on mailing list
+AER STY Armenian Economic Review
+ECNMET STY Economagica
+JEP STY Journal of Economic Perspectives
+JET STY Journal of Economic Theorems
+JPE STY Journal of Polemical Economy
+PPT STY Preprint
+QJE STY Quartered Journal of Economics
+RESTUD STY Review of Economic Students
+FNTEST TEX Torture test for footnotes
+JEPCONT TEX Table of Contents for JEP
+TEST TEX Test file
+TWOCOL TEX Two columns (for AER.STY)
+VERTEST TEX Runs TEST.TEX through all of the styles
+VERTEX TEX Main set of TeX macros
+ \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/fntest.tex b/macros/plain/contrib/vertex/fntest.tex
new file mode 100644
index 0000000000..269e867b09
--- /dev/null
+++ b/macros/plain/contrib/vertex/fntest.tex
@@ -0,0 +1,93 @@
+\topmatter
+\runningtitle{TEST FILE}
+\runningname{HAL R. VARIAN}
+\thanks{Thanks to various \TeX\ wizards and beta testers for aid in this
+endeavor. I also want to thank mom and dad, little brother, my teachers,
+the National Science Foundation, Jim and Tammy Bakker, and anyone else I
+can think of that will make this a nice long footnote for testing purposes.}
+\title{A Test File for Ver\TeX}
+\author{Hal R. Varian}
+\affil{Perversity of Michigan}
+\date{September, 1985}
+\version{\today}
+\abstract{This paper provides a torture test for Ver\TeX in order
+to see if a few of its features work as advertised.}
+
+\keywords{Ver\TeX, typesetting, desktop publishing}
+
+\address{Prof. Hal R. Varian, Department of Economics,
+University of Michigan, Ann Arbor, MI 48109, U.S.A.}
+
+\endtopmatter
+%\doublespace
+\document
+
+\noindent This document is provides a test of the various features of the
+formatting\fnote{Here is the first footnote to see if the in-sentence
+spacing works correctly.} package Ver\TeX. It doesn't really do much else.
+Ver\TeX\ allows easy formatting of papers.\fnote{Here is a footnote, in order
+to see if the between-footnote spacing works correctly.}
+
+\section Features of Ver\TeX
+
+Among Ver\TeX's many features are subsections, proofs, etc.\fnote{Here is
+yet another footnote!} Here is another line to add to this sentence to
+check the spacing.
+
+\subsection This is a subsection
+
+Here is a theorem:\fnote{Here is a very, very, very, very, very, very, very,
+very, very, very, very, very, very, very, very, very, very, very, very,
+very, very, very, very, very, very, very, very, very, very, very, very,
+very, very, very, very, very, very, very, very, very, very, very, very,
+very, very long footnote.}
+
+\proclaim Theorem. Consider the following equation
+ $$F(x) = \int_0^x f(t) dt.$$
+It follows that $F'(x) = f(x)$.
+
+\proof The fundamental theorem of calculus. \qed
+
+That's about all there is to it.\fnote{Except for footnotes. Except for
+footnotes. Except for footnotes. Except for footnotes. Except for
+footnotes. Except for footnotes. Except for footnotes. Except for
+footnotes. Except for footnotes. Except for footnotes. Except for
+footnotes. Except for footnotes. Except for footnotes. Except for
+footnotes.}
+
+That's about all there is to it. That's about all there is to it. That's
+about all there is to it. That's about all there is to it. That's about
+all there is to it. That's about all there is to it. That's about all
+there is to it. That's about all there is to it. That's about all there
+is to it. That's about all there is to it. That's about all there is to
+it.
+
+You can put quotations in Ver\TeX\ quite easily, such as:
+
+\quote{Nothing ventured, nothing gained. Nothing ventured, nothing gained.
+Nothing ventured, nothing gained. Nothing ventured, nothing gained.
+Nothing ventured, nothing gained. Nothing ventured, nothing gained.
+Nothing ventured, nothing gained. Nothing ventured, nothing gained.
+Nothing ventured, nothing gained.}
+
+Now that's a nice quotation, even though it is somewhat repetitive.
+
+%Use in REStud.sty
+%\Notes
+
+\Refs
+
+\ref \by{Afriat, S.} \yr{1967a} \paper{The Construction of a Utility
+Function from Expenditure Data} \jour{International Economic Review}
+\vol{8} \pages{67--77} \endref
+
+\ref \by{Breeden, D. and R. Litzenberger} \yr{1978} \paper{Prices of
+State-Contingent Claims Implicit in Option Prices} \jour{Journal of
+Business} \vol{9} \pages{621--851} \endref
+
+\ref \by{Varian, Hal R.} \yr{1986} \book{Intermediate Microeconomics}
+\publ{W. W. Norton \& Co.} \publaddr{New York} \endref
+
+%\PrintEndNotes
+
+ \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/jep.sty b/macros/plain/contrib/vertex/jep.sty
new file mode 100644
index 0000000000..7a9a26bd3c
--- /dev/null
+++ b/macros/plain/contrib/vertex/jep.sty
@@ -0,0 +1,184 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is the Journal of Economic Perspectives style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Load special fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\font\twentyBaskB=cmbx12 at 20pt %chapter titles
+\font\sixteenBaskR=cmr12 at 16pt %authors names
+\font\tenBaskI=cmti10 at 10pt %running heads
+\font\twelveBaskB=cmbx12 at 12pt %article subheads
+\font\elevenBaskI=cmti10 at 11pt %article subsection
+\font\twentyfourBaskB=cmbx12 at 24pt %symposium title
+\font\twentyBaskR=cmr12 at 20pt %department subhead
+\font\bigR=cmr12 at 39pt %first letter of article
+
+
+% Use the following definitions if you have a LaserWriter.
+% The PostScript fonts look much better when scaled.
+%
+%\font\twentyBaskB=psmtimb at 20pt %chapter titles
+%\font\sixteenBaskR=psmtimr at 16pt %authors names
+%\font\tenBaskI=psmtimi at 10pt %running heads
+%\font\twelveBaskB=psmtimb at 12pt %article subheads
+%\font\elevenBaskI=psmtimi at 11pt %article subsection
+%\font\twentyfourBaskB=psmtimb at 24pt %symposium title
+%\font\twentyBaskR=psmtimr at 20pt %department subhead
+%\font\bigR=psmtimr at 39pt %first letter of article
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set pagesize
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\hsize=30pc
+\vsize=53pc
+\hoffset=1in
+\voffset=0in
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Headline and footline
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\emskip{\hskip 1em}
+
+\def\dropstrut{\vrule height 0pt width 0pt depth 6pc}
+
+\nopagenumbers
+\def\rightheadline{\hbox to \fullsize{\hfil{\tenpoint\it \runtitle}\emskip{\tenpoint\folio}}\dropstrut}
+\def\leftheadline{\hbox to \fullsize{\tenpoint\folio\emskip {\tenpoint\it Economic Perspectives}\hfil}\dropstrut}
+\headline={\ifodd\pageno\rightheadline \else\leftheadline\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define topmatter style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\TitleFont{\twentyBaskB}
+\def\AuthorFont{\sixteenBaskR}
+
+\def\DoLeftTitle#1{
+ \titlepage\global
+ \LeftBox
+ \titlebox
+ \TitleFont
+ {24pt}
+ {#1}}
+
+\def\title#1{\DoLeftTitle{#1}}
+
+\def\author#1{\DoLeftAuthor{#1}}
+
+\def\affil#1{\global\setbox\affilbox\vbox{\nineit\hfil#1\hfil}}
+
+\def\thanks#1{\global\setbox\thanksbox\hbox{\it \vrule height 4pt width 4pt depth 0pt\hskip3pt #1}}
+
+\def\date#1{\global\setbox\datebox\vbox{\tenrm #1 \hfil}}
+
+\def\abstract#1{\global\setbox\abstractbox\vbox{\ninepoint\hsize=23pc \noindent #1}}
+
+\def\keywords#1{}
+\def\address#1{}
+
+\def\topmatter{\relax}
+\def\endtopmatter{\DoTop}
+\def\document{\DoPaper\noindent}
+
+\def\SectionFont{\twelveBaskB}
+\RomanSectionfalse
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Big letter to start first paragraph
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\start#1{\hang\hangafter=-3\hangindent=30pt
+ \vbox to 0pt{
+ \vskip 9pt\hsize=.25in
+ \hbox{\hfil\bigR #1\hss}
+ \vss}\noindent}
+
+
+\bigskipamount=32pt plus 2pt minus 2pt
+\medskipamount=14pt plus 2pt minus 2pt
+
+%%Modified \DoLeftSection in VerTeX to eliminate numbers and \noindent
+
+\def\DoLeftSection#1{
+ \BigBreak
+ \SubsectionNumber=0
+ \LeftBox
+ \sectionbox
+ \SectionFont
+ \normalbaselineskip
+ {#1}
+ \line{\box\sectionbox\hfil}
+ \global\advance\SectionNumber by 1
+ \nobreak\medskip}
+
+\def\section#1\par{\DoLeftSection{#1}}
+
+\def\subsection#1\par{\BigBreak\noindent{\elevenBaskI #1}\nobreak\medskip}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\RefFont=\eightpoint
+
+\def\Refs{
+\medskip\noindent\unhbox\thanksbox\par
+\vskip 75pt plus 5pt minus 5pt\goodbreak
+\line{\tenpoint\bf References \hfil\par}
+\vskip 20pt
+\RefFont\baselineskip=10pt
+\parindent=1em}
+
+\def\by#1{\setbox\bybox\hbox{\eightpoint\bf #1}}
+
+\def\SetRef{\vskip 2pt
+ \ifjour\jourfalse\vbox{
+ \unhbox\bybox, ``\unhbox\paperbox,''
+ \unhbox\jourbox, \unhbox\yrbox, {\unhbox\volbox},
+ \ifvoid\nobox\relax\else (\unhbox\nobox), \fi
+ \unhbox\pagesbox. \par}\fi
+
+ \ifbook\bookfalse\par\vbox{
+ \unhbox\bybox\space {\it \unhbox\bookbox}. \unhbox\publaddrbox :
+ \unhbox\publbox , \unhbox\yrbox.\par}\fi
+
+ \ifinbook\inbookfalse\par\vbox{
+ \unhbox\bybox, ``\unhbox\paperbox,'' in
+ {\it \unhbox\bookbox}, ed. by {\rm \unhbox\editorbox}.
+ \unhbox\publaddrbox : \unhbox\publbox, \unhbox\yrbox:
+ \ifvoid\pagesbox\relax\else, \unhbox\pagesbox .\fi\par}\fi
+
+ \ifunpublished\unpublishedfalse\par\vbox{
+ \unhbox\bybox, ``\unhbox\paperbox,''
+ \unhbox\yrbox, \unhbox\paperinfobox .\par}\fi
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set the paper
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\titlehead{\line{\it\hfil Economic Perspectives\emskip Volume 1, Number 1 \emskip July, 1987 \emskip Pages 63--70}}
+\def\titlefoot{\line{\hfil}}
+
+\def\DoTop{
+\vglue 7pc
+\line{\box\titlebox\hfil}
+\vskip 1pc
+\line{\box\authorbox\hfil}
+\vskip 4pc}
+
+\def\DoPaper{\relax}
+
+
+\tenpoint
+\parindent=20pt
+\newdimen\fullsize \fullsize=30pc
+\topskip=3.5pc
+\def\footnoterule{} \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/jepcont.tex b/macros/plain/contrib/vertex/jepcont.tex
new file mode 100644
index 0000000000..f9385c2a61
--- /dev/null
+++ b/macros/plain/contrib/vertex/jepcont.tex
@@ -0,0 +1,94 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Table of Contents for the Journal of Economic Perspectives
+% trial version of macros
+% (uses LaserWriter fonts)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Font definitions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\font\tenBaskI=psmtimi at 10pt %The Journal of
+\font\twentyfourBaskBI = psmtimbi at 24pt %Economic Perspectives
+\font\twentyBaskR=psmtimr at 20pt %Contents
+\font\twelveBaskI=psmtimi at 12pt %Vol 1 . No 1 . July 1987
+\font\twelveBaskB=psmtimb at 12pt %Symposiums
+\font\tenBaskBI=psmtimbi at 10pt %subheads for symposiums
+\font\tenBaskR=psmtimr at 10pt %contents
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Size and miscellaneous macros
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\hsize=30pc
+\vsize=53pc
+\hoffset=1in
+\footline{\hfill}
+\def\leaderfill{\leaders\hbox to 5pt{\hss .\hss}\hfill}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Make Header
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\MakeHeader#1#2#3{
+\centerline{\tenBaskI The Journal of}
+\vskip 4pt
+\centerline{\baselineskip=28pt \twentyfourBaskBI Economic Persepectives}
+\vskip 8pt
+\hrule width \hsize
+\vskip 10pt
+\line{{\twentyBaskR Contents}\hfil{\twelveBaskI Volume #1 $\bullet$ Number #2 $\bullet$ #3}}
+\vskip 10pt
+\hrule width \hsize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Symposiums and articles
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\MajorHead#1{\vskip 20pt\line{\twelveBaskB #1 \hfil}}
+\def\SymposiumTitle#1{\medskip\baselineskip=15pt\line{\tenBaskBI #1: \hfil}}
+\def\Art#1#2#3{\line{\rm #1, ``#2'' \leaderfill #3 \par}}
+\def\Dept#1#2{\line{\rm #1 \leaderfill #2 \par}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Material for contents
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\MakeHeader{1}{1}{July 1987}
+
+\MajorHead{Symposiums}
+\SymposiumTitle{Tax Reform}
+\Art{Alan Auerback}{Tax Reform Act of 1986 and Capital Costs}{5}
+\Art{James M. Buchanan}{Tax Reform as Political Choice}{35}
+\Art{Hal R. Varian}{The Arbitrage Principle in Financial Economics}{50}
+\Art{Alan Auerback}{Tax Reform Act of 1986 and Capital Costs}{5}
+\Art{James M. Buchanan}{Tax Reform as Political Choice}{35}
+\Art{Hal R. Varian}{The Arbitrage Principle in Financial Economics}{50}
+
+\vskip 15pt
+\SymposiumTitle{Arbitrage}
+\Art{Alan Auerback}{Tax Reform Act of 1986 and Capital Costs}{5}
+\Art{James M. Buchanan}{Tax Reform as Political Choice}{35}
+\Art{Hal R. Varian}{The Arbitrage Principle in Financial Economics}{50}
+
+\vskip 10pt
+\MajorHead{Other Articles}
+\Art{Alan Auerback}{Tax Reform Act of 1986 and Capital Costs}{5}
+\Art{James M. Buchanan}{Tax Reform as Political Choice}{35}
+\Art{Hal R. Varian}{The Arbitrage Principle in Financial Economics}{50}
+\Art{Alan Auerback}{Tax Reform Act of 1986 and Capital Costs}{5}
+\Art{James M. Buchanan}{Tax Reform as Political Choice}{35}
+\Art{Hal R. Varian}{The Arbitrage Principle in Financial Economics}{50}
+
+\vskip 10pt
+\MajorHead{Departments}
+\Dept{Good Things to Read}{55}
+\Dept{Puzzles}{60}
+\Dept{Notes}{65}
+
+\bye
+
+ \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/jet.sty b/macros/plain/contrib/vertex/jet.sty
new file mode 100644
index 0000000000..a998a825d9
--- /dev/null
+++ b/macros/plain/contrib/vertex/jet.sty
@@ -0,0 +1,174 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% jet.sty -- Journal of Economic Theorems
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Load special fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\font\twelveHelv=cmss10 at 12pt
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set pagesize
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\hsize=26pc
+\vsize=45pc
+\hoffset=1in
+\voffset=1in
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Headline and footline
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\runningname{Use $\$ runningname}
+\runningtitle{Use $\$ runningtitle}
+
+\nopagenumbers
+\def\rightheadline{\hbox to \hsize{{\hfil\scten\runtitle}\hfil{\folio}}}
+\def\leftheadline{\hbox to \hsize{\folio \hfil {\scten\runname}\hfil}}
+\headline={\ifodd\pageno\rightheadline \else\leftheadline\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Redefine figure macro
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\Figure#1#2#3{
+ \midinsert
+ \vbox to #2{\vfil}
+ \hbox to \hsize{\hss\vbox{\parindent=0pt
+ {\scten Figure \number#1}.---\rm #3}}
+ \endinsert}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define topmatter style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\TitleFont=\twelveHelv
+\let\AuthorFont=\scten
+
+\def\DoCenteredTitle#1{
+ \titlepage\global
+ \CenterBox
+ \titlebox
+ \TitleFont
+ {15pt}
+ {#1}}
+
+\def\title#1{\DoCenteredTitle{#1}}
+
+\def\author#1{\DoCenteredAuthor{#1}}
+\def\authortwo#1{\message{Use ``author'' for both authors in this style.}}
+
+\def\affil#1{\global\setbox\affilbox\vbox{\nineit\noindent #1}}
+\def\affiltwo#1{\message{Do not use "affiltwo" in this style.}}
+
+\def\thanks#1{\global\setbox\thanksbox\hbox{{\eightpoint#1\par}}}
+
+\def\date#1{\global\setbox\datebox\vbox{\tenrm #1 \hfil}}
+\def\version#1{}
+
+\def\abstract#1{\global\setbox\abstractbox\vbox
+ {\eightpoint\hsize=23pc\parindent=8pt#1\par}}
+
+\def\keywords#1{}
+\def\address#1{}
+
+\def\topmatter{\relax}
+\def\endtopmatter{\DoTop}
+
+\let\SectionFont=\scten
+\RomanSectionfalse
+
+\def\section#1\par{\DoCenteredSection{#1}}
+
+\def\subsection#1\par{\BigBreak\noindent
+ {\it \number\SectionNumber.\number\SubsectionNumber\enspace #1\hfil}
+ \nobreak\medskip\noindent}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Math conventions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\outer\def\proclaim #1. #2\par{\medbreak
+ {\scten#1.\enspace}{\sl#2}\par
+ \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}
+
+
+\def\proof{\goodbreak{\it Proof.\enspace}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\RefFont=\ninepoint
+\def\vol#1{\setbox\volbox\hbox{#1}}
+
+\def\Refs{\vskip1in
+\centerline{\scten REFERENCES}
+\vskip 2pc\RefFont}
+
+\def\by#1{\setbox\bybox\hbox{\scten{#1}}}
+
+\newcount\RefNumber
+\RefNumber=1
+
+\def\DoNumber{\HangRef\number\RefNumber.\space\global\advance\RefNumber by 1}
+
+\def\SetRef{
+ \vskip 2pt
+ \ifjour\jourfalse\vbox{\DoNumber
+ \unhbox\bybox,\space\unhbox\paperbox,
+ {\unhbox\jourbox} \unhbox\volbox\space
+ \ifvoid\nobox\relax\else\space no. \unhbox\nobox \fi
+ (\unhbox\yrbox), \unhbox\pagesbox. \par}\fi
+
+ \ifbook\bookfalse\par\vbox{\DoNumber
+ \unhbox\bybox\space {``\unhbox\bookbox''}, \unhbox\publbox ,
+ \unhbox\publaddrbox, \unhbox\yrbox.\par}\fi
+
+ \ifinbook\inbookfalse\par\vbox{\DoNumber
+ \unhbox\bybox\space, \unhbox\paperbox, in
+ {``\unhbox\bookbox''}, ed. by {\rm \unhbox\editorbox},
+ \unhbox\publbox,\unhbox\publaddrbox,\space(\unhbox\yrbox),
+ \ifvoid\pagesbox\relax
+ \else, \unhbox\pagesbox .\fi\par}\fi
+
+ \ifunpublished\unpublishedfalse\par\vbox{\DoNumber
+ \unhbox\bybox, \unhbox\paperbox,
+ \unhbox\paperinfobox,\space\unhbox\yrbox.\par}\fi
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set the paper
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\titlehead{\vbox{\eightpoint
+ \line{Reprinted from JOURNAL OF ECONOMIC THEORY, Vol. 9., No. 9, October 1999\hfil}
+ \line{Copyright $\copyright$ Ecodemic Press, Inc. {\it Printed in U.S.A.}\hfil}}}
+\def\titlefoot{\vbox{\sixpoint
+ \line{Copyright $\copyright$ 1974 by Ecodemic Press, Inc.\hfil}
+ \line{All rights of reproduction in any form reserved.\hfil}}}
+
+\def\DoTop{
+\vglue 4pc
+\line{\hfil\box\titlebox\hfil}
+\vskip 1pc
+\line{\hfil\box\authorbox\hfil}
+\ifvoid\thanksbox\relax\else
+ \vfootnote{$^*$}{\eightpoint \unhbox\thanksbox \par}\fi
+\vskip1pc
+\line{\hfil\box\addressbox\hfil}
+\hfil\box\abstractbox\hfil
+\vskip 2.5pc}
+
+\def\document{\tenpoint\relax}
+
+\parindent=10pt
+\tenpoint
+\def\footnoterule{} \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/jpe.sty b/macros/plain/contrib/vertex/jpe.sty
new file mode 100644
index 0000000000..b7113a0635
--- /dev/null
+++ b/macros/plain/contrib/vertex/jpe.sty
@@ -0,0 +1,128 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Journal of Polemical Economy style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Load special fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\font\fourteenhelvB=cmssbx10 at 14pt
+\font\twelvehelv=cmss10 at 12pt
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set pagesize
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\hsize=26pc
+\vsize=45pc
+\hoffset=1in
+\voffset=1in
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Headline and footline
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\nopagenumbers
+\def\rightheadline{\hbox to \hsize{{\scten\runtitle}\hfil{\folio}}}
+\def\leftheadline{\hbox to \hsize{\folio \hfil {\scten Journal of Polemical Economy}}}
+\headline={\ifodd\pageno\rightheadline \else\leftheadline\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define topmatter style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\TitleFont=\fourteenhelvB
+\let\AuthorFont=\twelvehelv
+
+\def\title#1{\DoLeftTitle{#1}}
+
+\def\author#1{\DoLeftAuthor{#1}}
+
+\def\affil#1{\global\setbox\affilbox\hbox{\nineit\noindent #1 \hfil}}
+
+\def\thanks#1{\global\setbox\thanksbox\hbox{\eightpoint #1}}
+
+\def\date#1{\global\setbox\datebox\vbox{\tenrm #1 \hfil}}
+
+\def\abstract#1{\global\setbox\abstractbox\vbox
+ {\eightpoint\hsize=23pc \noindent #1}}
+
+\def\keywords#1{}
+\def\address#1{}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Sections and subsections
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\SectionFont=\tenbf
+\RomanSectiontrue
+
+\def\section#1\par{\DoLeftSection{#1}}
+
+\def\subsection#1\par{\BigBreak\noindent
+ {\it #1}
+ \nobreak\medskip\noindent}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\RefFont=\tenpoint
+
+\def\Refs{\vskip.5in\noindent{\tenpoint\bf References}\vskip 2pc\RefFont}
+
+\def\SetRef{\vskip 1pt
+
+ \ifjour\jourfalse\vbox{\HangRef
+ \unhbox\bybox\space ``\unhbox\paperbox .''
+ {\unhbox\jourbox } \unhbox\volbox
+ \ifvoid\nobox\relax\else no. \unhbox\nobox \fi
+ \space (\unhbox\yrbox): \unhbox\pagesbox. \par}\fi
+
+ \ifbook\bookfalse\par\vbox{\HangRef
+ \unhbox\bybox\space {\it \unhbox\bookbox}.
+ \unhbox\publaddrbox :
+ \unhbox\publbox , \unhbox\yrbox.\par}\fi
+
+ \ifinbook\inbookfalse\par\vbox{\HangRef
+ \unhbox\bybox\space (\unhbox\yrbox) ``\unhbox\paperbox,'' in
+ {\it \unhbox\bookbox}, ed. {\rm \unhbox\editorbox}.
+ \unhbox\publaddrbox : \unhbox\publbox \ifvoid\pagesbox\relax
+ \else, \unhbox\pagesbox\fi .\par}\fi
+
+ \ifunpublished\unpublishedfalse\par\vbox{\HangRef
+ \unhbox\bybox\space(\unhbox\yrbox)
+ ``\unhbox\paperbox,'' \unhbox\paperinfobox .\par}\fi
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set the paper
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\titlehead{\hfil}
+\def\titlefoot{\hfil}
+
+\def\DoTop{\Reset
+\line{\box\titlebox\hfil}
+\vskip 4.5pc
+\hrule
+\ifvoid\thanksbox\relax\else\vfootnote{}
+ {\eightpoint\unhbox\thanksbox\endfnote}\fi
+\vskip 1.1pc
+\line{\box\authorbox\hfil}
+\vskip .5pc
+\line{\box\affilbox\hfil}
+\vskip 3.5pc
+\line{\hfil\box\abstractbox\hfil}
+\vskip 3pc}
+
+\def\topmatter{\relax}
+\def\endtopmatter{\DoTop}
+\def\document{\DoPaper\noindent}
+\def\DoPaper{\relax}
+
+\tenpoint
+\parindent=12pt
+\def\footnoterule{} \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/ppt.sty b/macros/plain/contrib/vertex/ppt.sty
new file mode 100644
index 0000000000..4343c227e7
--- /dev/null
+++ b/macros/plain/contrib/vertex/ppt.sty
@@ -0,0 +1,182 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is the ppt.sty (Preprint style) for VerTeX
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Special fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\font\twelveHelv=cmss10 at 12pt
+\font\fourteenHelvB=cmss10 at 14pt
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Pagesize
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\hsize=6.5 true in
+\vsize=8.9 true in
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Headline and footline
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%None in this style
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Topmatter style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newbox\covertitlebox
+\newbox\coverauthorbox
+
+\def\DoCoverTitle#1{\titlepage\global
+ \CenterBox
+ \covertitlebox
+ \fourteenHelvB
+ {16pt}
+ {#1}}
+
+\def\DoCoverAuthor#1{
+ \CenterBox
+ \coverauthorbox
+ \twelveHelv
+ {14pt}
+ {#1}}
+
+\def\TitleFont{\tenpoint\bf}
+\def\AuthorFont{\tenpoint\rm}
+
+\def\title#1{\DoCoverTitle{#1}\DoCenteredTitle{#1}}
+
+\def\author#1{\DoCoverAuthor{#1}\DoCenteredAuthor{#1}}
+
+\def\affil#1{\global\setbox\affilbox
+ \vbox{\halign{\tenpoint\it\hfil##\hfil\cr#1\crcr}}}
+
+\def\thanks#1{\global\setbox\thanksbox\hbox{\eightpoint #1}}
+
+\def\date#1{\global\setbox\datebox\vbox{\hfil\tenrm #1 \hfil}}
+
+\def\version#1{\global\setbox\versionbox\vbox{\hfil\tenrm Current version: #1 \hfil}}
+
+\long\def\abstract#1{\global\setbox\abstractbox\hbox{\noindent{\bf Abstract. }\tenpoint#1}}
+
+\def\keywords#1{\global\setbox\keywordsbox\hbox{\noindent{\bf Keywords. }#1}}
+
+\def\address#1{\global\setbox\addressbox\hbox{\noindent{\bf Address. }#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Sections and subsections
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\SectionFont{\tenpoint\bf}
+
+\def\section#1\par{\DoLeftSection{#1}}
+
+\def\subsection#1\par{\BigBreak\noindent
+ {\it #1}
+ \nobreak\medskip\noindent}
+
+\outer\def\proclaim #1. #2\par{\medbreak
+ \noindent{\bf#1.\enspace}{\sl#2}\par
+ \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\RefFont=\tenpoint
+
+\def\endref{\SetRef\vskip.5pc}
+
+\def\Refs{\vskip1in plus .5in minus .5in\goodbreak
+ \noindent{\hfill\tenpoint\bf References\hfill}
+ \vskip 2pc\RefFont}
+
+\def\SetRef{
+
+ \ifjour\jourfalse\vbox{\HangRef
+ \unhbox\bybox\space(\unhbox\yrbox) ``\unhbox\paperbox,''
+ \unhbox\jourbox, \unhbox\volbox,
+ \ifvoid\nobox\relax\else\unhbox\nobox, \fi
+ \unhbox\pagesbox. \par}\fi
+
+ \ifbook\bookfalse\par\vbox{\HangRef
+ \unhbox\bybox\space (\unhbox\yrbox)
+ {\it \unhbox\bookbox}.
+ \unhbox\publaddrbox :
+ \unhbox\publbox .\par}\fi
+
+ \ifinbook\inbookfalse\par\vbox{\HangRef
+ \unhbox\bybox\space (\unhbox\yrbox) ``\unhbox\paperbox,'' in
+ {\it \unhbox\bookbox}, ed. {\rm \unhbox\editorbox}.
+ \unhbox\publaddrbox : \unhbox\publbox \ifvoid\pagesbox\relax
+ \else, \unhbox\pagesbox\fi .\par}\fi
+
+ \ifunpublished\unpublishedfalse\par\vbox{\HangRef
+ \unhbox\bybox\space(\unhbox\yrbox)
+ ``\unhbox\paperbox,'' \unhbox\paperinfobox .\par}\fi
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define controls
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\topmatter{\relax}
+\def\endtopmatter{\nopagenumbers\DoCover}
+\def\document{\DoPaper\noindent}
+\def\prelim{\global\PreliminaryVersiontrue}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set the cover
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\titlehead{\hfil}
+\def\titlefoot{\hfil}
+
+\def\DoCover{\nopagenumbers
+\ifPreliminaryVersion\line{\hfil Preliminary Draft}\fi
+\vglue 2in plus 1in minus 1in
+\line{\hfil\box\covertitlebox\hfil}
+\vskip 1pc
+\line{\hfil\vbox{\halign{\tenrm\hfil##\hfil\cr by\crcr}}\hfil}
+\vskip 1pc
+\line{\hfil\box\coverauthorbox\hfil}
+\ifvoid\affilbox\relax\else
+\line{\hfil\box\affilbox\hfil}\fi
+\vskip 1pc
+\box\datebox
+\box\versionbox
+\vskip .5in%
+\noindent\unhbox\abstractbox\vskip 2pc
+\ifvoid\keywordsbox\relax\else\noindent\unhbox\keywordsbox\fi
+\vskip 2pc
+\ifvoid\addressbox\relax\else\noindent\unhbox\addressbox\fi
+\vfil\eject}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set the paper
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\def\DoPaper{\Reset
+ \global\footline={\hfil\tenrm\number\pageno\hfil}
+ \vbox{\hfil\box\titlebox\hfil}
+ \vskip .5pc
+ \vbox{\hfil\box\authorbox\hfil}
+ \ifvoid\thanksbox\relax\else\vfootnote{}{
+ \eightpoint\ifdouble\vrule height 14pt width 0pt\fi\unhbox\thanksbox\endfnote}\fi
+ \vskip 2pc}
+
+\parindent=15pt
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Use a footnote rule in this style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\footnoterule{\kern-3pt\hrule width 2truein \kern 2.6pt}
+ \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/qje.sty b/macros/plain/contrib/vertex/qje.sty
new file mode 100644
index 0000000000..b2c22bbb89
--- /dev/null
+++ b/macros/plain/contrib/vertex/qje.sty
@@ -0,0 +1,158 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Quartered Journal of Economics
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Special fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\font\sctwelve=cmcsc10 scaled\magstep1
+\font\scten=cmcsc10
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set pagesize
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\hsize=25pc
+\vsize=43pc
+\hoffset=1in
+\voffset=1in
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Headline and footline
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\nopagenumbers
+\def\rightheadline{\hbox to\hsize{\hfil\tenpoint\uppercase{\runname}\hfil{\folio}}}
+\def\leftheadline{\hbox to \hsize{\folio \hfil {\tenpoint\sl QUARTERED JOURNAL OF ECONOMICS}\hfil}}
+\headline={\ifodd\pageno\rightheadline\else\leftheadline\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define topmatter style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\TitleFont{\sctwelve}
+\def\AuthorFont{\scten}
+
+\def\title#1{\DoCenteredTitle{#1{$^*$}}}
+
+\def\author#1{\DoCenteredAuthor{#1}}
+
+\def\affil#1{\global\setbox\affilbox\hbox{\tenit\noindent #1}}
+
+\def\thanks#1{\global\setbox\thanksbox\hbox{{\eightpoint #1\par}}}
+
+\def\date#1{\global\setbox\datebox\vbox{\tenrm #1 \hfil}}
+\def\version#1{}
+
+\def\abstract#1{\global\setbox\abstractbox\vbox{\hsize=23pc\ninepoint #1}}
+
+\def\keywords#1{}
+\def\address#1{}
+
+\def\topmatter{\relax}
+\def\endtopmatter{\DoTop}
+\def\document{\DoPaper\noindent}
+
+\let\SectionFont=\scten
+\RomanSectiontrue
+
+\def\section#1\par{\DoCenteredSection{#1}}
+
+\def\subsection#1\par{\BigBreak\noindent
+ {\it #1\hfil}\nobreak\medskip\noindent}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Math conventions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\outer\def\proclaim #1. #2\par{\medbreak
+ \noindent{\scten#1.\enspace}{\rm#2}\par
+ \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}
+
+\def\proof{\goodbreak\noindent{\scten Proof.\enspace}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Redefine figure macro
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\Figure#1#2#3{
+ \midinsert
+ \vbox to #2{\vfil}
+ \hbox to \hsize{\vbox{\parindent=0pt%
+ \centerline{{\scnine Figure \number#1}}}}
+ \endinsert}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\RefFont=\eightpoint
+
+\def\DoNotes{
+\ifvoid\endnoteins\relax\else
+\vskip2pc
+\noindent{\eightpoint\rm NOTES}
+\medskip
+\unvbox\endnoteins
+\fi}
+
+\def\DoRefs{\vskip 2pc
+\parindent=0pt
+\centerline{{\scten References}}
+\vskip 1pc
+\RefFont
+}
+
+\def\Refs{\vskip3pc
+\DoRefs}
+
+\def\by#1{\setbox\bybox\hbox{\ninepoint#1}}
+
+\def\SetRef{
+ \ifjour\jourfalse\vbox{\parshape=0\hangindent=3pc\hangafter=2
+ \unhbox\bybox, ``\unhbox\paperbox,''
+ \unhbox\jourbox, {\unhbox\volbox} (\unhbox\yrbox) \ifvoid\nobox\relax\else (\unhbox\nobox), \fi
+ \unhbox\pagesbox. \par}\fi
+
+ \ifbook\bookfalse\par\vbox{\parshape=0\hangindent=3pc\hangafter=2
+ \unhbox\bybox\space {\it \unhbox\bookbox} (\unhbox\publaddrbox :
+ \unhbox\publbox , \unhbox\yrbox).\par}\fi
+
+ \ifinbook\inbookfalse\par\vbox{
+ \unhbox\bybox, ``\unhbox\paperbox,''
+ {\it \unhbox\bookbox}, {\rm \unhbox\editorbox}, eds.
+ (\unhbox\publaddrbox : \unhbox\publbox, \unhbox\yrbox).\par}\fi
+
+ \ifunpublished\unpublishedfalse\par\vbox{
+ \unhbox\bybox\space(\unhbox\yrbox)
+ ``\unhbox\paperbox, '' \unhbox\paperinfobox .\par}\fi
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set the paper
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\titlehead{\hfil}
+\def\titlefoot{\vbox{\sixpoint
+ \line{$\copyright$ 1986 by the President and Fellows of Havahd College. Published by John Wiley \& Sons, Inc.}
+ \line{{\it The\ Quartered\ Journal\ of\ Economics}, August 1986\hfil CCC 0033--5533/030455--16\$04.00}}}
+
+
+\def\DoTop{\Reset
+\vskip 2pc
+\line{\hfil\box\titlebox\hfil}
+\ifvoid\thanksbox\relax\else
+ \vfootnote{$^*$}{\eightpoint \unhbox\thanksbox \par}\fi
+\vskip 1pc
+\line{\hfil\box\authorbox\hfil}
+\vskip1pc
+\line{\hfil\box\abstractbox\hfil}
+\vskip2pc}
+
+\def\DoPaper{\relax}
+
+\tenpoint
+\parindent=15pt
+\def\footnoterule{} \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/restud.sty b/macros/plain/contrib/vertex/restud.sty
new file mode 100644
index 0000000000..e25b284757
--- /dev/null
+++ b/macros/plain/contrib/vertex/restud.sty
@@ -0,0 +1,193 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Review of Economic Students --- style file
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%Since this style uses the notes-at-end by default, it is necessary to
+% put \Notes on a line by itself right before \Refs in order to
+% get the Acknowlegement and Notes printed.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Special fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\font\sixteenrmB=cmbx10 scaled \magstep4
+\font\sctwelve=cmcsc10 scaled\magstep1
+\font\scten=cmcsc10
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set pagesize
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\hsize=32pc
+\vsize=51pc
+\hoffset=1in
+\voffset=1in
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Headline and footline
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\nopagenumbers
+\def\rightheadline{\hbox to\hsize{\tenrm\hfil\uppercase{\runname}\hskip 3em\uppercase{\runtitle}\hfil\folio}}
+\def\leftheadline{\hbox to \hsize{\tenrm\folio \hfil {\scten REVIEW OF ECONOMIC STUDENTS}\hfil}}
+\headline={\ifodd\pageno\rightheadline\else\leftheadline\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define topmatter style
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\TitleFont{\sixteenrmB}
+\def\AuthorFont{\sctwelve}
+
+\def\DoCenteredTitle#1{
+ \titlepage\global
+ \CenterBox
+ \titlebox
+ \TitleFont
+ {20pt}
+ {#1}}
+
+\def\title#1{\DoCenteredTitle{#1}}
+
+\def\author#1{\DoCenteredAuthor{#1}}
+
+\def\affil#1{\global\setbox\affilbox\hbox{\tenit\noindent #1}}
+
+\def\thanks#1{\global\setbox\thanksbox\hbox{\eightpoint
+ {\it Acknowledgement.}\space#1\par}}
+
+\def\date#1{\global\setbox\datebox\vbox{\tenrm #1 \hfil}}
+
+\def\abstract#1{\global\setbox\abstractbox
+ \vbox{\eightpoint\hsize=28pc #1}}
+
+\def\keywords#1{}
+\def\address#1{}
+
+\def\topmatter{\relax}
+\def\endtopmatter{\DoTop}
+\def\document{\DoPaper\noindent}
+
+\let\SectionFont=\scten
+\RomanSectionfalse
+
+\def\section#1\par{\DoCenteredSection{\uppercase{#1}}}
+
+\def\subsection#1\par{\BigBreak\noindent
+ {\it \number\SectionNumber.\number\SubsectionNumber.\enspace #1\hfil}
+ \nobreak\medskip\noindent}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Redefine \fnote since REStud has notes at end
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\fnote#1{$^{\the\FootNumber}$
+\insert\endnoteins{\eightpoint\smallskip\number\FootNumber. #1\par}
+\global\advance\FootNumber by 1}
+
+%\def\fnote#1{$^{\the\FootNumber}$
+%\insert\endnoteins{\eightpoint
+% \begingroup\smallskip\number\FootNumber.\space#1\par\endgroup}
+% \global\advance\FootNumber by 1}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Math conventions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\outer\def\proclaim #1. #2\par{\medbreak
+ {\tenpoint\bf#1.\enspace}{\sl#2}\par
+ \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}
+
+\def\proof{\goodbreak{\it Proof.\enspace}}
+
+\def\qed{$\parallel$}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Redefine figure macro
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\Figure#1#2#3{
+ \midinsert
+ \vbox to #2{\vfil}
+ \hbox to \hsize{\vbox{\parindent=0pt
+ {\scten Figure \number#1}. \rm #3}}
+ \endinsert}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\RefFont=\eightpoint
+
+\def\Notes{\ifvoid\thanksbox\relax\else
+\vfill\supereject
+\vbox{\hsize=28pc\eightpoint\noindent\unhbox\thanksbox\par}\fi
+\ifvoid\endnoteins\relax\else
+ \bigskip
+ \line{\eightpoint\rm NOTES \hfil}
+ \medskip
+ \unvbox\endnoteins
+\fi}
+
+\def\DoRefs{\BigBreak
+{\noindent\eightpoint\rm REFERENCES}
+\vskip .5pc
+\RefFont}
+
+\def\Refs{\DoRefs}
+
+\def\by#1{\setbox\bybox\hbox{\eightpoint\sc\expandafter\uppercase{#1}}}
+
+\def\SetRef{\vskip 2pt
+
+ \ifjour\jourfalse\vbox{\HangRef
+ \unhbox\bybox\space (\unhbox\yrbox), ``\unhbox\paperbox'',
+ \unhbox\jourbox, {\bf \unhbox\volbox}
+ \ifvoid\nobox\relax\else (\unhbox\nobox), \fi
+ \unhbox\pagesbox. \par}\fi
+
+ \ifbook\bookfalse\par\vbox{\HangRef
+ \unhbox\bybox\space {\it \unhbox\bookbox}. \unhbox\publaddrbox :
+ \unhbox\publbox , \unhbox\yrbox.\par}\fi
+
+ \ifinbook\inbookfalse\par\vbox{\HangRef
+ \unhbox\bybox\space (\unhbox\yrbox): ``\unhbox\paperbox,'' in
+ {\it \unhbox\bookbox}, ed. by {\rm \unhbox\editorbox}.
+ \unhbox\publaddrbox : \unhbox\publbox \ifvoid\pagesbox\relax
+ \else, \unhbox\pagesbox .\fi\par}\fi
+
+ \ifunpublished\unpublishedfalse\par\vbox{\HangRef
+ \unhbox\bybox\space(\unhbox\yrbox):
+ ``\unhbox\paperbox, '' \unhbox\paperinfobox .\par}\fi
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set the paper
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\titlehead{\vbox{\eightpoint
+\line{Review of Economic Students (1986) LIII, 001--002 \hfil 0034-6527/86/000100001\$2.00}
+\line{$\copyright$ 1986 The Society for Limited Economic Analysis \hfil}
+}}
+\def\titlefoot{\hfil}
+
+\def\DoTop{\Reset
+\vglue 2pc
+\line{\hfil\box\titlebox\hfil}
+\vskip 2pc
+\line{\hfil\box\authorbox\hfil}
+\vskip.25pc
+\line{\hfil\box\affilbox\hfil}
+\vskip 2pc
+\line{\hfil\box\abstractbox\hfil}
+\vskip2pc}
+
+\def\DoPaper{\relax}
+
+\tenpoint
+\parindent=20pt
+\def\footnoterule{} \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/test.tex b/macros/plain/contrib/vertex/test.tex
new file mode 100644
index 0000000000..82c9af0df1
--- /dev/null
+++ b/macros/plain/contrib/vertex/test.tex
@@ -0,0 +1,122 @@
+\topmatter
+
+\title{Estimating Risk Aversion from \cr
+ Arrow-Debreu Portfolio Choice}
+
+\runningname{Hal R. Varian}
+\runningtitle{Estimating Risk Aversion}
+
+\thanks{This research was supported in part by the National Science
+Foundation. I would like to thank Richard Green for helpful remarks. I am
+especially grateful to an anonymous referee whose comments significantly
+improved the statements and proofs of the results.}
+
+\author{Hal R. Varian}
+
+\affil{University of Michigan}
+
+\date{October 27, 1984}
+
+\version{\today}
+
+\abstract{This paper derives necessary and sufficient conditions for
+Arrow-Debreu choices of contingent consumption to be compatible with the
+maximization of a state independent expected utility function that exhibits
+increasing or decreasing absolute risk aversion, or increasing or
+decreasing relative risk aversion. The conditions can be used to bound
+different measures of risk aversion based on a single observation of
+Arrow-Debreu portfolio choice.}
+
+\keywords{Revealed preference, expected utility, risk aversion, portfolio
+choice.}
+
+
+\address{Hal R. Varian, Department of Economics, University of Michigan,
+Ann Arbor, MI 48109}
+
+\endtopmatter
+
+\document
+
+\noindent {\scten The expected utility} hypothesis forms the basis for much
+of our understanding of investor behavior under uncertainty. It is
+commonly agreed that a well-behaved expected utility function should be an
+increasing and concave function of wealth, or, equivalently, that its first
+derivative should be positive and its second derivative should be negative.
+It is also widely accepted that the Arrow-Pratt measure of absolute risk
+aversion should be declining with wealth. There is much less agreement
+about the behavior of the Arrow-Pratt measure of {\it relative\/} risk
+aversion, although some investigators have argued that it should increase
+with wealth.
+
+In this note I derive necessary and sufficient conditions for choices of
+contingent consumption across states of nature to satisfy various
+hypotheses about the behavior of these measures of risk aversion. If the
+portfolio choice behavior of the consumer is consistent with the conditions
+I derive, then the conditions can be used to bound the Arrow--Pratt
+measures of absolute and relative risk aversion. The conditions are
+derived using methods of the ``nonparametric approach'' to optimizing
+behavior introduced by Afriat (1967) and extended by Diewert (1973),
+Diewert and Parkan (1978), and Varian (1982), (1983a). Applications of
+these methods to choice under uncertainty include Dybvig and Ross (1982),
+Green and Srivastava (1983), and Varian (1983b).
+
+\section The Maximization Problem
+
+Consider an investor who chooses a pattern of consumption across states of
+nature to solve the following problem:
+ $$\max \sum_{s=1}^S \pi_s u(c_s) $$
+
+\Refs
+
+\ref
+\by{Afriat, S.} \yr{1967a} \paper{The Construction of a Utility
+Function from Expenditure Data} \jour{International Economic Review}
+\vol{8} \pages{67--77}
+\endref
+
+\ref
+\by{Afriat, S.} \yr{1967b} \paper{The Construction of Separable
+Utility Functions from Expenditure Data} \paperinfo{mimeo, Purdue}
+\endref
+
+\ref \by{Breeden, D. and R. Litzenberger} \yr{1978} \paper{Prices of
+State-Contingent Claims Implicit in Option Prices} \jour{Journal of
+Business} \pages{621--651}
+\endref
+
+\ref
+\by{Diewert, E.} \yr{1973} \paper{Afriat and Revealed Preference Theory}
+\jour{Review of Economic Studies} \vol{40} \pages{419--426}
+\endref
+
+\ref \by{Diewert, E. and C. Parkan} \yr{1978} \paper{Tests for Consistency
+of Consumer Data and Nonparametric Index Numbers} \paperinfo{Working Paper
+78-27, University of British Columbia}
+\endref
+
+\ref \by{Dybvig, P. and S. Ross} \yr{1982} \paper{Portfolio Efficient Sets}
+\jour{Econometrica} \pages{1525--1546}
+\endref
+
+\ref \by{Green, R. and S. Srivastava} \yr{1983} \paper{Preference
+Restrictions, Asset Returns, and Consumption} \paperinfo{mimeo,
+Carnegie--Mellon University}
+\endref
+
+\ref \by{Varian, H.} \yr{1982} \paper{The Nonparametric Approach to Demand
+Analysis} \jour{Econometrica} \vol{50} \pages{945--973}
+\endref
+
+\ref
+\by{Varian, H.} \yr{1983a} \paper{Nonparametric Tests of Models of
+Consumer Behavior} \jour{Review of Economic Studies} \vol{50}
+\pages{99--110}
+\endref
+
+\ref
+\by{Varian, H.} \yr{1983b} \paper{Nonparametric Tests of Models of
+Investor Behavior} \jour{Journal of Financial and Quantitative Analysis}
+\vol{18} \pages{269--278}
+\endref
+ \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/twocol.tex b/macros/plain/contrib/vertex/twocol.tex
new file mode 100644
index 0000000000..49f6fd1912
--- /dev/null
+++ b/macros/plain/contrib/vertex/twocol.tex
@@ -0,0 +1,74 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% two colume output from TUGboat
+% vol. 6, No. 1 (1985) by Craig Platt
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\newif\iftitle %true if this is a titlepage
+ \global\titlefalse
+
+
+\def\titlepage{\global\titletrue}
+
+\def\onepageout#1{\shipout\vbox{%
+ \offinterlineskip%
+ \vbox to 3pc{%
+ \iftitle \global\titlefalse%
+ \else\ifodd\pageno\rightheadline\else\leftheadline\fi\fi \vfill}%
+ \vbox to \vsize{#1%
+ \ifvoid\footins\else%
+ \vskip\skip\footins \kern-3pt%
+% \hrule height\ruleht width\hsize \kern-\ruleht \kern3pt%
+ \unvbox\footins\fi%
+ \boxmaxdepth=\maxdepth}}%
+\advancepageno}
+
+\newdimen\colwidth \newdimen\bigcolheight %%%1
+\colwidth=13pc \bigcolheight=98pc %%%2
+
+\output{\onepageout{\unvbox225}}
+
+\newbox\partialpage
+\newdimen\savesize %%%3
+
+\def\begindoublecolumns{\begingroup
+ \savesize=\vsize %%%4
+ \output={\global\setbox\partialpage=\vbox{\unvbox255}}\eject
+ \output={\doublecolumnout} \hsize=\colwidth \vsize=\bigcolheight
+ \advance\vsize by -2\ht\partialpage} %%%5
+
+\def\enddoublecolumns{\output={\balancecolumns}\eject
+ \global\output={\onepageout{\unvbox255}} %%%6
+ \global\vsize=\savesize %%%7
+ \endgroup \pagegoal=\vsize}
+
+\def\doublecolumnout{\dimen0=\pageheight
+ \advance\dimen0 by-\ht\partialpage \splittopskip=\topskip
+ \setbox0=\vsplit255 to\dimen0
+ \setbox2=\vsplit255 to\dimen0
+ \onepageout\pagesofar
+ \global\vsize=\bigcolheight %%%8
+ \unvbox255 \penalty\outputpenalty}
+
+\def\pagesofar{\unvbox\partialpage
+ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
+
+\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen0=\ht0
+ \advance\dimen0 by\topskip \advance\dimen0 by-\baselineskip
+ \divide\dimen0 by2 \splittopskip=\topskip
+ {\vbadness=10000 \loop \global\setbox3=\copy0
+ \global\setbox1=\vsplit3 to\dimen0
+ \ifdim\ht3>\dimen0 \global\advance\dimen0 by1pt \repeat}
+ \setbox0=\vbox to\dimen0{\unvbox1}
+ \setbox2=\vbox to\dimen0{\unvbox3}
+ \global\output={\balancingerror} %%%9
+ \pagesofar}
+
+\newhelp\balerrhelp{Please change the page %%%10
+ into one that works.} %%%11
+
+\def\balancingerror{\errhelp=\balerrhelp %%%12
+ \errmessage{Page can't be balanced} %%%13
+ \onepageout{\unvbox255}} %%%14
+
+  \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/users.lst b/macros/plain/contrib/vertex/users.lst
new file mode 100644
index 0000000000..5872463044
--- /dev/null
+++ b/macros/plain/contrib/vertex/users.lst
@@ -0,0 +1,171 @@
+Professor
+Carl
+Carl
+
+Shapiro
+
+Woodrow Wilson School
+Princeton University
+Princeton, NJ 08540
+*
+Professor
+Robert
+Bob
+
+Wilson
+
+Graduate School of Business
+Stanford University
+Stanford, CA 94305
+*
+Professor
+Chi-Fu
+Chi-Fu
+
+Huang
+
+Sloan School of Management
+MIT
+Cambridge, MA 02139
+*
+Professor
+Barry
+Barry
+
+Nalebuff
+
+Department of Economics
+Princeton University
+Princeton, NJ 08540
+*
+Professor
+In-Koo
+In-Koo
+
+Chu
+
+Graduate School of Business
+University of Chicago
+Chicago, Illinois 60637
+*
+Professor
+Tom
+Tom
+
+Russell
+
+774 Cragmont Avenue
+Berkeley, CA 94707
+*
+Dr.
+Lee
+Lee
+
+Lillard
+
+The Rand Corporation
+1700 Main Street, PO Box 2138
+Santa Monica, CA 90406-2138
+*
+Professor
+Joseph
+Joe
+
+Stiglitz
+
+Hoover Institute
+Stanford University
+Stanford, CA 94305
+*
+Professor
+Carl
+Carl
+
+Shapiro
+
+Woodrow Wilson School
+Princeton University
+Princeton, NJ 08540
+*
+Professor
+Robert
+Bob
+
+Wilson
+
+Graduate School of Business
+Stanford University
+Stanford, CA 94305
+*
+Professor
+Chi-Fu
+Chi-Fu
+
+Huang
+
+Sloan School of Management
+MIT
+Cambridge, MA 02139
+*
+Professor
+Barry
+Barry
+
+Nalebuff
+
+Department of Economics
+Princeton University
+Princeton, NJ 08540
+*
+Professor
+In-Koo
+In-Koo
+
+Chu
+
+Graduate School of Business
+University of Chicago
+Chicago, Illinois 60637
+*
+Professor
+Tom
+Tom
+
+Russell
+
+774 Cragmont Avenue
+Berkeley, CA 94707
+*
+Dr.
+Lee
+Lee
+
+Lillard
+
+The Rand Corporation
+1700 Main Street, PO Box 2138
+Santa Monica, CA 90406-2138
+*
+Professor
+Joseph
+Joe
+
+Stiglitz
+
+Department of Economics
+Princeton University
+Princeton, NJ 08540
+*
+Professor
+Alan
+Alan
+
+Harrison
+
+Department of Economics
+McMaster University
+1280 Main Street West
+Hamilton, Ontario
+Canada, L8S 4M4
+*
+ \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/vertest.tex b/macros/plain/contrib/vertex/vertest.tex
new file mode 100644
index 0000000000..08aad6ab58
--- /dev/null
+++ b/macros/plain/contrib/vertex/vertest.tex
@@ -0,0 +1,35 @@
+\input vertex
+\input ppt.sty
+\input test
+\vfill\eject
+
+\input jep.sty
+\input test
+\vfill\eject
+
+\input jpe.sty
+\input test
+\vfill\eject
+
+\input jet.sty
+\input test
+\vfill\eject
+
+\input ecnmet.sty
+\input test
+\vfill\eject
+
+\input qje.sty
+\input test
+\vfill\eject
+
+\input aer.sty
+\input test
+\vfill\eject
+
+\input restud.sty
+\input test
+\vfill\eject
+
+\bye
+ \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/vertex.doc b/macros/plain/contrib/vertex/vertex.doc
new file mode 100644
index 0000000000..9180fb2b8a
--- /dev/null
+++ b/macros/plain/contrib/vertex/vertex.doc
@@ -0,0 +1,290 @@
+\magnification=\magstep1
+\input vertex
+\input ppt.sty
+
+\topmatter
+ \title{Ver\TeX\ User's Manual}
+ \author{Hal R. Varian}
+ \affil{University of Michigan}
+ \abstract{This documentation describes Ver\TeX, a package of \TeX\
+macros that will produce beautiful working papers, and allow you to
+simulate final versions in a variety of journal styles.}
+ \keywords{\TeX, typesetting, economics}
+ \address{Prof. Hal R. Varian, Department of Economics, University of
+Michigan, Ann Arbor, MI 48109, U.S.A.\ \ Internet address: {\tt
+Hal\_Varian@UM.CC.UMICH.EDU}}
+ \thanks{Thanks to Kari Gluski, the participants of {\tt tex:forum},
+the members of the Economics Department at the University of Michigan,
+and all the \TeX\ hackers who made this work possible.} \date{August,
+1986}
+ \version{\today}
+ \prelim
+ \endtopmatter
+ \document
+
+There are several \TeX\ macro packages already available, so why is one
+more necessary? Basically I felt that there was a need for a simple,
+flexible package that added a minimum amount to {\tt PLAIN.TEX}, and yet
+still provided useful features for writing technical reports.
+
+Ver\TeX\ will help you to {\bf V}isualize {\bf E}conomics {\bf R}eports
+using \TeX. Ver\TeX\ will produce nice looking preprints and will aid in
+formatting your bibliography, but it will also produce simulated journal
+styles for a variety of economics journals. It is very easy to add new
+journal styles to Ver\TeX for someone who knows a little bit of \TeX.
+
+\section Ver\TeX\ Commands
+
+The easiest way to show you Ver\TeX's commands is to show you the
+start of this paper. It looks like something like this:
+
+\verbatim/
+\magnification=\magstep1
+\input vertex
+\input ppt.sty
+
+\topmatter
+ \title{Ver\TeX\ User's Manual}
+ \author{Hal R. Varian}
+ \affil{University of Michigan}
+ \abstract{This documentation describes Ver\TeX, a package of \TeX\
+macros that will produce beautiful working papers, and allow you to
+simulate final versions in a variety of journal styles.}
+ \keywords{\TeX, typesetting, economics}
+ \address{Prof. Hal R. Varian, Department of Economics, University of
+Michigan, Ann Arbor, MI 48109, U.S.A.\ \ Internet address: {\tt
+Hal\_Varian@UM.CC.UMICH.EDU}}
+ \thanks{Thanks to Kari Gluski, the participants of {\tt tex:forum},
+the members of the Economics Department at the University of Michigan,
+and all the \TeX\ hackers who made this work possible.} \date{August,
+1986}
+ \version{\today}
+ \prelim
+ \endtopmatter
+ \document
+
+There are several \TeX\ macro packages already available, so why is
+one more necessary? Basically I felt that there was a need for a
+simple, flexible package that added a minimum amount to {\tt
+PLAIN.TEX}, and yet still provided useful features for writing
+technical reports./
+
+\bigskip
+
+That's pretty simple, isn't it? The only extra feature that you need to
+know is that you can put \verbatim/\cr/ into the \verbatim/\title/ macro if
+you want to split the title into two or more lines, as in
+ $$\verbatim/\title{A very, very, very, very \cr very long title}/$$
+
+If there are two authors of a paper, use the commands
+ $$\verbatim/\authortwo{The Name}\affiltwo{The University}/$$
+The \verbatim/\thanks/ should come {\it before\/} the \verbatim/\author/
+and \verbatim/\title/ keywords, if the style you are using attaches the
+thanks as a footnote to the author or title.
+
+What if there are more than two authors? In that case you are on your
+own, except in the preprint style. There you can do something like:
+
+\verbatim/\author{A. Winken \cr {\it MIT} \cr B. Blinken \cr
+ {\it University of California} \cr {\rm and} \cr C. Nod \cr
+ {\it University of Michigan}}/
+
+This will set the authors and affiliations up the way you want them.
+Be sure to leave the \verbatim/\affil/ box out if you do this trick.
+I intend to provide better support for multi-authored papers in the
+next release of Ver\TeX.
+
+When you want to start a new section, you type
+ $$\verbatim/\section title of the section \par/$$
+and when you want to start a subsection you type
+ $$\verbatim/\subsection title of the subsection \par/$$
+Ver\TeX\ will handle the section numbers for you, automatically numbering
+each section as required.
+
+You can enter footnotes by using the construction
+ $$\verbatim/\fnote{This is a footnote}/$$ and you get a
+footnote.\fnote{Like this!} If at the end of your document, you type
+\verbatim/\PrintEndNotes/, \TeX\ will print out an end page with all your
+footnotes on it, for those journals who just have to have it.
+
+If you want the paper to be double spaced, put \verbatim#\doublespace#
+between \verbatim#\endtopmatter# and \verbatim#\document#. This way the
+cover will come out single spaced and the document will come out double
+spaced, which is what people usually want.
+
+If you are in doublespace mode and want to put a paragraph in single
+spaced mode for some reason, type \verbatim#\singlespace#. The document
+will now revert to single spaced mode until you enter \verbatim#\doublespace#
+again.
+
+One common reason to want to use single spacing in a doublespaced document
+is for long quotes. Ver\TeX\ provides this via the command
+\verbatim/\quote/, as in \verbatim/\quote{Four score and seven $\ldots$}/.
+
+\section Extra Goodies for Math and Figures
+
+But there are more goodies in Ver\TeX. For example, you can attach {\it
+names\/} to equations, and have \TeX\ automatically number (and renumber!)
+them for you. To use this feature you type something like the following
+when you first introduce an equation:
+ $$\verbatim/$$e=mc^2\eqno\Equation\Einstein$$/$$
+and then when you want to reference it, you say
+ $$\ldots\verbatim/as in equation (\Einstein)./$$
+The same sort of thing works with figures. When you first reference a
+figure, called, say \verbatim/\MonaLisa/, you type
+\verbatim/\Fig\MonaLisa/. \TeX\ will assign the next figure number to it
+and enter ``Figure 2'' (or whatever) in the text. At the end of the
+paragraph, or roughly where you want the figure to appear, you
+type
+ $$\verbatim/\Figure\MonaLisa{2in}{The great painting Mona Lisa.}/$$
+The three arguments to the \verbatim/\Figure/ macro are: (1) the
+figure name, (2) the vertical size of the figure, and (3) the
+caption for the figure. \TeX\ will insert the figure using the
+\verbatim/\midinsert/ command, so it will appear on the page you
+ask for it if there is room, and otherwise float to the top of the
+next page.
+
+There are couple of things about equation and figure names that are worth
+pointing out. First, \TeX\ does not allow you to use {\it numbers\/} as
+part of a name. Thus names like \verbatim/\Eq1/ and \verbatim/\Eq2/ are
+not allowed. However, you can {\it reuse\/} names as often as you wish.
+You can refer to an equation as \verbatim/\A/ in one section of the paper
+and later on redefine \verbatim/\A/ to refer to another equation. I find
+it convenient to use rather long descriptive names like
+\verbatim/\FirstOrderCondition/ for equations that I refer to throughout the
+paper and use short names like \verbatim/\A/ for equations that I only
+refer to once or twice.
+
+There a couple of handy math commands. You can type \verbatim/\text{for all}/
+if you want ``for all'' to appear in math mode. You can type
+\verbatim/\D{f(x)}{x_i}/ to get
+ $$\D{f(x)}{x_i}$$ and
+\verbatim/d{f(x)}{x_i}/ to get $\d{f(x)}{x_i}$.
+
+The command \verbatim/\proof/ sets a nice {\it Proof.} The command
+\verbatim/\qed/ gives you a box: \qed The command \verbatim/\proclaim/
+works the same as described in {\it The \TeX book}, but the style has been
+changed slightly.
+
+The command \verbatim/\today/ gives today's date nicely spelled out, like:
+\today.
+
+To get verbatim \TeX\ listings, use the construction
+
+ $$\verbatim/\verbatim#This will appear verbatim#/$$
+
+Any convenient symbols can be used as a delimiter in place of the
+\verbatim/#/ signs.
+
+\section References
+
+Ver\TeX\ has nice way to deal with references. You type something
+like the following:
+
+\verbatim/
+
+\ref \by{Afriat, S.} \paper{The Construction of a Utility Function from
+Expenditure Data} \jour{International Economic Review} \vol{8}
+\yr{1967} \pages{67--77}\endref
+
+\ref \by{Afriat, S.} \paper{On the Constructability of Consistent Price
+Indices Between Several Periods Simultaneously} \inbook{Essays in
+the Theory and Measurement of Consumer Behavior in Honor of Sir
+Richard Stone}\editor{A. Deaton} \publ{Cambridge University Press}
+\publaddr{Cambridge, England}\yr{1984}\endref
+
+\ref \by{Browning, M.}\paper{A Non-Parametric Test of the Life-Cycle
+Rational Expectations Hypothesis} \paperinfo{Princeton University
+Discussion Paper 64} \yr{1984}\endref
+
+\ref \by{Varian, H.} \paper{Nonparametric Test of Models of Consumer
+Behavior}\jour{Review of Economic Studies} \vol{50} \yr{1982b} \no{3}
+\pages{99--110}\endref
+
+\ref \by{Varian, H.} \book{Microeconomic Analysis} \publ{W.
+W. Norton \& Co.} \publaddr{New York} \yr{1984}\endref
+/
+\medskip
+
+and you will get a nice typeset output like:
+
+\bigskip
+
+\ref \by{Afriat, S.} \paper{The Construction of a Utility Function from
+Expenditure Data} \jour{International Economic Review} \vol{8}
+\yr{1967} \pages{67--77}\endref
+
+\ref \by{Afriat, S.} \paper{On the Constructability of Consistent Price Indices
+Between Several Periods Simultaneously} \inbook{Essays in the Theory and
+Measurement of Consumer Behavior in Honor of Sir Richard Stone}
+\editor{A. Deaton} \publ{Cambridge University Press} \publaddr{Cambridge,
+England}\yr{1984}\endref
+
+\ref \by{Browning, M.}\paper{A Non-Parametric Test of the Life-Cycle Rational
+Expectations Hypothesis} \paperinfo{Princeton University Discussion Paper 64}
+\yr{1984}\endref
+
+\ref \by{Varian, H.} \paper{Nonparametric Test of Models of Consumer
+Behavior} \jour{Review of Economic Studies} \vol{50} \yr{1982b} \no{3}
+\pages{99--110}\endref
+
+\ref \by{Varian, H.} \book{Microeconomic Analysis} \publ{W.
+W. Norton \& Co.} \publaddr{New York} \yr{1984}\endref
+
+\medskip
+
+The reference macros are quite complicated and are still being fixed; use
+them at your own risk. Currently if you omit a field that is
+require---like leaving out the page numbers or something like
+that---Ver\TeX\ will sometimes print out excess commas and other
+punctuation. Eventually this will be fixed, but for now it is better to
+put in a dummy value, like \verbatim#\pages{???}# or something like that.
+
+If you have a fancy reference that doesn't fit one of the above models,
+just use the \verbatim#\ref# macro to start the reference. You'll get
+the right hanging indentation and inter-reference spacing that way.
+
+Refer to the file \verbatim#vertex.hst# for the history of revisions to
+Ver\TeX. If you add some peachy macros of your own, I strongly suggest
+that you put them in a separate file. Then as new revisions of Ver\TeX\
+come out, you won't have to modify them in any way.
+
+Ver\TeX\ is in the public domain; please feel free to distribute it however
+you want, as long as you indicate the original author.
+
+\section Journals
+
+Want to get published quick? Then use Ver\TeX's journal simulation
+feature. Instead of using the command \verbatim\input ppt.sty\ use
+the style files:
+
+\medskip
+
+\verbatim\jpe.sty\ --- for the {\it Journal of Polemical Economy}.
+
+\verbatim\jep.sty\ --- for the {\it Journal of Economic Perspectives}.
+
+\verbatim\jet.sty\ --- for the {\it Journal of Economic Theorems}.
+
+\verbatim\aer.sty\ --- for the {\it Armenian Economic Review}.
+
+\verbatim\ecnmet.sty\ --- for {\it Economagica}.
+
+\verbatim\restud.sty\ --- for {\it Review for Economic Students}.
+
+\verbatim\qje.sty\ --- for the {\it Quartered Journal of Economics}.
+
+\medskip
+
+When you use one of these styles, Ver\TeX\ will automatically adjust the
+style of the document and the style of the references to be more-or-less
+consistent with the journal style. Some fine tuning may be needed, but
+the output generally looks pretty good.
+
+If you want to see a small sample of each output, \TeX\ the file {\tt
+vertest.tex}.
+
+\enddocument
+
+\bye
+ \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/vertex.hst b/macros/plain/contrib/vertex/vertex.hst
new file mode 100644
index 0000000000..c5d95bae1a
--- /dev/null
+++ b/macros/plain/contrib/vertex/vertex.hst
@@ -0,0 +1,64 @@
+********************VarTeX Revision History**************************
+
+As of October 1986, VarTeX should be considered to be in its
+pre-release, beta testing stage. This file will record updates
+and fixes to VarTeX.
+
+--------------------------------------------------------------------
+October 2, 1986
+
+\doublespace -- works, but footnotes aren't spaced quite right.
+\refs -- still need more \if statements
+footnote rule now defined in ppt.sty
+\thanks now works in ppt.sty
+qje.sty defined.
+--------------------------------------------------------------------
+October 6, 1986
+
+\baselineskip is correct in footnotes now, except for long ones.
+\skipins is probably still wrong, but it will do for now.
+
+--------------------------------------------------------------------
+October 15, 1986
+
+Cleaned up the footnote stuff mentioned above. Should have correct
+spacing now in both single and double mode.
+
+--------------------------------------------------------------------
+November 9, 1986
+
+Cleaned up some of the style formats. For some reason \Romannumeral
+doesn't work in \DoCenteredSection. Fixed several of the bibliographys
+in the style files. aer.sty gives "\overfull vboxs", but the output looks
+good.
+
+Have Kari's endnote macro to do endnotes as inserts, but I have not yet
+implemented them. That's the next thing to do.
+
+----------------------------------------------------------------------
+June 13, 1987
+
+Fixed problem with \big, due to failure to define \tenbig, \ninebig, etc.
+ on p. 415 of TeXbook.
+
+Made \tenpointbaselineskip equal to 12 points.
+
+Added \ProduceEndNotes to print footnotes at end of paper by using
+the \insert macro. (Thanks to Kari Gluski for suggesting this.)
+
+Fixed the footnotes to always be single spaced, even when paper is
+doublespaced.
+
+Changed \enddocument to do nothing; its previous function is replaced
+by \ProduceEndNotes.
+
+The \thanks footnote in ppt.sty now looks nicer in doublespaced mode.
+
+----------------------------------------------------------------------
+August 9, 1987
+
+Some fixes to ecnmet.sty
+Added \quote and \singlespace
+Change \bigbreak to \BigBreak to avoid more widows with \section and
+ \subsection
+Added \halign to \DoCoverAuthor to allow for multiple authors \ No newline at end of file
diff --git a/macros/plain/contrib/vertex/vertex.pdf b/macros/plain/contrib/vertex/vertex.pdf
new file mode 100644
index 0000000000..d7ed110e67
--- /dev/null
+++ b/macros/plain/contrib/vertex/vertex.pdf
Binary files differ
diff --git a/macros/plain/contrib/vertex/vertex.tex b/macros/plain/contrib/vertex/vertex.tex
new file mode 100644
index 0000000000..d11c93d4a1
--- /dev/null
+++ b/macros/plain/contrib/vertex/vertex.tex
@@ -0,0 +1,492 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% VerTeX
+% Hal Varian
+% August 1987
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% verbatim macros from TeXbook, page 380--382.
+% to invoke, type: \verbatim# TeX stuff ...#
+% Any character can be used in place of #.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\uncatcodespecials{\def\do##1{\catcode`##1=12}\dospecials}
+
+\def\setupverbatim{\tt%
+\def\par{\leavevmode\endgraf}\catcode`\`=\active%
+\obeylines\uncatcodespecials\obeyspaces}%
+{\obeyspaces\global\let =\ }%
+{\catcode`\`=\active \gdef`{\relax\lq}}
+
+\def\verbatim{\begingroup\setupverbatim\doverbatim}
+\def\doverbatim#1{\def\next##1#1{##1\endgroup}\next}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Load various fonts
+% there are both computer modern and almost modern fonts
+% available; comment out the ones you aren't using
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+% Computer Modern fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\font\sctwelve=cmcsc10 scaled\magstep1
+\font\scten=cmcsc10
+
+\font\tenrm=cmr10
+\font\teni=cmmi10
+\font\tensy=cmsy10
+\font\tenbf=cmbx10
+\font\tenit=cmti10
+
+\font\ninerm=cmr9 \font\eightrm=cmr8 \font\sixrm=cmr6
+\font\ninei=cmmi9 \font\eighti=cmmi8 \font\sixi=cmmi6
+\font\ninesy=cmsy9 \font\eightsy=cmsy8 \font\sixsy=cmsy6
+\font\ninebf=cmbx9 \font\eightbf=cmbx8 \font\sixbf=cmbx6
+\font\nineit=cmti9 \font\eightit=cmti8
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+% Almost Modern fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%\font\sctwelve=amcsc10 scaled\magstep1
+%\font\scten=amcsc10
+%
+%\font\tenrm=amr10
+%\font\teni=ammi10
+%\font\tensy=amsy10
+%\font\tenbf=ambx10
+%\font\tenit=amti10
+%
+%\font\ninerm=amr9 \font\eightrm=amr8 \font\sixrm=amr6
+%\font\ninei=ammi9 \font\eighti=ammi8 \font\sixi=ammi6
+%\font\ninesy=amsy9 \font\eightsy=amsy8 \font\sixsy=amsy6
+%\font\ninebf=ambx9 \font\eightbf=ambx8 \font\sixbf=ambx6
+%\font\nineit=amti9 \font\eightit=amti8
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define font families
+% (see TeXbook, p. 414-5)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\catcode`@=11
+\newskip\ttglue
+
+\def\tenpoint{\def\rm{\fam0\tenrm}%
+\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm%
+\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei%
+\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy%
+\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex%
+\textfont\itfam=\tenit \def\it{\fam\itfam\tenit}%
+\textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf%
+\scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam\tenbf}%
+\tt \ttglue=.5em plus.25em minus.15em%
+\ifdouble\normalbaselineskip=1.5pc plus .5pt minus .5pt \else\normalbaselineskip=12pt\fi
+\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}%
+\let\sc=\eightrm \normalbaselines\rm}
+
+\def\ninepoint{\def\rm{\fam0\ninerm}%
+\textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm%
+\textfont1=\ninei\scriptfont1=\sixi\scriptscriptfont1=\fivei%
+\textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy%
+\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex%
+\textfont\itfam=\nineit\def\it{\fam\itfam\nineit}%
+\textfont\bffam=\ninebf\scriptfont\bffam=\sixbf%
+\scriptscriptfont\bffam=\fivebf\def\bf{\fam\bffam\ninebf}%
+\tt \ttglue=.5em plus.25em minus.15em %
+\normalbaselineskip=11pt%
+\setbox\strutbox=\hbox{\vrule height8pt depth3pt width0pt}%
+\let\sc=\sevenrm\let\big=\ninebig\normalbaselines\rm}
+
+\def\eightpoint{\def\rm{\fam0\eightrm}%
+\textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm%
+\textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei%
+\textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy%
+\textfont3=\tenex\scriptfont3=\tenex \scriptscriptfont3=\tenex%
+\textfont\itfam=\eightit \def\it{\fam\itfam\eightit}%
+\textfont\bffam=\eightbf \scriptfont\bffam=\sixbf%
+\scriptscriptfont \bffam=\fivebf \def\bf{\fam\bffam\eightbf}%
+\tt \ttglue=.5em plus.25em minus.15em%
+\normalbaselineskip=9pt%
+\setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
+\let\sc=\sixrm \let\big=\eightbig\normalbaselines\rm}
+
+\def\tenbig#1{{\hbox{$\left#1\vbox to 8.5pt{}\right.\n@space$}}}
+\def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy
+ \left#1\vbox to7.25pt{}\right.\n@space$}}}
+\def\eightbig#1{{\hbox{$\textfont0=\ninerm\textfont2=\ninesy
+ \left#1\vbox to6.5pt{}\right.\n@space$}}}
+
+%Only a partial setup for 6-point, since it is used so rarely
+\def\sixpoint{\def\rm{\fam0\sixrm}% switch to 6-point type
+ \textfont0=\sixrm \textfont2=\sixsy
+ \textfont\itfam=\sixi \def\it{\fam\itfam\sixi}%
+ \normalbaselineskip=7.5pt\normalbaselines\rm}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \fnote -- numbered footnotes in small type -- from TeXbook, p. 416
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%register for automatic footnote numbering
+\newcount\FootNumber
+\FootNumber=1
+
+%insert for holding footnotes to print as endnotes at end of paper
+
+\newinsert\endnoteins %define a new insert
+\skip\endnoteins=0pt %space added when endnote is present
+\count\endnoteins=0 %magnification factor
+\dimen\endnoteins=\maxdimen %maximum endnotes per page
+
+%print endnotes
+\def\PrintEndNotes{\vfill\eject\ifvoid\endnoteins
+ \else\centerline{\bf Footnotes}\parskip=\medskipamount
+ \bigskip\unvbox\endnoteins\fi}
+
+%footnote macro
+% Write notes in 8 point
+% Write to \endnotesins for end notes
+
+
+\def\fnote#1{\footnote{$^{\the\FootNumber}$}{\eightpoint #1\endfnote}
+\insert\endnoteins{\tenpoint\medskip\noindent\number\FootNumber. #1\par
+\ifdouble\bigskip\fi}%
+\global\advance\FootNumber by 1}
+
+% We must end paragraph to restore original baselines and
+% therefore have to skip up the amount of the baselineskip to keep
+% the space between footnotes right.
+
+\def\endfnote{\par\vskip-\normalbaselineskip}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \makeheadline -- redefine to omit headline on title pages (p. 364
+% of TeXBook)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif\iftitle %true if this is a titlepage
+ \global\titlefalse
+
+\def\titlepage{\global\titletrue} %set flag if this is a Titlepage
+
+\def\titlehead{\hfil}
+\def\titlefoot{\hfil}
+
+\def\makeheadline{\vbox to 0pt{\vskip-22.5pt%
+ \line{\vbox to8.5pt{}%
+ \iftitle\titlehead
+ \else\the\headline\fi}\vss}\nointerlineskip}
+
+\def\makefootline{\baselineskip=24pt
+ \iftitle\line{\titlefoot}\global
+ \titlefalse\else\line{\the\footline}\fi}
+
+%no footnoterule by default; can reset in sty files.
+\def\footnoterule{}
+
+\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}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Create various boxes
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newbox\titlebox
+\newbox\authorbox
+\newbox\affilbox
+\newbox\addressbox
+\newbox\keywordsbox
+\newbox\datebox
+\newbox\versionbox
+\newbox\thanksbox
+\newbox\abstractbox
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Create various counters
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcount\SectionNumber\SectionNumber=1
+\newcount\SubsectionNumber\SubsectionNumber=1
+\newcount\EquationNumber\EquationNumber=0
+\newcount\FigureNumber\FigureNumber=0
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \Reset -- to reset all counters and \pageno
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\Reset{\global\SectionNumber=1\global\SubsectionNumber=1
+\global\EquationNumber=0\global\FigureNumber=0\global\pageno=1
+\global\FootNumber=1}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \today -- gives today's 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}
+
+%can reset this in sty files.
+\def\version#1{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Some math definitions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%can redefine in .sty files
+\def\proof{\medbreak\noindent{\it Proof. }}
+
+%can redefine in .sty files
+\def\qed{\vrule height8pt width4pt depth0pt\par\medskip}
+
+%display mode partial derivatives
+\def\D#1#2{{{\partial #1} \over {\partial #2}}}
+
+%math mode partial derivations
+\def\d#1#2{\partial #1/\partial #2}
+
+%for naming equations
+\def\Equation#1{\global\advance\EquationNumber by 1
+ \global\edef#1{\number\EquationNumber}(#1)}
+
+%for roman text in math or display mode
+\def\text#1{\hbox{\rm #1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Figures -- use \Fig\junk the first time you reference a figure, and
+% use \Figure\junk{2in}{This figure is junk.} when you want
+% it to appear.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%% \Fig -- for invoking figure
+%%% #1 is reference name for figure
+
+\def\Fig#1{\global\advance\FigureNumber by 1
+ \global\edef#1{\number\FigureNumber}Figure #1}
+
+%%% \Figure --- to have space reserved for figure.
+%%% #1 is reference name for figure
+%%% #2 is height of figure
+%%% #3 is caption for figure
+
+\def\Figure#1#2#3{
+ \midinsert
+ \vbox to #2{\vfil}
+ \hbox to \hsize{\vbox{\parindent=0pt%
+ {\bf Figure \number#1}.\space \rm #3}}
+ \endinsert}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \boxit -- this will surround a box by rules
+% useful for debugging and design purposes
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif\ifDoBoxes
+\DoBoxestrue
+
+\def\boxit#1{\ifDoBoxes\vbox{\hrule\hbox{\vrule\vbox{#1}\vrule}\hrule}
+\else\vbox{\hbox{\vbox{#1}}}\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% References
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%will set hanging indentation in amount specified by \parindent
+\def\HangRef{\hangindent\parindent\ignorespaces\noindent}
+
+\newif\ifbook
+\newif\ifjour
+\newif\ifinbook
+\newif\ifunpublished
+\newif\ifinbook
+
+\newbox\nobox
+\newbox\bybox
+\newbox\pagesbox
+\newbox\paperbox
+\newbox\yrbox
+\newbox\datebox
+\newbox\volbox
+\newbox\jourbox
+\newbox\bookbox
+\newbox\publbox
+\newbox\publaddrbox
+\newbox\editorbox
+\newbox\paperinfobox
+\newbox\bookinfobox
+
+\def\no#1{\setbox\nobox\hbox{#1}}
+\def\by#1{\setbox\bybox\hbox{#1}}
+\def\pages#1{\setbox\pagesbox\hbox{#1}}
+\def\paper#1{\setbox\paperbox\hbox{#1}}
+\def\yr#1{\setbox\yrbox\hbox{#1}}
+\def\date#1{\setbox\datebox\hbox{#1}}
+\def\vol#1{\setbox\volbox\hbox{\bf #1}}
+\def\jour#1{\setbox\jourbox\hbox{\it #1}\jourtrue}
+\def\book#1{\setbox\bookbox\hbox{\it #1}\booktrue}
+\def\inbook#1{\setbox\bookbox\hbox{\it #1}\inbooktrue}
+\def\editor#1{\setbox\editorbox\hbox{#1}}
+\def\publ#1{\setbox\publbox\hbox{#1}}
+\def\publaddr#1{\setbox\publaddrbox\hbox{#1}}
+\def\paperinfo#1{\setbox\paperinfobox\hbox{#1}\unpublishedtrue}
+
+\def\ref{\relax}
+\def\endref{\SetRef}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Headings
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\runningname#1{\edef\runname{#1}}
+\def\runningtitle#1{\edef\runtitle{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \CenterBox and \LeftBox
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\CenterBox creates a vbox with several lines of centered text
+%modeled after TeXbook, p. 412
+% #1 name of box
+% #2 font used in box
+% #3 baselineskip in box
+% #4 text for box, lines separated by \cr
+%
+%\LeftBox does the same for left justified text
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\CenterBox#1#2#3#4{
+ \global\setbox#1=\vbox{\baselineskip=#3\halign{#2\hfil##\hfil\cr#4\crcr}}}
+
+\def\LeftBox#1#2#3#4{
+ \global\setbox#1=\vbox{\baselineskip=#3\halign{#2##\hfil\cr#4\crcr}}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section and \subsection
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newbox\sectionbox
+
+\def\Romannumeral#1{\uppercase\expandafter{\romannumeral#1}}
+
+\newif\ifRomanSection\RomanSectionfalse
+
+% taken from TeXbook, p. 355, but changed the parameters so that
+% it won't fill out the page so readily. If you really want all
+% the pages to be the same size, use \let\BigBreak=\bigbreak
+
+\def\BigBreak{\vskip0pt plus .05\vsize\penalty-250
+ \vskip0pt plus-.05\vsize\bigskip\vskip\parskip}
+
+\def\DoCenteredSection#1{
+ \BigBreak
+ \SubsectionNumber=0
+ \CenterBox
+ \sectionbox
+ \SectionFont
+ \normalbaselineskip
+ {\ifRomanSection\Romannumeral\SectionNumber
+ \else\number\SectionNumber\fi.\enskip#1}
+ \line{\hfil\box\sectionbox\hfil}
+ \global\advance\SectionNumber by 1
+ \nobreak\medskip
+ \noindent}
+
+\def\DoLeftSection#1{
+ \BigBreak
+ \SubsectionNumber=0
+ \LeftBox
+ \sectionbox
+ \SectionFont
+ \normalbaselineskip
+ {\ifRomanSection{\Romannumeral\SectionNumber}
+ \else\number\SectionNumber\fi.\enskip#1}
+ \line{\box\sectionbox\hfil}
+ \global\advance\SectionNumber by 1
+ \nobreak\medskip
+ \noindent}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Titles and authors
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\DoCenteredTitle#1{
+ \titlepage\global
+ \CenterBox
+ \titlebox
+ \TitleFont
+ \normalbaselineskip
+ {#1}}
+
+\def\DoLeftTitle#1{
+ \titlepage\global
+ \LeftBox
+ \titlebox
+ \TitleFont
+ \normalbaselineskip
+ {#1}}
+
+\def\DoCenteredAuthor#1{
+ \CenterBox
+ \authorbox
+ \AuthorFont
+ \normalbaselineskip
+ {#1}}
+
+\def\DoLeftAuthor#1{
+ \LeftBox
+ \authorbox
+ \AuthorFont
+ \normalbaselineskip
+ {#1}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \prelim -- will write "preliminary verison" on cover
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif\ifPreliminaryVersion
+ \global\PreliminaryVersionfalse
+
+\def\prelim{\PreliminaryVersiontrue}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% quote mode -- inserts and singlespaces
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\quote#1{\medskip{\normalbaselineskip=12pt\tenpoint
+ \narrower #1 \par}\smallskip}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \doublespace -- prints document in doublespace
+% \singlespace -- reverts to singlespace
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif\ifdouble\doublefalse
+\def\doublespace{\global\doubletrue\tenpoint}
+\def\singlespace{\global\doublefalse\tenpoint}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% define dummys; will be redefined if needed in .sty files
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\runtitle#1{}
+\def\runname#1{}
+\def\titleheadline{\hfil}
+\def\titlefootline{\hfil}
+\overfullrule=0pt %so the black boxes don't print out in margins
+\def\enddocument{\relax}
+ \ No newline at end of file
diff --git a/macros/plain/contrib/wrtfile/wrtfdist.readme b/macros/plain/contrib/wrtfile/wrtfdist.readme
new file mode 100644
index 0000000000..1407da3854
--- /dev/null
+++ b/macros/plain/contrib/wrtfile/wrtfdist.readme
@@ -0,0 +1,45 @@
+From: cameron@symcom.math.uiuc.edu (Cameron Smith)
+Newsgroups: comp.text.tex
+Date: 25 Oct 92 04:24:17 GMT
+Organization: none
+
+Everything below the "cut here" line is "wrtfdist.tex",
+the distribution file for "wrtfile.tex". This is a short
+TeX file containing code that allows you to put (for example)
+
+ \FILE abc.def
+ Mary had a little lamb,
+ its fleece was white as snow.
+ \EOF
+
+into a TeX file and have the lines "Mary...lamb," and "its...snow."
+written out to a file "abc.def" when the original file is TeXed.
+This functionality is identical with that of Jonathan Fine's
+"filechop.tex", which was posted to the UKTeX Digest recently
+(Volume 92, Issue 37, Friday, 9 Oct 1992). Fine's code is simpler
+than mine and executes faster, but its definition of \FILE uses
+\EOF as a delimiter to gather up the entire text to be written out
+as a parameter. This places potentially severe limitations on the
+amount of text that can be written. My implementation uses a loop
+to write one line at a time until \EOF is seen, so there is no limit
+on the size of files that can be created.
+
+My version also allows you to say "\TYPE" instead of "\FILE <name>",
+to have lines written to the terminal and log file instead of to another
+file. This is useful for presenting prompts or informatinal messages
+in interactive TeX programs.
+
+The file "wrtfdist.tex" itself uses the "wrtfile" code to create "read.me",
+"wrtfile.doc", and "wrtfile.tex" when TeXed. Try it out and read the
+"read.me" file for more information.
+
+Finally, everyone should feel free to redistribute "wrtfdist.tex",
+and to use the code in "wrtfile.tex" to create "package files" like
+this one, but archivists please note the redistribtion restrictions:
+don't break apart the files and store them separately, put *only*
+the package file "wrtfdist.tex" into your archives. Thank you.
+
+Hope this is of use--
+--Cameron Smith
+ cameron@symcom.math.uiuc.edu
+
diff --git a/macros/plain/contrib/wrtfile/wrtfdist.tex b/macros/plain/contrib/wrtfile/wrtfdist.tex
new file mode 100644
index 0000000000..33b985b616
--- /dev/null
+++ b/macros/plain/contrib/wrtfile/wrtfdist.tex
@@ -0,0 +1,606 @@
+%
+% This is the distribution file for Cameron Smith's "wrtfile" utility.
+% Running TeX on this file causes it to write out the files that
+% make up the "wrtfile" distribution.
+%
+% Go ahead and try it; it will ask permission before writing anything.
+%
+% This distribution file is dated 19 October 1992.
+%
+%%%%%%%%%%%%%%%%%%%%%
+%
+% ARCHIVISTS PLEASE TAKE NOTE:
+%
+% The entire contents of this file are Copyright 1992 by Cameron Smith.
+% This file may be distributed freely *in its original form*.
+%
+% Executing this file with the TeX processor causes portions of this file
+% to be written out to other files; but these constituent files may *NOT*
+% be distributed individually, nor assembled together in any other form
+% than this, if the distribution is to be called "wrtfile".
+%
+% The computer code embodied in this file may be used freely for any
+% purpose without fee, and may be incorporated into other works,
+% provided that such works are not represented as the "wrtfile" TeX utility.
+%
+% In other words, use it, enjoy it, build on it any way you want, but
+% if you want to redistribute "wrtfile" as such, you must distribute
+% it *only* in the form of this TeX file.
+%
+%%%%%%%%%%%%%%%%%%%%%
+%
+\begingroup
+\catcode`\@ 11
+\gdef\FILE #1 {%
+ \@@FILESETUP
+ \let\@@WRITELINE\@@FILEWRITELINE
+ \let\@@ENDFILE\@@FILEEOF
+ \immediate\openout 0 #1\relax
+ \message{\string\FILE\space #1}%
+ \@@READLINE
+}
+\gdef\TYPE{%
+ \@@FILESETUP
+ \let\@@WRITELINE\@@TYPELINE
+ \let\@@ENDFILE\@@TYPEEOF
+ \@@STARTTYPE
+}
+\gdef\@@FILESETUP{%
+ \begingroup
+ \endlinechar`\^^M
+ \def\do##1{\catcode`##1 12 }%
+ \dospecials
+ \catcode`\^^I 12 \catcode`\^^L 12 \catcode`\^^M 12\relax
+ \newlinechar`\^^M
+ \def\empty{}%
+}
+\endlinechar -1
+\catcode `\^^M 12 \relax
+\catcode `\| 0 \relax
+\catcode `\\ 12 |relax
+|gdef|@@STARTTYPE#1^^M{|@@READLINE}
+|gdef|@@READLINE#1^^M{
+ |@@TESTLINE#1^^M\EOF
+}
+|gdef|@@TESTLINE#1\EOF{
+ |def|@@TEST{#1}
+ |ifx|@@TEST|empty
+ % \EOF occurred at start of line
+ |let|next|@@ENDFILE
+ |else
+ |def|next{|@@WRITELINE#1\EOF}
+ |fi
+ |next
+}
+|gdef|@@FILEWRITELINE#1^^M\EOF{
+ |immediate|write 0{#1}
+ |@@READLINE
+}
+|gdef|@@TYPELINE#1^^M\EOF{
+ |immediate|write 16{#1}
+ |@@READLINE
+}
+|gdef|@@FILEEOF#1^^M\EOF{
+ |immediate|closeout 0|relax
+ |endgroup
+ |message{\EOF}
+}
+|gdef|@@TYPEEOF#1^^M\EOF{
+ |endgroup
+}
+|endgroup
+
+\TYPE
+This is the distribution file for Cameron Smith's "wrtfile" utility.
+Running TeX on this file causes it to write out the files that
+make up the "wrtfile" distribution.
+
+This distribution file is dated 19 October 1992.
+
+In a moment you'll be asked whether you wish to proceed.
+If you say yes, this job will write the following files:
+
+ read.me -- you should read this!
+ wrtfile.doc -- file-writing code, with comments explaining how it works
+ wrtfile.tex -- same code, with comments stripped out for speed
+
+If you already have files by these names, you may wish to stop
+and rename the files or move them elsewhere so they don't get
+overwritten.
+
+Say "y" or "yes" to proceed, anything else to stop the job.
+\EOF
+
+\message{Do you wish to proceed? }
+\read -1 to \answer
+
+\def\getans #1 #2\endanswer{\uppercase{\def\answer{#1}}}
+\expandafter\getans\answer\endanswer
+
+\newif\ifYES
+\def\ansY{Y}
+\def\ansYES{YES}
+\ifx\answer\ansY \YEStrue
+\else\ifx\answer\ansYES \YEStrue
+\fi\fi
+
+\ifYES
+ \let\next\relax
+\else
+ \let\next\end
+ \message{Job aborted.}%
+\fi
+\next
+
+\TYPE
+
+The files will now be written. Please read the file "read.me"!
+It explains what "wrtfile" is for, how it works, what you may
+do with it, and limitations on its redistribution. Thanks!
+
+\EOF
+
+\FILE read.me
+
+WRTFILE
+=======
+
+by Cameron Smith
+
+version of 19 October 1992
+
+
+HISTORY OF WRTFILE
+------------------
+
+Volume 92, Issue 37 of the UKTeX Digest (Friday, 9 Oct 1992) included
+a trio of utilities by Jonathan Fine <J.Fine@uk.ac.cambridge.dpmms>.
+These were commcheck.tex, plainind.tex, and filechop.tex.
+
+I found them all interesting and useful, especially filechop.tex,
+which makes it easy to write a TeX file that writes out other files
+when TeXed. But I was dissatisfied with the way Mr. Fine's filechop was
+implemented, because it used TeX's parameter-collection mechanism
+to gather up the information to be written out. This approach made
+Fine's code very simple, but it placed severe constraints on the amount
+of material that could be written to a file -- no more than what could
+be accommodated in TeX's parameter memory. If memory overflow did occur,
+the TeX job would be aborted ungracefully. I decided to implement a
+more robust file writing utility.
+
+My file-writing algorithm reads and writes one line at a time. The code
+is more complicated than Fine's and executes more slowly, but it can write
+files of any length (provided that no single line is longer than TeX's
+input buffer can accommodate). In the course of developing wrtfile I
+realized that the same code that allows us to write to a file also makes
+it easy to write to the terminal, so I implemented that as well.
+It's useful in "driver files" (like the one that created this file!)
+to be able to conveniently present several lines of information to the user.
+
+The name "wrtfile" was chosen in deference to the 8-character naming
+limitations of MS-DOS. May that system soon perish from the world!
+
+
+HOW DOES IT WORK?
+-----------------
+
+Put the code for "wrtfile" into a TeX document. It defines two control
+sequences that are meant to be invoked by users (and several more "internal"
+macros that are not meant to be called directly). The \FILE macro takes
+as an argument a file name, opens up a file of that name for writing, and
+writes the lines that follow it in the source file to that output file
+until it encounters a line beginning with "\EOF". For example, the lines
+
+ \FILE abc.def
+ Mary had a little lamb,
+ its fleece was white as snow.
+ \EOF
+
+would cause the file "abc.def" to be created, and to contain the two
+lines "Mary had a little lamb," and "its fleece was white as snow.".
+All of TeX's special characters (such as \, ~, &, {, }, $, and %) are
+disabled during this operation -- the writing stops only when the
+literal string "\EOF" appears. Furthermore, this string must appear
+flush at the left margin; it will not be recognized anywhere else.
+And it will be detected even if it is immediately followed by other
+non-blank characters: the "abc" in "\EOFabc" would not prevent this
+string from terminating the writing of a file if it occurred at the
+left end of a line.
+
+The \TYPE macro works like the \FILE macro, except that it takes no
+argument, and writes to the terminal and the log file rather than
+creating another file. For example, the lines
+
+ \TYPE
+ Mary had a little lamb,
+ its fleece was white as snow.
+ \EOF
+
+would cause the two lines "Mary had a little lamb," and "its fleece was
+white as snow." to be written to the terminal and into the log file.
+
+For technical reasons, \TYPE should appear on a line by itself.
+It actually uses TeX's parameter-collection mechanism to remove the
+end-of-line character that TeX places at the end of each input line;
+this is necessary because TeX puts the character there as soon as the
+line is read into TeX's input buffer, before the \TYPE macro gains
+control. Similarly the \FILE macro should be followed by nothing except
+the name of the file to be written, which should not contain blanks.
+Any characters following an \EOF marker on the same line are discarded
+(because they have been read with funny \catcode values and so are
+probably not useful).
+
+
+WHAT CAN I DO WITH IT?
+----------------------
+
+Although there might be several reasons why one would want to be able
+to write a verbatim segment of a TeX input file out to another file,
+the most obvious one that springs to mind is that of distributing
+TeX macro packages. Ideally, the distribution of a TeX package should
+include several files:
+
+ * two versions of the executable code, one heavily commented for
+ ease of understanding and one with comments stripped out for
+ speed of execution,
+
+ * a user manual (comments explaining the workings of the code are no
+ replacement for this!), which explains the features of the package
+ and how to use them,
+
+ * one or more sample files that can be processed by TeX to show how
+ the package should be used in real applications,
+
+ * (in some cases) source code in C or Pascal or another language
+ providing utilities to be used with the macro package,
+
+and possibly other files according to the needs and nature of the package.
+But it is inconvenient and unreliable to distribute all of these files
+separately. One runs the risk that archives may get out of synch,
+updating some files but not others when new versions are released,
+or that users may retrieve only some of the files they need -- often
+they get the program but not the documentation, resulting in unnecessary
+pleas for help. (Those who *get* the documentation but won't *read* it
+are a different problem, alas.) On the whole it is much better to
+distribute software in a single package, which the recipient can
+break apart to generate the several files that are needed.
+
+There are, of course, many utilities for assembling collections of
+files into single files for transmission or archiving. But they
+suffer from various drawbacks. Many are tied to specific systems
+and so are unsuitable for distributing TeX code, since TeX is
+implemented on so many disparate systems. Also, such utilities
+typically create binary files; such files cannot be transmitted
+through email, and some archives do not accept them. (When I
+was preparing to distribute my "pageframe" LaTeX utility, the first
+archivist I approached told me that his site had a policy against
+placing any non-ASCII file into its archives, and so would accept
+the ".tar.Z" file I submitted only if I agreed to have the constituent
+files broken out and made available for individual retrieval.
+Since I did NOT want it to be possible for a user to retrieve
+the code without the documentation, I was unhappy about this.)
+
+Suppose you want to distribute a file that "wrtfile" can't write?
+(See the "Bugs and Limitations" section below.) One possibility
+is to encode the file, use "wrtfile" to write the encoded version,
+and tell recipients how to decode it. For example, the "uuencode"
+utility reads a file containing any sequence of bytes and writes
+a file that contains only standard printable characters. The companion
+"uudecode" utility can read the printable file created by "uuencode"
+and reconstruct the original file. "uuencode" and "uudecode" originated
+in UNIX environments, but freeware implementations of them for VMS,
+Macintosh, and MS-DOS systems have been available for some time.
+Other formats ("xxencode", "btoa", "vvencode", etc.) with similar
+purposes are also in use.
+
+Incidentally, the file-writing functionality provided by "wrtfile"
+is similar to, but more primitive than, the capability provided by
+the "docstrip" utility of Mittelbach, Duchier, and Braams. However,
+"docstrip" works best when it is guided by a "driver" file, separate
+from the "package" file from which other files are extracted. That
+puts us back in the position of having to distribute two files (the
+driver and the package file), keep them in synch, and make sure that
+anyone who gets either file gets both. Also, many sites do not have
+the "docstrip" code, and its creators have placed restrictions on its
+distribution that make it impractical to include a copy with your
+own package so that all your recipients will have it. (It is not
+permitted to send "docstrip.sty" without sending the entire "doc.doc"
+and "docstrip.doc" distribution set, which is prohibitively large.)
+By contrast, the code for "wrtfile" is only about sixty lines long --
+a little over 1K -- and may be freely incorporated into document
+packages. (See the section below on "Redistribution".)
+
+
+BUGS AND LIMITATIONS
+--------------------
+
+There are two respects in which the files written by \FILE are not
+faithful copies of the original data. Neither one has any negative
+effect if the files being written are going to be read only by TeX.
+Fixing either one would require changes to TeX itself. The two
+discrepancies pertain to the handling of trailing blanks and
+"non-printable" characters.
+
+Trailing blanks on an input line will be chopped off. This is a
+feature of TeX's input routine, and happens even before category
+codes are assigned. (TeX was made to behave this way to accommodate
+operating systems that handle text files as files of fixed-length
+records; such systems usually pad the lines of text files with
+blanks to fill them out to a common length. By stripping off all
+trailing blanks on all input lines, TeX is guaranteed to behave
+the same way whether lines are padded or not.) Since the code for
+\FILE never receives the trailing blanks in the first place, it can't
+know to write them out, so they don't appear in the output file.
+So this method of writing a file will not faithfully reproduce files
+that have lines with trailing blanks. On the other hand, the same
+fact about TeX that creates this problem means that the deleted
+trailing blanks could never have influenced TeX anyway, so if the
+file being written is destined to be TeX input then this blank removal
+doesn't matter.
+
+TeX writes some "non-printable" characters as special sequences
+involving the "^^" notation. The choice of which character codes get
+written this way is implementation-dependent -- it may vary from one
+machine or one implementation to another, but for each implementation
+it is fixed at compile time and isn't changeable later. In Unix TeX
+the tab character is always written as "^^I", for example. This is
+another respect in which the lines written out by TeX may not faithfully
+reconstruct the original input, but again it doesn't matter as long
+as the files being written are going to be read in as TeX input later,
+because TeX's reading mechanism converts the "^^" notation back into
+the original characters as the lines are read.
+
+
+REDISTRIBUTION OF WRTFILE
+-------------------------
+
+ARCHIVISTS PLEASE TAKE NOTE!
+
+The entire contents of the "wrtfile" distribution package are copyright
+1992 by Cameron Smith, with all rights reserved. Permission to use the
+code, without fee, for any purpose, is hereby given, subject to one
+restriction: the "wrtfile" package itself must not be distributed in
+any other form than that of the "wrtfdist.tex" distribution file.
+
+In other words, you are free to use the unadorned "wrtfile.tex" code
+to create a distribution package file that (when processed by TeX)
+produces a collection of your own files, and you are free to distribute
+such a package file that contains the "wrtfile" code. But you must
+not claim to distribute "wrtfile" itself unless you distribute it in its
+original form (as a "wrtfile" package). You may not, for instance,
+distribute "wrtfile" by collecting the three files "read.me",
+"wrtfile.tex", and "wrtfile.doc" into a .zip or .tar.Z archive file
+and making that file available for FTP or email retrieval.
+
+
+MAINTENANCE: BUG REPORTS AND FIXES
+----------------------------------
+
+The author of wrtfile intends to maintain it, and would be very grateful
+to receive error reports and suggestions for enhancement. His name is
+Cameron Smith. You can contact him via electronic mail as
+
+ cameron@symcom.math.uiuc.edu
+
+(on the Internet) or by telephone at 513-429-2707 (in the USA).
+
+\EOF read.me
+\FILE wrtfile.doc
+% The "wrtfile" code and comments are copyright 1992 by Cameron Smith.
+% Please read the file "read.me" for limitations on use and redistribution.
+%
+% We'll be doing some monkey business with catcodes and other parameters,
+% but we want to keep it local.
+%
+\begingroup
+%
+% Allow @ signs in macro names
+%
+\catcode`\@ 11
+%
+% The \FILE macro gets things going.
+% It scoops up the name of the file to write,
+% reassigns catcodes of special characters,
+% makes sure that the \endlinechar, the \newlinechar, and
+% the macro \empty have their expected meanings,
+% opens the output file, writes a message to the terminal,
+% and starts the reading loop.
+%
+\gdef\FILE #1 {%
+ \@@FILESETUP
+ \let\@@WRITELINE\@@FILEWRITELINE
+ \let\@@ENDFILE\@@FILEEOF
+ \immediate\openout 0 #1\relax
+ \message{\string\FILE\space #1}%
+ \@@READLINE
+}
+%
+% \TYPE does the same things that \FILE does, but it outputs to the
+% terminal (and the log file) rather than to another file. It's
+% handy for putting explanatory passages into the master file.
+% It uses the same reading loop as \FILE, but takes slightly
+% different actions when writing a line and at end-of-file.
+%
+\gdef\TYPE{%
+ \@@FILESETUP
+ \let\@@WRITELINE\@@TYPELINE
+ \let\@@ENDFILE\@@TYPEEOF
+ \@@STARTTYPE
+}
+%
+% This does the actual re-catcoding of characters and other setup
+% that both \FILE and \TYPE need.
+%
+\gdef\@@FILESETUP{%
+ \begingroup
+ \endlinechar`\^^M
+ \def\do##1{\catcode`##1 12 }%
+ \dospecials
+ \catcode`\^^I 12 \catcode`\^^L 12 \catcode`\^^M 12\relax
+ \newlinechar`\^^M
+ \def\empty{}%
+}
+%
+% Henceforth we don't want any character added to the ends of lines.
+% Note: this applies while we are *defining* this code, not executing it!
+% When \@@FILESETUP is executed it sets the \endlinechar to ^^M.
+%
+\endlinechar -1
+%
+% Within these definitions, make ^^M an "other" character,
+% | a macro escape character, and \ an "other" character.
+%
+\catcode `\^^M 12 \relax
+\catcode `\| 0 \relax
+\catcode `\\ 12 |relax
+%
+|gdef|@@STARTTYPE#1^^M{|@@READLINE}
+%
+% The \@@READLINE macro reads up to the next ^^M character
+% (which is guaranteed to be present because \FILE sets \endlinechar)
+% and hands off the line to \@@TESTLINE, after introducing the characters
+% "\EOF" (note: "\" is an ordinary character now!) so that \@@TESTLINE
+% will definitely find those characters.
+%
+% NOTE: Trailing blanks on an input line will be chopped off, and
+% some "non-printable" characters will be written as special
+% sequences involving the "^^" notation. See the "read.me" file
+% distributed with this code for a discussion of these matters.
+%
+|gdef|@@READLINE#1^^M{
+ |@@TESTLINE#1^^M\EOF
+}
+%
+% \@@TESTLINE scans up to the first "\EOF" sequence (\@@READLINE has
+% ensured that we will find one). If nothing (not even ^^M or spaces)
+% precedes "\EOF", then we have found the end-of-file mark, and we call
+% \@@ENDFILE. Otherwise we haven't found the end-of-file mark, so we call
+% \@@WRITELINE to write the line to the output file and then resume the
+% reading loop. If we call \@@WRITELINE, we must be very careful to
+% put back the tokens that were swallowed by \@@TESTLINE, including the
+% "\EOF" sequence (which might not have come from the tokens inserted
+% by \@@READLINE, if "\EOF" occurred in the input line somwhere other than
+% at the left end). Note that spaces are not ignored at the beginnings of
+% lines while this code is executing, so the "\EOF" sequence must be flush
+% at the left end of the line to be recognized as the end-of-file mark.
+% On the other hand, it will be recognized at the left end of the line
+% even if it is followed by alphabetic characters: the "abc" in "\EOFabc"
+% would not keep \@@TESTLINE from recognizing the "\EOF".
+%
+|gdef|@@TESTLINE#1\EOF{
+ |def|@@TEST{#1}
+ |ifx|@@TEST|empty
+ % \EOF occurred at start of line
+ |let|next|@@ENDFILE
+ |else
+ |def|next{|@@WRITELINE#1\EOF}
+ |fi
+ |next
+}
+%
+% \@@WRITELINE writes the line we just read, minus the end-of-line ^^M
+% character and the "\EOF" sequence introduced by \@@READLINE, to the
+% output file.
+%
+|gdef|@@FILEWRITELINE#1^^M\EOF{
+ |immediate|write 0{#1}
+ |@@READLINE
+}
+%
+% \@@TYPELINE does what \@@WRITELINE does, but it writes to the terminal
+% and the log file rather than to another file.
+%
+|gdef|@@TYPELINE#1^^M\EOF{
+ |immediate|write 16{#1}
+ |@@READLINE
+}
+%
+% Note: tokens following an \EOF that begins a line are thrown away!
+% They have been read with funny catcodes, so they aren't likely
+% to be useful anyway. This lets us put a "comment" there, which is
+% useful for flagging which file the \EOF is supposed to be ending.
+%
+|gdef|@@FILEEOF#1^^M\EOF{
+ |immediate|closeout 0|relax
+ |endgroup
+ |message{\EOF}
+}
+%
+% We don't have to close a file if we were writing to the terminal.
+%
+|gdef|@@TYPEEOF#1^^M\EOF{
+ |endgroup
+}
+%
+% Revert to previous values of \endlinechar, catcodes, etc.
+%
+|endgroup
+%
+% End of the file-chopping code.
+%
+\EOF wrtfile.doc
+\FILE wrtfile.tex
+% The "wrtfile" code is copyright 1992 by Cameron Smith.
+% Please read the file "read.me" for limitations on use and redistribution.
+\begingroup
+\catcode`\@ 11
+\gdef\FILE #1 {%
+ \@@FILESETUP
+ \let\@@WRITELINE\@@FILEWRITELINE
+ \let\@@ENDFILE\@@FILEEOF
+ \immediate\openout 0 #1\relax
+ \message{\string\FILE\space #1}%
+ \@@READLINE
+}
+\gdef\TYPE{%
+ \@@FILESETUP
+ \let\@@WRITELINE\@@TYPELINE
+ \let\@@ENDFILE\@@TYPEEOF
+ \@@STARTTYPE
+}
+\gdef\@@FILESETUP{%
+ \begingroup
+ \endlinechar`\^^M
+ \def\do##1{\catcode`##1 12 }%
+ \dospecials
+ \catcode`\^^I 12 \catcode`\^^L 12 \catcode`\^^M 12\relax
+ \newlinechar`\^^M
+ \def\empty{}%
+}
+\endlinechar -1
+\catcode `\^^M 12 \relax
+\catcode `\| 0 \relax
+\catcode `\\ 12 |relax
+|gdef|@@STARTTYPE#1^^M{|@@READLINE}
+|gdef|@@READLINE#1^^M{
+ |@@TESTLINE#1^^M\EOF
+}
+|gdef|@@TESTLINE#1\EOF{
+ |def|@@TEST{#1}
+ |ifx|@@TEST|empty
+ % \EOF occurred at start of line
+ |let|next|@@ENDFILE
+ |else
+ |def|next{|@@WRITELINE#1\EOF}
+ |fi
+ |next
+}
+|gdef|@@FILEWRITELINE#1^^M\EOF{
+ |immediate|write 0{#1}
+ |@@READLINE
+}
+|gdef|@@TYPELINE#1^^M\EOF{
+ |immediate|write 16{#1}
+ |@@READLINE
+}
+|gdef|@@FILEEOF#1^^M\EOF{
+ |immediate|closeout 0|relax
+ |endgroup
+ |message{\EOF}
+}
+|gdef|@@TYPEEOF#1^^M\EOF{
+ |endgroup
+}
+|endgroup
+\EOF wrtfile.tex
+\end
diff --git a/macros/plain/contrib/xii-lat/README.txt b/macros/plain/contrib/xii-lat/README.txt
new file mode 100644
index 0000000000..ee5aa9801a
--- /dev/null
+++ b/macros/plain/contrib/xii-lat/README.txt
@@ -0,0 +1,19 @@
+2017-11-13 First CTAN posting.
+
+The file xii-lat.tex David Carlisle, copyright 2017
+Based on a translation of traditional lyrics by Eunice Burr Couch,
+copyright 1954
+
+
+Licenced under the LPPL (status maintained)
+
+see
+
+https://github.com/davidcarlisle/dpctex
+http://latex-project.org/lppl/
+
+This is a plain TeX file
+pdftex xii-lat.tex
+to produce a (perhaps) surprising typeset document.
+See also xii.tex
+
diff --git a/macros/plain/contrib/xii-lat/xii-lat.tex b/macros/plain/contrib/xii-lat/xii-lat.tex
new file mode 100644
index 0000000000..77f1a36590
--- /dev/null
+++ b/macros/plain/contrib/xii-lat/xii-lat.tex
@@ -0,0 +1,17 @@
+^^5clet~^^5ccatcode~`j0~90 13~`"1~`Y2~77 6jdef ZM1"~`#113jdef
+YZXXM1M2"M2iM1YZRR"ppYZVV"QuYZWW"aliYZ::"erYZ55M1M2"aM2M1Y~`@
+11Z++"jdefY+jif@"YZ99"j@if"bXg"YY"sXpkYYZ33"luYZ <<M1"jedefjx
+"j@if"uR:Y"c5esY"#1YYjxYZ^ ^"iceYZ&&"yeYZ//"SeYZ88"DuYZ;;"s Y
+Z--M1M2"M2M1YZ77"e-tneYZ66"inYZzzM1M2"anM2M1YZQQ"O-tcYZOO"NoY
+Z44"j@if b&YZ__"j.WYZ22"eYZ00"iYZSS"rY+jj", -St-YZee"!YZ!!"uY
+Z=="jparY+jv"s,=Y+j|"-2dXmcYZ``"DY+jw"z2tY"jbf<"-!doj| X2d;-a
+nt50 lsY9Y+j.M1 "o X2d -2f-tsM1 -ma5otS m0 Xsm0t=YZAAM1"P:dXc
+S2m 6 XSpoM19YZ??"8oYZ**"`2cYZ[["E!YZ]]"CoYZ$$"B!YZBB"8a;co3-
+bm5AjvYZCC"-ST2;-SFzocg5ll65BjvYZDD"V5tt-o!S p5ss:-!cl5CjvYZE
+E"V6q!' 5S!zl!ojvDYZFF"/x z2sS2;paS7jvEYZGG"/pt2m -yccno;nat-
+jvjwFYZHH"Qo -!p2ll5m;!lg7jvGYZII"Ovj,as5tljwjvHYZJJ"*j,o-x2-
+-sl!tjwjvIYZKK"Unj| Xbt^n2;6fljwjvJYZLL"?j| -ytmpaXsnt5p;!ls-
+jvjwKY+j,M1"2m d-mo6M1;YPXmSj.W A./c-n!dj.o B.T:Xj.tW C.V5tS_
+D.V- t6j.W E./xtj.W F./pt-m0j.o G. -5Qj.-vo H.Onj.W I.*-m0j.o
+J.-nUj|j.o K.?j|j.o Le+jk")Y("Xtj@if [-^n $SS ]!-hcjjlzs.Yjk4
+
diff --git a/macros/plain/contrib/xii/README.txt b/macros/plain/contrib/xii/README.txt
new file mode 100644
index 0000000000..9698f8c355
--- /dev/null
+++ b/macros/plain/contrib/xii/README.txt
@@ -0,0 +1,15 @@
+2017-11-13 README.txt updated linking to source repository on github
+2013-09-17 README with link to source repository on goolglecode
+1998-12-11 Posted to comp.text.tex and first ctan version
+
+The file xii.tex Copyright David Carlisle
+is licenced under the LPPL (status maintained)
+see
+
+https://github.com/davidcarlisle/dpctex
+http://latex-project.org/lppl/
+
+This is a plain TeX file
+pdftex xii.tex
+to produce a (perhaps) surprising typeset document.
+
diff --git a/macros/plain/contrib/xii/xii.tex b/macros/plain/contrib/xii/xii.tex
new file mode 100644
index 0000000000..dcdeb6597b
--- /dev/null
+++ b/macros/plain/contrib/xii/xii.tex
@@ -0,0 +1,13 @@
+\let~\catcode~`76~`A13~`F1~`j00~`P2jdefA71F~`7113jdefPALLF
+PA''FwPA;;FPAZZFLaLPA//71F71iPAHHFLPAzzFenPASSFthP;A$$FevP
+A@@FfPARR717273F737271P;ADDFRgniPAWW71FPATTFvePA**FstRsamP
+AGGFRruoPAqq71.72.F717271PAYY7172F727171PA??Fi*LmPA&&71jfi
+Fjfi71PAVVFjbigskipRPWGAUU71727374 75,76Fjpar71727375Djifx
+:76jelse&U76jfiPLAKK7172F71l7271PAXX71FVLnOSeL71SLRyadR@oL
+RrhC?yLRurtKFeLPFovPgaTLtReRomL;PABB71 72,73:Fjif.73.jelse
+B73:jfiXF71PU71 72,73:PWs;AMM71F71diPAJJFRdriPAQQFRsreLPAI
+I71Fo71dPA!!FRgiePBt'el@ lTLqdrYmu.Q.,Ke;vz vzLqpip.Q.,tz;
+;Lql.IrsZ.eap,qn.i. i.eLlMaesLdRcna,;!;h htLqm.MRasZ.ilk,%
+s$;z zLqs'.ansZ.Ymi,/sx ;LYegseZRyal,@i;@ TLRlogdLrDsW,@;G
+LcYlaDLbJsW,SWXJW ree @rzchLhzsW,;WERcesInW qt.'oL.Rtrul;e
+doTsW,Wk;Rri@stW aHAHHFndZPpqar.tridgeLinZpe.LtYer.W,:jbye
diff --git a/macros/plain/contrib/youngtab b/macros/plain/contrib/youngtab
new file mode 120000
index 0000000000..b78dd0e859
--- /dev/null
+++ b/macros/plain/contrib/youngtab
@@ -0,0 +1 @@
+../../latex/contrib/youngtab \ No newline at end of file
diff --git a/macros/plain/graphics/README.txt b/macros/plain/graphics/README.txt
new file mode 100644
index 0000000000..fc65eaf69b
--- /dev/null
+++ b/macros/plain/graphics/README.txt
@@ -0,0 +1,107 @@
+
+Graphics code for non-LaTeX users.
+==================================
+
+This directory provides a small wrapper file such that users of
+formats based on plain TeX may make use of some of the parts of the
+standard LaTeX distribution.
+
+These files are *NOT* supported by the LaTeX3 project, and any
+problems with them should *NOT* be reported to the LaTeX bugs system.
+
+Problems should be reported as issues at
+https://github.com/davidcarlisle/dpctex/tree/master/graphics-pln
+
+
+David Carlisle 1995/01/29
+ 1996/11/13
+ 2016/08/17
+ 2017/06/01
+ 2018/01/16
+
+Copyright 1995 1996 2016 2017 2018 David Carlisle
+
+ All the files in this directory may 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 (at your option) any later version.
+
+
+
+This directory contains
+
+README.txt This file.
+
+exmplpic.tex
+ A plain TeX document using LaTeX' `picture mode': a portable
+ means of producing simple diagrams.
+
+exmplgrf.tex
+ A plain TeX document using the LaTeX graphicx package, for
+ rotating and scaling text, and include PostScript and other
+ graphics formats. (This will include the file a.ps available
+ in the LaTeX graphics distribution.)
+
+exmplcol.tex
+ A plain TeX document using the LaTeX color package, for
+ producing colour.
+
+exmplpfg.tex
+ A plain TeX document using the contributed LaTeX psfrag package,
+ for including PostScript documents, while replacing certain text
+ strings with TeX typeset replacements. This uses the example.eps
+ figure from the psfrag 3.0 distribution.
+
+miniltx.tex
+ A small `miniLaTeX' that defines fakes or otherwise hacks
+ sufficient bits of LaTeX internals so that the packages can load.
+
+picture.tex
+ The user interface to the picture environment.
+ \input picture.
+ Normally a plain-style syntax is used, viz
+ \picture(100,100)
+ ....
+ \endpicture
+
+ However if the command \LaTeXbegin is issued, then a LaTeX
+ syntax of
+ \begin{picture}(100,100)
+ ....
+ \end{picture}
+ May be used. this may be prefered if the picture is being copied
+ from a LaTeX document, or if it is produced automatically from
+ a drawing tool such as xfig or texcad.
+
+autopict.sty
+ This is a frozen copy of a file that used to be distributed with
+ LaTeX but is no longer needed in that context, it is basocally
+ the source of LaTeX Picture mode from LaTeX in 2014. The
+ original use for this package was to build a latex format in
+ which some environments such as picture and tabbing were not
+ defined by default, to save space if working with TeX on a
+ machine with 640K memory.
+
+
+graphicx.tex
+ The user interface to the graphicx package.
+ \input graphicx
+ See the documentation in grfguide.ps in the LaTeX graphics
+ distribution.
+ This file sets the driver to be dvips. If you
+ use another driver, edit accordingly.
+
+color.tex
+ The user interface to the color package.
+ \input color
+ See the documentation in grfguide.ps in the LaTeX graphics
+ distribution.
+ This file sets the driver to be dvips. If you
+ use another driver, edit accordingly.
+
+
+psfrag.tex
+ The user interface to the psfrag package.
+ \input psfrag
+ See the documentation in pfgguide.tex in the psfrag distribution,
+ and the example document pfgexmpl.tex included here.
diff --git a/macros/plain/graphics/autopict.sty b/macros/plain/graphics/autopict.sty
new file mode 100644
index 0000000000..fcb52adfc1
--- /dev/null
+++ b/macros/plain/graphics/autopict.sty
@@ -0,0 +1,360 @@
+%%
+%% This is file `autopict.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ltpictur.dtx (with options: `def')
+%%
+%% This is a generated file.
+%%
+%% Copyright 1993 1994 1995 1996
+%% The LaTeX3 Project and any individual authors listed elsewhere
+%% in this file.
+%%
+%% Originally generated from the LaTeX sources by docstrip, but
+%% the relevant guards are no longer in the sources as the autoload
+%% variant of LaTeX is no longer supported (or needed).
+
+%%% This file may be distributed under the terms of the LPPL, see
+%%% README.txt for details.
+
+%%% From File: ltpictur.dtx
+\ProvidesFile{autopict.sty}
+ [2001/08/27 v1.1k Picture mode autoload file]
+\long\gdef\picture#1{\pictur@#1}
+\gdef\pictur@(#1){%
+ \@ifnextchar({\@picture(#1)}{\@picture(#1)(0,0)}}
+\gdef\@picture(#1,#2)(#3,#4){%
+ \@picht#2\unitlength
+ \setbox\@picbox\hb@xt@#1\unitlength\bgroup
+ \hskip -#3\unitlength
+ \lower #4\unitlength\hbox\bgroup
+ \ignorespaces}
+\gdef\endpicture{%
+ \egroup\hss\egroup
+ \ht\@picbox\@picht\dp\@picbox\z@
+ \mbox{\box\@picbox}}
+\long\gdef\put(#1,#2)#3{%
+ \@killglue\raise#2\unitlength
+ \hb@xt@\z@{\kern#1\unitlength #3\hss}%
+ \ignorespaces}
+\gdef\multiput(#1,#2)#3{%
+ \@xdim #1\unitlength
+ \@ydim #2\unitlength
+ \@multiput(}
+\long\gdef\@multiput(#1,#2)#3#4{%
+ \@killglue\@multicnt #3\relax
+ \@whilenum \@multicnt >\z@\do
+ {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}%
+ \advance\@multicnt\m@ne
+ \advance\@xdim#1\unitlength\advance\@ydim#2\unitlength}%
+ \ignorespaces}
+\gdef\@killglue{\unskip\@whiledim \lastskip >\z@\do{\unskip}}
+\gdef\thinlines{\let\@linefnt\tenln \let\@circlefnt\tencirc
+ \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth}
+\gdef\thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw
+ \@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth}
+\gdef\linethickness#1{\@wholewidth #1\relax \@halfwidth .5\@wholewidth}
+\gdef\shortstack{\@ifnextchar[\@shortstack{\@shortstack[c]}}
+\gdef\@shortstack[#1]{%
+ \leavevmode
+ \vbox\bgroup
+ \baselineskip-\p@\lineskip 3\p@
+ \let\mb@l\hss\let\mb@r\hss
+ \expandafter\let\csname mb@#1\endcsname\relax
+ \let\\\@stackcr
+ \@ishortstack}
+\gdef\@ishortstack#1{\ialign{\mb@l {##}\unskip\mb@r\cr #1\crcr}\egroup}
+\gdef\@stackcr{\@ifstar\@ixstackcr\@ixstackcr}
+\gdef\@ixstackcr{\@ifnextchar[\@istackcr{\cr\ignorespaces}}
+\gdef\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces}
+\newif\if@negarg
+\gdef\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
+ \@linelen #3\unitlength
+ \ifdim\@linelen<\z@\@badlinearg\else
+ \ifnum\@xarg =\z@ \@vline
+ \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi
+ \fi
+ \fi}
+\gdef\@sline{%
+ \ifnum\@xarg<\z@ \@negargtrue \@xarg -\@xarg \@yyarg -\@yarg
+ \else \@negargfalse \@yyarg \@yarg \fi
+\ifnum \@yyarg >\z@ \@tempcnta\@yyarg \else \@tempcnta -\@yyarg \fi
+\ifnum\@tempcnta>6 \@badlinearg\@tempcnta\z@ \fi
+\ifnum\@xarg>6 \@badlinearg\@xarg \@ne \fi
+\setbox\@linechar\hbox{\@linefnt\@getlinechar(\@xarg,\@yyarg)}%
+\ifdim\wd\@linechar=\z@
+ \setbox\@linechar\hbox{.}%
+ \@badlinearg
+\fi
+\ifnum \@yarg >\z@ \let\@upordown\raise \@clnht\z@
+ \else\let\@upordown\lower \@clnht \ht\@linechar\fi
+\@clnwd \wd\@linechar
+\if@negarg
+ \hskip -\wd\@linechar \def\reserved@a{\hskip -2\wd\@linechar}%
+\else
+ \let\reserved@a\relax
+\fi
+\@whiledim \@clnwd <\@linelen \do
+ {\@upordown\@clnht\copy\@linechar
+ \reserved@a
+ \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
+ \ifdim \@linelen = \z@
+ \else
+ \@picture@warn
+ \fi
+ \else\@upordown\@clnht\copy\@linechar\fi}
+\gdef\@hline{\ifnum \@xarg <\z@ \hskip -\@linelen \fi
+\vrule \@height \@halfwidth \@depth \@halfwidth \@width \@linelen
+\ifnum \@xarg <\z@ \hskip -\@linelen \fi}
+\gdef\@getlinechar(#1,#2){\@tempcnta#1\relax\multiply\@tempcnta 8%
+ \advance\@tempcnta -9\ifnum #2>\z@ \advance\@tempcnta #2\relax\else
+ \advance\@tempcnta -#2\relax\advance\@tempcnta 64 \fi
+ \char\@tempcnta}
+\gdef\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
+ \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi
+ \ifnum\@tempcnta<5\relax
+ \@linelen #3\unitlength
+ \ifdim\@linelen<\z@\@badlinearg\else
+ \ifnum\@xarg =\z@ \@vvector
+ \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi
+ \fi
+ \fi
+ \else\@badlinearg\fi}
+\gdef\@hvector{\@hline\hb@xt@\z@{\@linefnt
+ \ifnum \@xarg <\z@ \@getlarrow(1,0)\hss\else
+ \hss\@getrarrow(1,0)\fi}}
+\gdef\@vvector{\ifnum \@yarg <\z@ \@downvector \else \@upvector \fi}
+\gdef\@svector{\@sline
+ \@tempcnta\@yarg \ifnum\@tempcnta <\z@ \@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}
+\gdef\@getlarrow(#1,#2){\ifnum #2=\z@ \@tempcnta 27 % '33
+ \else
+ \@tempcnta #1\relax\multiply\@tempcnta \sixt@@n
+ \advance\@tempcnta -9 \@tempcntb #2\relax\multiply\@tempcntb \tw@
+ \ifnum \@tempcntb >\z@ \advance\@tempcnta \@tempcntb
+ \else\advance\@tempcnta -\@tempcntb\advance\@tempcnta 64
+ \fi\fi\char\@tempcnta}
+\gdef\@getrarrow(#1,#2){\@tempcntb #2\relax
+\ifnum\@tempcntb <\z@ \@tempcntb -\@tempcntb\relax\fi
+\ifcase \@tempcntb\relax \@tempcnta 45 % '55
+\or
+\ifnum #1<\thr@@ \@tempcnta #1\relax\multiply\@tempcnta
+24\advance\@tempcnta -6 \else \ifnum #1=\thr@@ \@tempcnta 49
+\else\@tempcnta 58 \fi\fi\or
+\ifnum #1<\thr@@ \@tempcnta=#1\relax\multiply\@tempcnta
+24\advance\@tempcnta -\thr@@ \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<\z@ \advance\@tempcnta 64 \fi
+\char\@tempcnta}
+\gdef\@vline{\ifnum \@yarg <\z@ \@downline \else \@upline\fi}
+\gdef\@upline{%
+ \hb@xt@\z@{\hskip -\@halfwidth \vrule \@width \@wholewidth
+ \@height \@linelen \@depth \z@\hss}}
+\gdef\@downline{%
+ \hb@xt@\z@{\hskip -\@halfwidth \vrule \@width \@wholewidth
+ \@height \z@ \@depth \@linelen \hss}}
+\gdef\@upvector{\@upline\setbox\@tempboxa\hbox{\@linefnt\char 54}% % '66
+ \raise \@linelen \hb@xt@\z@{\lower \ht\@tempboxa\box\@tempboxa\hss}}
+\gdef\@downvector{\@downline\lower \@linelen
+ \hb@xt@\z@{\@linefnt\char 63 % '77
+ \hss}}
+\gdef\dashbox#1(#2,#3){\leavevmode\hb@xt@\z@{\baselineskip \z@skip
+\lineskip \z@skip
+\@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 \thr@@
+\fi
+\setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth
+\@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@
+\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
+\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@
+\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 \thr@@
+\fi
+\setbox\@dashbox\hbox{\vrule \@width \@wholewidth
+\@height #1\unitlength}\@tempcnta\z@
+\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt
+\do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }%
+\vskip\@dashdim}}\@tempcnta\z@
+\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt
+\do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }%
+\vskip\@dashdim}}}\@makepicbox(#2,#3)}
+\newif\if@ovt
+\newif\if@ovb
+\newif\if@ovl
+\newif\if@ovr
+\gdef\@getcirc#1{\@tempdima #1\relax \advance\@tempdima 2\p@
+ \@tempcnta\@tempdima
+ \@tempdima 4\p@ \divide\@tempcnta\@tempdima
+ \ifnum \@tempcnta >10\relax
+ \@picture@warn
+ \@tempcnta 10\relax
+ \fi
+ \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne
+ \else \@picture@warn \fi
+ \multiply\@tempcnta 4\relax
+ \setbox \@tempboxa \hbox{\@circlefnt
+ \char \@tempcnta}\@tempdima \wd \@tempboxa}
+\def\@picture@warn{\@latex@warning{%
+ \string\oval, \string\circle, or \string\line\space
+ size unavailable}}
+\gdef\@put#1#2#3{\raise #2\hb@xt@\z@{\hskip #1#3\hss}}
+\gdef\oval(#1,#2){\@ifnextchar[{\@oval(#1,#2)}{\@oval(#1,#2)[]}}
+\gdef\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
+ \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
+ \@tfor\reserved@a :=#3\do{\csname @ov\reserved@a false\endcsname}%
+ \@ovxx
+ #1\unitlength \@ovyy #2\unitlength
+ \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi
+ \advance \@tempdimb -2\p@
+ \@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}
+\gdef\@ovvert#1#2{\vbox to\@ovyy{%
+ \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #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 #2\relax
+ \hbox{\char \@tempcntb}%
+ \else \kern \@ovdy \kern \@ovro \fi}}
+\gdef\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro
+ \if@ovr \else \kern \@ovdx \fi
+ \leaders \hrule \@height \@wholewidth \hfil
+ \if@ovl \else \kern \@ovdx \fi
+ \kern \@ovri}}
+\gdef\circle{\@inmatherr\circle\@ifstar\@dot\@circle}
+\gdef\@circle#1{%
+ \begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength
+ \ifdim \@tempdimb >15.5\p@ \@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}
+\gdef\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}}
+\gdef\@circ#1#2{\@tempdima #1\relax \advance\@tempdima .5\p@
+ \@tempcnta\@tempdima \@tempdima \p@
+ \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}
+\ifx\qbeziermax\@undefined
+\gdef\qbeziermax{500}
+\fi
+\newcommand\qbezier[2][0]{\bezier{#1}#2}
+\gdef\bezier#1)#2(#3)#4({\@bezier#1)(#3)(}
+\gdef\@bezier#1(#2,#3)(#4,#5)(#6,#7){%
+ \ifnum #1=\z@
+ \@ovxx #4\unitlength
+ \advance\@ovxx -#2\unitlength
+ \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi
+ \@ovdx #6\unitlength
+ \advance\@ovdx -#4\unitlength
+ \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi
+ \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi
+ \@ovyy #5\unitlength
+ \advance\@ovyy -#3\unitlength
+ \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi
+ \@ovdy #7\unitlength
+ \advance\@ovdy -#5\unitlength
+ \ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi
+ \ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi
+ \@multicnt
+ \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi
+ \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx
+ \ifnum \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax \fi
+ \else \@multicnt#1\relax \fi
+ \@tempcnta\@multicnt \advance\@tempcnta\@ne
+ \@ovdx #4\unitlength \advance\@ovdx -#2\unitlength
+ \multiply\@ovdx \tw@
+ \@ovxx #6\unitlength \advance\@ovxx -#2\unitlength
+ \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt
+ \@ovdy #5\unitlength \advance\@ovdy -#3\unitlength
+ \multiply\@ovdy \tw@
+ \@ovyy #7\unitlength \advance\@ovyy -#3\unitlength
+ \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt
+ \setbox\@tempboxa\hbox{%
+ \hskip -\@halfwidth
+ \vrule \@height\@halfwidth
+ \@depth \@halfwidth
+ \@width \@wholewidth}%
+ \put(#2,#3){%
+ \count@\z@
+ \@whilenum{\count@<\@tempcnta}\do
+ {\@xdim\count@\@ovxx
+ \advance\@xdim\@ovdx
+ \divide\@xdim\@multicnt
+ \multiply\@xdim\count@
+ \@ydim\count@\@ovyy
+ \advance\@ydim\@ovdy
+ \divide\@ydim\@multicnt
+ \multiply\@ydim\count@
+ \raise \@ydim
+ \hb@xt@\z@{\kern\@xdim
+ \unhcopy\@tempboxa\hss}%
+ \advance\count@\@ne}}}
+\endinput
+%%
+%% End of file `autopict.sty'.
diff --git a/macros/plain/graphics/color.tex b/macros/plain/graphics/color.tex
new file mode 100644
index 0000000000..fb8c1284ff
--- /dev/null
+++ b/macros/plain/graphics/color.tex
@@ -0,0 +1,9 @@
+% Plain TeX interface to color package.
+% David Carlisle
+
+\input miniltx
+
+\def\Gin@driver{dvips.def}
+\input color.sty
+
+\resetatcatcode
diff --git a/macros/plain/graphics/exmplcol.tex b/macros/plain/graphics/exmplcol.tex
new file mode 100644
index 0000000000..0442ed9a40
--- /dev/null
+++ b/macros/plain/graphics/exmplcol.tex
@@ -0,0 +1,6 @@
+
+\input color
+
+a \textcolor{red}{bbb} \colorbox{green}{one two}
+
+\bye
diff --git a/macros/plain/graphics/exmplgrf.tex b/macros/plain/graphics/exmplgrf.tex
new file mode 100644
index 0000000000..d1a51b8ef1
--- /dev/null
+++ b/macros/plain/graphics/exmplgrf.tex
@@ -0,0 +1,10 @@
+
+\input graphicx
+
+\includegraphics{a}
+
+\includegraphics[scale=2]{a}
+
+hello\rotatebox[origin=c]{180}{hello}hello
+
+\bye
diff --git a/macros/plain/graphics/exmplpfg.tex b/macros/plain/graphics/exmplpfg.tex
new file mode 100644
index 0000000000..0026cd0ee6
--- /dev/null
+++ b/macros/plain/graphics/exmplpfg.tex
@@ -0,0 +1,17 @@
+
+\input psfrag
+
+First without psfrag:
+
+ \includegraphics[width=3.5in]{example.eps}
+
+and now with:
+
+ \psfragscanon
+ \psfrag{p1}[][l]{$\ast$}
+ \psfrag{p2}[][l]{$\ast$}
+ \psfrag{p3}{$\cos(t)$}
+ \includegraphics[width=3.5in]{example.eps}
+
+
+\bye
diff --git a/macros/plain/graphics/exmplpic.tex b/macros/plain/graphics/exmplpic.tex
new file mode 100644
index 0000000000..cb8852123b
--- /dev/null
+++ b/macros/plain/graphics/exmplpic.tex
@@ -0,0 +1,15 @@
+\input picture
+
+\picture(100,100)
+\put(0,0){\line(1,1){50}}
+\endpicture
+
+\LaTeXbegin
+
+\begin{picture}(40,40)
+\put(0,0){\vector(1,1){40}}
+\multiput(0,5)(10,10){4}{a}
+\end{picture}
+
+\bye
+
diff --git a/macros/plain/graphics/graphicx.tex b/macros/plain/graphics/graphicx.tex
new file mode 100644
index 0000000000..cbe6535769
--- /dev/null
+++ b/macros/plain/graphics/graphicx.tex
@@ -0,0 +1,18 @@
+% Plain TeX interface to graphicx package.
+% David Carlisle
+
+
+\input miniltx
+
+% ttfamily used in draft mode to show filenames.
+\ifx\ttfamily\@undefined
+ \let\ttfamily\tt
+\fi
+
+\def\Gin@driver{dvips.def}
+\input graphicx.sty
+
+
+\resetatcatcode
+
+
diff --git a/macros/plain/graphics/miniltx.tex b/macros/plain/graphics/miniltx.tex
new file mode 100644
index 0000000000..7290959d04
--- /dev/null
+++ b/macros/plain/graphics/miniltx.tex
@@ -0,0 +1,511 @@
+%%%
+%%%
+%%% Parts of LaTeX: Slightly changed/simplified in places.
+%%% Changes
+%%% Copyright 1996-2017 David Carlisle LaTeX3 Project
+%%% Original Code
+%%% Copyright 1993-1996 LaTeX3 Project and original authors
+%%%
+%%% Problems relating to this fileshould not be sent to the LaTeX bugs address,
+%%% or any other LaTeX related support address.
+%%%
+%%% Problems should be reported as issues at
+%%% https://github.com/davidcarlisle/dpctex/tree/master/graphics-pln
+%%%
+%%%
+%%% This file may be distributed under the terms of the LPPL, see
+%%% README.txt for details.
+
+% 1996/01/29 initial version
+% 1996/05/09 a few missing commands added
+% 1996/11/21 fixed @ catcode handling
+% 2010/01/02 import LaTeX's current \filename@parse [KB/DC]
+% (http://sourceforge.net/projects/asymptote/forums/forum/409349/topic/3405573)
+% 2010/01/07 import was incomplete [KB]
+% 2010/02/03 accept *-form of \ProcessOptions [KB/DL]
+% 2016/08/17 fix catcode @ handling (again), document github address [DC]
+% 2017/06/01 assorted updates to cover updated latex drivers
+
+\edef\resetatcatcode{\catcode`\noexpand\@\the\catcode`\@\relax}
+
+\def\makeatletter{\catcode`\@11\relax}
+\def\makeatother{\catcode`\@12\relax}
+\makeatletter
+
+
+% 2016/08/17 move after \makeatletter
+% so \input graphicx \input color works.
+\ifx\miniltx\undefined\else\endinput\fi
+\let\miniltx\box
+
+\def\@makeother#1{\catcode`#1=12\relax}
+
+
+\def\@ifnextchar#1#2#3{%
+ \let\reserved@d=#1%
+ \def\reserved@a{#2}\def\reserved@b{#3}%
+ \futurelet\@let@token\@ifnch}
+\def\@ifnch{%
+ \ifx\@let@token\@sptoken
+ \let\reserved@c\@xifnch
+ \else
+ \ifx\@let@token\reserved@d
+ \let\reserved@c\reserved@a
+ \else
+ \let\reserved@c\reserved@b
+ \fi
+ \fi
+ \reserved@c}
+\begingroup
+\def\:{\global\let\@sptoken= } \: % this makes \@sptoken a space token
+\def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@let@token\@ifnch}
+\endgroup
+
+
+
+\def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
+\long\def\@dblarg#1{\@ifnextchar[{#1}{\@xdblarg{#1}}}
+\long\def\@xdblarg#1#2{#1[{#2}]{#2}}
+
+\long\def \@gobble #1{}
+\long\def \@gobbletwo #1#2{}
+\long\def \@gobblefour #1#2#3#4{}
+\long\def\@firstofone#1{#1}
+\long\def\@firstoftwo#1#2{#1}
+\long\def\@secondoftwo#1#2{#2}
+
+\def\NeedsTeXFormat#1{\@ifnextchar[\@needsf@rmat\relax}
+\def\@needsf@rmat[#1]{}
+\def\ProvidesPackage#1{\@ifnextchar[%
+ {\@pr@videpackage{#1}}{\@pr@videpackage#1[]}}
+\def\@pr@videpackage#1[#2]{\wlog{#1: #2}}
+\let\ProvidesFile\ProvidesPackage
+\def\PackageInfo#1#2{{%
+ \newlinechar`\^^J\def\MessageBreak{^^J#1: }%
+ \wlog{#1: #2}}}
+
+\let\DeclareOption\@gobbletwo
+\def\ProcessOptions{\@ifstar\relax\relax}
+
+\def\RequirePackage{%
+ \@fileswithoptions\@pkgextension}
+\def\@fileswithoptions#1{%
+ \@ifnextchar[%]
+ {\@fileswith@ptions#1}%
+ {\@fileswith@ptions#1[]}}
+\def\@fileswith@ptions#1[#2]#3{%
+ \@ifnextchar[%]
+ {\@fileswith@pti@ns#1[#2]#3}%
+ {\@fileswith@pti@ns#1[#2]#3[]}}
+
+\def\@fileswith@pti@ns#1[#2]#3[#4]{%
+ \def\reserved@b##1,{%
+ \ifx\@nil##1\relax\else
+ \ifx\relax##1\relax\else
+ \noexpand\@onefilewithoptions##1[#2][#4]\noexpand\@pkgextension
+ \fi
+ \expandafter\reserved@b
+ \fi}%
+ \edef\reserved@a{\zap@space#3 \@empty}%
+ \edef\reserved@a{\expandafter\reserved@b\reserved@a,\@nil,}%
+ \reserved@a}
+
+\def\zap@space#1 #2{%
+ #1%
+ \ifx#2\@empty\else\expandafter\zap@space\fi
+ #2}
+
+\let\@empty\empty
+\def\@pkgextension{sty}
+
+\def\@onefilewithoptions#1[#2][#3]#4{%
+ \input #1.#4 }
+
+
+
+\def\typein{%
+ \let\@typein\relax
+ \@testopt\@xtypein\@typein}
+\def\@xtypein[#1]#2{%
+ \message{#2}%
+ \advance\endlinechar\@M
+ \read\@inputcheck to#1%
+ \advance\endlinechar-\@M
+ \@typein}
+\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}
+\def\@carcube#1#2#3#4\@nil{#1#2#3}
+\def\@preamblecmds{}
+
+\def\@star@or@long#1{%
+ \@ifstar
+ {\let\l@ngrel@x\relax#1}%
+ {\let\l@ngrel@x\long#1}}
+
+\let\l@ngrel@x\relax
+\def\newcommand{\@star@or@long\new@command}
+\def\new@command#1{%
+ \@testopt{\@newcommand#1}0}
+\def\@newcommand#1[#2]{%
+ \@ifnextchar [{\@xargdef#1[#2]}%
+ {\@argdef#1[#2]}}
+\long\def\@argdef#1[#2]#3{%
+ \@ifdefinable #1{\@yargdef#1\@ne{#2}{#3}}}
+\long\def\@xargdef#1[#2][#3]#4{%
+ \@ifdefinable#1{%
+ \expandafter\def\expandafter#1\expandafter{%
+ \expandafter
+ \@protected@testopt
+ \expandafter
+ #1%
+ \csname\string#1\expandafter\endcsname
+ {#3}}%
+ \expandafter\@yargdef
+ \csname\string#1\endcsname
+ \tw@
+ {#2}%
+ {#4}}}
+\def\@testopt#1#2{%
+ \@ifnextchar[{#1}{#1[#2]}}
+\def\@protected@testopt#1{%%
+ \ifx\protect\@typeset@protect
+ \expandafter\@testopt
+ \else
+ \@x@protect#1%
+ \fi}
+\long\def\@yargdef#1#2#3{%
+ \@tempcnta#3\relax
+ \advance \@tempcnta \@ne
+ \let\@hash@\relax
+ \edef\reserved@a{\ifx#2\tw@ [\@hash@1]\fi}%
+ \@tempcntb #2%
+ \@whilenum\@tempcntb <\@tempcnta
+ \do{%
+ \edef\reserved@a{\reserved@a\@hash@\the\@tempcntb}%
+ \advance\@tempcntb \@ne}%
+ \let\@hash@##%
+ \l@ngrel@x\expandafter\def\expandafter#1\reserved@a}
+\long\def\@reargdef#1[#2]#3{%
+ \@yargdef#1\@ne{#2}{#3}}
+\def\renewcommand{\@star@or@long\renew@command}
+\def\renew@command#1{%
+ {\escapechar\m@ne\xdef\@gtempa{{\string#1}}}%
+ \expandafter\@ifundefined\@gtempa
+ {\@latex@error{\string#1 undefined}\@ehc}%
+ {}%
+ \let\@ifdefinable\@rc@ifdefinable
+ \new@command#1}
+\long\def\@ifdefinable #1#2{%
+ \edef\reserved@a{\expandafter\@gobble\string #1}%
+ \@ifundefined\reserved@a
+ {\edef\reserved@b{\expandafter\@carcube \reserved@a xxx\@nil}%
+ \ifx \reserved@b\@qend \@notdefinable\else
+ \ifx \reserved@a\@qrelax \@notdefinable\else
+ #2%
+ \fi
+ \fi}%
+ \@notdefinable}
+\let\@@ifdefinable\@ifdefinable
+\long\def\@rc@ifdefinable#1#2{%
+ \let\@ifdefinable\@@ifdefinable
+ #2}
+\def\newenvironment{\@star@or@long\new@environment}
+\def\new@environment#1{%
+ \@testopt{\@newenva#1}0}
+\def\@newenva#1[#2]{%
+ \@ifnextchar [{\@newenvb#1[#2]}{\@newenv{#1}{[#2]}}}
+\def\@newenvb#1[#2][#3]{\@newenv{#1}{[#2][#3]}}
+\def\renewenvironment{\@star@or@long\renew@environment}
+\def\renew@environment#1{%
+ \@ifundefined{#1}%
+ {\@latex@error{Environment #1 undefined}\@ehc
+ }{}%
+ \expandafter\let\csname#1\endcsname\relax
+ \expandafter\let\csname end#1\endcsname\relax
+ \new@environment{#1}}
+\long\def\@newenv#1#2#3#4{%
+ \@ifundefined{#1}%
+ {\expandafter\let\csname#1\expandafter\endcsname
+ \csname end#1\endcsname}%
+ \relax
+ \expandafter\new@command
+ \csname #1\endcsname#2{#3}%
+ \l@ngrel@x\expandafter\def\csname end#1\endcsname{#4}}
+
+\def\providecommand{\@star@or@long\provide@command}
+\def\provide@command#1{%
+ {\escapechar\m@ne\xdef\@gtempa{{\string#1}}}%
+ \expandafter\@ifundefined\@gtempa
+ {\def\reserved@a{\new@command#1}}%
+ {\def\reserved@a{\renew@command\reserved@a}}%
+ \reserved@a}%
+
+\def\@ifundefined#1{%
+ \expandafter\ifx\csname#1\endcsname\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\chardef\@xxxii=32
+\mathchardef\@Mi=10001
+\mathchardef\@Mii=10002
+\mathchardef\@Miii=10003
+\mathchardef\@Miv=10004
+
+\newcount\@tempcnta
+\newcount\@tempcntb
+\newif\if@tempswa\@tempswatrue
+\newdimen\@tempdima
+\newdimen\@tempdimb
+\newdimen\@tempdimc
+\newbox\@tempboxa
+\newskip\@tempskipa
+\newskip\@tempskipb
+\newtoks\@temptokena
+
+\long\def\@whilenum#1\do #2{\ifnum #1\relax #2\relax\@iwhilenum{#1\relax
+ #2\relax}\fi}
+\long\def\@iwhilenum#1{\ifnum #1\expandafter\@iwhilenum
+ \else\expandafter\@gobble\fi{#1}}
+\long\def\@whiledim#1\do #2{\ifdim #1\relax#2\@iwhiledim{#1\relax#2}\fi}
+\long\def\@iwhiledim#1{\ifdim #1\expandafter\@iwhiledim
+ \else\expandafter\@gobble\fi{#1}}
+\long\def\@whilesw#1\fi#2{#1#2\@iwhilesw{#1#2}\fi\fi}
+\long\def\@iwhilesw#1\fi{#1\expandafter\@iwhilesw
+ \else\@gobbletwo\fi{#1}\fi}
+\def\@nnil{\@nil}
+\def\@empty{}
+\def\@fornoop#1\@@#2#3{}
+\long\def\@for#1:=#2\do#3{%
+ \expandafter\def\expandafter\@fortmp\expandafter{#2}%
+ \ifx\@fortmp\@empty \else
+ \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}
+\long\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}
+\long\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \expandafter\@fornoop \else
+ #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}}
+\def\@tfor#1:={\@tf@r#1 }
+\long\def\@tf@r#1#2\do#3{\def\@fortmp{#2}\ifx\@fortmp\space\else
+ \@tforloop#2\@nil\@nil\@@#1{#3}\fi}
+\long\def\@tforloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \expandafter\@fornoop \else
+ #4\relax\expandafter\@tforloop\fi#2\@@#3{#4}}
+\long\def\@break@tfor#1\@@#2#3{\fi\fi}
+\def\@removeelement#1#2#3{%
+ \def\reserved@a##1,#1,##2\reserved@a{##1,##2\reserved@b}%
+ \def\reserved@b##1,\reserved@b##2\reserved@b{%
+ \ifx,##1\@empty\else##1\fi}%
+ \edef#3{%
+ \expandafter\reserved@b\reserved@a,#2,\reserved@b,#1,\reserved@a}}
+
+\let\ExecuteOptions\@gobble
+
+\def\on@line{ on input line \the\inputlineno}
+\ifx\@ehc\@undefined\def\@ehc{}\fi
+
+\def\PackageError#1#2#3{{%
+ \newlinechar`\^^J\def\MessageBreak{^^J\space\space#1: }%
+ \errhelp{#3}\errmessage{#1: #2}}}
+\def\@latex@error#1#2{\bgroup%
+ \newlinechar`\^^J\def\MessageBreak{^^J\space\space#1: }%
+ \edef\reserved@a{\egroup\errhelp{#2}\errmessage{#1}}%
+ \reserved@a}
+
+
+\bgroup\uccode`\!`\%\uppercase{\egroup
+\def\@percentchar{!}}
+
+% protect against loops in formats other than plain. 1999/04/27
+\ifx\@@input\@undefined
+ \let\@@input\input
+\fi
+
+\def\input{\@ifnextchar\bgroup\@iinput\@@input}
+\def\@iinput#1{\@@input#1 }
+
+\ifx\filename@parse\@undefined
+ \def\reserved@a{./}\ifx\@currdir\reserved@a
+ \wlog{^^JDefining UNIX/DOS style filename parser.^^J}
+ \def\filename@parse#1{%
+ \let\filename@area\@empty
+ \expandafter\filename@path#1/\\}
+ \def\filename@path#1/#2\\{%
+ \ifx\\#2\\%
+ \def\reserved@a{\filename@simple#1.\\}%
+ \else
+ \edef\filename@area{\filename@area#1/}%
+ \def\reserved@a{\filename@path#2\\}%
+ \fi
+ \reserved@a}
+ \else\def\reserved@a{[]}\ifx\@currdir\reserved@a
+ \wlog{^^JDefining VMS style filename parser.^^J}
+ \def\filename@parse#1{%
+ \let\filename@area\@empty
+ \expandafter\filename@path#1]\\}
+ \def\filename@path#1]#2\\{%
+ \ifx\\#2\\%
+ \def\reserved@a{\filename@simple#1.\\}%
+ \else
+ \edef\filename@area{\filename@area#1]}%
+ \def\reserved@a{\filename@path#2\\}%
+ \fi
+ \reserved@a}
+ \else\def\reserved@a{:}\ifx\@currdir\reserved@a
+ \wlog{^^JDefining Mac style filename parser.^^J}
+ \def\filename@parse#1{%
+ \let\filename@area\@empty
+ \expandafter\filename@path#1:\\}
+ \def\filename@path#1:#2\\{%
+ \ifx\\#2\\%
+ \def\reserved@a{\filename@simple#1.\\}%
+ \else
+ \edef\filename@area{\filename@area#1:}%
+ \def\reserved@a{\filename@path#2\\}%
+ \fi
+ \reserved@a}
+ \else
+ \wlog{^^JDefining generic filename parser.^^J}
+ \def\filename@parse#1{%
+ \let\filename@area\@empty
+ \expandafter\filename@simple#1.\\}
+ \fi\fi\fi
+ \def\filename@simple#1.#2\\{%
+ \ifx\\#2\\%
+ \let\filename@ext\relax
+ \else
+ \edef\filename@ext{\filename@dot#2\\}%
+ \fi
+ \edef\filename@base{#1}}
+ \def\filename@dot#1.\\{#1}
+\else
+ \wlog{^^J^^J%
+ \noexpand\filename@parse was defined in texsys.cfg:^^J%
+ \expandafter\strip@prefix\meaning\filename@parse.^^J%
+ }
+\fi
+
+\long\def \IfFileExists#1#2#3{%
+ \openin\@inputcheck#1 %
+ \ifeof\@inputcheck
+ \ifx\input@path\@undefined
+ \def\reserved@a{#3}%
+ \else
+ \def\reserved@a{\@iffileonpath{#1}{#2}{#3}}%
+ \fi
+ \else
+ \closein\@inputcheck
+ \edef\@filef@und{#1 }%
+ \def\reserved@a{#2}%
+ \fi
+ \reserved@a}
+\long\def\@iffileonpath#1{%
+ \let\reserved@a\@secondoftwo
+ \expandafter\@tfor\expandafter\reserved@b\expandafter
+ :\expandafter=\input@path\do{%
+ \openin\@inputcheck\reserved@b#1 %
+ \ifeof\@inputcheck\else
+ \edef\@filef@und{\reserved@b#1 }%
+ \let\reserved@a\@firstoftwo%
+ \closein\@inputcheck
+ \@break@tfor
+ \fi}%
+ \reserved@a}
+\long\def \InputIfFileExists#1#2{%
+ \IfFileExists{#1}%
+ {#2\@addtofilelist{#1}\@@input \@filef@und}}
+
+\chardef\@inputcheck0
+
+\let\@addtofilelist \@gobble
+
+
+\def\@defaultunits{\afterassignment\remove@to@nnil}
+\def\remove@to@nnil#1\@nnil{}
+
+\newdimen\leftmarginv
+\newdimen\leftmarginvi
+
+\newdimen\@ovxx
+\newdimen\@ovyy
+\newdimen\@ovdx
+\newdimen\@ovdy
+\newdimen\@ovro
+\newdimen\@ovri
+\newdimen\@xdim
+\newdimen\@ydim
+\newdimen\@linelen
+\newdimen\@dashdim
+
+
+\long\def\mbox#1{\leavevmode\hbox{#1}}
+
+
+\let\DeclareRobustCommand\newcommand
+\let\@onlypreamble\@gobble
+
+
+\def\AtBeginDocument#1{#1}
+\let\protect\relax
+
+
+\newdimen\fboxsep
+\newdimen\fboxrule
+
+\fboxsep = 3pt
+\fboxrule = .4pt
+
+\def\@height{height} \def\@depth{depth} \def\@width{width}
+\def\@minus{minus}
+\def\@plus{plus}
+\def\hb@xt@{\hbox to}
+
+
+\long\def\@begin@tempboxa#1#2{%
+ \begingroup
+ \setbox\@tempboxa#1{\color@begingroup#2\color@endgroup}%
+ \def\width{\wd\@tempboxa}%
+ \def\height{\ht\@tempboxa}%
+ \def\depth{\dp\@tempboxa}%
+ \let\totalheight\@ovri
+ \totalheight\height
+ \advance\totalheight\depth}
+\let\@end@tempboxa\endgroup
+
+\let\set@color\relax
+\let\color@begingroup\relax
+\let\color@endgroup\relax
+\let\color@setgroup\relax
+\let\normalcolor\relax
+\let\color@hbox\relax
+\let\color@vbox\relax
+\let\color@endbox\relax
+
+% 1996/05/09 \setlength and \strip@pt needed for some
+% \includegraphics options (Thierry Bouche)
+
+\def\setlength#1#2{#1#2\relax}
+
+\begingroup
+ \catcode`P=12
+ \catcode`T=12
+ \lowercase{
+ \def\x{\def\rem@pt##1.##2PT{##1\ifnum##2>\z@.##2\fi}}}
+ \expandafter\endgroup\x
+\def\strip@pt{\expandafter\rem@pt\the}
+
+% 1996/11/13 \AtBeginDvi used in driver files for including headers.
+% \@input added.
+
+
+\def\AtBeginDvi#1{#1}
+
+\def\@input#1{%
+ \IfFileExists{#1}{\@@input\@filef@und}{\message{No file #1.}}}
+
+% 1996/11/21
+\def\@warning{\immediate\write16}
diff --git a/macros/plain/graphics/picture.tex b/macros/plain/graphics/picture.tex
new file mode 100644
index 0000000000..f17a7268ad
--- /dev/null
+++ b/macros/plain/graphics/picture.tex
@@ -0,0 +1,51 @@
+% Plain TeX interface to picture mode.
+% David Carlisle
+
+\input miniltx
+
+\makeatletter
+\let\@@line\line
+\input autopict.sty
+\let\LaTeX@line\line
+\let\line\@@line
+
+
+\newdimen\@wholewidth
+\newdimen\@halfwidth
+\newdimen\unitlength \unitlength =1pt
+\newbox\@picbox
+\newdimen\@picht
+\newcount\@xarg
+\newcount\@yarg
+\newcount\@yyarg
+
+\font\tenln =line10 \font\tenlnw =linew10\relax
+\font\tencirc=lcircle10 \font\tencircw=lcirclew10\relax
+\newcount\@multicnt
+\newdimen\@xdim
+\newdimen\@ydim
+\newbox\@linechar
+\newdimen\@linelen
+\newdimen\@clnwd
+\newdimen\@clnht
+\newdimen\@dashdim
+\newbox\@dashbox
+\newcount\@dashcnt
+\let\@linefnt\tenln
+\let\@circlefnt\tencirc
+\@wholewidth\fontdimen8\tenln
+\@halfwidth .5\@wholewidth
+
+\def\picture#1{%
+ \begingroup
+ \let\line\LaTeX@line
+ \def\end##1{\csname end##1\endcsname}%
+ \pictur@#1}
+
+\let\@@endpicture\endpicture
+\def\endpicture{\@@endpicture\endgroup}
+
+\def\LaTeXbegin{\def\begin##1{\csname##1\endcsname}}
+
+
+\resetatcatcode
diff --git a/macros/plain/graphics/psfrag.tex b/macros/plain/graphics/psfrag.tex
new file mode 100644
index 0000000000..27475c473a
--- /dev/null
+++ b/macros/plain/graphics/psfrag.tex
@@ -0,0 +1,49 @@
+% Plain TeX interface to psfrag.
+% David Carlisle
+
+\input miniltx
+
+\makeatletter
+
+\ifx\@compatibilitytrue\@undefined
+ \csname newif\expandafter\endcsname
+ \csname if@compatibility\endcsname
+\fi
+
+
+\ifx\raisebox\@undefined
+\def\raisebox#1#2{{%
+ \setbox0=\hbox{#2}\def\depth{\dp0}\leavevmode\raise#1\box\z@}}
+\fi
+
+\ifx\@@underline\@undefined
+\let\@@underline\underline
+\def\underline{%
+ \ifmmode\expandafter\@@underline\else\expandafter\underbar\fi}
+\fi
+
+\ifx\sbox\@undefined
+\def\sbox#1{\setbox#1\hbox}
+\fi
+
+
+% psfrag loads the core graphics package, but only the extended
+% graphicx interface is available from plain TeX so just intercept
+% the call and ask for graphicx.
+\let\savedRP\RequirePackage
+\def\RequirePackage#1{%
+ \let\RequirePackage\savedRP
+ \ifx\includegraphics\@undefined
+ \input graphicx\fi\relax}
+\input psfrag.sty
+
+
+
+\ifx\pfg@dp\@undefined
+\csname newdimen\endcsname\pfg@dp
+\csname newdimen\endcsname\pfg@wd
+\csname newdimen\endcsname\pfg@dx
+\csname newdimen\endcsname\pfg@dy
+\fi
+
+\resetatcatcode
diff --git a/macros/plain/plnfss/README b/macros/plain/plnfss/README
new file mode 100644
index 0000000000..4bf34c9607
--- /dev/null
+++ b/macros/plain/plnfss/README
@@ -0,0 +1,90 @@
+plnfss-1.1
+
+This file is part of plnfss.
+
+
+Description
+===========
+plnfss is a set of macros to provide easy font access (somewhat similar to
+NFSS but with some limitations) with plain tex.
+
+plnfss can automatically make use of PSNFSS fd files, ie. when a postscript
+font is used the relevant fd file will be loaded automatically.
+For cmr-like fonts (ec, vnr, csr or plr fonts), a special format called pfd
+(plain fd) is required and must be loaded manually.
+
+
+Authors
+=======
+The authors of plnfss are
+
+ Han The Thanh <HanTheThanh@gmx.net> and
+ Michal Konecny <mik@konecny.aow.cz>.
+
+
+License
+=======
+All files are under LPPL, version 1.3 or newer.
+
+See
+ http://www.latex-project.org/lppl.txt
+
+
+Support
+=======
+The current maintainer is
+
+ Reinhard Kotucha <Reinhard.Kotucha@web.de>
+
+
+Recent Changes
+==============
+The current version contains
+
+ * Copyright messages in all files,
+
+ * a bugfix provided by Hartmut Henkel to avoid spurious white spaces,
+
+ * additional .pfd files.
+
+
+Download
+========
+A TDS compliant package can be downloaded from:
+
+ http://vntex.sf.net/download/vntex-support/plnfss
+
+
+Installation
+============
+plnfss.tds.zip is supposed to be extracted in the root of a TDS compliant
+texmf tree. In most cases texmf-local is an appropriate place.
+
+On web2c based systems you have to update the file database. Read the
+documentation of the TeX system you are using for details.
+
+
+Files
+=====
+The content of plnfss.tds.zip is:
+
+ doc/plain/plnfss/LPPL.txt
+ doc/plain/plnfss/plnfss.txt
+ doc/plain/plnfss/test-plnfss.tex
+ tex/plain/plnfss/MIKmathf.tex
+ tex/plain/plnfss/ams.pfd
+ tex/plain/plnfss/il2cm.pfd
+ tex/plain/plnfss/il2cmr.pfd
+ tex/plain/plnfss/ly1lm.pfd
+ tex/plain/plnfss/ot1cm.pfd
+ tex/plain/plnfss/ot1cmr.pfd
+ tex/plain/plnfss/ot4cm.pfd
+ tex/plain/plnfss/plnfss.tex
+ tex/plain/plnfss/qxlm.pfd
+ tex/plain/plnfss/t1lm.pfd
+ tex/plain/plnfss/t5cm.pfd
+ tex/plain/plnfss/t5cmr.pfd
+ tex/plain/plnfss/t5lm.pfd
+ tex/plain/plnfss/ts1lm.pfd
+
+--
diff --git a/macros/plain/plnfss/doc/plain/plnfss/LPPL.txt b/macros/plain/plnfss/doc/plain/plnfss/LPPL.txt
new file mode 100644
index 0000000000..bfe13a27b8
--- /dev/null
+++ b/macros/plain/plnfss/doc/plain/plnfss/LPPL.txt
@@ -0,0 +1,405 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3a 2004-10-01
+
+Copyright 1999 2002-04 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+you may use it with small modifications even if your work is unrelated
+to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ "LaTeX-Format".
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete, unmodified
+ copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do
+not apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under this license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `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 Work is with you. Should the Work prove defective, you
+assume the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of
+the Work, or any other party who may distribute and/or modify the Work
+as permitted above, be liable to you for damages, including any
+general, special, incidental or consequential damages arising out of
+any use of the Work or out of inability to use the Work (including,
+but not limited to, loss of data, data being rendered inaccurate, or
+losses sustained by anyone as a result of any failure of the Work to
+operate with any other programs), even if the Copyright Holder or said
+author or said other party has been advised of the possibility of such
+damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2003 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2003/12/01 or later.
+ %
+ % This work has the LPPL maintenance status "maintained".
+ %
+ % This Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any "LaTeX-Format", and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change "maintained" above into "author-maintained".
+However, we recommend that you use "maintained" as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/plain/plnfss/doc/plain/plnfss/plnfss.txt b/macros/plain/plnfss/doc/plain/plnfss/plnfss.txt
new file mode 100644
index 0000000000..8d333769b1
--- /dev/null
+++ b/macros/plain/plnfss/doc/plain/plnfss/plnfss.txt
@@ -0,0 +1,132 @@
+plnfss-1.1
+
+Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+This file is part of plnfss. License: LPPL, version 1.3 or newer,
+according to http://www.latex-project.org/lppl.txt
+
+
+Description
+===========
+plnfss is a set of macros to provide easy font access (somewhat similar to
+NFSS but with some limitations) with plain tex.
+
+plnfss can automatically make use of PSNFSS fd files, ie. when a postscript
+font is used the relevant fd file will be loaded automatically.
+For cmr-like fonts (ec, vnr, csr or plr fonts), a special format called pfd
+(plain fd) is required and must be loaded manually.
+
+
+Authors
+=======
+The authors of plnfss are
+
+ Han The Thanh <HanTheThanh@gmx.net> and
+ Michal Konecny <mik@konecny.aow.cz>.
+
+
+License
+=======
+All files are under LPPL, version 1.3 or newer.
+
+See
+ http://www.latex-project.org/lppl.txt
+
+
+Support
+=======
+The current maintainer is
+
+ Reinhard Kotucha <Reinhard.Kotucha@web.de>
+
+
+Recent Changes
+==============
+The current version contains
+
+ * Copyright messages in all files,
+
+ * a bugfix provided by Hartmut Henkel to avoid spurious white spaces,
+
+ * additional .pfd files.
+
+
+Installation
+============
+plnfss.tds.zip is supposed to be extracted in the root of a TDS compliant
+texmf tree. In most cases texmf-local is an appropriate place.
+
+On web2c based systems you have to update the file database. Read the
+documentation of the TeX system you are using for details.
+
+-----------------------------
+You only need plnfss.tds.zip.
+-----------------------------
+
+
+Usage Example
+=============
+______________________________________________________________________
+\input plnfss
+\input ot1cm.pfd % plain font description file for CM fonts
+
+\setfontsize{12pt} % set the default font size to 12pt
+\selectfont % activate the font with requested attributes
+
+%% default attributes:
+% \setfontencoding{OT1}
+% \setfontfamily{cmr}
+% \setfontseries{m}
+% \setfontshape{n}
+% \setfontsize{10pt}
+% \setrmdefault{cmr}
+% \setttdefault{cmtt}
+% \setsfdefault{cmss}
+
+...
+some text and some \textit{italic} and some {\bfseries bold}.
+
+\usefont{OT1}{ptm}{m}{n} % switch to Times; the fd file ot1ptm.fd will
+ % be loaded automatically
+...
+______________________________________________________________________
+
+
+Supported Encodings
+===================
+The following encoding files are provided:
+
+ ams.pfd
+ il2cm.pfd
+ ly1lm.pfd
+ ot1cm.pfd
+ ot4cm.pfd
+ qxlm.pfd
+ t1lm.pfd
+ t5cm.pfd
+ t5lm.pfd
+ ts1lm.pfd
+
+Using the files
+
+ il2cmr.pfd
+ ot1cmr.pfd
+ t5cmr.pfd
+
+is deprecated, they are provided for backward compatibility only.
+
+
+Supported Commands
+==================
+\rmfamily \sffamily \ttfamily \mdseries
+\bfseries \upshape \itshape \slshape \scshape
+\normalfont
+\textrm \textsf \texttt \textmd \textbf \textup \textit \textsl \textsc
+\rm \sf \tt \md \bf \up \it \sl \sc
+
+
+What is missing?
+================
+- size commands: \large, \huge etc. Use \fontsize{20pt} instead.
+- scaling
+- math support is poor
+
diff --git a/macros/plain/plnfss/doc/plain/plnfss/test-plnfss.tex b/macros/plain/plnfss/doc/plain/plnfss/test-plnfss.tex
new file mode 100644
index 0000000000..9edcfa22a7
--- /dev/null
+++ b/macros/plain/plnfss/doc/plain/plnfss/test-plnfss.tex
@@ -0,0 +1,40 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\input plnfss
+\input ot1cm.pfd
+
+\def\testfontdecl#1#2{%
+ \expandafter\setfont#1/10pt/%
+ \leftline{%
+ \hbox to 4cm{\setfont OT1/cmtt/m/n/10pt/#1\hss}%
+ The quick brown fox jumps over a lazy dog
+ }
+ \smallskip
+}
+
+\def\testpfd#1{{%
+ \centerline{\setfont OT1/cmr/m/n/15pt/Test of \texttt{#1}}
+ \bigskip
+ \input #1
+ \let\DeclareFont=\testfontdecl
+ \input #1
+ \vfil\eject
+}}
+
+\testpfd{il2cm.pfd}
+\testpfd{ly1lm.pfd}
+\testpfd{ot1cm.pfd}
+\testpfd{ot4cm.pfd}
+\testpfd{qxlm.pfd}
+\testpfd{t1lm.pfd}
+\testpfd{t5cm.pfd}
+\testpfd{t5lm.pfd}
+
+% \testpfd{ot1cmr.pfd}
+% \testpfd{t5cmr.pfd}
+% \testpfd{ams.pfd}
+\bye
diff --git a/macros/plain/plnfss/tex/plain/plnfss/MIKmathf.tex b/macros/plain/plnfss/tex/plain/plnfss/MIKmathf.tex
new file mode 100644
index 0000000000..5dd335b41b
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/MIKmathf.tex
@@ -0,0 +1,82 @@
+% plnfss-1.1
+
+% Copyright 1996 Michal Konecny <mik@konecny.aow.cz>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+% MIKmathf.tex, by Michal Konecny, 23.10.1996
+%
+% A macro package to supplement math font sizing
+% to Han The Thanh's package plnfss.
+
+\endlinechar=-1\catcode`@= 11
+
+% macros provided:
+\def\mathix{\mathsize{9}{6}{5}}
+\def\mathx{\mathsize{10}{7}{5}}
+\def\mathxii{\mathsize{12}{9}{6}}
+\def\mathxiv{\mathsize{14}{10}{7}}
+\def\mathxvii{\mathsize{17}{12}{9}}
+\def\mathxx{\mathsize{20}{14}{10}}
+\def\mathxxx{\mathsize{30}{20}{14}}
+\def\mathlii{\mathsize{52}{30}{20}}
+\def\nomathfonts{}
+\expandafter\let\csname math9\endcsname\mathix
+\expandafter\let\csname math10\endcsname\mathx
+\expandafter\let\csname math12\endcsname\mathxii
+\expandafter\let\csname math14\endcsname\mathxiv
+\expandafter\let\csname math17\endcsname\mathxvii
+\expandafter\let\csname math20\endcsname\mathxx
+
+\def\Bbb{\fam9\relax}
+\def\Cal{\fam2\relax}
+\def\bfam{5}
+\def\mathb{\fam5}
+\def\bxfam{6}
+\def\mathbx{\fam6}
+\def\Eurm{\fam10\relax}
+\def\Eurb{\fam11\relax}
+\def\Eusm{\fam12\relax}
+\def\Eusb{\fam13\relax}
+\def\Eufm{\fam14\relax}
+\def\Eufb{\fam15\relax}
+
+% \mathfsize{textsize}{scriptsize}{scriptscriptsize}
+\def\mathsize#1#2#3{
+ \def\txtsz{#1}
+ \def\scrsz{#2}
+ \def\sscsz{#3}
+ % family assignment probably not acc. to convention
+ \setmathfam{0}{/cmr/m/n//}%
+ \setmathfam{1}{OML/cmmi/m/it//}
+ \setmathfam{2}{OMS/cmsy/m/n//}% incl CALIGRAPHIC
+ \setmathfam{3}{OMX/cmex/m/n//}
+ \setmathfam{5}{/cmr/b/n//}
+ \setmathfam{6}{/cmr/bx/n//}
+ \setmathfam{7}{/cmr/m/it//}
+ \setmathfam{8}{MSA/msam/m/n//}% ams symbols
+ \setmathfam{9}{MSB/msbm/m/n//}% further ams incl. BLACKBOARD
+ \setmathfam{10}{/euler/m/n//}% euler regular
+ \setmathfam{11}{/euler/b/n//}% euler regular bold
+ \setmathfam{12}{/euler/m/cal//}% euler cal
+ \setmathfam{13}{/euler/b/cal//}% euler cal bold
+ \setmathfam{14}{/euler/m/fib//}% euler fib
+ \setmathfam{15}{/euler/b/fib//}% euler fib bold
+}
+
+% sets plnfss selected font into the special name \@arbfont
+\def\set@arbfont{%
+ \global\expandafter\let\expandafter\@arbfont\csname\@selectedfont\endcsname}
+
+% \setmathfam{fam}{<coding>/<name>/<weight>/<slant>//}
+% (sizes pre-set in macros \txtsz \scrsz \sscsz)
+\def\setmathfam#1#2{
+ {\setfont#2\fontsize\txtsz\selectfont\set@arbfont}
+ \expandafter\textfont#1=\@arbfont
+ {\setfont#2\fontsize\scrsz\selectfont\set@arbfont}
+ \expandafter\scriptfont#1=\@arbfont
+ {\setfont#2\fontsize\sscsz\selectfont\set@arbfont}
+ \expandafter\scriptscriptfont#1=\@arbfont
+}
+
+\catcode`@= 12\endlinechar=13
diff --git a/macros/plain/plnfss/tex/plain/plnfss/ams.pfd b/macros/plain/plnfss/tex/plain/plnfss/ams.pfd
new file mode 100644
index 0000000000..7441daf682
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/ams.pfd
@@ -0,0 +1,21 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{OMS/cmsy/b/n} {cmbsy(10)}
+\DeclareFont{OMX/cmex/m/n} {cmex(9,10)}
+\DeclareFont{OML/cmmi/m/it} {cmmi(5,6,7,8,9,10,12)}
+\DeclareFont{OML/cmmi/b/it} {cmmib(10)}
+\DeclareFont{OMS/cmsy/m/n} {cmsy(5,6,7,8,9,10)}
+\DeclareFont{U/cmtex/m/n} {cmtex(8,9,10)}
+
+\DeclareFont{MSA/msam/m/n} {msam(5,6,7,8,9,10)}
+\DeclareFont{MSB/msbm/m/n} {msbm(5,6,7,8,9,10)}
+\DeclareFont{OT1/euler/m/n} {eurm(5,6,7,8,9,10)}
+\DeclareFont{OT1/euler/b/n} {eurb(5,6,7,8,9,10)}
+\DeclareFont{OT1/euler/m/cal} {eusm(5,6,7,8,9,10)}
+\DeclareFont{OT1/euler/b/cal} {eusb(5,6,7,8,9,10)}
+\DeclareFont{OT1/euler/m/fib} {eufm(5,6,7,8,9,10)}
+\DeclareFont{OT1/euler/b/fib} {eufb(5,6,7,8,9,10)}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/il2cm.pfd b/macros/plain/plnfss/tex/plain/plnfss/il2cm.pfd
new file mode 100644
index 0000000000..397fa7bd3e
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/il2cm.pfd
@@ -0,0 +1,49 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{IL2/cmr/b/n} {csb(5,6,7,8,9,10,12,17)}
+\DeclareFont{IL2/cmr/bx/n} {csbx(5,6,7,8,9,10,12)}
+\DeclareFont{IL2/cmr/bx/sl} {csbxsl(5,6,7,8,9,10,12)}
+\DeclareFont{IL2/cmr/bx/it} {csbxti(10,12,17)}
+\DeclareFont{IL2/cmr/m/sc} {cscsc(8,9,10,12,17)}
+\DeclareFont{IL2/cmdh/m/n} {csdunh(5,6,7,8,9,10,12,17)}
+\DeclareFont{IL2/cmfr/m/n} {csff(10)}
+\DeclareFont{IL2/cmfr/m/it} {csfi(10)}
+\DeclareFont{IL2/cmfib/m/n} {csfib(8,9,10,12)}
+\DeclareFont{IL2/cmtt/m/it} {csitt(8,9,10,12,17)}
+\DeclareFont{IL2/cmr/m/n} {csr(5,6,7,8,9,10,12,17)}
+\DeclareFont{IL2/cmr/m/sl} {cssl(5,6,7,8,9,10,12,17)}
+\DeclareFont{IL2/cmtt/m/sl} {cssltt(8,9,10,12)}
+\DeclareFont{IL2/cmss/m/n} {csss(8,9,10,12,17)}
+\DeclareFont{IL2/cmss/bx/n} {csssbx(9,10,12,17)}
+\DeclareFont{IL2/cmss/sbc/n} {csssdc(10)}
+\DeclareFont{IL2/cmss/m/sl} {csssi(8,9,10,12,17)}
+\DeclareFont{IL2/cmssq/m/n} {csssq(8)}
+\DeclareFont{IL2/cmssq/m/sl} {csssqi(8)}
+\DeclareFont{IL2/cmtt/m/sc} {cstcsc(10,12,17)}
+\DeclareFont{IL2/cmr/m/it} {csti(7,8,9,10,12,17)}
+\DeclareFont{IL2/cmtt/m/n} {cstt(8,9,10,12)}
+\DeclareFont{IL2/cmr/m/ui} {csu(7,8,9,10,12,17)}
+\DeclareFont{IL2/cmvtt/m/n} {csvtt(8,9,10,12)}
+
+\SubstFont{IL2/cmfib/b/n} {IL2/cmfib/bx/n}
+\SubstFont{IL2/cmr/b/it} {IL2/cmr/bx/it}
+\SubstFont{IL2/cmr/b/sl} {IL2/cmr/bx/sl}
+\SubstFont{IL2/cmr/b/ui} {IL2/cmr/bx/ui}
+\SubstFont{IL2/cmr/bx/ui} {IL2/cmr/m/ui}
+\SubstFont{IL2/cmss/b/n} {IL2/cmss/bx/n}
+\SubstFont{IL2/cmss/b/ui} {IL2/cmss/bx/ui}
+\SubstFont{IL2/cmss/bx/ui} {IL2/cmr/bx/ui}
+\SubstFont{IL2/cmss/m/it} {IL2/cmss/m/sl}
+\SubstFont{IL2/cmss/m/sc} {IL2/cmr/m/sc}
+\SubstFont{IL2/cmss/m/ui} {IL2/cmr/m/ui}
+\SubstFont{IL2/cmtt/b/it} {IL2/cmtt/bx/it}
+\SubstFont{IL2/cmtt/b/n} {IL2/cmtt/bx/n}
+\SubstFont{IL2/cmtt/b/ui} {IL2/cmtt/bx/ui}
+\SubstFont{IL2/cmtt/bx/it} {IL2/cmtt/m/it}
+\SubstFont{IL2/cmtt/bx/n} {IL2/cmtt/m/n}
+\SubstFont{IL2/cmtt/bx/ui} {IL2/cmtt/m/it}
+\SubstFont{IL2/cmtt/m/ui} {IL2/cmtt/m/it}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/il2cmr.pfd b/macros/plain/plnfss/tex/plain/plnfss/il2cmr.pfd
new file mode 100644
index 0000000000..cd0db72ea1
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/il2cmr.pfd
@@ -0,0 +1,34 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{IL2/cmdh/m/n} {csdunh(5,6,7,8,9,10,12,17)}
+\DeclareFont{IL2/cmfr/m/it} {csfi(10)}
+\DeclareFont{IL2/cmfr/m/n} {csff(10)}
+\DeclareFont{IL2/cmfib/b/n} {csfib(8,9,10,12)}
+\DeclareFont{IL2/cmr/b/n} {csb(5,6,7,8,9,10,12,17)}
+\DeclareFont{IL2/cmr/bx/it} {csbxti(10,12,17)}
+\DeclareFont{IL2/cmr/bx/n} {csbx(5,6,7,8,9,10,12)}
+\DeclareFont{IL2/cmr/bx/sl} {csbxsl(5,6,7,8,9,10,12)}
+\DeclareFont{IL2/cmr/m/it} {csti(7,8,9,10,12,17)}
+\DeclareFont{IL2/cmr/m/n} {csr(5,6,7,8,9,10,12,17)}
+\DeclareFont{IL2/cmr/m/sc} {cscsc(10,12,17)}
+\DeclareFont{IL2/cmr/m/sl} {cssl(5,6,7,8,9,10,12,17)}
+\DeclareFont{IL2/cmr/m/ui} {csu(7,8,9,10,12,17)}
+\DeclareFont{IL2/cmss/bx/n} {csssbx(9,10,12,17)}
+\DeclareFont{IL2/cmss/dc/n} {csssdc(10)}
+\DeclareFont{IL2/cmss/m/it} {csssi(8,9,10,12,17)}
+\DeclareFont{IL2/cmss/n/n} {csss(8,9,10,12,17)}
+\DeclareFont{IL2/cmss/q/it} {csssqi(8)}
+\DeclareFont{IL2/cmss/q/n} {csssq(8)}
+\DeclareFont{IL2/cmtt/m/it} {csitt(8,9,10,12,17)}
+\DeclareFont{IL2/cmtt/m/n} {cstt(8,9,10,12)}
+\DeclareFont{IL2/cmtt/m/sc} {cstcsc(10,12,17)}
+\DeclareFont{IL2/cmtt/m/sl} {cssltt(8,9,10,12)}
+\DeclareFont{IL2/cmvtt/m/n} {csvtt(8,9,10,12)}
+
+\SubstFont{IL2/cmr/b/it} {IL2/cmr/bx/it}
+\SubstFont{IL2/cmr/b/sl} {IL2/cmr/bx/sl}
+\SubstFont{IL2/cmss/b/n} {IL2/cmss/bx/n}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/ly1lm.pfd b/macros/plain/plnfss/tex/plain/plnfss/ly1lm.pfd
new file mode 100644
index 0000000000..6c229e25f0
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/ly1lm.pfd
@@ -0,0 +1,51 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{LY1/lmr/b/n} {texnansi-lmb(10)}
+\DeclareFont{LY1/lmr/b/sl} {texnansi-lmbo(10)}
+\DeclareFont{LY1/lmr/bx/n} {texnansi-lmbx(5,6,7,8,9,10,12)}
+\DeclareFont{LY1/lmr/bx/it} {texnansi-lmbxi(10)}
+\DeclareFont{LY1/lmr/bx/sl} {texnansi-lmbxo(10)}
+\DeclareFont{LY1/lmr/m/sc} {texnansi-lmcsc(10)}
+\DeclareFont{LY1/lmr/m/scsl} {texnansi-lmcsco(10)}
+\DeclareFont{LY1/lmr/m/n} {texnansi-lmr(5,6,7,8,9,10,12,17)}
+\DeclareFont{LY1/lmr/m/it} {texnansi-lmri(7,8,9,10,12)}
+\DeclareFont{LY1/lmr/m/sl} {texnansi-lmro(8,9,10,12)}
+\DeclareFont{LY1/lmss/m/n} {texnansi-lmss(8,9,10,12,17)}
+\DeclareFont{LY1/lmss/bx/sl} {texnansi-lmssbo(10)}
+\DeclareFont{LY1/lmss/bx/n} {texnansi-lmssbx(10)}
+\DeclareFont{LY1/lmss/sbc/n} {texnansi-lmssdc(10)}
+\DeclareFont{LY1/lmss/sbc/sl} {texnansi-lmssdo(10)}
+\DeclareFont{LY1/lmss/m/sl} {texnansi-lmsso(8,9,10,12,17)}
+\DeclareFont{LY1/lmssq/m/n} {texnansi-lmssq(8)}
+\DeclareFont{LY1/lmssq/bx/sl} {texnansi-lmssqbo(8)}
+\DeclareFont{LY1/lmssq/bx/n} {texnansi-lmssqbx(8)}
+\DeclareFont{LY1/lmssq/m/sl} {texnansi-lmssqo(8)}
+\DeclareFont{LY1/lmtt/m/sc} {texnansi-lmtcsc(10)}
+\DeclareFont{LY1/lmtt/m/n} {texnansi-lmtt(8,9,10,12)}
+\DeclareFont{LY1/lmtt/m/it} {texnansi-lmtti(10)}
+\DeclareFont{LY1/lmtt/m/sl} {texnansi-lmtto(10)}
+\DeclareFont{LY1/lmvtt/m/n} {texnansi-lmvtt(10)}
+\DeclareFont{LY1/lmvtt/m/sl} {texnansi-lmvtto(10)}
+
+\SubstFont{LY1/cmfib/b/n} {LY1/cmfib/bx/n}
+\SubstFont{LY1/cmr/b/it} {LY1/cmr/bx/it}
+\SubstFont{LY1/cmr/b/sl} {LY1/cmr/bx/sl}
+\SubstFont{LY1/cmr/b/ui} {LY1/cmr/bx/ui}
+\SubstFont{LY1/cmr/bx/ui} {LY1/cmr/m/ui}
+\SubstFont{LY1/cmss/b/n} {LY1/cmss/bx/n}
+\SubstFont{LY1/cmss/b/ui} {LY1/cmss/bx/ui}
+\SubstFont{LY1/cmss/bx/ui} {LY1/cmr/bx/ui}
+\SubstFont{LY1/cmss/m/it} {LY1/cmss/m/sl}
+\SubstFont{LY1/cmss/m/sc} {LY1/cmr/m/sc}
+\SubstFont{LY1/cmss/m/ui} {LY1/cmr/m/ui}
+\SubstFont{LY1/cmtt/b/it} {LY1/cmtt/bx/it}
+\SubstFont{LY1/cmtt/b/n} {LY1/cmtt/bx/n}
+\SubstFont{LY1/cmtt/b/ui} {LY1/cmtt/bx/ui}
+\SubstFont{LY1/cmtt/bx/it} {LY1/cmtt/m/it}
+\SubstFont{LY1/cmtt/bx/n} {LY1/cmtt/m/n}
+\SubstFont{LY1/cmtt/bx/ui} {LY1/cmtt/m/it}
+\SubstFont{LY1/cmtt/m/ui} {LY1/cmtt/m/it}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/ot1cm.pfd b/macros/plain/plnfss/tex/plain/plnfss/ot1cm.pfd
new file mode 100644
index 0000000000..03a9a5c261
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/ot1cm.pfd
@@ -0,0 +1,49 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{OT1/cmdh/m/n} {cmdunh(10)}
+\DeclareFont{OT1/cmfr/m/it} {cmfi(10)}
+\DeclareFont{OT1/cmfr/m/n} {cmff(10)}
+\DeclareFont{OT1/cmfib/m/n} {cmfib(8)}
+\DeclareFont{OT1/cmr/b/n} {cmb(10)}
+\DeclareFont{OT1/cmr/bx/it} {cmbxti(10)}
+\DeclareFont{OT1/cmr/bx/n} {cmbx(5,6,7,8,9,10,12)}
+\DeclareFont{OT1/cmr/bx/sl} {cmbxsl(10)}
+\DeclareFont{OT1/cmr/m/it} {cmti(7,8,9,10,12)}
+\DeclareFont{OT1/cmr/m/n} {cmr(5,6,7,8,9,10,12,17)}
+\DeclareFont{OT1/cmr/m/sc} {cmcsc(10)}
+\DeclareFont{OT1/cmr/m/sl} {cmsl(8,9,10,12)}
+\DeclareFont{OT1/cmr/m/ui} {cmu(10)}
+\DeclareFont{OT1/cmss/bx/n} {cmssbx(10)}
+\DeclareFont{OT1/cmss/sbc/n} {cmssdc(10)}
+\DeclareFont{OT1/cmss/m/sl} {cmssi(8,9,10,12,17)}
+\DeclareFont{OT1/cmss/m/n} {cmss(8,9,10,12,17)}
+\DeclareFont{OT1/cmssq/m/sl} {cmssqi(8)}
+\DeclareFont{OT1/cmssq/m/n} {cmssq(8)}
+\DeclareFont{OT1/cmtt/m/it} {cmitt(10)}
+\DeclareFont{OT1/cmtt/m/n} {cmtt(8,9,10,12)}
+\DeclareFont{OT1/cmtt/m/sc} {cmtcsc(10)}
+\DeclareFont{OT1/cmtt/m/sl} {cmsltt(10)}
+\DeclareFont{OT1/cmvtt/m/n} {cmvtt(10)}
+
+\SubstFont{OT1/cmfib/b/n} {OT1/cmfib/bx/n}
+\SubstFont{OT1/cmr/b/it} {OT1/cmr/bx/it}
+\SubstFont{OT1/cmr/b/sl} {OT1/cmr/bx/sl}
+\SubstFont{OT1/cmr/b/ui} {OT1/cmr/bx/ui}
+\SubstFont{OT1/cmr/bx/ui} {OT1/cmr/m/ui}
+\SubstFont{OT1/cmss/b/n} {OT1/cmss/bx/n}
+\SubstFont{OT1/cmss/b/ui} {OT1/cmss/bx/ui}
+\SubstFont{OT1/cmss/bx/ui} {OT1/cmr/bx/ui}
+\SubstFont{OT1/cmss/m/it} {OT1/cmss/m/sl}
+\SubstFont{OT1/cmss/m/sc} {OT1/cmr/m/sc}
+\SubstFont{OT1/cmss/m/ui} {OT1/cmr/m/ui}
+\SubstFont{OT1/cmtt/b/it} {OT1/cmtt/bx/it}
+\SubstFont{OT1/cmtt/b/n} {OT1/cmtt/bx/n}
+\SubstFont{OT1/cmtt/b/ui} {OT1/cmtt/bx/ui}
+\SubstFont{OT1/cmtt/bx/it} {OT1/cmtt/m/it}
+\SubstFont{OT1/cmtt/bx/n} {OT1/cmtt/m/n}
+\SubstFont{OT1/cmtt/bx/ui} {OT1/cmtt/m/it}
+\SubstFont{OT1/cmtt/m/ui} {OT1/cmtt/m/it}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/ot1cmr.pfd b/macros/plain/plnfss/tex/plain/plnfss/ot1cmr.pfd
new file mode 100644
index 0000000000..13c28abbaf
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/ot1cmr.pfd
@@ -0,0 +1,46 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{OT1/cmdh/m/n} {cmdunh(10)}
+\DeclareFont{OT1/cmfr/m/it} {cmfi(10)}
+\DeclareFont{OT1/cmfr/m/n} {cmff(10)}
+\DeclareFont{OT1/cmfib/m/n} {cmfib(8)}
+\DeclareFont{OT1/cmr/b/n} {cmb(10)}
+\DeclareFont{OT1/cmr/bx/it} {cmbxti(10)}
+\DeclareFont{OT1/cmr/bx/n} {cmbx(5,6,7,8,9,10,12)}
+\DeclareFont{OT1/cmr/bx/sl} {cmbxsl(10)}
+\DeclareFont{OT1/cmr/m/it} {cmti(7,8,9,10,12)}
+\DeclareFont{OT1/cmr/m/n} {cmr(5,6,7,8,9,10,12,17)}
+\DeclareFont{OT1/cmr/m/sc} {cmcsc(10)}
+\DeclareFont{OT1/cmr/m/sl} {cmsl(8,9,10,12)}
+\DeclareFont{OT1/cmr/m/ui} {cmu(10)}
+\DeclareFont{OT1/cmss/bx/n} {cmssbx(10)}
+\DeclareFont{OT1/cmss/sbc/n} {cmssdc(10)}
+\DeclareFont{OT1/cmss/m/sl} {cmssi(8,9,10,12,17)}
+\DeclareFont{OT1/cmss/m/n} {cmss(8,9,10,12,17)}
+\DeclareFont{OT1/cmssq/m/sl} {cmssqi(8)}
+\DeclareFont{OT1/cmssq/m/n} {cmssq(8)}
+\DeclareFont{OT1/cmtt/m/it} {cmitt(10)}
+\DeclareFont{OT1/cmtt/m/n} {cmtt(8,9,10,12)}
+\DeclareFont{OT1/cmtt/m/sc} {cmtcsc(10)}
+\DeclareFont{OT1/cmtt/m/sl} {cmsltt(10)}
+\DeclareFont{OT1/cmvtt/m/n} {cmvtt(10)}
+
+\DeclareFont{OML/cmmi/b/it} {cmmib(10)}
+\DeclareFont{OML/cmmi/m/it} {cmmi(5,6,7,8,9,10,12)}
+\DeclareFont{OMS/cmsy/b/n} {cmbsy(10)}
+\DeclareFont{OMS/cmsy/m/n} {cmsy(5,6,7,8,9,10)}
+\DeclareFont{OMX/cmex/m/n} {cmex(10)}
+\DeclareFont{U/cmtex/m/n} {cmtex(8,9,10)}
+
+\SubstFont{OT1/cmr/bx/ui} {OT1/cmr/m/ui}
+\SubstFont{OT1/cmss/m/it} {OT1/cmss/m/sl}
+\SubstFont{OT1/cmss/m/sc} {OT1/cmr/m/sc}
+\SubstFont{OT1/cmss/m/ui} {OT1/cmr/m/ui}
+\SubstFont{OT1/cmss/bx/ui} {OT1/cmr/bx/ui}
+\SubstFont{OT1/cmtt/bx/n} {OT1/cmtt/m/n}
+\SubstFont{OT1/cmtt/bx/it} {OT1/cmtt/m/it}
+\SubstFont{OT1/cmtt/bx/ui} {OT1/cmtt/m/it}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/ot4cm.pfd b/macros/plain/plnfss/tex/plain/plnfss/ot4cm.pfd
new file mode 100644
index 0000000000..d93c5eecc6
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/ot4cm.pfd
@@ -0,0 +1,49 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{OT4/cmr/b/n} {plb(10)}
+\DeclareFont{OT4/cmr/bx/n} {plbx(5,6,7,8,9,10,12)}
+\DeclareFont{OT4/cmr/bx/sl} {plbxsl(10)}
+\DeclareFont{OT4/cmr/bx/it} {plbxti(10)}
+\DeclareFont{OT4/cmr/m/sc} {plcsc(10)}
+\DeclareFont{OT4/cmdh/m/n} {pldunh(10)}
+\DeclareFont{OT4/cmfr/m/n} {plff(10)}
+\DeclareFont{OT4/cmfr/m/it} {plfi(10)}
+\DeclareFont{OT4/cmfib/m/n} {plfib(8)}
+\DeclareFont{OT4/cmtt/m/it} {plitt(10)}
+\DeclareFont{OT4/cmr/m/n} {plr(5,6,7,8,9,10,12,17)}
+\DeclareFont{OT4/cmr/m/sl} {plsl(8,9,10,12)}
+\DeclareFont{OT4/cmtt/m/sl} {plsltt(10)}
+\DeclareFont{OT4/cmss/m/n} {plss(8,9,10,12,17)}
+\DeclareFont{OT4/cmss/bx/n} {plssbx(10)}
+\DeclareFont{OT4/cmss/sbc/n} {plssdc(10)}
+\DeclareFont{OT4/cmss/m/sl} {plssi(8,9,10,12,17)}
+\DeclareFont{OT4/cmssq/m/n} {plssq(8)}
+\DeclareFont{OT4/cmssq/m/sl} {plssqi(8)}
+\DeclareFont{OT4/cmtt/m/sc} {pltcsc(10)}
+\DeclareFont{OT4/cmr/m/it} {plti(7,8,9,10,12)}
+\DeclareFont{OT4/cmtt/m/n} {pltt(8,9,10,12)}
+\DeclareFont{OT4/cmr/m/ui} {plu(10)}
+\DeclareFont{OT4/cmvtt/m/n} {plvtt(10)}
+
+\SubstFont{OT4/cmfib/b/n} {OT4/cmfib/bx/n}
+\SubstFont{OT4/cmr/b/it} {OT4/cmr/bx/it}
+\SubstFont{OT4/cmr/b/sl} {OT4/cmr/bx/sl}
+\SubstFont{OT4/cmr/b/ui} {OT4/cmr/bx/ui}
+\SubstFont{OT4/cmr/bx/ui} {OT4/cmr/m/ui}
+\SubstFont{OT4/cmss/b/n} {OT4/cmss/bx/n}
+\SubstFont{OT4/cmss/b/ui} {OT4/cmss/bx/ui}
+\SubstFont{OT4/cmss/bx/ui} {OT4/cmr/bx/ui}
+\SubstFont{OT4/cmss/m/it} {OT4/cmss/m/sl}
+\SubstFont{OT4/cmss/m/sc} {OT4/cmr/m/sc}
+\SubstFont{OT4/cmss/m/ui} {OT4/cmr/m/ui}
+\SubstFont{OT4/cmtt/b/it} {OT4/cmtt/bx/it}
+\SubstFont{OT4/cmtt/b/n} {OT4/cmtt/bx/n}
+\SubstFont{OT4/cmtt/b/ui} {OT4/cmtt/bx/ui}
+\SubstFont{OT4/cmtt/bx/it} {OT4/cmtt/m/it}
+\SubstFont{OT4/cmtt/bx/n} {OT4/cmtt/m/n}
+\SubstFont{OT4/cmtt/bx/ui} {OT4/cmtt/m/it}
+\SubstFont{OT4/cmtt/m/ui} {OT4/cmtt/m/it}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/plnfss.tex b/macros/plain/plnfss/tex/plain/plnfss/plnfss.tex
new file mode 100644
index 0000000000..08d4b07db9
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/plnfss.tex
@@ -0,0 +1,403 @@
+% plnfss-1.1
+
+% Copyright 2000-2005 Han The Thanh <HanTheThanh@gmx.net>
+% and Michal Konecny <mik@konecny.aow.cz>
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+% plnfss.tex - simple NFSS macros for plain TeX
+
+
+\catcode`\@=11 \endlinechar=-1 %
+
+% general purpose accumulators and shortcuts
+\newdimen\dimenA
+\newcount\countA
+\let\ex=\expandafter
+
+% how to set \baselineskip (and \strutbox) when switching to another font
+\newif\ifupdatebaselineskip % update \baselineskip (and \strutbox) at all?
+\updatebaselineskiptrue % do so by default
+\def\baselineskipscale{1.2} % the factor \baselineskip : \@fontsize
+\def\setbaselineskip{
+ \baselineskip=\@fontsize
+ \baselineskip=\baselineskipscale\baselineskip
+ \setbox\strutbox=\hbox{\vrule
+ height .7\baselineskip depth .3\baselineskip width \z@}
+}
+
+\newdimen\@fontsize
+\def\setfontencoding#1{\if^^A#1^^A\else\edef\@fontencoding{#1}\fi}
+\def\setfontfamily#1{\if^^A#1^^A\else\edef\@fontfamily{#1}\fi}
+\def\setfontseries#1{\if^^A#1^^A\else\edef\@fontseries{#1}\fi}
+\def\setfontshape#1{\if^^A#1^^A\else\edef\@fontshape{#1}\fi}
+\def\setfontsize#1{\if^^A#1^^A\else\@fontsize=#1\fi}
+
+
+\def\addfontsize#1{
+ \add\@fontsize #1
+ \selectfont
+}
+
+\def\mulfontsize#1{
+ \@fontsize=#1\@fontsize
+ \selectfont
+}
+
+\def\setfont#1/#2/#3/#4/#5/{
+ \setfontencoding{#1}
+ \setfontfamily{#2}
+ \setfontseries{#3}
+ \setfontshape{#4}
+ \setfontsize{#5}
+ \selectfont
+}
+
+\def\usefont#1#2#3#4{
+ \setfontencoding{#1}
+ \setfontfamily{#2}
+ \setfontseries{#3}
+ \setfontshape{#4}
+ \selectfont
+}
+
+\def\excs#1#2{
+ \ex#1\csname#2\endcsname
+}
+
+\def\getsizelist #1(#2){
+ \def\fontname{#1}
+ \def\sizelist{#2,END,}
+}
+
+\def\endsizelist{END}
+\def\finish#1END,{}
+
+\def\selectfontsize#1,{
+ \def\cursize{#1}
+ \ifx\cursize\empty
+ \def\selectedsize{}
+ \let\next \finish
+ \else\ifx\cursize\endsizelist
+ \edef\selectedsize{\lastsize}
+ \let\next \relax
+ \else\ifdim\@fontsize > \cursize\p@
+ \edef\lastsize{\cursize}
+ \let\next \selectfontsize
+ \else\ifx\lastsize\empty
+ \edef\selectedsize{\cursize}
+ \let\next \finish
+ \else
+ \dimenA=\@fontsize
+ \advance \dimenA \dimenA
+ \advance \dimenA -\cursize\p@
+ \advance \dimenA -\lastsize\p@
+ \relax
+ \ifdim\dimenA < \z@
+ \edef\selectedsize{\lastsize}
+ \else
+ \edef\selectedsize{\cursize}
+ \fi
+ \let\next \finish
+ \fi\fi\fi\fi
+ \next
+}
+
+\def\loadfontdecl{
+ \excs\ifx\fontdecl\relax
+ \testprefix{cm}{\@fontfamily}
+ \ifisprefix \loadfd{cm}{pfd}\fi
+ \fi
+ \excs\ifx\fontdecl\relax
+ \testprefix{lm}{\@fontfamily}
+ \ifisprefix \loadfd{lm}{pfd}\fi
+ \fi
+ \excs\ifx\fontdecl\relax
+ \loadfd{\@fontfamily}{fd}
+ \fi
+}
+
+\let\plaininput=\input
+\let\plainlowercase=\lowercase
+
+\newread\testfd
+\def\loadfd#1#2{
+ \let\next=\relax
+ \edef\inputfd{\plainlowercase{\noexpand\openin\testfd=\@fontencoding#1.#2 }}\inputfd
+ \ifeof\testfd
+ \log{PLNFSS: cannot find font definition file for %
+ family \@fontencoding/#1}
+ \else
+ \closein\testfd
+ \edef\next{\plainlowercase{\noexpand\plaininput \@fontencoding#1.#2 }}
+ \fi
+%% Temporarily set \endlinechar=-1 to prevent spurious spaces.
+%% Fix provided by Hartmut Henkel.
+ \endlinechar=-1
+ \next
+ \endlinechar=13
+}
+
+\def\selectfont{
+ \edef\fontdecl{
+ \@fontencoding/\@fontfamily/\@fontseries/\@fontshape
+ }
+ \edef\selectedfont{
+ \fontdecl/\the\@fontsize/
+ }
+ \excs\ifx\selectedfont\relax
+ \loadfontdecl
+ \excs\ifx\fontdecl\relax
+ \errmessage{Font \fontdecl\space not defined, restore the last font \lastfont}
+ \ex\setfont\lastfont\relax
+ \else
+ \edef\fontdef{\csname\fontdecl\endcsname}
+ \ex\getsizelist\fontdef
+ \def\lastsize{}
+ \ex\selectfontsize\sizelist
+ \global\ex\font\csname\selectedfont\endcsname
+ \fontname\selectedsize\space at \@fontsize
+ \edef\lastfont{\selectedfont}
+ \csname\selectedfont\endcsname
+ \ifupdatebaselineskip \setbaselineskip \fi
+ \relax
+ \fi
+ \else
+ \csname\selectedfont\endcsname
+ \ifupdatebaselineskip \setbaselineskip \fi
+ \relax
+ \fi
+}
+
+\def\getcurfont{\csname\selectedfont\endcsname}
+
+\newcount\tracingplnfss
+
+\def\DeclareFont#1#2{
+ \ex\gdef\csname#1\endcsname{#2}
+ \ifnum\tracingplnfss>0
+ \log{PLNFSS: font #1 has been defined as #2}
+ \fi
+}
+
+\def\SubstFont#1#2{
+ \ex\ifx\csname#1\endcsname\relax
+ \global\ex\let\csname#1\ex\endcsname \csname#2\endcsname
+ \ifnum\tracingplnfss>0
+ \log{PLNFSS: font #1 has been substituted by #2}
+ \fi
+ \else
+ \ifnum\tracingplnfss>0
+ \log{PLNFSS: font #1 has been already defined, substitution ignored}
+ \fi
+ \fi
+}
+
+\def\setrmdefault#1{\edef\rmdefault{#1}}
+\def\setsfdefault#1{\edef\sfdefault{#1}}
+\def\setttdefault#1{\edef\ttdefault{#1}}
+
+%% LaTeX PSNFSS support
+\def\typeout{\immediate\write17}
+\def\@makeother#1{\catcode`#1=12\relax}
+\long\def\ProvidesFile#1{
+ \begingroup
+ \endlinechar=-1 %
+ \catcode`\ 10 %
+ \@makeother\/%
+ \@makeother\&%
+ \checkoptarg
+}
+\def\checkoptarg#1{
+ \global\let\curarg=#1
+ \ifx [\curarg
+ \let\next=\ignoreoptarg
+ \else
+ \let\next=\nooptarg
+ \fi
+ \next
+}
+\def\ignoreoptarg#1]{\endgroup}
+\def\nooptarg{\endgroup\curarg}
+\def\DeclareFontFamily#1#2#3{}
+\def\@ifundefined#1#2#3{#2}
+
+\ex\newcount\csname c:0\endcsname
+\ex\newcount\csname c:1\endcsname
+\ex\newcount\csname c:2\endcsname
+\ex\newcount\csname c:3\endcsname
+\ex\newcount\csname c:4\endcsname
+\ex\newcount\csname c:5\endcsname
+\ex\newcount\csname c:6\endcsname
+\ex\newcount\csname c:7\endcsname
+\ex\newcount\csname c:8\endcsname
+\ex\newcount\csname c:9\endcsname
+\chardef\maxprefixlength=10
+
+\newif\ifisprefix
+\newcount\charindex
+\newcount\prefixlength
+
+\def\stripspaces #1{
+ \if #1^^A
+ \let\next=\relax
+ \else
+ \let\next=\stripspaces
+ \edef\curparam{\curparam#1}
+ \fi
+ \next
+}
+
+\def\readprefix#1{
+ \if #1^^A
+ \let\next=\relax
+ \prefixlength=\charindex
+ \else
+ \let\next=\readprefix
+ \ex\csname c:\the\charindex \endcsname=`#1\relax
+ \advance\charindex 1\relax
+ \ifnum \charindex>\maxprefixlength
+ \errmessage{Prefix too long, try to increase `maxprefixlength'}
+ \let\next=\skipremain
+ \fi
+ \fi
+ \next
+}
+
+\def\skipremain#1^^A{}
+\def\storeremain#1^^A{\def\remain{#1}}
+
+\def\cmpprefix#1{
+ \if #1^^A
+ \let\next=\relax
+ \else
+ \countA=`#1\relax
+ \ifnum \countA=\csname c:\the\charindex \endcsname
+ \advance\charindex 1\relax
+ \ifnum \charindex=\prefixlength
+ \isprefixtrue
+ \let\next=\storeremain
+ \else
+ \let\next=\cmpprefix
+ \fi
+ \else
+ \let\next=\skipremain
+ \isprefixfalse
+ \fi
+ \fi
+ \next
+}
+
+\def\testprefix#1#2{
+ \charindex=0 \ex\readprefix#1^^A
+ \charindex=0 \isprefixfalse \ex\cmpprefix#2^^A
+}
+
+\newcount\fontresult % 0. cannot handle; 1. substituted; 2. TFM available
+
+\def\DeclareFontShape#1#2#3#4#5#6{
+ \let\curparam=\empty
+ \let\next=\relax
+ \stripspaces #5^^A
+ \fontresult=-1\relax
+ \testprefix{<->sub*}{\curparam}
+ \ifisprefix \fontresult=1 \fi
+ \ifnum \fontresult<0
+ \testprefix{<->ssub*}{\curparam}
+ \ifisprefix \fontresult=1 \fi
+ \fi
+ \ifnum \fontresult<0
+ \testprefix{<->subf*}{\curparam}
+ \ifisprefix \fontresult=1 \fi
+ \fi
+ \ifnum \fontresult<0
+ \testprefix{<->ssubf*}{\curparam}
+ \ifisprefix \fontresult=1 \fi
+ \fi
+ \ifnum \fontresult<0
+ \testprefix{<->fixed*}{\curparam}
+ \ifisprefix \fontresult=0 \fi
+ \fi
+ \ifnum \fontresult<0
+ \testprefix{<->sfixed*}{\curparam}
+ \ifisprefix \fontresult=0 \fi
+ \fi
+ \ifnum \fontresult<0
+ \testprefix{<->s*}{\curparam}
+ \ifisprefix \fontresult=0 \fi
+ \fi
+ \ifnum \fontresult<0
+ \testprefix{<->}{\curparam}
+ \ifisprefix \fontresult=2 \fi
+ \fi
+ \ifnum \fontresult=2 % TFM available
+ \def\fontshape{#1/#2/#3/#4^^A}
+ \edef\fontdef{\remain()^^A}
+ \ex\ex\ex\LaTeXDeclareFont \ex\fontshape \fontdef
+ \else \ifnum \fontresult=1 % substituted
+ \def\fontshape{#1/#2/#3/#4^^A}
+ \edef\fontdef{#1/\remain^^A}
+ \ex\ex\ex\LaTeXSubstFont \ex\fontshape \fontdef
+ \else % \fontresult <= 0
+ \errmessage{PLNFSS cannot handle form `\curparam' of font declaration}
+ \fi \fi
+}
+
+\def\LaTeXDeclareFont#1^^A#2^^A{\DeclareFont{#1}{#2}}
+\def\LaTeXSubstFont#1^^A#2^^A{\SubstFont{#1}{#2}}
+
+\newlinechar`^^J
+\def\log#1{\immediate \write 16 {^^J#1}}
+
+%% NFSS high-level commands
+
+\def\rmfamily{\setfontfamily{\rmdefault}\selectfont}
+\def\sffamily{\setfontfamily{\sfdefault}\selectfont}
+\def\ttfamily{\setfontfamily{\ttdefault}\selectfont}
+\def\mdseries{\setfontseries{m}\selectfont}
+\def\bfseries{\setfontseries{b}\selectfont}
+\def\upshape{\setfontshape{ui}\selectfont}
+\def\itshape{\setfontshape{it}\selectfont}
+\def\slshape{\setfontshape{sl}\selectfont}
+\def\scshape{\setfontshape{sc}\selectfont}
+\def\normalfont{\setfontseries{m}\setfontshape{n}\selectfont}
+
+\def\textrm#1{{\rmfamily #1}}
+\def\textsf#1{{\sffamily #1}}
+\def\texttt#1{{\ttfamily #1}}
+\def\textmd#1{{\mdseries #1}}
+\def\textbf#1{{\bfseries #1}}
+\def\textup#1{{\upshape #1}}
+\def\textit#1{{\itshape #1\/}}
+\def\textsl#1{{\slshape #1\/}}
+\def\textsc#1{{\scshape #1}}
+
+\let\rm=\rmfamily
+\let\sf=\sffamily
+\let\tt=\ttfamily
+\let\md=\mdseries
+\let\bf=\bfseries
+\let\up=\upshape
+\let\it=\itshape
+\let\sl=\slshape
+\let\sc=\scshape
+
+%% Default settings
+
+\setfontencoding{OT1}
+\setfontfamily{cmr}
+\setfontseries{m}
+\setfontshape{n}
+\setfontsize{10pt}
+\setrmdefault{cmr}
+\setttdefault{cmtt}
+\setsfdefault{cmss}
+\edef\lastfont{
+ \@fontencoding/
+ \@fontfamily/
+ \@fontseries/
+ \@fontshape/
+ \the\@fontsize/
+}
+
+\catcode`\@=12 \endlinechar=13 %
diff --git a/macros/plain/plnfss/tex/plain/plnfss/qxlm.pfd b/macros/plain/plnfss/tex/plain/plnfss/qxlm.pfd
new file mode 100644
index 0000000000..9a6acaca18
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/qxlm.pfd
@@ -0,0 +1,51 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{QX/lmr/b/n} {qx-lmb(10)}
+\DeclareFont{QX/lmr/b/sl} {qx-lmbo(10)}
+\DeclareFont{QX/lmr/bx/n} {qx-lmbx(5,6,7,8,9,10,12)}
+\DeclareFont{QX/lmr/bx/it} {qx-lmbxi(10)}
+\DeclareFont{QX/lmr/bx/sl} {qx-lmbxo(10)}
+\DeclareFont{QX/lmr/m/sc} {qx-lmcsc(10)}
+\DeclareFont{QX/lmr/m/scsl} {qx-lmcsco(10)}
+\DeclareFont{QX/lmr/m/n} {qx-lmr(5,6,7,8,9,10,12,17)}
+\DeclareFont{QX/lmr/m/it} {qx-lmri(7,8,9,10,12)}
+\DeclareFont{QX/lmr/m/sl} {qx-lmro(8,9,10,12)}
+\DeclareFont{QX/lmss/m/n} {qx-lmss(8,9,10,12,17)}
+\DeclareFont{QX/lmss/bx/sl} {qx-lmssbo(10)}
+\DeclareFont{QX/lmss/bx/n} {qx-lmssbx(10)}
+\DeclareFont{QX/lmss/sbc/n} {qx-lmssdc(10)}
+\DeclareFont{QX/lmss/sbc/sl} {qx-lmssdo(10)}
+\DeclareFont{QX/lmss/m/sl} {qx-lmsso(8,9,10,12,17)}
+\DeclareFont{QX/lmssq/m/n} {qx-lmssq(8)}
+\DeclareFont{QX/lmssq/bx/sl} {qx-lmssqbo(8)}
+\DeclareFont{QX/lmssq/bx/n} {qx-lmssqbx(8)}
+\DeclareFont{QX/lmssq/m/sl} {qx-lmssqo(8)}
+\DeclareFont{QX/lmtt/m/sc} {qx-lmtcsc(10)}
+\DeclareFont{QX/lmtt/m/n} {qx-lmtt(8,9,10,12)}
+\DeclareFont{QX/lmtt/m/it} {qx-lmtti(10)}
+\DeclareFont{QX/lmtt/m/sl} {qx-lmtto(10)}
+\DeclareFont{QX/lmvtt/m/n} {qx-lmvtt(10)}
+\DeclareFont{QX/lmvtt/m/sl} {qx-lmvtto(10)}
+
+\SubstFont{QX/cmfib/b/n} {QX/cmfib/bx/n}
+\SubstFont{QX/cmr/b/it} {QX/cmr/bx/it}
+\SubstFont{QX/cmr/b/sl} {QX/cmr/bx/sl}
+\SubstFont{QX/cmr/b/ui} {QX/cmr/bx/ui}
+\SubstFont{QX/cmr/bx/ui} {QX/cmr/m/ui}
+\SubstFont{QX/cmss/b/n} {QX/cmss/bx/n}
+\SubstFont{QX/cmss/b/ui} {QX/cmss/bx/ui}
+\SubstFont{QX/cmss/bx/ui} {QX/cmr/bx/ui}
+\SubstFont{QX/cmss/m/it} {QX/cmss/m/sl}
+\SubstFont{QX/cmss/m/sc} {QX/cmr/m/sc}
+\SubstFont{QX/cmss/m/ui} {QX/cmr/m/ui}
+\SubstFont{QX/cmtt/b/it} {QX/cmtt/bx/it}
+\SubstFont{QX/cmtt/b/n} {QX/cmtt/bx/n}
+\SubstFont{QX/cmtt/b/ui} {QX/cmtt/bx/ui}
+\SubstFont{QX/cmtt/bx/it} {QX/cmtt/m/it}
+\SubstFont{QX/cmtt/bx/n} {QX/cmtt/m/n}
+\SubstFont{QX/cmtt/bx/ui} {QX/cmtt/m/it}
+\SubstFont{QX/cmtt/m/ui} {QX/cmtt/m/it}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/t1lm.pfd b/macros/plain/plnfss/tex/plain/plnfss/t1lm.pfd
new file mode 100644
index 0000000000..b8ab9e5ef7
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/t1lm.pfd
@@ -0,0 +1,51 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{T1/lmr/b/n} {ec-lmb(10)}
+\DeclareFont{T1/lmr/b/sl} {ec-lmbo(10)}
+\DeclareFont{T1/lmr/bx/n} {ec-lmbx(5,6,7,8,9,10,12)}
+\DeclareFont{T1/lmr/bx/it} {ec-lmbxi(10)}
+\DeclareFont{T1/lmr/bx/sl} {ec-lmbxo(10)}
+\DeclareFont{T1/lmr/m/sc} {ec-lmcsc(10)}
+\DeclareFont{T1/lmr/m/scsl} {ec-lmcsco(10)}
+\DeclareFont{T1/lmr/m/n} {ec-lmr(5,6,7,8,9,10,12,17)}
+\DeclareFont{T1/lmr/m/it} {ec-lmri(7,8,9,10,12)}
+\DeclareFont{T1/lmr/m/sl} {ec-lmro(8,9,10,12)}
+\DeclareFont{T1/lmss/m/n} {ec-lmss(8,9,10,12,17)}
+\DeclareFont{T1/lmss/bx/sl} {ec-lmssbo(10)}
+\DeclareFont{T1/lmss/bx/n} {ec-lmssbx(10)}
+\DeclareFont{T1/lmss/sbc/n} {ec-lmssdc(10)}
+\DeclareFont{T1/lmss/sbc/sl} {ec-lmssdo(10)}
+\DeclareFont{T1/lmss/m/sl} {ec-lmsso(8,9,10,12,17)}
+\DeclareFont{T1/lmssq/m/n} {ec-lmssq(8)}
+\DeclareFont{T1/lmssq/bx/sl} {ec-lmssqbo(8)}
+\DeclareFont{T1/lmssq/bx/n} {ec-lmssqbx(8)}
+\DeclareFont{T1/lmssq/m/sl} {ec-lmssqo(8)}
+\DeclareFont{T1/lmtt/m/sc} {ec-lmtcsc(10)}
+\DeclareFont{T1/lmtt/m/n} {ec-lmtt(8,9,10,12)}
+\DeclareFont{T1/lmtt/m/it} {ec-lmtti(10)}
+\DeclareFont{T1/lmtt/m/sl} {ec-lmtto(10)}
+\DeclareFont{T1/lmvtt/m/n} {ec-lmvtt(10)}
+\DeclareFont{T1/lmvtt/m/sl} {ec-lmvtto(10)}
+
+\SubstFont{T1/cmfib/b/n} {T1/cmfib/bx/n}
+\SubstFont{T1/cmr/b/it} {T1/cmr/bx/it}
+\SubstFont{T1/cmr/b/sl} {T1/cmr/bx/sl}
+\SubstFont{T1/cmr/b/ui} {T1/cmr/bx/ui}
+\SubstFont{T1/cmr/bx/ui} {T1/cmr/m/ui}
+\SubstFont{T1/cmss/b/n} {T1/cmss/bx/n}
+\SubstFont{T1/cmss/b/ui} {T1/cmss/bx/ui}
+\SubstFont{T1/cmss/bx/ui} {T1/cmr/bx/ui}
+\SubstFont{T1/cmss/m/it} {T1/cmss/m/sl}
+\SubstFont{T1/cmss/m/sc} {T1/cmr/m/sc}
+\SubstFont{T1/cmss/m/ui} {T1/cmr/m/ui}
+\SubstFont{T1/cmtt/b/it} {T1/cmtt/bx/it}
+\SubstFont{T1/cmtt/b/n} {T1/cmtt/bx/n}
+\SubstFont{T1/cmtt/b/ui} {T1/cmtt/bx/ui}
+\SubstFont{T1/cmtt/bx/it} {T1/cmtt/m/it}
+\SubstFont{T1/cmtt/bx/n} {T1/cmtt/m/n}
+\SubstFont{T1/cmtt/bx/ui} {T1/cmtt/m/it}
+\SubstFont{T1/cmtt/m/ui} {T1/cmtt/m/it}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/t5cm.pfd b/macros/plain/plnfss/tex/plain/plnfss/t5cm.pfd
new file mode 100644
index 0000000000..7b0f8ce085
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/t5cm.pfd
@@ -0,0 +1,49 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{T5/cmdh/m/n} {vndunh(10)}
+\DeclareFont{T5/cmfr/m/it} {vnfi(10)}
+\DeclareFont{T5/cmfr/m/n} {vnff(10)}
+\DeclareFont{T5/cmfib/m/n} {vnfib(8)}
+\DeclareFont{T5/cmr/b/n} {vnb(10)}
+\DeclareFont{T5/cmr/bx/it} {vnbxti(10)}
+\DeclareFont{T5/cmr/bx/n} {vnbx(5,6,7,8,9,10,12)}
+\DeclareFont{T5/cmr/bx/sl} {vnbxsl(10)}
+\DeclareFont{T5/cmr/m/it} {vnti(7,8,9,10,12)}
+\DeclareFont{T5/cmr/m/n} {vnr(5,6,7,8,9,10,12,17)}
+\DeclareFont{T5/cmr/m/sc} {vncsc(10)}
+\DeclareFont{T5/cmr/m/sl} {vnsl(8,9,10,12)}
+\DeclareFont{T5/cmr/m/ui} {vnu(10)}
+\DeclareFont{T5/cmss/bx/n} {vnssbx(10)}
+\DeclareFont{T5/cmss/sbc/n} {vnssdc(10)}
+\DeclareFont{T5/cmss/m/sl} {vnssi(8,9,10,12,17)}
+\DeclareFont{T5/cmss/m/n} {vnss(8,9,10,12,17)}
+\DeclareFont{T5/cmssq/m/sl} {vnssqi(8)}
+\DeclareFont{T5/cmssq/m/n} {vnssq(8)}
+\DeclareFont{T5/cmtt/m/it} {vnitt(10)}
+\DeclareFont{T5/cmtt/m/n} {vntt(8,9,10,12)}
+\DeclareFont{T5/cmtt/m/sc} {vntcsc(10)}
+\DeclareFont{T5/cmtt/m/sl} {vnsltt(10)}
+\DeclareFont{T5/cmvtt/m/n} {vnvtt(10)}
+
+\SubstFont{T5/cmfib/b/n} {T5/cmfib/bx/n}
+\SubstFont{T5/cmr/b/it} {T5/cmr/bx/it}
+\SubstFont{T5/cmr/b/sl} {T5/cmr/bx/sl}
+\SubstFont{T5/cmr/b/ui} {T5/cmr/bx/ui}
+\SubstFont{T5/cmr/bx/ui} {T5/cmr/m/ui}
+\SubstFont{T5/cmss/b/n} {T5/cmss/bx/n}
+\SubstFont{T5/cmss/b/ui} {T5/cmss/bx/ui}
+\SubstFont{T5/cmss/bx/ui} {T5/cmr/bx/ui}
+\SubstFont{T5/cmss/m/it} {T5/cmss/m/sl}
+\SubstFont{T5/cmss/m/sc} {T5/cmr/m/sc}
+\SubstFont{T5/cmss/m/ui} {T5/cmr/m/ui}
+\SubstFont{T5/cmtt/b/it} {T5/cmtt/bx/it}
+\SubstFont{T5/cmtt/b/n} {T5/cmtt/bx/n}
+\SubstFont{T5/cmtt/b/ui} {T5/cmtt/bx/ui}
+\SubstFont{T5/cmtt/bx/it} {T5/cmtt/m/it}
+\SubstFont{T5/cmtt/bx/n} {T5/cmtt/m/n}
+\SubstFont{T5/cmtt/bx/ui} {T5/cmtt/m/it}
+\SubstFont{T5/cmtt/m/ui} {T5/cmtt/m/it}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/t5cmr.pfd b/macros/plain/plnfss/tex/plain/plnfss/t5cmr.pfd
new file mode 100644
index 0000000000..73256dc380
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/t5cmr.pfd
@@ -0,0 +1,49 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{T5/cmdh/m/n} {vndunh(10)}
+\DeclareFont{T5/cmfr/m/it} {vnfi(10)}
+\DeclareFont{T5/cmfr/m/n} {vnff(10)}
+\DeclareFont{T5/cmfib/m/n} {vnfib(8)}
+\DeclareFont{T5/cmr/b/n} {vnb(10)}
+\DeclareFont{T5/cmr/bx/it} {vnbxti(10)}
+\DeclareFont{T5/cmr/bx/n} {vnbx(5,6,7,8,9,10,12)}
+\DeclareFont{T5/cmr/bx/sl} {vnbxsl(10)}
+\DeclareFont{T5/cmr/m/it} {vnti(7,8,9,10,12)}
+\DeclareFont{T5/cmr/m/n} {vnr(5,6,7,8,9,10,12,17)}
+\DeclareFont{T5/cmr/m/sc} {vncsc(10)}
+\DeclareFont{T5/cmr/m/sl} {vnsl(8,9,10,12)}
+\DeclareFont{T5/cmr/m/ui} {vnu(10)}
+\DeclareFont{T5/cmss/bx/n} {vnssbx(10)}
+\DeclareFont{T5/cmss/sbc/n} {vnssdc(10)}
+\DeclareFont{T5/cmss/m/sl} {vnssi(8,9,10,12,17)}
+\DeclareFont{T5/cmss/m/n} {vnss(8,9,10,12,17)}
+\DeclareFont{T5/cmssq/m/sl} {vnssqi(8)}
+\DeclareFont{T5/cmssq/m/n} {vnssq(8)}
+\DeclareFont{T5/cmtt/m/it} {vnitt(10)}
+\DeclareFont{T5/cmtt/m/n} {vntt(8,9,10,12)}
+\DeclareFont{T5/cmtt/m/sc} {vntcsc(10)}
+\DeclareFont{T5/cmtt/m/sl} {vnsltt(10)}
+\DeclareFont{T5/cmvtt/m/n} {vnvtt(10)}
+
+\SubstFont{T5/cmss/m/it} {T5/cmss/m/sl}{}
+\SubstFont{T5/cmss/m/sc} {T5/cmr/m/sc}{}
+\SubstFont{T5/cmss/m/ui} {T5/cmr/m/ui}{}
+\SubstFont{T5/cmr/bx/ui} {T5/cmr/m/ui}{}
+\SubstFont{T5/cmss/bx/ui} {T5/cmr/bx/ui}{}
+\SubstFont{T5/cmtt/bx/n} {T5/cmtt/m/n}{}
+\SubstFont{T5/cmtt/bx/it} {T5/cmtt/m/it}{}
+\SubstFont{T5/cmtt/bx/ui} {T5/cmtt/m/it}{}
+
+\SubstFont{T5/cmfib/b/n} {T5/cmfib/bx/n}
+\SubstFont{T5/cmr/b/it} {T5/cmr/bx/it}
+\SubstFont{T5/cmr/b/sl} {T5/cmr/bx/sl}
+\SubstFont{T5/cmss/b/n} {T5/cmss/bx/n}
+\SubstFont{T5/cmr/b/ui} {T5/cmr/bx/ui}
+\SubstFont{T5/cmss/b/ui} {T5/cmss/bx/ui}
+\SubstFont{T5/cmtt/b/n} {T5/cmtt/bx/n}
+\SubstFont{T5/cmtt/b/it} {T5/cmtt/bx/it}
+\SubstFont{T5/cmtt/b/ui} {T5/cmtt/bx/ui}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/t5lm.pfd b/macros/plain/plnfss/tex/plain/plnfss/t5lm.pfd
new file mode 100644
index 0000000000..33a36ca90d
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/t5lm.pfd
@@ -0,0 +1,51 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{T5/lmr/b/n} {t5-lmb(10)}
+\DeclareFont{T5/lmr/b/sl} {t5-lmbo(10)}
+\DeclareFont{T5/lmr/bx/n} {t5-lmbx(5,6,7,8,9,10,12)}
+\DeclareFont{T5/lmr/bx/it} {t5-lmbxi(10)}
+\DeclareFont{T5/lmr/bx/sl} {t5-lmbxo(10)}
+\DeclareFont{T5/lmr/m/sc} {t5-lmcsc(10)}
+\DeclareFont{T5/lmr/m/scsl} {t5-lmcsco(10)}
+\DeclareFont{T5/lmr/m/n} {t5-lmr(5,6,7,8,9,10,12,17)}
+\DeclareFont{T5/lmr/m/it} {t5-lmri(7,8,9,10,12)}
+\DeclareFont{T5/lmr/m/sl} {t5-lmro(8,9,10,12)}
+\DeclareFont{T5/lmss/m/n} {t5-lmss(8,9,10,12,17)}
+\DeclareFont{T5/lmss/bx/sl} {t5-lmssbo(10)}
+\DeclareFont{T5/lmss/bx/n} {t5-lmssbx(10)}
+\DeclareFont{T5/lmss/sbc/n} {t5-lmssdc(10)}
+\DeclareFont{T5/lmss/sbc/sl} {t5-lmssdo(10)}
+\DeclareFont{T5/lmss/m/sl} {t5-lmsso(8,9,10,12,17)}
+\DeclareFont{T5/lmssq/m/n} {t5-lmssq(8)}
+\DeclareFont{T5/lmssq/bx/sl} {t5-lmssqbo(8)}
+\DeclareFont{T5/lmssq/bx/n} {t5-lmssqbx(8)}
+\DeclareFont{T5/lmssq/m/sl} {t5-lmssqo(8)}
+\DeclareFont{T5/lmtt/m/sc} {t5-lmtcsc(10)}
+\DeclareFont{T5/lmtt/m/n} {t5-lmtt(8,9,10,12)}
+\DeclareFont{T5/lmtt/m/it} {t5-lmtti(10)}
+\DeclareFont{T5/lmtt/m/sl} {t5-lmtto(10)}
+\DeclareFont{T5/lmvtt/m/n} {t5-lmvtt(10)}
+\DeclareFont{T5/lmvtt/m/sl} {t5-lmvtto(10)}
+
+\SubstFont{T5/cmfib/b/n} {T5/cmfib/bx/n}
+\SubstFont{T5/cmr/b/it} {T5/cmr/bx/it}
+\SubstFont{T5/cmr/b/sl} {T5/cmr/bx/sl}
+\SubstFont{T5/cmr/b/ui} {T5/cmr/bx/ui}
+\SubstFont{T5/cmr/bx/ui} {T5/cmr/m/ui}
+\SubstFont{T5/cmss/b/n} {T5/cmss/bx/n}
+\SubstFont{T5/cmss/b/ui} {T5/cmss/bx/ui}
+\SubstFont{T5/cmss/bx/ui} {T5/cmr/bx/ui}
+\SubstFont{T5/cmss/m/it} {T5/cmss/m/sl}
+\SubstFont{T5/cmss/m/sc} {T5/cmr/m/sc}
+\SubstFont{T5/cmss/m/ui} {T5/cmr/m/ui}
+\SubstFont{T5/cmtt/b/it} {T5/cmtt/bx/it}
+\SubstFont{T5/cmtt/b/n} {T5/cmtt/bx/n}
+\SubstFont{T5/cmtt/b/ui} {T5/cmtt/bx/ui}
+\SubstFont{T5/cmtt/bx/it} {T5/cmtt/m/it}
+\SubstFont{T5/cmtt/bx/n} {T5/cmtt/m/n}
+\SubstFont{T5/cmtt/bx/ui} {T5/cmtt/m/it}
+\SubstFont{T5/cmtt/m/ui} {T5/cmtt/m/it}
diff --git a/macros/plain/plnfss/tex/plain/plnfss/ts1lm.pfd b/macros/plain/plnfss/tex/plain/plnfss/ts1lm.pfd
new file mode 100644
index 0000000000..c41ead4a76
--- /dev/null
+++ b/macros/plain/plnfss/tex/plain/plnfss/ts1lm.pfd
@@ -0,0 +1,51 @@
+% plnfss-1.1
+
+% Copyright 2003-2005 Han The Thanh <hanthethanh@gmx.net>.
+% This file is part of plnfss. License: LPPL, version 1.3 or newer,
+% according to http://www.latex-project.org/lppl.txt
+
+\DeclareFont{TS1/lmr/b/n} {ts1-lmb(10)}
+\DeclareFont{TS1/lmr/b/sl} {ts1-lmbo(10)}
+\DeclareFont{TS1/lmr/bx/n} {ts1-lmbx(5,6,7,8,9,10,12)}
+\DeclareFont{TS1/lmr/bx/it} {ts1-lmbxi(10)}
+\DeclareFont{TS1/lmr/bx/sl} {ts1-lmbxo(10)}
+\DeclareFont{TS1/lmr/m/sc} {ts1-lmcsc(10)}
+\DeclareFont{TS1/lmr/m/scsl} {ts1-lmcsco(10)}
+\DeclareFont{TS1/lmr/m/n} {ts1-lmr(5,6,7,8,9,10,12,17)}
+\DeclareFont{TS1/lmr/m/it} {ts1-lmri(7,8,9,10,12)}
+\DeclareFont{TS1/lmr/m/sl} {ts1-lmro(8,9,10,12)}
+\DeclareFont{TS1/lmss/m/n} {ts1-lmss(8,9,10,12,17)}
+\DeclareFont{TS1/lmss/bx/sl} {ts1-lmssbo(10)}
+\DeclareFont{TS1/lmss/bx/n} {ts1-lmssbx(10)}
+\DeclareFont{TS1/lmss/sbc/n} {ts1-lmssdc(10)}
+\DeclareFont{TS1/lmss/sbc/sl} {ts1-lmssdo(10)}
+\DeclareFont{TS1/lmss/m/sl} {ts1-lmsso(8,9,10,12,17)}
+\DeclareFont{TS1/lmssq/m/n} {ts1-lmssq(8)}
+\DeclareFont{TS1/lmssq/bx/sl} {ts1-lmssqbo(8)}
+\DeclareFont{TS1/lmssq/bx/n} {ts1-lmssqbx(8)}
+\DeclareFont{TS1/lmssq/m/sl} {ts1-lmssqo(8)}
+\DeclareFont{TS1/lmtt/m/sc} {ts1-lmtcsc(10)}
+\DeclareFont{TS1/lmtt/m/n} {ts1-lmtt(8,9,10,12)}
+\DeclareFont{TS1/lmtt/m/it} {ts1-lmtti(10)}
+\DeclareFont{TS1/lmtt/m/sl} {ts1-lmtto(10)}
+\DeclareFont{TS1/lmvtt/m/n} {ts1-lmvtt(10)}
+\DeclareFont{TS1/lmvtt/m/sl} {ts1-lmvtto(10)}
+
+\SubstFont{TS1/cmfib/b/n} {TS1/cmfib/bx/n}
+\SubstFont{TS1/cmr/b/it} {TS1/cmr/bx/it}
+\SubstFont{TS1/cmr/b/sl} {TS1/cmr/bx/sl}
+\SubstFont{TS1/cmr/b/ui} {TS1/cmr/bx/ui}
+\SubstFont{TS1/cmr/bx/ui} {TS1/cmr/m/ui}
+\SubstFont{TS1/cmss/b/n} {TS1/cmss/bx/n}
+\SubstFont{TS1/cmss/b/ui} {TS1/cmss/bx/ui}
+\SubstFont{TS1/cmss/bx/ui} {TS1/cmr/bx/ui}
+\SubstFont{TS1/cmss/m/it} {TS1/cmss/m/sl}
+\SubstFont{TS1/cmss/m/sc} {TS1/cmr/m/sc}
+\SubstFont{TS1/cmss/m/ui} {TS1/cmr/m/ui}
+\SubstFont{TS1/cmtt/b/it} {TS1/cmtt/bx/it}
+\SubstFont{TS1/cmtt/b/n} {TS1/cmtt/bx/n}
+\SubstFont{TS1/cmtt/b/ui} {TS1/cmtt/bx/ui}
+\SubstFont{TS1/cmtt/bx/it} {TS1/cmtt/m/it}
+\SubstFont{TS1/cmtt/bx/n} {TS1/cmtt/m/n}
+\SubstFont{TS1/cmtt/bx/ui} {TS1/cmtt/m/it}
+\SubstFont{TS1/cmtt/m/ui} {TS1/cmtt/m/it}
diff --git a/macros/plain/pmat b/macros/plain/pmat
new file mode 120000
index 0000000000..4a1b33821f
--- /dev/null
+++ b/macros/plain/pmat
@@ -0,0 +1 @@
+../generic/pmat \ No newline at end of file